import 'package:flutter/foundation.dart'; import 'package:hive_flutter/hive_flutter.dart'; import '../models/finamp_models.dart'; import '../models/jellyfin_models.dart'; import 'get_internal_song_dir.dart'; class FinampSettingsHelper { static ValueListenable> get finampSettingsListener => Hive.box("FinampSettings") .listenable(keys: ["FinampSettings"]); // This shouldn't be null as FinampSettings is created on startup. // This decision will probably come back to haunt me later. static FinampSettings get finampSettings => Hive.box("FinampSettings").get("FinampSettings")!; /// Deletes the downloadLocation at the given index. static void deleteDownloadLocation(String id) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.downloadLocationsMap.remove(id); Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } /// Add a new download location to FinampSettings static void addDownloadLocation(DownloadLocation downloadLocation) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.downloadLocationsMap[downloadLocation.id] = downloadLocation; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static Future resetDefaultDownloadLocation() async { final newInternalSongDir = await getInternalSongDir(); FinampSettings finampSettingsTemp = finampSettings; final internalSongDownloadLocation = finampSettingsTemp.internalSongDir; internalSongDownloadLocation.path = newInternalSongDir.path; finampSettingsTemp.downloadLocationsMap[internalSongDownloadLocation.id] = internalSongDownloadLocation; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); return internalSongDownloadLocation; } /// Set the isOffline property static void setIsOffline(bool isOffline) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.isOffline = isOffline; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } /// Set the shouldTranscode property static void setShouldTranscode(bool shouldTranscode) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.shouldTranscode = shouldTranscode; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setTranscodeBitrate(int transcodeBitrate) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.transcodeBitrate = transcodeBitrate; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setShowTab(TabContentType tabContentType, bool value) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.showTabs[tabContentType] = value; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setIsFavourite(bool isFavourite) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.isFavourite = isFavourite; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setSortBy(TabContentType tabType, SortBy sortBy) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.tabSortBy[tabType] = sortBy; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setSortOrder(TabContentType tabType, SortOrder sortOrder) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.tabSortOrder[tabType] = sortOrder; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setAndroidStopForegroundOnPause( bool androidStopForegroundOnPause) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.androidStopForegroundOnPause = androidStopForegroundOnPause; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setSongShuffleItemCount(int songShuffleItemCount) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.songShuffleItemCount = songShuffleItemCount; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setContentGridViewCrossAxisCountPortrait( int contentGridViewCrossAxisCountPortrait) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.contentGridViewCrossAxisCountPortrait = contentGridViewCrossAxisCountPortrait; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setContentGridViewCrossAxisCountLandscape( int contentGridViewCrossAxisCountLandscape) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.contentGridViewCrossAxisCountLandscape = contentGridViewCrossAxisCountLandscape; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setContentViewType(ContentViewType contentViewType) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.contentViewType = contentViewType; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setShowTextOnGridView(bool showTextOnGridView) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.showTextOnGridView = showTextOnGridView; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setSleepTimerSeconds(int sleepTimerSeconds) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.sleepTimerSeconds = sleepTimerSeconds; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void overwriteFinampSettings(FinampSettings newFinampSettings) { Hive.box("FinampSettings") .put("FinampSettings", newFinampSettings); } static void setShowCoverAsPlayerBackground(bool showCoverAsPlayerBackground) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.showCoverAsPlayerBackground = showCoverAsPlayerBackground; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setHideSongArtistsIfSameAsAlbumArtists( bool hideSongArtistsIfSameAsAlbumArtists) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.hideSongArtistsIfSameAsAlbumArtists = hideSongArtistsIfSameAsAlbumArtists; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setDisableGesture(bool disableGesture) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.disableGesture = disableGesture; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setShowFastScroller(bool showFastScroller) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.showFastScroller = showFastScroller; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setBufferDuration(Duration bufferDuration) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.bufferDuration = bufferDuration; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setHasCompletedBlurhashImageMigration( bool hasCompletedBlurhashImageMigration) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.hasCompletedBlurhashImageMigration = hasCompletedBlurhashImageMigration; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setHasCompletedBlurhashImageMigrationIdFix( bool hasCompletedBlurhashImageMigrationIdFix) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.hasCompletedBlurhashImageMigrationIdFix = hasCompletedBlurhashImageMigrationIdFix; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void setTabOrder(int index, TabContentType tabContentType) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.tabOrder[index] = tabContentType; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } static void resetTabs() { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.tabOrder = TabContentType.values; finampSettingsTemp.showTabs = Map.fromEntries( TabContentType.values.map( (e) => MapEntry(e, true), ), ); } static void setSwipeInsertQueueNext(bool swipeInsertQueueNext) { FinampSettings finampSettingsTemp = finampSettings; finampSettingsTemp.swipeInsertQueueNext = swipeInsertQueueNext; Hive.box("FinampSettings") .put("FinampSettings", finampSettingsTemp); } }