Support settings backuo.

This commit is contained in:
stonegate 2020-07-15 02:34:28 +08:00
parent 98fd594eb5
commit f47758b104
8 changed files with 191 additions and 32 deletions

View File

@ -350,8 +350,8 @@ class _SearchResultState extends State<SearchResult>
var subscribeWorker = Provider.of<GroupList>(context, listen: false); var subscribeWorker = Provider.of<GroupList>(context, listen: false);
final s = context.s; final s = context.s;
savePodcast(OnlinePodcast podcast) { savePodcast(OnlinePodcast podcast) {
SubscribeItem item = SubscribeItem item = SubscribeItem(podcast.rss, podcast.title,
SubscribeItem(podcast.rss, podcast.title, imgUrl: podcast.image); imgUrl: podcast.image, group: 'Home');
subscribeWorker.setSubscribeItem(item); subscribeWorker.setSubscribeItem(item);
} }

View File

@ -21,7 +21,7 @@ import '../util/custompaint.dart';
import '../state/download_state.dart'; import '../state/download_state.dart';
import '../state/podcast_group.dart'; import '../state/podcast_group.dart';
import 'playlist.dart'; import 'playlist.dart';
import 'importompl.dart'; import 'import_ompl.dart';
import 'audioplayer.dart'; import 'audioplayer.dart';
import 'addpodcast.dart'; import 'addpodcast.dart';
import 'popupmenu.dart'; import 'popupmenu.dart';

View File

@ -7,7 +7,6 @@ import 'package:provider/provider.dart';
import 'package:tsacdop/local_storage/key_value_storage.dart'; import 'package:tsacdop/local_storage/key_value_storage.dart';
import 'package:tsacdop/service/ompl_build.dart'; import 'package:tsacdop/service/ompl_build.dart';
import 'package:tsacdop/state/podcast_group.dart'; import 'package:tsacdop/state/podcast_group.dart';
import 'package:xml/xml.dart' as xml;
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
@ -67,7 +66,7 @@ class _PopupMenuState extends State<PopupMenu> {
SubscribeItem item = SubscribeItem item =
SubscribeItem(rss.xmlUrl, rss.text, group: title); SubscribeItem(rss.xmlUrl, rss.text, group: title);
await subscribeWorker.setSubscribeItem(item); await subscribeWorker.setSubscribeItem(item);
await Future.delayed(Duration(seconds: 1)); await Future.delayed(Duration(milliseconds: 500));
print(rss.text); print(rss.text);
} }
} }

View File

@ -6,7 +6,6 @@ import 'package:shared_preferences/shared_preferences.dart';
import '../state/podcast_group.dart'; import '../state/podcast_group.dart';
const String autoPlayKey = 'autoPlay'; const String autoPlayKey = 'autoPlay';
//const String autoAddKey = 'autoAdd';
const String audioPositionKey = 'audioposition'; const String audioPositionKey = 'audioposition';
const String lastWorkKey = 'lastWork'; const String lastWorkKey = 'lastWork';
const String refreshdateKey = 'refreshdate'; const String refreshdateKey = 'refreshdate';

View File

