From e69a2dbc0032b2672ff6e1f45c52c28416b8fc5b Mon Sep 17 00:00:00 2001 From: stonegate Date: Thu, 11 Jun 2020 23:13:10 +0800 Subject: [PATCH] Support auto download. --- lib/episodes/episodedetail.dart | 14 +++--- lib/home/home_groups.dart | 11 ++--- lib/home/importompl.dart | 34 +++++++++++++- lib/home/popupmenu.dart | 7 +-- lib/local_storage/sqflite_localpodcast.dart | 51 ++++++++++++--------- lib/podcasts/podcastdetail.dart | 21 +++++---- lib/podcasts/podcastgroup.dart | 21 +++++---- lib/settings/downloads_manage.dart | 1 - lib/settings/history.dart | 3 +- lib/state/audiostate.dart | 2 +- lib/state/podcast_group.dart | 36 +++++++++------ lib/state/refresh_podcast.dart | 25 +--------- lib/state/settingstate.dart | 4 +- lib/state/subscribe_podcast.dart | 1 - lib/util/episodegrid.dart | 22 ++++----- lib/webfeed/domain/atom_feed.dart | 2 +- lib/webfeed/domain/rss_feed.dart | 2 +- pubspec.yaml | 6 +-- 18 files changed, 138 insertions(+), 125 deletions(-) diff --git a/lib/episodes/episodedetail.dart b/lib/episodes/episodedetail.dart index 34ecc36..b76a3c0 100644 --- a/lib/episodes/episodedetail.dart +++ b/lib/episodes/episodedetail.dart @@ -267,7 +267,7 @@ class _EpisodeDetailState extends State { ? (_description.contains('<')) ? Html( padding: EdgeInsets.only( - left: 20.0, right: 20, bottom: 10), + left: 20.0, right: 20, bottom: 20), defaultTextStyle: // GoogleFonts.libreBaskerville( GoogleFonts.martel( @@ -290,7 +290,7 @@ class _EpisodeDetailState extends State { padding: EdgeInsets.only( left: 20.0, right: 20.0, - bottom: 10.0), + bottom: 20.0), alignment: Alignment.topLeft, child: SelectableLinkify( onOpen: (link) { @@ -390,18 +390,16 @@ class _MenuBarState extends State { return await dbHelper.getPosition(episode); } - Future saveLiked(String url) async { + saveLiked(String url) async { var dbHelper = DBHelper(); - int result = await dbHelper.setLiked(url); + await dbHelper.setLiked(url); setState(() {}); - return result; } - Future setUnliked(String url) async { + setUnliked(String url) async { var dbHelper = DBHelper(); - int result = await dbHelper.setUniked(url); + await dbHelper.setUniked(url); setState(() {}); - return result; } Future _isLiked(EpisodeBrief episode) async { diff --git a/lib/home/home_groups.dart b/lib/home/home_groups.dart index fabdf45..9fd8fcb 100644 --- a/lib/home/home_groups.dart +++ b/lib/home/home_groups.dart @@ -7,7 +7,6 @@ import 'package:provider/provider.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:tuple/tuple.dart'; import 'package:line_icons/line_icons.dart'; -import 'package:feature_discovery/feature_discovery.dart'; import '../type/episodebrief.dart'; import '../state/podcast_group.dart'; @@ -507,16 +506,14 @@ class ShowEpisode extends StatelessWidget { } } - Future _saveLiked(String url) async { + _saveLiked(String url) async { var dbHelper = DBHelper(); - int result = await dbHelper.setLiked(url); - return result; + await dbHelper.setLiked(url); } - Future _setUnliked(String url) async { + _setUnliked(String url) async { var dbHelper = DBHelper(); - int result = await dbHelper.setUniked(url); - return result; + await dbHelper.setUniked(url); } _showPopupMenu(Offset offset, EpisodeBrief episode, BuildContext context, diff --git a/lib/home/importompl.dart b/lib/home/importompl.dart index ff482cd..7e9270c 100644 --- a/lib/home/importompl.dart +++ b/lib/home/importompl.dart @@ -1,8 +1,14 @@ +import 'package:connectivity/connectivity.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; + +import '../local_storage/key_value_storage.dart'; +import '../local_storage/sqflite_localpodcast.dart'; import '../state/podcast_group.dart'; import '../state/subscribe_podcast.dart'; +import '../state/download_state.dart'; import '../state/refresh_podcast.dart'; +import '../type/episodebrief.dart'; import '../util/context_extension.dart'; class Import extends StatelessWidget { @@ -24,6 +30,30 @@ class Import extends StatelessWidget { ); } + _autoDownloadNew(BuildContext context) async { + final DBHelper dbHelper = DBHelper(); + var downloader = Provider.of(context, listen: false); + var result = await Connectivity().checkConnectivity(); + KeyValueStorage autoDownloadStorage = + KeyValueStorage(autoDownloadNetworkKey); + int autoDownloadNetwork = await autoDownloadStorage.getInt(); + if (autoDownloadNetwork == 1) { + List episodes = await dbHelper.getNewEpisodes('all'); + // For safety + if (episodes.length < 100) + episodes.forEach((episode) { + downloader.startTask(episode, showNotification: false); + }); + } else if (result == ConnectivityResult.wifi) { + List episodes = await dbHelper.getNewEpisodes('all'); + //For safety + if (episodes.length < 100) + episodes.forEach((episode) { + downloader.startTask(episode, showNotification: false); + }); + } + } + @override Widget build(BuildContext context) { GroupList groupList = Provider.of(context, listen: false); @@ -39,7 +69,7 @@ class Import extends StatelessWidget { groupList.subscribeNewPodcast(item.id); return importColumn("Fetch data ${item.title}", context); case SubscribeState.fetch: - // groupList.updatePodcast(item.id); + // groupList.updatePodcast(item.id); return importColumn("Subscribe success ${item.title}", context); case SubscribeState.exist: return importColumn( @@ -57,7 +87,7 @@ class Import extends StatelessWidget { RefreshItem item = refreshWorker.currentRefreshItem; if (refreshWorker.complete) { groupList.updateGroups(); - // audio.addNewEpisode('all'); + _autoDownloadNew(context); } switch (item.refreshState) { case RefreshState.fetch: diff --git a/lib/home/popupmenu.dart b/lib/home/popupmenu.dart index 0937ec3..4353b33 100644 --- a/lib/home/popupmenu.dart +++ b/lib/home/popupmenu.dart @@ -76,7 +76,7 @@ class _PopupMenuState extends State { try { String opml = file.readAsStringSync(); - var content = xml.parse(opml); + var content = xml.XmlDocument.parse(opml); var total = content .findAllElements('outline') .map((ele) => OmplOutline.parse(ele)) @@ -184,11 +184,6 @@ class _PopupMenuState extends State { ), ), ), - - // PopupMenuItem( - // value: 3, - // child: setting.theme != 2 ? Text('Night Mode') : Text('Light Mode'), - // ), PopupMenuItem( value: 4, child: Container( diff --git a/lib/local_storage/sqflite_localpodcast.dart b/lib/local_storage/sqflite_localpodcast.dart index 68725c3..0df34f3 100644 --- a/lib/local_storage/sqflite_localpodcast.dart +++ b/lib/local_storage/sqflite_localpodcast.dart @@ -273,8 +273,8 @@ class DBHelper { Future isListened(String url) async { var dbClient = await database; int i = 0; - List list = - await dbClient.rawQuery("SELECT listen_time FROM PlayHistory WHERE enclosure_url = ?", [url]); + List list = await dbClient.rawQuery( + "SELECT listen_time FROM PlayHistory WHERE enclosure_url = ?", [url]); if (list.length == 0) return 0; else { @@ -648,7 +648,7 @@ class DBHelper { E.milliseconds, P.imagePath, P.title as feed_title, E.duration, E.explicit, E.liked, E.downloaded, P.primaryColor, E.media_id, E.is_new, P.skip_seconds FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id - WHERE E.is_new = 1 ORDER BY E.milliseconds ASC""", + WHERE E.is_new = 1 AND E.downloaded = 'ND' AND P.auto_download = 1 ORDER BY E.milliseconds ASC""", ); else list = await dbClient.rawQuery( @@ -656,7 +656,7 @@ class DBHelper { E.milliseconds, P.imagePath, P.title as feed_title, E.duration, E.explicit, E.liked, E.downloaded, P.primaryColor, E.media_id, E.is_new, P.skip_seconds FROM Episodes E INNER JOIN PodcastLocal P ON E.feed_id = P.id - WHERE E.is_new = 1 AND E.feed_id = ? ORDER BY E.milliseconds ASC""", + WHERE E.is_new = 1 AND E.downloaded = 'ND' AND E.feed_id = ? ORDER BY E.milliseconds ASC""", [id]); if (list.length > 0) for (int x = 0; x < list.length; x++) { @@ -961,9 +961,11 @@ class DBHelper { return episodes; } - Future removeAllNewMark() async { + removeAllNewMark() async { var dbClient = await database; - return await dbClient.rawUpdate("UPDATE Episodes SET is_new = 0 "); + await dbClient.transaction((txn) async { + await txn.rawUpdate("UPDATE Episodes SET is_new = 0 "); + }); } Future> getGroupNewRssItem(List group) async { @@ -1000,20 +1002,23 @@ class DBHelper { return episodes; } - Future removeGroupNewMark(List group) async { + removeGroupNewMark(List group) async { var dbClient = await database; if (group.length > 0) { List s = group.map((e) => "'$e'").toList(); - return await dbClient.rawUpdate( - "UPDATE Episodes SET is_new = 0 WHERE feed_id in (${s.join(',')})"); + await dbClient.transaction((txn) async { + await txn.rawUpdate( + "UPDATE Episodes SET is_new = 0 WHERE feed_id in (${s.join(',')})"); + }); } - return 0; } - Future removeEpisodeNewMark(String url) async { + removeEpisodeNewMark(String url) async { var dbClient = await database; - return await dbClient.rawUpdate( - "UPDATE Episodes SET is_new = 0 WHERE enclosure_url = ?", [url]); + await dbClient.transaction((txn) async { + await txn.rawUpdate( + "UPDATE Episodes SET is_new = 0 WHERE enclosure_url = ?", [url]); + }); } Future> getLikedRssItem(int i, int sortBy) async { @@ -1069,20 +1074,22 @@ class DBHelper { return episodes; } - Future setLiked(String url) async { + setLiked(String url) async { var dbClient = await database; int milliseconds = DateTime.now().millisecondsSinceEpoch; - int count = await dbClient.rawUpdate( - "UPDATE Episodes SET liked = 1, liked_date = ? WHERE enclosure_url= ?", - [milliseconds, url]); - return count; + await dbClient.transaction((txn) async { + await txn.rawUpdate( + "UPDATE Episodes SET liked = 1, liked_date = ? WHERE enclosure_url= ?", + [milliseconds, url]); + }); } - Future setUniked(String url) async { + setUniked(String url) async { var dbClient = await database; - int count = await dbClient.rawUpdate( - "UPDATE Episodes SET liked = 0 WHERE enclosure_url = ?", [url]); - return count; + await dbClient.transaction((txn) async { + await txn.rawUpdate( + "UPDATE Episodes SET liked = 0 WHERE enclosure_url = ?", [url]); + }); } Future isLiked(String url) async { diff --git a/lib/podcasts/podcastdetail.dart b/lib/podcasts/podcastdetail.dart index b923e9b..d99b3a7 100644 --- a/lib/podcasts/podcastdetail.dart +++ b/lib/podcasts/podcastdetail.dart @@ -46,7 +46,6 @@ class _PodcastDetailState extends State { bool _scroll; Future _updateRssItem(PodcastLocal podcastLocal) async { var dbHelper = DBHelper(); - final result = await dbHelper.updatePodcastRss(podcastLocal); if (result == 0) { Fluttertoast.showToast( @@ -58,8 +57,10 @@ class _PodcastDetailState extends State { msg: 'Updated $result Episodes', gravity: ToastGravity.TOP, ); + bool autoDownload = await dbHelper.getAutoDownload(podcastLocal.id); if (autoDownload) { + var downloader = Provider.of(context, listen: false); var result = await Connectivity().checkConnectivity(); KeyValueStorage autoDownloadStorage = KeyValueStorage(autoDownloadNetworkKey); @@ -67,19 +68,21 @@ class _PodcastDetailState extends State { if (autoDownloadNetwork == 1) { List episodes = await dbHelper.getNewEpisodes(podcastLocal.id); - episodes.forEach((episode) { - DownloadState().startTask(episode, showNotification: false); - }); + // For safety + if (episodes.length < 100) + episodes.forEach((episode) { + downloader.startTask(episode, showNotification: false); + }); } else if (result == ConnectivityResult.wifi) { List episodes = await dbHelper.getNewEpisodes(podcastLocal.id); - episodes.forEach((episode) { - DownloadState().startTask(episode, showNotification: false); - }); + //For safety + if (episodes.length < 100) + episodes.forEach((episode) { + downloader.startTask(episode, showNotification: false); + }); } } - // Provider.of(context, listen: false) - // .updatePodcast(podcastLocal.id); } else { Fluttertoast.showToast( msg: 'Update failed, network error', diff --git a/lib/podcasts/podcastgroup.dart b/lib/podcasts/podcastgroup.dart index ecc23c1..22e9934 100644 --- a/lib/podcasts/podcastgroup.dart +++ b/lib/podcasts/podcastgroup.dart @@ -361,7 +361,7 @@ class _PodcastCardState extends State builder: (context, snapshot) { return _buttonOnMenu( icon: Container( - child: Icon(Icons.done_all, + child: Icon(Icons.file_download, size: _value * 15, color: snapshot.data ? Colors.white @@ -369,20 +369,23 @@ class _PodcastCardState extends State height: _value == 0 ? 1 : 18 * _value, width: _value == 0 ? 1 : 18 * _value, decoration: BoxDecoration( - border: Border.all( - width: 1, - color: snapshot.data - ? context.accentColor - : context.textTheme.subtitle1 - .color), + border: snapshot.data + ? Border.all( + width: 1, + color: snapshot.data + ? context.accentColor + : context.textTheme + .subtitle1.color) + : null, shape: BoxShape.circle, color: snapshot.data ? context.accentColor : null), ), tooltip: 'Auto Download', - onTap: () { - _setAutoDownload(widget.podcastLocal.id, + onTap: () async { + await _setAutoDownload( + widget.podcastLocal.id, !snapshot.data); setState(() {}); }, diff --git a/lib/settings/downloads_manage.dart b/lib/settings/downloads_manage.dart index f01f58e..bc0ec22 100644 --- a/lib/settings/downloads_manage.dart +++ b/lib/settings/downloads_manage.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_downloader/flutter_downloader.dart'; import 'package:path_provider/path_provider.dart'; import 'package:line_icons/line_icons.dart'; import 'package:provider/provider.dart'; diff --git a/lib/settings/history.dart b/lib/settings/history.dart index 3c7353f..3bb16c2 100644 --- a/lib/settings/history.dart +++ b/lib/settings/history.dart @@ -300,7 +300,7 @@ class _PlayedHistoryState extends State builder: (context, snapshot) { return snapshot.hasData ? ListView.builder( - // shrinkWrap: true, + // shrinkWrap: true, scrollDirection: Axis.vertical, itemCount: snapshot.data.length, itemBuilder: (BuildContext context, int index) { @@ -498,7 +498,6 @@ class HistoryChart extends StatelessWidget { ]), dotData: FlDotData( show: true, - dotSize: 5, ), ), ], diff --git a/lib/state/audiostate.dart b/lib/state/audiostate.dart index 119bc96..6f0573c 100644 --- a/lib/state/audiostate.dart +++ b/lib/state/audiostate.dart @@ -449,7 +449,7 @@ class AudioPlayerNotifier extends ChangeNotifier { newEpisodes = await dbHelper.getRecentNewRssItem(); else newEpisodes = await dbHelper.getGroupNewRssItem(group); - if (newEpisodes.length > 0) + if (newEpisodes.length > 0 && newEpisodes.length < 100) await Future.forEach(newEpisodes, (episode) async { await addToPlaylist(episode); }); diff --git a/lib/state/podcast_group.dart b/lib/state/podcast_group.dart index 2bdf935..8f9b78b 100644 --- a/lib/state/podcast_group.dart +++ b/lib/state/podcast_group.dart @@ -80,8 +80,7 @@ class PodcastGroup { class GroupList extends ChangeNotifier { List _groups; DBHelper dbHelper = DBHelper(); - UnmodifiableListView get groups => - UnmodifiableListView(_groups); + List get groups => _groups; KeyValueStorage storage = KeyValueStorage('groups'); GroupList({List groups}) : _groups = groups ?? []; @@ -112,10 +111,18 @@ class GroupList extends ChangeNotifier { } } + _initGroup() async { + storage.getGroups().then((loadgroups) async { + _groups.addAll(loadgroups.map((e) => PodcastGroup.fromEntity(e))); + await Future.forEach(_groups, (group) async { + await group.getPodcasts(); + }); + }); + } + @override void addListener(VoidCallback listener) { - super.addListener(listener); - loadGroups(); + loadGroups().then((value) => super.addListener(listener)); } Future loadGroups() async { @@ -142,7 +149,7 @@ class GroupList extends ChangeNotifier { Future addGroup(PodcastGroup podcastGroup) async { _isLoading = true; _groups.add(podcastGroup); - _saveGroup(); + await _saveGroup(); _isLoading = false; notifyListeners(); } @@ -154,7 +161,7 @@ class GroupList extends ChangeNotifier { _groups[0].podcastList.insert(0, podcast); } }); - _saveGroup(); + await _saveGroup(); _groups.remove(podcastGroup); await _groups[0].getPodcasts(); _isLoading = false; @@ -170,13 +177,13 @@ class GroupList extends ChangeNotifier { _saveGroup(); } - void _saveGroup() { - storage.saveGroup(_groups.map((it) => it.toEntity()).toList()); + _saveGroup() async { + await storage.saveGroup(_groups.map((it) => it.toEntity()).toList()); } Future subscribe(PodcastLocal podcastLocal) async { _groups[0].podcastList.insert(0, podcastLocal.id); - _saveGroup(); + await _saveGroup(); await dbHelper.savePodcastLocal(podcastLocal); await _groups[0].getPodcasts(); notifyListeners(); @@ -194,8 +201,9 @@ class GroupList extends ChangeNotifier { } Future subscribeNewPodcast(String id) async { - _groups[0].podcastList.insert(0, id); - _saveGroup(); + if (!_groups[0].podcastList.contains(id)) + _groups[0].podcastList.insert(0, id); + await _saveGroup(); await _groups[0].getPodcasts(); notifyListeners(); } @@ -224,7 +232,7 @@ class GroupList extends ChangeNotifier { list.forEach((s) { s.podcastList.insert(0, id); }); - _saveGroup(); + await _saveGroup(); await Future.forEach(_groups, (group) async { await group.getPodcasts(); }); @@ -239,7 +247,7 @@ class GroupList extends ChangeNotifier { _groups.forEach((group) async { group.podcastList.remove(id); }); - _saveGroup(); + await _saveGroup(); await dbHelper.delPodcastLocal(id); await Future.forEach(_groups, (group) async { await group.getPodcasts(); @@ -250,7 +258,7 @@ class GroupList extends ChangeNotifier { saveOrder(PodcastGroup group) async { group.podcastList = group.ordereddPodcasts.map((e) => e.id).toList(); - _saveGroup(); + await _saveGroup(); await group.getPodcasts(); notifyListeners(); } diff --git a/lib/state/refresh_podcast.dart b/lib/state/refresh_podcast.dart index f3d9c91..2425cd7 100644 --- a/lib/state/refresh_podcast.dart +++ b/lib/state/refresh_podcast.dart @@ -2,13 +2,10 @@ import 'dart:isolate'; import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.dart'; -import 'package:connectivity/connectivity.dart'; import '../local_storage/key_value_storage.dart'; import '../local_storage/sqflite_localpodcast.dart'; import '../type/podcastlocal.dart'; -import '../type/episodebrief.dart'; -import 'download_state.dart'; enum RefreshState { none, fetch, error } @@ -71,33 +68,13 @@ class RefreshWorker extends ChangeNotifier { Future refreshIsolateEntryPoint(SendPort sendPort) async { KeyValueStorage refreshstorage = KeyValueStorage(refreshdateKey); - KeyValueStorage autoDownloadStorage = KeyValueStorage(autoDownloadNetworkKey); await refreshstorage.saveInt(DateTime.now().millisecondsSinceEpoch); var dbHelper = DBHelper(); List podcastList = await dbHelper.getPodcastLocalAll(); - //int i = 0; await Future.forEach(podcastList, (podcastLocal) async { sendPort.send([podcastLocal.title, 1]); int updateCount = await dbHelper.updatePodcastRss(podcastLocal); - bool autoDownload = await dbHelper.getAutoDownload(podcastLocal.id); - if (autoDownload && updateCount > 0) { - var result = await Connectivity().checkConnectivity(); - int autoDownloadNetwork = await autoDownloadStorage.getInt(); - if (autoDownloadNetwork == 1) { - List episodes = - await dbHelper.getNewEpisodes(podcastLocal.id); - episodes.forEach((episode) { - DownloadState().startTask(episode, showNotification: false); - }); - } else if (result == ConnectivityResult.wifi) { - List episodes = - await dbHelper.getNewEpisodes(podcastLocal.id); - episodes.forEach((episode) { - DownloadState().startTask(episode, showNotification: false); - }); - } - } - print('Refresh ' + podcastLocal.title); + print('Refresh ' + podcastLocal.title + updateCount.toString()); }); // KeyValueStorage refreshcountstorage = KeyValueStorage('refreshcount'); // await refreshcountstorage.saveInt(i); diff --git a/lib/state/settingstate.dart b/lib/state/settingstate.dart index 30be1fd..8cc2be7 100644 --- a/lib/state/settingstate.dart +++ b/lib/state/settingstate.dart @@ -32,13 +32,13 @@ void callbackDispatcher() { List episodes = await dbHelper.getNewEpisodes(podcastLocal.id); episodes.forEach((episode) { - DownloadState().startTask(episode, showNotification: false); + DownloadState().startTask(episode, showNotification: true); }); } else if (result == ConnectivityResult.wifi) { List episodes = await dbHelper.getNewEpisodes(podcastLocal.id); episodes.forEach((episode) { - DownloadState().startTask(episode, showNotification: false); + DownloadState().startTask(episode, showNotification: true); }); } } diff --git a/lib/state/subscribe_podcast.dart b/lib/state/subscribe_podcast.dart index a19f555..359a9d3 100644 --- a/lib/state/subscribe_podcast.dart +++ b/lib/state/subscribe_podcast.dart @@ -66,7 +66,6 @@ class SubscribeWorker extends ChangeNotifier { _setCurrentSubscribeItem(SubscribeItem(message[1], message[0], subscribeState: SubscribeState.values[message[2]], id: message.length == 4 ? message[3] : '')); - print(message[2]); } else if (message is String && message == "done") { subIsolate.kill(); subIsolate = null; diff --git a/lib/util/episodegrid.dart b/lib/util/episodegrid.dart index d197026..9bc004d 100644 --- a/lib/util/episodegrid.dart +++ b/lib/util/episodegrid.dart @@ -74,16 +74,14 @@ class EpisodeGrid extends StatelessWidget { } } - Future _saveLiked(String url) async { + _saveLiked(String url) async { var dbHelper = DBHelper(); - int result = await dbHelper.setLiked(url); - return result; + await dbHelper.setLiked(url); } - Future _setUnliked(String url) async { + _setUnliked(String url) async { var dbHelper = DBHelper(); - int result = await dbHelper.setUniked(url); - return result; + await dbHelper.setUniked(url); } String _stringForSeconds(double seconds) { @@ -116,9 +114,9 @@ class EpisodeGrid extends StatelessWidget { ), ); - Widget _listenIndicater(BuildContext context, - {EpisodeBrief episode, int isListened}) => - Center(); + //Widget _listenIndicater(BuildContext context, + // {EpisodeBrief episode, int isListened}) => + // Center(); // Selector>( // selector: (_, audio) => Tuple2(audio.episode, audio.playerRunning), // builder: (_, data, __) { @@ -488,9 +486,9 @@ class EpisodeGrid extends StatelessWidget { episode: episodes[index], color: _c), Spacer(), - // _listenIndicater(context, - // episode: episodes[index], - // isListened: snapshot.data), + // _listenIndicater(context, + // episode: episodes[index], + // isListened: snapshot.data), _downloadIndicater(context, episode: episodes[index]), _isNewIndicator(episodes[index]), diff --git a/lib/webfeed/domain/atom_feed.dart b/lib/webfeed/domain/atom_feed.dart index 912102d..a3e4545 100644 --- a/lib/webfeed/domain/atom_feed.dart +++ b/lib/webfeed/domain/atom_feed.dart @@ -39,7 +39,7 @@ class AtomFeed { }); factory AtomFeed.parse(String xmlString) { - var document = parse(xmlString); + var document = XmlDocument.parse(xmlString); XmlElement feedElement; try { feedElement = document.findElements("feed").first; diff --git a/lib/webfeed/domain/rss_feed.dart b/lib/webfeed/domain/rss_feed.dart index 7f995a9..4e91dc5 100644 --- a/lib/webfeed/domain/rss_feed.dart +++ b/lib/webfeed/domain/rss_feed.dart @@ -59,7 +59,7 @@ class RssFeed { }); factory RssFeed.parse(String xmlString) { - var document = parse(xmlString); + var document = XmlDocument.parse(xmlString); XmlElement channelElement; try { channelElement = document.findAllElements("channel").first; diff --git a/pubspec.yaml b/pubspec.yaml index 0a873ca..ecdd874 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -33,7 +33,7 @@ dependencies: tuple: ^1.0.3 cached_network_image: ^2.2.0+1 workmanager: ^0.2.2 - fl_chart: ^0.9.4 + fl_chart: ^0.10.0 audio_service: ^0.8.0 flutter_file_dialog: ^0.0.5 flutter_linkify: ^3.1.3 @@ -57,8 +57,8 @@ dev_dependencies: sdk: flutter dependency_overrides: - flutter_isolate: "1.0.0+13" - xml: "4.1.0" + flutter_isolate: "1.0.0+14" + xml: "4.2.0" flutter: assets: