diff --git a/lib/constants.dart b/lib/constants.dart index e96356e3a..48da81219 100644 --- a/lib/constants.dart +++ b/lib/constants.dart @@ -138,6 +138,7 @@ const kDownloads = 'downloads.json'; const kFeedsWithDownloads = 'feedswithdownloads.json'; const kCoverStore = 'coverStore.json'; const kDirectoryProperty = 'directory'; +const kDownloadsCustomDir = 'downloadsCustomDir'; const kRadioUrl = 'de1.api.radio-browser.info'; const kRadioBrowserBaseUrl = 'all.api.radio-browser.info'; const kLastAudio = 'lastAudio'; diff --git a/lib/extensions/build_context_x.dart b/lib/extensions/build_context_x.dart index b5ad3b278..93fb16d7e 100644 --- a/lib/extensions/build_context_x.dart +++ b/lib/extensions/build_context_x.dart @@ -5,6 +5,7 @@ import '../constants.dart'; extension BuildContextX on BuildContext { ThemeData get theme => Theme.of(this); ColorScheme get colorScheme => theme.colorScheme; + TextTheme get textTheme => theme.textTheme; Size get mediaQuerySize => MediaQuery.sizeOf(this); diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 1d931982e..f1c594ac9 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -176,6 +176,9 @@ } }, "downloadsOnly": "Nur Downloads", + "downloadsDirectory": "Ort der Downloads", + "downloadsDirectoryDescription": "Stell sicher dass MusicPod Zugriff auf diesen Ort hat", + "downloadsChangeWarning": "Das Ändern des Download-Orts löscht alle bisherigen Downloads. Möchtest du fortfahren?", "moreOptions": "Mehr Optionen", "noRadioServerFound": "Es wurde kein Radio-Server gefunden", "connectedTo": "Verbunden mit", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 9f6126b28..041059509 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -176,6 +176,9 @@ } }, "downloadsOnly": "Downloads only", + "downloadsDirectory": "Location of your downloads", + "downloadsDirectoryDescription": "Make sure MusicPod can access this directory!", + "downloadsChangeWarning": "Changing the downloads directory deletes all current downloads. Do you want to proceed?", "moreOptions": "More options", "noRadioServerFound": "No radio server found", "connectedTo": "Connected to", diff --git a/lib/library/library_model.dart b/lib/library/library_model.dart index 3fa9f7c9e..c5fc5420d 100644 --- a/lib/library/library_model.dart +++ b/lib/library/library_model.dart @@ -173,8 +173,6 @@ class LibraryModel extends SafeChangeNotifier { void removePodcastUpdate(String feedUrl) => _service.removePodcastUpdate(feedUrl); - String? get downloadsDir => _service.downloadsDir; - int get downloadsLength => _service.downloads.length; String? getDownload(String? url) => diff --git a/lib/library/library_service.dart b/lib/library/library_service.dart index e2298b5e6..b9a80df74 100644 --- a/lib/library/library_service.dart +++ b/lib/library/library_service.dart @@ -320,6 +320,17 @@ class LibraryService { } void removeDownload({required String url, required String feedUrl}) { + _deleteDownload(url); + + if (_downloads.containsKey(url)) { + _downloads.remove(url); + _feedsWithDownloads.remove(feedUrl); + + _updateDownloads(); + } + } + + void _deleteDownload(String url) { final path = _downloads[url]; if (path != null) { @@ -328,20 +339,26 @@ class LibraryService { file.deleteSync(); } } + } - if (_downloads.containsKey(url)) { - _downloads.remove(url); - _feedsWithDownloads.remove(feedUrl); + void _updateDownloads() { + writeStringMap(_downloads, kDownloads) + .then( + (_) => writeStringIterable( + iterable: _feedsWithDownloads, + filename: kFeedsWithDownloads, + ), + ) + .then((_) => _propertiesChangedController.add(true)); + } - writeStringMap(_downloads, kDownloads) - .then( - (_) => writeStringIterable( - iterable: _feedsWithDownloads, - filename: kFeedsWithDownloads, - ), - ) - .then((_) => _propertiesChangedController.add(true)); + void removeAllDownloads() { + for (var download in _downloads.entries) { + _deleteDownload(download.key); } + _downloads.clear(); + _feedsWithDownloads.clear(); + _updateDownloads(); } void _removeFeedWithDownload(String feedUrl) { @@ -353,8 +370,6 @@ class LibraryService { ).then((_) => _propertiesChangedController.add(true)); } - String? _downloadsDir; - String? get downloadsDir => _downloadsDir; Map> _podcasts = {}; Map> get podcasts => _podcasts; int get podcastsLength => _podcasts.length; @@ -479,7 +494,6 @@ class LibraryService { (await readAudioMap(kLikedAudiosFileName)).entries.firstOrNull?.value ??