mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-03-31 17:10:29 +02:00
- Android 13+ now only requires READ_MEDIA_AUDIO by default - MANAGE_EXTERNAL_STORAGE is optional and can be enabled in Settings - Added 'All Files Access' toggle in Download Settings (Android 13+ only) - Users who encounter write errors can enable full storage access - Respects privacy-conscious users who prefer limited permissions
150 lines
5.6 KiB
Dart
150 lines
5.6 KiB
Dart
import 'package:json_annotation/json_annotation.dart';
|
|
|
|
part 'settings.g.dart';
|
|
|
|
@JsonSerializable()
|
|
class AppSettings {
|
|
final String defaultService;
|
|
final String audioQuality;
|
|
final String filenameFormat;
|
|
final String downloadDirectory;
|
|
final bool autoFallback;
|
|
final bool embedLyrics;
|
|
final bool maxQualityCover;
|
|
final bool isFirstLaunch;
|
|
final int concurrentDownloads;
|
|
final bool checkForUpdates;
|
|
final String updateChannel;
|
|
final bool hasSearchedBefore;
|
|
final String folderOrganization;
|
|
final String historyViewMode;
|
|
final String historyFilterMode;
|
|
final bool askQualityBeforeDownload;
|
|
final String spotifyClientId;
|
|
final String spotifyClientSecret;
|
|
final bool useCustomSpotifyCredentials;
|
|
final String metadataSource;
|
|
final bool enableLogging;
|
|
final bool useExtensionProviders;
|
|
final String? searchProvider;
|
|
final bool separateSingles;
|
|
final String albumFolderStructure;
|
|
final bool showExtensionStore;
|
|
final String locale;
|
|
final bool enableLossyOption;
|
|
final String lossyFormat;
|
|
final String lossyBitrate; // e.g., 'mp3_320', 'mp3_256', 'mp3_192', 'mp3_128', 'opus_128', 'opus_96', 'opus_64'
|
|
final String lyricsMode;
|
|
final bool useAllFilesAccess; // Android 13+ only: enable MANAGE_EXTERNAL_STORAGE
|
|
|
|
const AppSettings({
|
|
this.defaultService = 'tidal',
|
|
this.audioQuality = 'LOSSLESS',
|
|
this.filenameFormat = '{title} - {artist}',
|
|
this.downloadDirectory = '',
|
|
this.autoFallback = true,
|
|
this.embedLyrics = true,
|
|
this.maxQualityCover = true,
|
|
this.isFirstLaunch = true,
|
|
this.concurrentDownloads = 1,
|
|
this.checkForUpdates = true,
|
|
this.updateChannel = 'stable',
|
|
this.hasSearchedBefore = false,
|
|
this.folderOrganization = 'none',
|
|
this.historyViewMode = 'grid',
|
|
this.historyFilterMode = 'all',
|
|
this.askQualityBeforeDownload = true,
|
|
this.spotifyClientId = '',
|
|
this.spotifyClientSecret = '',
|
|
this.useCustomSpotifyCredentials = true,
|
|
this.metadataSource = 'deezer',
|
|
this.enableLogging = false,
|
|
this.useExtensionProviders = true,
|
|
this.searchProvider,
|
|
this.separateSingles = false,
|
|
this.albumFolderStructure = 'artist_album',
|
|
this.showExtensionStore = true,
|
|
this.locale = 'system',
|
|
this.enableLossyOption = false,
|
|
this.lossyFormat = 'mp3',
|
|
this.lossyBitrate = 'mp3_320',
|
|
this.lyricsMode = 'embed',
|
|
this.useAllFilesAccess = false,
|
|
});
|
|
|
|
AppSettings copyWith({
|
|
String? defaultService,
|
|
String? audioQuality,
|
|
String? filenameFormat,
|
|
String? downloadDirectory,
|
|
bool? autoFallback,
|
|
bool? embedLyrics,
|
|
bool? maxQualityCover,
|
|
bool? isFirstLaunch,
|
|
int? concurrentDownloads,
|
|
bool? checkForUpdates,
|
|
String? updateChannel,
|
|
bool? hasSearchedBefore,
|
|
String? folderOrganization,
|
|
String? historyViewMode,
|
|
String? historyFilterMode,
|
|
bool? askQualityBeforeDownload,
|
|
String? spotifyClientId,
|
|
String? spotifyClientSecret,
|
|
bool? useCustomSpotifyCredentials,
|
|
String? metadataSource,
|
|
bool? enableLogging,
|
|
bool? useExtensionProviders,
|
|
String? searchProvider,
|
|
bool clearSearchProvider = false,
|
|
bool? separateSingles,
|
|
String? albumFolderStructure,
|
|
bool? showExtensionStore,
|
|
String? locale,
|
|
bool? enableLossyOption,
|
|
String? lossyFormat,
|
|
String? lossyBitrate,
|
|
String? lyricsMode,
|
|
bool? useAllFilesAccess,
|
|
}) {
|
|
return AppSettings(
|
|
defaultService: defaultService ?? this.defaultService,
|
|
audioQuality: audioQuality ?? this.audioQuality,
|
|
filenameFormat: filenameFormat ?? this.filenameFormat,
|
|
downloadDirectory: downloadDirectory ?? this.downloadDirectory,
|
|
autoFallback: autoFallback ?? this.autoFallback,
|
|
embedLyrics: embedLyrics ?? this.embedLyrics,
|
|
maxQualityCover: maxQualityCover ?? this.maxQualityCover,
|
|
isFirstLaunch: isFirstLaunch ?? this.isFirstLaunch,
|
|
concurrentDownloads: concurrentDownloads ?? this.concurrentDownloads,
|
|
checkForUpdates: checkForUpdates ?? this.checkForUpdates,
|
|
updateChannel: updateChannel ?? this.updateChannel,
|
|
hasSearchedBefore: hasSearchedBefore ?? this.hasSearchedBefore,
|
|
folderOrganization: folderOrganization ?? this.folderOrganization,
|
|
historyViewMode: historyViewMode ?? this.historyViewMode,
|
|
historyFilterMode: historyFilterMode ?? this.historyFilterMode,
|
|
askQualityBeforeDownload: askQualityBeforeDownload ?? this.askQualityBeforeDownload,
|
|
spotifyClientId: spotifyClientId ?? this.spotifyClientId,
|
|
spotifyClientSecret: spotifyClientSecret ?? this.spotifyClientSecret,
|
|
useCustomSpotifyCredentials: useCustomSpotifyCredentials ?? this.useCustomSpotifyCredentials,
|
|
metadataSource: metadataSource ?? this.metadataSource,
|
|
enableLogging: enableLogging ?? this.enableLogging,
|
|
useExtensionProviders: useExtensionProviders ?? this.useExtensionProviders,
|
|
searchProvider: clearSearchProvider ? null : (searchProvider ?? this.searchProvider),
|
|
separateSingles: separateSingles ?? this.separateSingles,
|
|
albumFolderStructure: albumFolderStructure ?? this.albumFolderStructure,
|
|
showExtensionStore: showExtensionStore ?? this.showExtensionStore,
|
|
locale: locale ?? this.locale,
|
|
enableLossyOption: enableLossyOption ?? this.enableLossyOption,
|
|
lossyFormat: lossyFormat ?? this.lossyFormat,
|
|
lossyBitrate: lossyBitrate ?? this.lossyBitrate,
|
|
lyricsMode: lyricsMode ?? this.lyricsMode,
|
|
useAllFilesAccess: useAllFilesAccess ?? this.useAllFilesAccess,
|
|
);
|
|
}
|
|
|
|
factory AppSettings.fromJson(Map<String, dynamic> json) =>
|
|
_$AppSettingsFromJson(json);
|
|
Map<String, dynamic> toJson() => _$AppSettingsToJson(this);
|
|
}
|