Skip to content

Commit

Permalink
lyrics caching implt.
Browse files Browse the repository at this point in the history
  • Loading branch information
HemantKArya committed Oct 23, 2024
1 parent 58fff8e commit a06ab27
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 8 deletions.
28 changes: 20 additions & 8 deletions lib/blocs/lyrics/lyrics_cubit.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import 'dart:async';
import 'dart:developer';
import 'package:Bloomee/blocs/mediaPlayer/bloomee_player_cubit.dart';
import 'package:Bloomee/model/lyrics_models.dart';
import 'package:Bloomee/model/songModel.dart';
import 'package:Bloomee/repository/Lyrics/lyrics.dart';
import 'package:Bloomee/routes_and_consts/global_conts.dart';
import 'package:Bloomee/services/db/bloomee_db_service.dart';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';

Expand All @@ -25,16 +27,26 @@ class LyricsCubit extends Cubit<LyricsState> {
return;
} else {
emit(LyricsLoading(mediaItem));
try {
Lyrics lyrics = await LyricsRepository.getLyrics(
mediaItem.title, mediaItem.artist ?? "",
album: mediaItem.album, duration: mediaItem.duration);
if (lyrics.lyricsSynced == "No Lyrics Found") {
lyrics = lyrics.copyWith(lyricsSynced: null);
Lyrics? lyrics = await BloomeeDBService.getLyrics(mediaItem.id);
if (lyrics == null) {
try {
lyrics = await LyricsRepository.getLyrics(
mediaItem.title, mediaItem.artist ?? "",
album: mediaItem.album, duration: mediaItem.duration);
if (lyrics.lyricsSynced == "No Lyrics Found") {
lyrics = lyrics.copyWith(lyricsSynced: null);
}
emit(LyricsLoaded(lyrics, mediaItem));
BloomeeDBService.putLyrics(lyrics, mediaItem.id);
log("Lyrics loaded for ID: ${mediaItem.id} Duration: ${lyrics.duration} [Online]",
name: "LyricsCubit");
} catch (e) {
emit(LyricsError(mediaItem));
}
} else {
emit(LyricsLoaded(lyrics, mediaItem));
} catch (e) {
emit(LyricsError(mediaItem));
log("Lyrics loaded for ID: ${mediaItem.id} Duration: ${lyrics.duration} [Offline]",
name: "LyricsCubit");
}
}
}
Expand Down
47 changes: 47 additions & 0 deletions lib/services/db/bloomee_db_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:Bloomee/model/MediaPlaylistModel.dart';
import 'package:Bloomee/model/album_onl_model.dart';
import 'package:Bloomee/model/artist_onl_model.dart';
import 'package:Bloomee/model/chart_model.dart';
import 'package:Bloomee/model/lyrics_models.dart';
import 'package:Bloomee/model/playlist_onl_model.dart';
import 'package:Bloomee/model/songModel.dart';
import 'package:Bloomee/routes_and_consts/global_str_consts.dart';
Expand Down Expand Up @@ -80,6 +81,7 @@ class BloomeeDBService {
DownloadDBSchema,
PlaylistsInfoDBSchema,
SavedCollectionsDBSchema,
LyricsDBSchema,
],
directory: pathDoc,
);
Expand All @@ -102,6 +104,7 @@ class BloomeeDBService {
DownloadDBSchema,
PlaylistsInfoDBSchema,
SavedCollectionsDBSchema,
LyricsDBSchema,
],
directory: pathSupport,
);
Expand Down Expand Up @@ -1193,6 +1196,50 @@ class BloomeeDBService {
Isar isarDB = await db;
return isarDB.savedCollectionsDBs.watchLazy(fireImmediately: true);
}

static Future<void> putLyrics(Lyrics lyrics, String mediaID,
{int? offset}) async {
Isar isarDB = await db;
isarDB.writeTxnSync(() => isarDB.lyricsDBs.putSync(LyricsDB(
mediaID: mediaID,
sourceId: lyrics.id,
plainLyrics: lyrics.lyricsPlain,
syncedLyrics: lyrics.lyricsSynced,
title: lyrics.title,
source: "lrcnet",
artist: lyrics.artist,
album: lyrics.album,
duration: double.parse(lyrics.duration ?? "0").toInt(),
offset: offset,
url: lyrics.url,
)));
}

static Future<Lyrics?> getLyrics(String mediaID) async {
Isar isarDB = await db;
LyricsDB? lyricsDB =
isarDB.lyricsDBs.filter().mediaIDEqualTo(mediaID).findFirstSync();
if (lyricsDB != null) {
return Lyrics(
id: lyricsDB.sourceId,
title: lyricsDB.title,
artist: lyricsDB.artist,
album: lyricsDB.album,
duration: lyricsDB.duration.toString(),
lyricsPlain: lyricsDB.plainLyrics,
lyricsSynced: lyricsDB.syncedLyrics,
provider: LyricsProvider.lrcnet,
url: lyricsDB.url,
);
}
return null;
}

static Future<void> removeLyricsById(String mediaID) async {
Isar isarDB = await db;
isarDB.writeTxnSync(() =>
isarDB.lyricsDBs.filter().mediaIDEqualTo(mediaID).deleteAllSync());
}
}

ArtistModel formatSavedArtistOnl(SavedCollectionsDB savedCollectionsDB) {
Expand Down

0 comments on commit a06ab27

Please sign in to comment.