Skip to content

Commit

Permalink
feat: refresh library on startup option
Browse files Browse the repository at this point in the history
ref #111, #119
  • Loading branch information
MSOB7YY committed Jan 30, 2024
1 parent b67fa6f commit 42285da
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 3 deletions.
12 changes: 9 additions & 3 deletions lib/controller/indexer_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,13 @@ class Indexer {
}
}

Future<void> refreshLibraryAndCheckForDiff({Set<String>? currentFiles, bool forceReIndex = false, bool? useMediaStore}) async {
Future<void> refreshLibraryAndCheckForDiff({
Set<String>? currentFiles,
bool forceReIndex = false,
bool? useMediaStore,
bool allowDeletion = true,
bool showFinishedSnackbar = true,
}) async {
if (isIndexing.value) return snackyy(title: lang.NOTE, message: lang.ANOTHER_PROCESS_IS_RUNNING);

isIndexing.value = true;
Expand All @@ -187,15 +193,15 @@ class Indexer {
currentFiles ??= await getAudioFiles();
await _fetchAllSongsAndWriteToFile(
audioFiles: getNewFoundPaths(currentFiles),
deletedPaths: getDeletedPaths(currentFiles),
deletedPaths: allowDeletion ? getDeletedPaths(currentFiles) : {},
forceReIndex: false,
useMediaStore: useMediaStore,
);
}

_afterIndexing();
isIndexing.value = false;
snackyy(title: lang.DONE, message: lang.FINISHED_UPDATING_LIBRARY);
if (showFinishedSnackbar) snackyy(title: lang.DONE, message: lang.FINISHED_UPDATING_LIBRARY);
}

/// Adds all tracks inside [tracksInfoList] to their respective album, artist, etc..
Expand Down
7 changes: 7 additions & 0 deletions lib/controller/settings_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ class SettingsController {
final RxBool artworkGestureScale = false.obs;
final RxBool artworkGestureDoubleTapLRC = true.obs;
final RxBool previousButtonReplays = false.obs;
final RxBool refreshOnStartup = false.obs;
final RxList<TagField> tagFieldsToEdit = <TagField>[
TagField.trackNumber,
TagField.year,
Expand Down Expand Up @@ -467,6 +468,7 @@ class SettingsController {
artworkGestureScale.value = json['artworkGestureScale'] ?? artworkGestureScale.value;
artworkGestureDoubleTapLRC.value = json['artworkGestureDoubleTapLRC'] ?? artworkGestureDoubleTapLRC.value;
previousButtonReplays.value = json['previousButtonReplays'] ?? previousButtonReplays.value;
refreshOnStartup.value = json['refreshOnStartup'] ?? refreshOnStartup.value;

final listFromStorage = List<String>.from(json['tagFieldsToEdit'] ?? []);
tagFieldsToEdit.value = listFromStorage.isNotEmpty ? List<TagField>.from(listFromStorage.map((e) => TagField.values.getEnum(e))) : tagFieldsToEdit;
Expand Down Expand Up @@ -700,6 +702,7 @@ class SettingsController {
'artworkGestureScale': artworkGestureScale.value,
'artworkGestureDoubleTapLRC': artworkGestureDoubleTapLRC.value,
'previousButtonReplays': previousButtonReplays.value,
'refreshOnStartup': refreshOnStartup.value,
'tagFieldsToEdit': tagFieldsToEdit.mapped((element) => element.convertToString),
'wakelockMode': wakelockMode.value.convertToString,
'localVideoMatchingType': localVideoMatchingType.value.convertToString,
Expand Down Expand Up @@ -897,6 +900,7 @@ class SettingsController {
bool? artworkGestureScale,
bool? artworkGestureDoubleTapLRC,
bool? previousButtonReplays,
bool? refreshOnStartup,
List<TagField>? tagFieldsToEdit,
WakelockMode? wakelockMode,
LocalVideoMatchingType? localVideoMatchingType,
Expand Down Expand Up @@ -1396,6 +1400,9 @@ class SettingsController {
if (previousButtonReplays != null) {
this.previousButtonReplays.value = previousButtonReplays;
}
if (refreshOnStartup != null) {
this.refreshOnStartup.value = refreshOnStartup;
}
if (tagFieldsToEdit != null) {
tagFieldsToEdit.loop((d, index) {
if (!this.tagFieldsToEdit.contains(d)) {
Expand Down
1 change: 1 addition & 0 deletions lib/core/translations/keys.dart
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,7 @@ abstract class LanguageKeys {
String get RECENT_ALBUMS => _getKey('RECENT_ALBUMS');
String get RECENT_ARTISTS => _getKey('RECENT_ARTISTS');
String get RECENT_LISTENS => _getKey('RECENT_LISTENS');
String get REFRESH_ON_STARTUP => _getKey('REFRESH_ON_STARTUP');
String get REMEMBER_AUDIO_ONLY_MODE => _getKey('REMEMBER_AUDIO_ONLY_MODE');
String get REPLACE_ALL_LISTENS_WITH_ANOTHER_TRACK => _getKey('REPLACE_ALL_LISTENS_WITH_ANOTHER_TRACK');
String get RE_INDEX_SUBTITLE => _getKey('RE_INDEX_SUBTITLE');
Expand Down
3 changes: 3 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@ void main() async {
Indexer.inst.updateImageSizeInStorage();
Indexer.inst.updateColorPalettesSizeInStorage();
Indexer.inst.updateVideosSizeInStorage();
if (!shouldShowOnBoarding && settings.refreshOnStartup.value) {
Indexer.inst.refreshLibraryAndCheckForDiff(allowDeletion: false, showFinishedSnackbar: false);
}

QueueController.inst.prepareAllQueuesFile();

Expand Down
14 changes: 14 additions & 0 deletions lib/ui/widgets/settings/indexer_settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ enum _IndexerSettingsKeys {
minimumFileSize,
minimumTrackDur,
useMediaStore,
refreshOnStartup,
reindex,
refreshLibrary,
foldersToScan,
Expand All @@ -56,6 +57,7 @@ class IndexerSettings extends SettingSubpageProvider {
_IndexerSettingsKeys.minimumFileSize: [lang.MIN_FILE_SIZE],
_IndexerSettingsKeys.minimumTrackDur: [lang.MIN_FILE_DURATION],
_IndexerSettingsKeys.useMediaStore: [lang.USE_MEDIA_STORE, lang.USE_MEDIA_STORE_SUBTITLE],
_IndexerSettingsKeys.refreshOnStartup: [lang.REFRESH_ON_STARTUP],
_IndexerSettingsKeys.reindex: [lang.RE_INDEX, lang.RE_INDEX_SUBTITLE],
_IndexerSettingsKeys.refreshLibrary: [lang.REFRESH_LIBRARY, lang.REFRESH_LIBRARY_SUBTITLE],
_IndexerSettingsKeys.foldersToScan: [lang.LIST_OF_FOLDERS],
Expand Down Expand Up @@ -553,6 +555,18 @@ class IndexerSettings extends SettingSubpageProvider {
),
),
getMediaStoreWidget(),
getItemWrapper(
key: _IndexerSettingsKeys.refreshOnStartup,
child: Obx(
() => CustomSwitchListTile(
bgColor: getBgColor(_IndexerSettingsKeys.refreshOnStartup),
icon: Broken.d_rotate,
title: lang.REFRESH_ON_STARTUP,
value: settings.refreshOnStartup.value,
onChanged: (isTrue) => settings.save(refreshOnStartup: !isTrue),
),
),
),
getItemWrapper(
key: _IndexerSettingsKeys.reindex,
child: CustomListTile(
Expand Down

0 comments on commit 42285da

Please sign in to comment.