@ -10,6 +10,7 @@ import '../local_storage/sqflite_localpodcast.dart';
import '../local_storage/key_value_storage.dart'; import '../local_storage/key_value_storage.dart';
import '../type/podcastlocal.dart'; import '../type/podcastlocal.dart';
import '../type/episodebrief.dart'; import '../type/episodebrief.dart';
import '../type/settings_backup.dart';
import 'download_state.dart'; import 'download_state.dart';
void callbackDispatcher() { void callbackDispatcher() {
@ -25,7 +26,6 @@ void callbackDispatcher() {
await dbHelper.updatePodcastRss(podcastLocal, removeMark: lastWork); await dbHelper.updatePodcastRss(podcastLocal, removeMark: lastWork);
print('Refresh ' + podcastLocal.title); print('Refresh ' + podcastLocal.title);
} }
;
await FlutterDownloader.initialize(); await FlutterDownloader.initialize();
AutoDownloader downloader = AutoDownloader(); AutoDownloader downloader = AutoDownloader();
@ -97,6 +97,13 @@ class SettingState extends ChangeNotifier {
KeyValueStorage(autoSleepTimerEndKey); KeyValueStorage(autoSleepTimerEndKey);
KeyValueStorage tapToOpenPopupMenuStorage = KeyValueStorage tapToOpenPopupMenuStorage =
KeyValueStorage(tapToOpenPopupMenuKey); KeyValueStorage(tapToOpenPopupMenuKey);
KeyValueStorage cacheStorage = KeyValueStorage(cacheMaxKey);
KeyValueStorage podcastLayoutStorage = KeyValueStorage(podcastLayoutKey);
KeyValueStorage favLayoutStorage = KeyValueStorage(favLayoutKey);
KeyValueStorage downloadLayoutStorage = KeyValueStorage(downloadLayoutKey);
KeyValueStorage recentLayoutStorage = KeyValueStorage(recentLayoutKey);
KeyValueStorage autoDeleteStorage = KeyValueStorage(autoDeleteKey);
KeyValueStorage autoDownloadStorage = KeyValueStorage(autoDownloadNetworkKey);
Future initData() async { Future initData() async {
await _getTheme(); await _getTheme();
@ -249,10 +256,6 @@ class SettingState extends ChangeNotifier {
_theme = ThemeMode.values[mode]; _theme = ThemeMode.values[mode];
} }
Future _saveTheme() async {
await themeStorage.saveInt(_theme.index);
}
Future _getAccentSetColor() async { Future _getAccentSetColor() async {
String colorString = await accentStorage.getString(); String colorString = await accentStorage.getString();
if (colorString.isNotEmpty) { if (colorString.isNotEmpty) {
@ -263,29 +266,16 @@ class SettingState extends ChangeNotifier {
} }
} }
Future _saveAccentSetColor() async {
await accentStorage
.saveString(_accentSetColor.toString().substring(10, 16));
}
Future _getAutoUpdate() async { Future _getAutoUpdate() async {
int i = await autoupdateStorage.getInt(); int i = await autoupdateStorage.getInt();
_autoUpdate = i == 0 ? true : false; _autoUpdate = i == 0 ? true : false;
} }
Future _saveAutoUpdate() async {
await autoupdateStorage.saveInt(_autoUpdate ? 0 : 1);
}
Future _getUpdateInterval() async { Future _getUpdateInterval() async {
_initUpdateTag = await intervalStorage.getInt(); _initUpdateTag = await intervalStorage.getInt();
_updateInterval = _initUpdateTag; _updateInterval = _initUpdateTag;
} }
Future _saveUpdateInterval() async {
await intervalStorage.saveInt(_updateInterval);
}
Future _getDownloadUsingData() async { Future _getDownloadUsingData() async {
int i = await downloadUsingDataStorage.getInt(); int i = await downloadUsingDataStorage.getInt();
_downloadUsingData = i == 0 ? true : false; _downloadUsingData = i == 0 ? true : false;
@ -300,19 +290,11 @@ class SettingState extends ChangeNotifier {
_showIntro = _initialShowIntor == 0 ? true : false; _showIntro = _initialShowIntor == 0 ? true : false;
} }
Future saveShowIntro(int i) async {
await introStorage.saveInt(i);
}
Future _getRealDark() async { Future _getRealDark() async {
int i = await realDarkStorage.getInt(); int i = await realDarkStorage.getInt();
_realDark = i == 0 ? false : true; _realDark = i == 0 ? false : true;
} }
Future _setRealDark() async {
await realDarkStorage.saveInt(_realDark ? 1 : 0);
}
Future _getSleepTimerData() async { Future _getSleepTimerData() async {
_defaultSleepTimer = _defaultSleepTimer =
await defaultSleepTimerStorage.getInt(defaultValue: 30); await defaultSleepTimerStorage.getInt(defaultValue: 30);
@ -327,6 +309,31 @@ class SettingState extends ChangeNotifier {
_autoSleepTimerMode = await autoSleepTimerModeStorage.getInt(); _autoSleepTimerMode = await autoSleepTimerModeStorage.getInt();
} }
Future _saveAccentSetColor() async {
await accentStorage
.saveString(_accentSetColor.toString().substring(10, 16));
}
Future _setRealDark() async {
await realDarkStorage.saveInt(_realDark ? 1 : 0);
}
Future saveShowIntro(int i) async {
await introStorage.saveInt(i);
}
Future _saveUpdateInterval() async {
await intervalStorage.saveInt(_updateInterval);
}
Future _saveTheme() async {
await themeStorage.saveInt(_theme.index);
}
Future _saveAutoUpdate() async {
await autoupdateStorage.saveInt(_autoUpdate ? 0 : 1);
}
Future _saveAutoPlay() async { Future _saveAutoPlay() async {
await autoPlayStorage.saveInt(_autoPlay ? 0 : 1); await autoPlayStorage.saveInt(_autoPlay ? 0 : 1);
} }
@ -350,4 +357,53 @@ class SettingState extends ChangeNotifier {
Future _saveAutoSleepTimerEnd() async { Future _saveAutoSleepTimerEnd() async {
await autoSleepTimerEndStorage.saveInt(_autoSleepTimerEnd); await autoSleepTimerEndStorage.saveInt(_autoSleepTimerEnd);
} }
Future<SettingsBackup> backup() async {
int theme = await themeStorage.getInt();
String accentColor = await accentStorage.getString();
int realDark = await realDarkStorage.getInt();
int autoPlay = await autoPlayStorage.getInt();
int autoUpdate = await autoupdateStorage.getInt();
int updateInterval = await intervalStorage.getInt();
int downloadUsingData = await downloadUsingDataStorage.getInt();
int cacheMax = await cacheStorage.getInt();
int podcastLayout = await podcastLayoutStorage.getInt();
int recentLayout = await recentLayoutStorage.getInt();
int favLayout = await favLayoutStorage.getInt();
int downloadLayout = await downloadLayoutStorage.getInt();
int autoDownloadNetwork = await autoDownloadStorage.getInt();
List<String> episodePopupMenu =
await KeyValueStorage(episodePopupMenuKey).getStringList();
int autoDelete = await autoDeleteStorage.getInt();
int autoSleepTimer = await autoSleepTimerStorage.getInt();
int autoSleepTimerStart = await autoSleepTimerStartStorage.getInt();
int autoSleepTimerEnd = await autoSleepTimerEndStorage.getInt();
int autoSleepTimerMode = await autoSleepTimerModeStorage.getInt();
int defaultSleepTime = await defaultSleepTimerStorage.getInt();
int tapToOpenPopupMenu =
await KeyValueStorage(tapToOpenPopupMenuKey).getInt(defaultValue: 0);
return SettingsBackup(
theme: theme,
accentColor: accentColor,
realDark: realDark,
autoPlay: autoPlay,
autoUpdate: autoUpdate,
updateInterval: updateInterval,
downloadUsingData: downloadUsingData,
cacheMax: cacheMax,
podcastLayout: podcastLayout,
recentLayout: recentLayout,
favLayout: favLayout,
downloadLayout: downloadLayout,
autoDownloadNetwork: autoDownloadNetwork,
episodePopupMenu: episodePopupMenu,
autoDelete: autoDelete,
autoSleepTimer: autoSleepTimer,
autoSleepTimerStart: autoSleepTimerStart,
autoSleepTimerEnd: autoSleepTimerEnd,
autoSleepTimerMode: autoSleepTimerMode,
defaultSleepTime: defaultSleepTime,
tapToOpenPopupMenu: tapToOpenPopupMenu);
}
} }

View File

@ -0,0 +1,95 @@
class SettingsBackup {
final int theme;
final String accentColor;
final int realDark;
final int autoPlay;
final int autoUpdate;
final int updateInterval;
final int downloadUsingData;
final int cacheMax;
final int podcastLayout;
final int recentLayout;
final int favLayout;
final int downloadLayout;
final int autoDownloadNetwork;
final List<String> episodePopupMenu;
final int autoDelete;
final int autoSleepTimer;
final int autoSleepTimerStart;
final int autoSleepTimerEnd;
final int defaultSleepTime;
final int autoSleepTimerMode;
final int tapToOpenPopupMenu;
SettingsBackup(
{this.theme,
this.accentColor,
this.realDark,
this.autoPlay,
this.autoUpdate,
this.updateInterval,
this.downloadUsingData,
this.cacheMax,
this.podcastLayout,
this.recentLayout,
this.favLayout,
this.downloadLayout,
this.autoDownloadNetwork,
this.episodePopupMenu,
this.autoDelete,
this.autoSleepTimer,
this.autoSleepTimerStart,
this.autoSleepTimerEnd,
this.defaultSleepTime,
this.autoSleepTimerMode,
this.tapToOpenPopupMenu});
Map<String, Object> toJson() {
return {
'theme': theme,
'accentColor': accentColor,
'realDark': realDark,
'autoPlay': autoPlay,
'autoUpdate': autoUpdate,
'updateInterval': updateInterval,
'downloadUsingData': downloadUsingData,
'cacheMax': cacheMax,
'podcastLayout': podcastLayout,
'recentLayout': recentLayout,
'favLayout': favLayout,
'downloadLayout': downloadLayout,
'autoDownloadNetwork': autoDownloadNetwork,
'episodePopupMenu': episodePopupMenu,
'autoDelete': autoDelete,
'autoSleepTimer': autoSleepTimer,
'autoSleepTimerStart': autoSleepTimerStart,
'autoSleepTimerEnd': autoSleepTimerEnd,
'autoSleepTimerMode': autoSleepTimerMode,
'tapToOpenPopupMenu': tapToOpenPopupMenu
};
}
static SettingsBackup fromJson(Map<String, Object> json) {
List<String> list = List.from(json['episodePopupMenu']);
return SettingsBackup(
theme: json['theme'] as int,
accentColor: json['accentColor'] as String,
realDark: json['realDark'] as int,
autoPlay: json['autoPlay'] as int,
autoUpdate: json['autoUpdate'] as int,
updateInterval: json['updateInterval'] as int,
downloadUsingData: json['downloadUsingData'] as int,
cacheMax: json['cacheMax'] as int,
podcastLayout: json['podcastLayout'] as int,
recentLayout: json['recentLayout'] as int,
favLayout: json['favLayout'] as int,
downloadLayout: json['downloadLayout'] as int,
autoDownloadNetwork: json['autoDownloadNetwork'] as int,
episodePopupMenu: list,
autoDelete: json['autoDelete'] as int,
autoSleepTimer: json['autoSleepTimer'] as int,
autoSleepTimerStart: json['autoSleepeTimerStart'] as int,
autoSleepTimerEnd: json['autoSleepTimerEnd'] as int,
autoSleepTimerMode: json['autoSleepTimerMode'] as int,
tapToOpenPopupMenu: json['tapToOpenPopupMenu'] as int);
}
}

View File

@ -1,8 +1,18 @@
class SubHistory { class SubHistory {
/// POdcast subscribe date.
DateTime subDate; DateTime subDate;
/// Podcast remove date.
DateTime delDate; DateTime delDate;
/// If podcast still on user device.
bool status; bool status;
/// POdcast title.
String title; String title;
/// POdcast rss link.
String rssUrl; String rssUrl;
SubHistory(this.status, this.delDate, this.subDate, this.rssUrl, this.title); SubHistory(this.status, this.delDate, this.subDate, this.rssUrl, this.title);
} }