From f14f0f819c0514a341e9833b83f3444a4f9b1c11 Mon Sep 17 00:00:00 2001 From: stonega Date: Sat, 21 Aug 2021 17:25:52 +0800 Subject: [PATCH] Bump deps and improve error hande --- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- lib/home/pocast_discovery.dart | 22 ++++++----- lib/home/search_podcast.dart | 3 ++ lib/playlists/playlist_home.dart | 8 ++-- lib/service/gpodder_api.dart | 9 +++-- lib/settings/history.dart | 4 +- lib/state/audio_state.dart | 6 +-- lib/util/cache_manager.dart | 27 ++++++++++++++ pubspec.yaml | 37 ++++++++----------- 10 files changed, 74 insertions(+), 46 deletions(-) create mode 100644 lib/util/cache_manager.dart diff --git a/android/build.gradle b/android/build.gradle index fdde64e..94e89a3 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.6.2' + classpath 'com.android.tools.build:gradle:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index fd9dc4d..772ece3 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip #distributionSha256Sum=abc10bcedb58806e8654210f96031db541bcd2d6fc3161e81cb0572d6a15e821 diff --git a/lib/home/pocast_discovery.dart b/lib/home/pocast_discovery.dart index 28df023..13294a4 100644 --- a/lib/home/pocast_discovery.dart +++ b/lib/home/pocast_discovery.dart @@ -197,16 +197,20 @@ class DiscoveryPageState extends State { } Future> _getTopPodcasts({int page}) async { - if(environment['apiKey'] == '') return []; + if (environment['apiKey'] == '') return []; final searchEngine = ListenNotesSearch(); - var searchResult = await searchEngine.fetchBestPodcast( - genre: '', - page: page, - ); - final podcastTopList = - searchResult.podcasts.map((e) => e?.toOnlinePodcast).toList(); - _podcastList.addAll(podcastTopList.cast()); - return _podcastList; + try { + var searchResult = await searchEngine.fetchBestPodcast( + genre: '', + page: page, + ); + final podcastTopList = + searchResult.podcasts.map((e) => e?.toOnlinePodcast).toList(); + _podcastList.addAll(podcastTopList.cast()); + return _podcastList; + } catch (e) { + return []; + } } Future _getHideDiscovery() async { diff --git a/lib/home/search_podcast.dart b/lib/home/search_podcast.dart index 3eef2f1..8fb4ab6 100644 --- a/lib/home/search_podcast.dart +++ b/lib/home/search_podcast.dart @@ -11,6 +11,7 @@ import 'package:flutter_html/flutter_html.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; +import 'package:tsacdop/util/cache_manager.dart'; import 'package:webfeed/webfeed.dart'; import '../.env.dart'; @@ -251,6 +252,7 @@ class _RssResultState extends State { CachedNetworkImage( height: 120.0, width: 120.0, + cacheManager: CustomCacheManager(), fit: BoxFit.fitWidth, alignment: Alignment.center, imageUrl: _onlinePodcast.image, @@ -1356,6 +1358,7 @@ class PodcastAvatar extends StatelessWidget { fit: BoxFit.fitWidth, alignment: Alignment.center, imageUrl: podcast.image, + cacheManager: CustomCacheManager(), placeholderFadeInDuration: Duration.zero, progressIndicatorBuilder: (context, url, downloadProgress) => Container( diff --git a/lib/playlists/playlist_home.dart b/lib/playlists/playlist_home.dart index 0e04864..c7fb3e2 100644 --- a/lib/playlists/playlist_home.dart +++ b/lib/playlists/playlist_home.dart @@ -952,15 +952,14 @@ class __NewPlaylistState extends State<_NewPlaylist> { } Future _getEpisodeFromFile(String path) async { - var metadataRetriever = MetadataRetriever(); final fileLength = File(path).statSync().size; final pubDate = DateTime.now().millisecondsSinceEpoch; var primaryColor; var imagePath; - await metadataRetriever.setFile(File(path)); - if (metadataRetriever.albumArt != null) { + var metadata = await MetadataRetriever.fromFile(File(path)); + if (metadata.albumArt != null) { final dir = await getApplicationDocumentsDirectory(); - final image = img.decodeImage(metadataRetriever.albumArt); + final image = img.decodeImage(metadata.albumArt); final thumbnail = img.copyResize(image, width: 300); var uuid = Uuid().v4(); File("${dir.path}/$uuid.png")..writeAsBytesSync(img.encodePng(thumbnail)); @@ -968,7 +967,6 @@ class __NewPlaylistState extends State<_NewPlaylist> { primaryColor = await _getColor(File(imagePath)); } final fileName = path.split('/').last; - final metadata = await metadataRetriever.metadata; return EpisodeBrief( fileName, 'file://$path', diff --git a/lib/service/gpodder_api.dart b/lib/service/gpodder_api.dart index cdd780e..a360d53 100644 --- a/lib/service/gpodder_api.dart +++ b/lib/service/gpodder_api.dart @@ -31,13 +31,15 @@ class Gpodder { Future _initDio() async { final dir = await getApplicationDocumentsDirectory(); - var cookieJar = PersistCookieJar(dir: "${dir.path}/.cookies/"); + var cookieJar = + PersistCookieJar(storage: FileStorage("${dir.path}/.cookies/")); _dio.interceptors.add(CookieManager(cookieJar)); } Future login({String username, String password}) async { final dir = await getApplicationDocumentsDirectory(); - var cookieJar = PersistCookieJar(dir: "${dir.path}/.cookies/"); + var cookieJar = + PersistCookieJar(storage: FileStorage("${dir.path}/.cookies/")); cookieJar.delete(Uri.parse(_baseUrl)); _dio.interceptors.add(CookieManager(cookieJar)); final basicAuth = @@ -81,7 +83,8 @@ class Gpodder { Future _initService() async { final dir = await getApplicationDocumentsDirectory(); - var cookieJar = PersistCookieJar(dir: "${dir.path}/.cookies/"); + var cookieJar = + PersistCookieJar(storage: FileStorage("${dir.path}/.cookies/")); cookieJar.delete(Uri.parse(_baseUrl)); await _storage.clearList(); await _addStorage.clearList(); diff --git a/lib/settings/history.dart b/lib/settings/history.dart index 398e1cf..3955f44 100644 --- a/lib/settings/history.dart +++ b/lib/settings/history.dart @@ -441,7 +441,7 @@ class HistoryChart extends StatelessWidget { titlesData: FlTitlesData( show: true, bottomTitles: SideTitles( - getTextStyles: (i) => TextStyle( + getTextStyles: (_, i) => TextStyle( color: const Color(0xff67727d), fontWeight: FontWeight.bold, fontSize: 12, @@ -456,7 +456,7 @@ class HistoryChart extends StatelessWidget { ), leftTitles: SideTitles( showTitles: true, - getTextStyles: (s) => TextStyle( + getTextStyles: (_, s) => TextStyle( color: const Color(0xff67727d), fontWeight: FontWeight.bold, fontSize: 12, diff --git a/lib/state/audio_state.dart b/lib/state/audio_state.dart index 5d98695..3c22a1b 100644 --- a/lib/state/audio_state.dart +++ b/lib/state/audio_state.dart @@ -977,8 +977,7 @@ class CustomAudioHandler extends BaseAudioHandler MediaItem get currentMediaItem => mediaItem.value; bool get playing => playbackState.value.playing; - BehaviorSubject> customEvent = - BehaviorSubject.seeded({}); + PublishSubject> customEvent = PublishSubject()..add({}); CustomAudioHandler(int cacheMax) { _player.cacheMax = cacheMax; @@ -990,7 +989,6 @@ class CustomAudioHandler extends BaseAudioHandler mediaItem.add(queue.value[index]); } if (_isQueue && index == 1) { - customEvent.add({'removePlayed': queue.value.first.title}); } }, @@ -1197,7 +1195,7 @@ class CustomAudioHandler extends BaseAudioHandler } } - Future customAction(funtion, argument) async { + Future customAction(funtion, [argument]) async { switch (funtion) { case 'stopAtEnd': _stopAtEnd = true; diff --git a/lib/util/cache_manager.dart b/lib/util/cache_manager.dart new file mode 100644 index 0000000..a68a1f9 --- /dev/null +++ b/lib/util/cache_manager.dart @@ -0,0 +1,27 @@ +import 'package:flutter_cache_manager/flutter_cache_manager.dart'; + +/// The DefaultCacheManager that can be easily used directly. The code of +/// this implementation can be used as inspiration for more complex cache +/// managers. + +class CustomCacheManager extends CacheManager with ImageCacheManager { + static const key = 'libCachedImageData'; + + static final CustomCacheManager _instance = CustomCacheManager._(); + factory CustomCacheManager() { + return _instance; + } + + @override + Future downloadFile(String url, + {String key, Map authHeaders, bool force = false}) async { + var file; + try { + file = await super + .downloadFile(url, key: key, authHeaders: authHeaders, force: force); + } catch (e) {} + return file; + } + + CustomCacheManager._() : super(Config(key)); +} diff --git a/pubspec.yaml b/pubspec.yaml index 06918e1..86a1fd6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,30 +13,30 @@ dependencies: sdk: flutter auto_animated: ^3.0.0 audio_session: ^0.1.0 - cached_network_image: ^3.0.0 + cached_network_image: ^3.1.0 color_thief_flutter: ^1.0.2 confetti: ^0.5.5 cupertino_icons: ^1.0.2 connectivity: ^3.0.3 crypto: ^3.0.1 - device_info: ^2.0.0 - dio_cookie_manager: ^1.0.0 - dio: ^3.0.10 + device_info: ^2.0.2 + dio_cookie_manager: ^2.0.0 + dio: ^4.0.0 extended_nested_scroll_view: ^3.0.0 effective_dart: ^1.3.1 feature_discovery: ^0.14.0 file_picker: ^3.0.1 - flutter_html: ^0.11.1 + flutter_html: 0.11.1 fluttertoast: ^4.0.1 flutter_isolate: ^2.0.0 flutter_linkify: ^4.1.0 - flutter_file_dialog: ^2.0.0 - flare_flutter: ^3.0.0 - fl_chart: ^0.12.2 + flutter_file_dialog: ^2.1.1 + flare_flutter: ^3.0.2 + fl_chart: ^0.36.4 line_icons: ^2.0.1 - flutter_media_metadata: ^0.1.0 + flutter_media_metadata: ^0.1.1 marquee: ^2.0.0 - google_fonts: ^2.0.0 + google_fonts: ^2.1.0 image: ^3.0.2 intl: ^0.17.0 json_serializable: ^4.1.0 @@ -47,15 +47,17 @@ dependencies: state_notifier: ^0.7.0 tuple: ^2.0.0 url_launcher: ^6.0.3 + uuid: ^3.0.4 workmanager: ^0.2.3 wc_flutter_share: ^0.4.0 + xml: ^5.2.0 just_audio: git: url: https://github.com/stonega/just_audio_origin.git ref: update path: just_audio audio_service: - git: + git: url: https://github.com/ryanheise/audio_service.git ref: one-isolate path: audio_service @@ -68,20 +70,13 @@ dependencies: webfeed: git: url: https://github.com/stonega/webfeed.git - -dependency_overrides: equatable: ^2.0.0 path_provider: ^2.0.1 http_parser: ^4.0.0 - cookie_jar: ^2.0.0 - uuid: ^3.0.1 - http: ^0.13.0 - flutter_cache_manager: ^3.0.1 - rxdart: ^0.26.0 + +dependency_overrides: + meta: 1.3.0 shared_preferences: 2.0.0 - plugin_platform_interface: ^2.0.0 - convert: ^3.0.0 - xml: ^5.0.2 linkify: git: url: https://github.com/stonega/linkify.git