Support fast forward / rewind seconds setting.
After Width: | Height: | Size: 259 B |
After Width: | Height: | Size: 292 B |
After Width: | Height: | Size: 192 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 304 B |
After Width: | Height: | Size: 395 B |
After Width: | Height: | Size: 416 B |
After Width: | Height: | Size: 416 B |
After Width: | Height: | Size: 531 B |
|
@ -63,17 +63,19 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
|
|
||||||
static m21(date) => "Removed at ${date}";
|
static m21(date) => "Removed at ${date}";
|
||||||
|
|
||||||
static m22(count) => "${Intl.plural(count, zero: 'Just now', one: '${count} second ago', other: '${count} seconds ago')}";
|
static m22(count) => "${Intl.plural(count, zero: '0 sec', one: '${count} sec', other: '${count} sec')}";
|
||||||
|
|
||||||
static m23(time) => "Last time ${time}";
|
static m23(count) => "${Intl.plural(count, zero: 'Just now', one: '${count} second ago', other: '${count} seconds ago')}";
|
||||||
|
|
||||||
static m24(time) => "${time} Left";
|
static m24(time) => "Last time ${time}";
|
||||||
|
|
||||||
static m25(time) => "To ${time}";
|
static m25(time) => "${time} Left";
|
||||||
|
|
||||||
static m26(count) => "${Intl.plural(count, zero: 'No update', one: 'Updated ${count} episode', other: 'Updated ${count} episodes')}";
|
static m26(time) => "To ${time}";
|
||||||
|
|
||||||
static m27(version) => "Version : ${version}";
|
static m27(count) => "${Intl.plural(count, zero: 'No update', one: 'Updated ${count} episode', other: 'Updated ${count} episodes')}";
|
||||||
|
|
||||||
|
static m28(version) => "Version : ${version}";
|
||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
static _notInlinedMessages(_) => <String, Function> {
|
static _notInlinedMessages(_) => <String, Function> {
|
||||||
|
@ -187,6 +189,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"notificationUpdateError" : m18,
|
"notificationUpdateError" : m18,
|
||||||
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"),
|
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"),
|
||||||
"play" : MessageLookupByLibrary.simpleMessage("Play"),
|
"play" : MessageLookupByLibrary.simpleMessage("Play"),
|
||||||
|
"playback" : MessageLookupByLibrary.simpleMessage("Playback control"),
|
||||||
"playing" : MessageLookupByLibrary.simpleMessage("Playing"),
|
"playing" : MessageLookupByLibrary.simpleMessage("Playing"),
|
||||||
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
|
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
|
||||||
"podcast" : m19,
|
"podcast" : m19,
|
||||||
|
@ -214,7 +217,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Search episode"),
|
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Search episode"),
|
||||||
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Invalid RSS link"),
|
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Invalid RSS link"),
|
||||||
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Search podcast"),
|
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Search podcast"),
|
||||||
"secondsAgo" : m22,
|
"secCount" : m22,
|
||||||
|
"secondsAgo" : m23,
|
||||||
"settingStorage" : MessageLookupByLibrary.simpleMessage("Storage"),
|
"settingStorage" : MessageLookupByLibrary.simpleMessage("Storage"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("Settings"),
|
"settings" : MessageLookupByLibrary.simpleMessage("Settings"),
|
||||||
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Accent color"),
|
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Accent color"),
|
||||||
|
@ -238,6 +242,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Enable syncing"),
|
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Enable syncing"),
|
||||||
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Refresh all podcasts in the background to get leatest episodes"),
|
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Refresh all podcasts in the background to get leatest episodes"),
|
||||||
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Export and import app settings"),
|
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Export and import app settings"),
|
||||||
|
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Fast forward seconds"),
|
||||||
|
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Change the fast forward seconds in player"),
|
||||||
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
|
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
|
||||||
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and features request"),
|
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and features request"),
|
||||||
"settingsHistory" : MessageLookupByLibrary.simpleMessage("History"),
|
"settingsHistory" : MessageLookupByLibrary.simpleMessage("History"),
|
||||||
|
@ -263,6 +269,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Prefrence"),
|
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Prefrence"),
|
||||||
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Real dark"),
|
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Real dark"),
|
||||||
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Turn on if you think the night is not dark enough"),
|
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Turn on if you think the night is not dark enough"),
|
||||||
|
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Rewind seconds"),
|
||||||
|
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Change the rewind seconds in player"),
|
||||||
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Auto turn on sleep timer"),
|
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Auto turn on sleep timer"),
|
||||||
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Auto start sleep timer at scheduled time"),
|
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Auto start sleep timer at scheduled time"),
|
||||||
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Default time"),
|
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Default time"),
|
||||||
|
@ -283,9 +291,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"),
|
"subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"),
|
||||||
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"),
|
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"),
|
||||||
"systemDefault" : MessageLookupByLibrary.simpleMessage("System default"),
|
"systemDefault" : MessageLookupByLibrary.simpleMessage("System default"),
|
||||||
"timeLastPlayed" : m23,
|
"timeLastPlayed" : m24,
|
||||||
"timeLeft" : m24,
|
"timeLeft" : m25,
|
||||||
"to" : m25,
|
"to" : m26,
|
||||||
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Added to playlist"),
|
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Added to playlist"),
|
||||||
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"),
|
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"),
|
||||||
"toastFileError" : MessageLookupByLibrary.simpleMessage("File error, subscribe failed"),
|
"toastFileError" : MessageLookupByLibrary.simpleMessage("File error, subscribe failed"),
|
||||||
|
@ -306,8 +314,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"unlike" : MessageLookupByLibrary.simpleMessage("Unlike"),
|
"unlike" : MessageLookupByLibrary.simpleMessage("Unlike"),
|
||||||
"unliked" : MessageLookupByLibrary.simpleMessage("Episode removed from favorite"),
|
"unliked" : MessageLookupByLibrary.simpleMessage("Episode removed from favorite"),
|
||||||
"updateDate" : MessageLookupByLibrary.simpleMessage("Update date"),
|
"updateDate" : MessageLookupByLibrary.simpleMessage("Update date"),
|
||||||
"updateEpisodesCount" : m26,
|
"updateEpisodesCount" : m27,
|
||||||
"updateFailed" : MessageLookupByLibrary.simpleMessage("Update failed, network error"),
|
"updateFailed" : MessageLookupByLibrary.simpleMessage("Update failed, network error"),
|
||||||
"version" : m27
|
"version" : m28
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,17 +63,19 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
|
|
||||||
static m21(date) => "Supprimé le ${date}";
|
static m21(date) => "Supprimé le ${date}";
|
||||||
|
|
||||||
static m22(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} seconde', other: 'Il y a ${count} secondes')}";
|
static m22(count) => "${Intl.plural(count, zero: '0 sec', one: '${count} sec', other: '${count} sec')}";
|
||||||
|
|
||||||
static m23(time) => "Dernière écoute à ${time}";
|
static m23(count) => "${Intl.plural(count, zero: 'A l\'instant', one: 'Il y a ${count} seconde', other: 'Il y a ${count} secondes')}";
|
||||||
|
|
||||||
static m24(time) => "${time} Restant";
|
static m24(time) => "Dernière écoute à ${time}";
|
||||||
|
|
||||||
static m25(time) => "Jusqu\'à ${time}";
|
static m25(time) => "${time} Restant";
|
||||||
|
|
||||||
static m26(count) => "${Intl.plural(count, zero: 'Aucune mise à jour.', one: 'Mise à jour d\'${count} épisode.', other: 'Mise à jour de ${count} épisodes.')}";
|
static m26(time) => "Jusqu\'à ${time}";
|
||||||
|
|
||||||
static m27(version) => "Version : ${version}";
|
static m27(count) => "${Intl.plural(count, zero: 'Aucune mise à jour.', one: 'Mise à jour d\'${count} épisode.', other: 'Mise à jour de ${count} épisodes.')}";
|
||||||
|
|
||||||
|
static m28(version) => "Version : ${version}";
|
||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
static _notInlinedMessages(_) => <String, Function> {
|
static _notInlinedMessages(_) => <String, Function> {
|
||||||
|
@ -187,6 +189,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"notificationUpdateError" : m18,
|
"notificationUpdateError" : m18,
|
||||||
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier."),
|
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier."),
|
||||||
"play" : MessageLookupByLibrary.simpleMessage("Lecture"),
|
"play" : MessageLookupByLibrary.simpleMessage("Lecture"),
|
||||||
|
"playback" : MessageLookupByLibrary.simpleMessage("Playback control"),
|
||||||
"playing" : MessageLookupByLibrary.simpleMessage("En cours"),
|
"playing" : MessageLookupByLibrary.simpleMessage("En cours"),
|
||||||
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
|
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
|
||||||
"podcast" : m19,
|
"podcast" : m19,
|
||||||
|
@ -214,7 +217,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Search episode"),
|
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Search episode"),
|
||||||
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Lien RSS invalide"),
|
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Lien RSS invalide"),
|
||||||
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Chercher un podcast"),
|
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Chercher un podcast"),
|
||||||
"secondsAgo" : m22,
|
"secCount" : m22,
|
||||||
|
"secondsAgo" : m23,
|
||||||
"settingStorage" : MessageLookupByLibrary.simpleMessage("Espace de stockage"),
|
"settingStorage" : MessageLookupByLibrary.simpleMessage("Espace de stockage"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
|
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
|
||||||
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
|
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
|
||||||
|
@ -238,6 +242,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"),
|
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"),
|
||||||
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualisez tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes"),
|
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualisez tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes"),
|
||||||
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Exporter et importer les paramètres de l\'application"),
|
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Exporter et importer les paramètres de l\'application"),
|
||||||
|
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Fast forward seconds"),
|
||||||
|
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Change the fast forward seconds in player"),
|
||||||
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
|
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
|
||||||
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bugs et demande d\'ajout de fonction"),
|
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bugs et demande d\'ajout de fonction"),
|
||||||
"settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"),
|
"settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"),
|
||||||
|
@ -263,6 +269,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Préférences"),
|
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Préférences"),
|
||||||
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"),
|
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"),
|
||||||
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activez pour un mode sombre accentué"),
|
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activez pour un mode sombre accentué"),
|
||||||
|
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Rewind seconds"),
|
||||||
|
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Change the rewind seconds in player"),
|
||||||
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"),
|
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"),
|
||||||
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"),
|
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"),
|
||||||
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Temps par défaut"),
|
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Temps par défaut"),
|
||||||
|
@ -283,9 +291,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"subscribe" : MessageLookupByLibrary.simpleMessage("Abonnements"),
|
"subscribe" : MessageLookupByLibrary.simpleMessage("Abonnements"),
|
||||||
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts"),
|
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts"),
|
||||||
"systemDefault" : MessageLookupByLibrary.simpleMessage("Valeur du système par défaut"),
|
"systemDefault" : MessageLookupByLibrary.simpleMessage("Valeur du système par défaut"),
|
||||||
"timeLastPlayed" : m23,
|
"timeLastPlayed" : m24,
|
||||||
"timeLeft" : m24,
|
"timeLeft" : m25,
|
||||||
"to" : m25,
|
"to" : m26,
|
||||||
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Ajouté à la playlist."),
|
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Ajouté à la playlist."),
|
||||||
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Tutoriel réinitialisé, veuillez redémarrer l\'application."),
|
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Tutoriel réinitialisé, veuillez redémarrer l\'application."),
|
||||||
"toastFileError" : MessageLookupByLibrary.simpleMessage("Erreur du fichier, échec de l\'abonnement."),
|
"toastFileError" : MessageLookupByLibrary.simpleMessage("Erreur du fichier, échec de l\'abonnement."),
|
||||||
|
@ -306,8 +314,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"unlike" : MessageLookupByLibrary.simpleMessage("Dislike"),
|
"unlike" : MessageLookupByLibrary.simpleMessage("Dislike"),
|
||||||
"unliked" : MessageLookupByLibrary.simpleMessage("L\'épisode a été supprimé des favoris."),
|
"unliked" : MessageLookupByLibrary.simpleMessage("L\'épisode a été supprimé des favoris."),
|
||||||
"updateDate" : MessageLookupByLibrary.simpleMessage("Date de mise à jour"),
|
"updateDate" : MessageLookupByLibrary.simpleMessage("Date de mise à jour"),
|
||||||
"updateEpisodesCount" : m26,
|
"updateEpisodesCount" : m27,
|
||||||
"updateFailed" : MessageLookupByLibrary.simpleMessage("Échec de la mise à jour, erreur de réseau"),
|
"updateFailed" : MessageLookupByLibrary.simpleMessage("Échec de la mise à jour, erreur de réseau"),
|
||||||
"version" : m27
|
"version" : m28
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,17 +63,19 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
|
|
||||||
static m21(date) => "${date}移除";
|
static m21(date) => "${date}移除";
|
||||||
|
|
||||||
static m22(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}秒前')}";
|
static m22(count) => "${Intl.plural(count, zero: '0 秒', other: '${count} 秒')}";
|
||||||
|
|
||||||
static m23(time) => "上次播放${time}";
|
static m23(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}秒前')}";
|
||||||
|
|
||||||
static m24(time) => "剩余 ${time}";
|
static m24(time) => "上次播放${time}";
|
||||||
|
|
||||||
static m25(time) => "到${time}";
|
static m25(time) => "剩余 ${time}";
|
||||||
|
|
||||||
static m26(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
|
static m26(time) => "到${time}";
|
||||||
|
|
||||||
static m27(version) => "版本:${version}";
|
static m27(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
|
||||||
|
|
||||||
|
static m28(version) => "版本:${version}";
|
||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
static _notInlinedMessages(_) => <String, Function> {
|
static _notInlinedMessages(_) => <String, Function> {
|
||||||
|
@ -187,6 +189,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"notificationUpdateError" : m18,
|
"notificationUpdateError" : m18,
|
||||||
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
|
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
|
||||||
"play" : MessageLookupByLibrary.simpleMessage("播放"),
|
"play" : MessageLookupByLibrary.simpleMessage("播放"),
|
||||||
|
"playback" : MessageLookupByLibrary.simpleMessage("播放控制"),
|
||||||
"playing" : MessageLookupByLibrary.simpleMessage("正在播放"),
|
"playing" : MessageLookupByLibrary.simpleMessage("正在播放"),
|
||||||
"plugins" : MessageLookupByLibrary.simpleMessage("插件"),
|
"plugins" : MessageLookupByLibrary.simpleMessage("插件"),
|
||||||
"podcast" : m19,
|
"podcast" : m19,
|
||||||
|
@ -214,7 +217,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"searchEpisode" : MessageLookupByLibrary.simpleMessage("搜索节目"),
|
"searchEpisode" : MessageLookupByLibrary.simpleMessage("搜索节目"),
|
||||||
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
|
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
|
||||||
"searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"),
|
"searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"),
|
||||||
"secondsAgo" : m22,
|
"secCount" : m22,
|
||||||
|
"secondsAgo" : m23,
|
||||||
"settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"),
|
"settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("设置"),
|
"settings" : MessageLookupByLibrary.simpleMessage("设置"),
|
||||||
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"),
|
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"),
|
||||||
|
@ -238,6 +242,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("开启自动更新"),
|
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("开启自动更新"),
|
||||||
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
|
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
|
||||||
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
|
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
|
||||||
|
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("快进时间"),
|
||||||
|
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快进时间"),
|
||||||
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("反馈"),
|
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("反馈"),
|
||||||
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("意见与建议"),
|
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("意见与建议"),
|
||||||
"settingsHistory" : MessageLookupByLibrary.simpleMessage("历史记录"),
|
"settingsHistory" : MessageLookupByLibrary.simpleMessage("历史记录"),
|
||||||
|
@ -263,6 +269,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"),
|
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"),
|
||||||
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("极黑"),
|
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("极黑"),
|
||||||
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
|
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
|
||||||
|
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("快退时间"),
|
||||||
|
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快退时间"),
|
||||||
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
|
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
|
||||||
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
|
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
|
||||||
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("默认时长"),
|
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("默认时长"),
|
||||||
|
@ -283,9 +291,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
|
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
|
||||||
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
|
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
|
||||||
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),
|
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),
|
||||||
"timeLastPlayed" : m23,
|
"timeLastPlayed" : m24,
|
||||||
"timeLeft" : m24,
|
"timeLeft" : m25,
|
||||||
"to" : m25,
|
"to" : m26,
|
||||||
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
||||||
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
|
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
|
||||||
"toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
|
"toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
|
||||||
|
@ -306,8 +314,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),
|
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),
|
||||||
"unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"),
|
"unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"),
|
||||||
"updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
|
"updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
|
||||||
"updateEpisodesCount" : m26,
|
"updateEpisodesCount" : m27,
|
||||||
"updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"),
|
"updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"),
|
||||||
"version" : m27
|
"version" : m28
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1163,6 +1163,16 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Playback control`
|
||||||
|
String get playback {
|
||||||
|
return Intl.message(
|
||||||
|
'Playback control',
|
||||||
|
name: 'playback',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Playing`
|
/// `Playing`
|
||||||
String get playing {
|
String get playing {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
@ -1436,6 +1446,19 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `{count, plural, zero{0 sec} one{{count} sec} other{{count} sec}}`
|
||||||
|
String secCount(num count) {
|
||||||
|
return Intl.plural(
|
||||||
|
count,
|
||||||
|
zero: '0 sec',
|
||||||
|
one: '$count sec',
|
||||||
|
other: '$count sec',
|
||||||
|
name: 'secCount',
|
||||||
|
desc: '',
|
||||||
|
args: [count],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `{count, plural, zero{Just now} one{{count} second ago} other{{count} seconds ago}}`
|
/// `{count, plural, zero{Just now} one{{count} second ago} other{{count} seconds ago}}`
|
||||||
String secondsAgo(num count) {
|
String secondsAgo(num count) {
|
||||||
return Intl.plural(
|
return Intl.plural(
|
||||||
|
@ -1669,6 +1692,26 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Fast forward seconds`
|
||||||
|
String get settingsFastForwardSec {
|
||||||
|
return Intl.message(
|
||||||
|
'Fast forward seconds',
|
||||||
|
name: 'settingsFastForwardSec',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Change the fast forward seconds in player`
|
||||||
|
String get settingsFastForwardSecDes {
|
||||||
|
return Intl.message(
|
||||||
|
'Change the fast forward seconds in player',
|
||||||
|
name: 'settingsFastForwardSecDes',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Feedback`
|
/// `Feedback`
|
||||||
String get settingsFeedback {
|
String get settingsFeedback {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
@ -1919,6 +1962,26 @@ class S {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// `Rewind seconds`
|
||||||
|
String get settingsRewindSec {
|
||||||
|
return Intl.message(
|
||||||
|
'Rewind seconds',
|
||||||
|
name: 'settingsRewindSec',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// `Change the rewind seconds in player`
|
||||||
|
String get settingsRewindSecDes {
|
||||||
|
return Intl.message(
|
||||||
|
'Change the rewind seconds in player',
|
||||||
|
name: 'settingsRewindSecDes',
|
||||||
|
desc: '',
|
||||||
|
args: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// `Auto turn on sleep timer`
|
/// `Auto turn on sleep timer`
|
||||||
String get settingsSTAuto {
|
String get settingsSTAuto {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
|
|
|
@ -18,8 +18,8 @@ import '../util/extension_helper.dart';
|
||||||
import '../util/custom_widget.dart';
|
import '../util/custom_widget.dart';
|
||||||
import '../util/custom_slider.dart';
|
import '../util/custom_slider.dart';
|
||||||
import '../episodes/episode_detail.dart';
|
import '../episodes/episode_detail.dart';
|
||||||
import 'playlist.dart';
|
|
||||||
import '../util/audiopanel.dart';
|
import '../util/audiopanel.dart';
|
||||||
|
import 'playlist.dart';
|
||||||
|
|
||||||
final List<BoxShadow> _customShadow = [
|
final List<BoxShadow> _customShadow = [
|
||||||
BoxShadow(blurRadius: 26, offset: Offset(-6, -6), color: Colors.white),
|
BoxShadow(blurRadius: 26, offset: Offset(-6, -6), color: Colors.white),
|
||||||
|
@ -1274,11 +1274,10 @@ class _ControlPanelState extends State<ControlPanel>
|
||||||
children: [
|
children: [
|
||||||
IconButton(
|
IconButton(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 25.0),
|
padding: EdgeInsets.symmetric(horizontal: 25.0),
|
||||||
onPressed: playing
|
onPressed:
|
||||||
? () => audio.forwardAudio(-10)
|
playing ? () => audio.rewind() : null,
|
||||||
: null,
|
|
||||||
iconSize: 32.0,
|
iconSize: 32.0,
|
||||||
icon: Icon(Icons.replay_10),
|
icon: Icon(Icons.replay),
|
||||||
color: Colors.grey[500]),
|
color: Colors.grey[500]),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.symmetric(horizontal: 30),
|
margin: EdgeInsets.symmetric(horizontal: 30),
|
||||||
|
@ -1343,11 +1342,10 @@ class _ControlPanelState extends State<ControlPanel>
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 25.0),
|
padding: EdgeInsets.symmetric(horizontal: 25.0),
|
||||||
onPressed: playing
|
onPressed:
|
||||||
? () => audio.forwardAudio(30)
|
playing ? () => audio.fastForward() : null,
|
||||||
: null,
|
|
||||||
iconSize: 32.0,
|
iconSize: 32.0,
|
||||||
icon: Icon(Icons.forward_30),
|
icon: Icon(Icons.forward),
|
||||||
color: Colors.grey[500]),
|
color: Colors.grey[500]),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
@ -272,6 +272,8 @@
|
||||||
"@oldestFirst": {},
|
"@oldestFirst": {},
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"@play": {},
|
"@play": {},
|
||||||
|
"playback": "Playback control",
|
||||||
|
"@playback": {},
|
||||||
"playing": "Playing",
|
"playing": "Playing",
|
||||||
"@playing": {},
|
"@playing": {},
|
||||||
"plugins": "Plugins",
|
"plugins": "Plugins",
|
||||||
|
@ -343,6 +345,8 @@
|
||||||
"@searchInvalidRss": {},
|
"@searchInvalidRss": {},
|
||||||
"searchPodcast": "Search podcast",
|
"searchPodcast": "Search podcast",
|
||||||
"@searchPodcast": {},
|
"@searchPodcast": {},
|
||||||
|
"secCount": "{count, plural, zero{0 sec} one{{count} sec} other{{count} sec}}",
|
||||||
|
"@secCount": {},
|
||||||
"secondsAgo": "{count, plural, zero{Just now} one{{count} second ago} other{{count} seconds ago}}",
|
"secondsAgo": "{count, plural, zero{Just now} one{{count} second ago} other{{count} seconds ago}}",
|
||||||
"@secondsAgo": {},
|
"@secondsAgo": {},
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
|
@ -391,6 +395,10 @@
|
||||||
"@settingsEnableSyncingDes": {},
|
"@settingsEnableSyncingDes": {},
|
||||||
"settingsExportDes": "Export and import app settings",
|
"settingsExportDes": "Export and import app settings",
|
||||||
"@settingsExportDes": {},
|
"@settingsExportDes": {},
|
||||||
|
"settingsFastForwardSec": "Fast forward seconds",
|
||||||
|
"@settingsFastForwardSec": {},
|
||||||
|
"settingsFastForwardSecDes": "Change the fast forward seconds in player",
|
||||||
|
"@settingsFastForwardSecDes": {},
|
||||||
"settingsFeedback": "Feedback",
|
"settingsFeedback": "Feedback",
|
||||||
"@settingsFeedback": {},
|
"@settingsFeedback": {},
|
||||||
"settingsFeedbackDes": "Bugs and features request",
|
"settingsFeedbackDes": "Bugs and features request",
|
||||||
|
@ -441,6 +449,10 @@
|
||||||
"@settingsRealDark": {},
|
"@settingsRealDark": {},
|
||||||
"settingsRealDarkDes": "Turn on if you think the night is not dark enough",
|
"settingsRealDarkDes": "Turn on if you think the night is not dark enough",
|
||||||
"@settingsRealDarkDes": {},
|
"@settingsRealDarkDes": {},
|
||||||
|
"settingsRewindSec": "Rewind seconds",
|
||||||
|
"@settingsRewindSec": {},
|
||||||
|
"settingsRewindSecDes": "Change the rewind seconds in player",
|
||||||
|
"@settingsRewindSecDes": {},
|
||||||
"settingsSTAuto": "Auto turn on sleep timer",
|
"settingsSTAuto": "Auto turn on sleep timer",
|
||||||
"@settingsSTAuto": {},
|
"@settingsSTAuto": {},
|
||||||
"settingsSTAutoDes": "Auto start sleep timer at scheduled time",
|
"settingsSTAutoDes": "Auto start sleep timer at scheduled time",
|
||||||
|
|
|
@ -272,6 +272,8 @@
|
||||||
"@oldestFirst": {},
|
"@oldestFirst": {},
|
||||||
"play": "Lecture",
|
"play": "Lecture",
|
||||||
"@play": {},
|
"@play": {},
|
||||||
|
"playback": "Playback control",
|
||||||
|
"@playback": {},
|
||||||
"playing": "En cours",
|
"playing": "En cours",
|
||||||
"@playing": {},
|
"@playing": {},
|
||||||
"plugins": "Plugins",
|
"plugins": "Plugins",
|
||||||
|
@ -343,6 +345,8 @@
|
||||||
"@searchInvalidRss": {},
|
"@searchInvalidRss": {},
|
||||||
"searchPodcast": "Chercher un podcast",
|
"searchPodcast": "Chercher un podcast",
|
||||||
"@searchPodcast": {},
|
"@searchPodcast": {},
|
||||||
|
"secCount": "{count, plural, zero{0 sec} one{{count} sec} other{{count} sec}}",
|
||||||
|
"@secCount": {},
|
||||||
"secondsAgo": "{count, plural, zero{A l'instant} one{Il y a {count} seconde} other{Il y a {count} secondes}}",
|
"secondsAgo": "{count, plural, zero{A l'instant} one{Il y a {count} seconde} other{Il y a {count} secondes}}",
|
||||||
"@secondsAgo": {},
|
"@secondsAgo": {},
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
|
@ -391,6 +395,10 @@
|
||||||
"@settingsEnableSyncingDes": {},
|
"@settingsEnableSyncingDes": {},
|
||||||
"settingsExportDes": "Exporter et importer les paramètres de l'application",
|
"settingsExportDes": "Exporter et importer les paramètres de l'application",
|
||||||
"@settingsExportDes": {},
|
"@settingsExportDes": {},
|
||||||
|
"settingsFastForwardSec": "Fast forward seconds",
|
||||||
|
"@settingsFastForwardSec": {},
|
||||||
|
"settingsFastForwardSecDes": "Change the fast forward seconds in player",
|
||||||
|
"@settingsFastForwardSecDes": {},
|
||||||
"settingsFeedback": "Feedback",
|
"settingsFeedback": "Feedback",
|
||||||
"@settingsFeedback": {},
|
"@settingsFeedback": {},
|
||||||
"settingsFeedbackDes": "Report de bugs et demande d'ajout de fonction",
|
"settingsFeedbackDes": "Report de bugs et demande d'ajout de fonction",
|
||||||
|
@ -441,6 +449,10 @@
|
||||||
"@settingsRealDark": {},
|
"@settingsRealDark": {},
|
||||||
"settingsRealDarkDes": "Activez pour un mode sombre accentué",
|
"settingsRealDarkDes": "Activez pour un mode sombre accentué",
|
||||||
"@settingsRealDarkDes": {},
|
"@settingsRealDarkDes": {},
|
||||||
|
"settingsRewindSec": "Rewind seconds",
|
||||||
|
"@settingsRewindSec": {},
|
||||||
|
"settingsRewindSecDes": "Change the rewind seconds in player",
|
||||||
|
"@settingsRewindSecDes": {},
|
||||||
"settingsSTAuto": "Activation automatique de la minuterie",
|
"settingsSTAuto": "Activation automatique de la minuterie",
|
||||||
"@settingsSTAuto": {},
|
"@settingsSTAuto": {},
|
||||||
"settingsSTAutoDes": "Démarrer la minuterie à l'horaire programmé",
|
"settingsSTAutoDes": "Démarrer la minuterie à l'horaire programmé",
|
||||||
|
|
|
@ -272,6 +272,8 @@
|
||||||
"@oldestFirst": {},
|
"@oldestFirst": {},
|
||||||
"play": "播放",
|
"play": "播放",
|
||||||
"@play": {},
|
"@play": {},
|
||||||
|
"playback": "播放控制",
|
||||||
|
"@playback": {},
|
||||||
"playing": "正在播放",
|
"playing": "正在播放",
|
||||||
"@playing": {},
|
"@playing": {},
|
||||||
"plugins": "插件",
|
"plugins": "插件",
|
||||||
|
@ -343,6 +345,8 @@
|
||||||
"@searchInvalidRss": {},
|
"@searchInvalidRss": {},
|
||||||
"searchPodcast": "搜索播客",
|
"searchPodcast": "搜索播客",
|
||||||
"@searchPodcast": {},
|
"@searchPodcast": {},
|
||||||
|
"secCount": "{count, plural, zero{0 秒} other{{count} 秒}}",
|
||||||
|
"@secCount": {},
|
||||||
"secondsAgo": "{count, plural, zero{刚刚} other{{count}秒前}}",
|
"secondsAgo": "{count, plural, zero{刚刚} other{{count}秒前}}",
|
||||||
"@secondsAgo": {},
|
"@secondsAgo": {},
|
||||||
"settings": "设置",
|
"settings": "设置",
|
||||||
|
@ -391,6 +395,10 @@
|
||||||
"@settingsEnableSyncingDes": {},
|
"@settingsEnableSyncingDes": {},
|
||||||
"settingsExportDes": "导出及恢复所有设置项",
|
"settingsExportDes": "导出及恢复所有设置项",
|
||||||
"@settingsExportDes": {},
|
"@settingsExportDes": {},
|
||||||
|
"settingsFastForwardSec": "快进时间",
|
||||||
|
"@settingsFastForwardSec": {},
|
||||||
|
"settingsFastForwardSecDes": "修改播放器快进时间",
|
||||||
|
"@settingsFastForwardSecDes": {},
|
||||||
"settingsFeedback": "反馈",
|
"settingsFeedback": "反馈",
|
||||||
"@settingsFeedback": {},
|
"@settingsFeedback": {},
|
||||||
"settingsFeedbackDes": "意见与建议",
|
"settingsFeedbackDes": "意见与建议",
|
||||||
|
@ -441,6 +449,10 @@
|
||||||
"@settingsRealDark": {},
|
"@settingsRealDark": {},
|
||||||
"settingsRealDarkDes": "如果夜不够黑,请开启",
|
"settingsRealDarkDes": "如果夜不够黑,请开启",
|
||||||
"@settingsRealDarkDes": {},
|
"@settingsRealDarkDes": {},
|
||||||
|
"settingsRewindSec": "快退时间",
|
||||||
|
"@settingsRewindSec": {},
|
||||||
|
"settingsRewindSecDes": "修改播放器快退时间",
|
||||||
|
"@settingsRewindSecDes": {},
|
||||||
"settingsSTAuto": "自动睡眠模式",
|
"settingsSTAuto": "自动睡眠模式",
|
||||||
"@settingsSTAuto": {},
|
"@settingsSTAuto": {},
|
||||||
"settingsSTAutoDes": "定期开启睡眠模式",
|
"settingsSTAutoDes": "定期开启睡眠模式",
|
||||||
|
|
|
@ -14,10 +14,7 @@ import '../util/general_dialog.dart';
|
||||||
import '../util/extension_helper.dart';
|
import '../util/extension_helper.dart';
|
||||||
import '../util/custom_dropdown.dart';
|
import '../util/custom_dropdown.dart';
|
||||||
|
|
||||||
String stringForMins(int mins) {
|
const List secondsToSelect = [10, 15, 20, 25, 30, 45, 60];
|
||||||
if (mins == null) return null;
|
|
||||||
return '${(mins ~/ 60)}:${(mins.truncate() % 60).toString().padLeft(2, '0')}';
|
|
||||||
}
|
|
||||||
|
|
||||||
class PlaySetting extends StatelessWidget {
|
class PlaySetting extends StatelessWidget {
|
||||||
Widget _modeWidget(BuildContext context) {
|
Widget _modeWidget(BuildContext context) {
|
||||||
|
@ -158,7 +155,7 @@ class PlaySetting extends StatelessWidget {
|
||||||
topLeft: Radius.circular(5)),
|
topLeft: Radius.circular(5)),
|
||||||
),
|
),
|
||||||
padding: const EdgeInsets.all(8.0),
|
padding: const EdgeInsets.all(8.0),
|
||||||
child: Text(s.from(stringForMins(data.item1))),
|
child: Text(s.from(data.item1.toTime)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -224,7 +221,7 @@ class PlaySetting extends StatelessWidget {
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
bottomRight: Radius.circular(5),
|
bottomRight: Radius.circular(5),
|
||||||
topRight: Radius.circular(5))),
|
topRight: Radius.circular(5))),
|
||||||
child: Text(s.to(stringForMins(data.item2)),
|
child: Text(s.to(data.item2.toTime),
|
||||||
style: TextStyle(color: Colors.white)),
|
style: TextStyle(color: Colors.white)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -302,6 +299,73 @@ class PlaySetting extends StatelessWidget {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(10.0),
|
padding: const EdgeInsets.all(10.0),
|
||||||
),
|
),
|
||||||
|
Container(
|
||||||
|
height: 30.0,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 70),
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Text(s.playback,
|
||||||
|
style: Theme.of(context)
|
||||||
|
.textTheme
|
||||||
|
.bodyText1
|
||||||
|
.copyWith(color: Theme.of(context).accentColor)),
|
||||||
|
),
|
||||||
|
ListView(
|
||||||
|
physics: const BouncingScrollPhysics(),
|
||||||
|
shrinkWrap: true,
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
children: <Widget>[
|
||||||
|
ListTile(
|
||||||
|
contentPadding: EdgeInsets.only(
|
||||||
|
left: 80.0, right: 20, bottom: 10, top: 10),
|
||||||
|
title: Text(s.settingsFastForwardSec),
|
||||||
|
subtitle: Text(s.settingsFastForwardSecDes),
|
||||||
|
trailing: Selector<SettingState, int>(
|
||||||
|
selector: (_, settings) =>
|
||||||
|
settings.fastForwardSeconds,
|
||||||
|
builder: (_, data, __) => MyDropdownButton(
|
||||||
|
hint: Text(s.secCount(data)),
|
||||||
|
underline: Center(),
|
||||||
|
elevation: 1,
|
||||||
|
displayItemCount: 5,
|
||||||
|
isDense: true,
|
||||||
|
value: data,
|
||||||
|
onChanged: (int value) =>
|
||||||
|
settings.setFastForwardSeconds = value,
|
||||||
|
items: secondsToSelect
|
||||||
|
.map<DropdownMenuItem<int>>((e) {
|
||||||
|
return DropdownMenuItem<int>(
|
||||||
|
value: e, child: Text(s.secCount(e)));
|
||||||
|
}).toList()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ListTile(
|
||||||
|
contentPadding: EdgeInsets.only(
|
||||||
|
left: 80.0, right: 20, bottom: 10, top: 10),
|
||||||
|
title: Text(s.settingsRewindSec),
|
||||||
|
subtitle: Text(s.settingsRewindSecDes),
|
||||||
|
trailing: Selector<SettingState, int>(
|
||||||
|
selector: (_, settings) => settings.rewindSeconds,
|
||||||
|
builder: (_, data, __) => MyDropdownButton(
|
||||||
|
hint: Text(s.secCount(data)),
|
||||||
|
underline: Center(),
|
||||||
|
elevation: 1,
|
||||||
|
displayItemCount: 5,
|
||||||
|
isDense: true,
|
||||||
|
value: data,
|
||||||
|
onChanged: (int value) =>
|
||||||
|
settings.setRewindSeconds = value,
|
||||||
|
items: secondsToSelect
|
||||||
|
.map<DropdownMenuItem<int>>((e) {
|
||||||
|
return DropdownMenuItem<int>(
|
||||||
|
value: e, child: Text(s.secCount(e)));
|
||||||
|
}).toList()),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Divider(),
|
||||||
|
]),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(10.0),
|
||||||
|
),
|
||||||
Container(
|
Container(
|
||||||
height: 30.0,
|
height: 30.0,
|
||||||
padding: EdgeInsets.symmetric(horizontal: 70),
|
padding: EdgeInsets.symmetric(horizontal: 70),
|
||||||
|
@ -337,6 +401,7 @@ class PlaySetting extends StatelessWidget {
|
||||||
}).toList()),
|
}).toList()),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
Divider(),
|
||||||
Selector<SettingState, bool>(
|
Selector<SettingState, bool>(
|
||||||
selector: (_, settings) => settings.autoSleepTimer,
|
selector: (_, settings) => settings.autoSleepTimer,
|
||||||
builder: (_, data, __) => ListTile(
|
builder: (_, data, __) => ListTile(
|
||||||
|
@ -376,6 +441,7 @@ class PlaySetting extends StatelessWidget {
|
||||||
Divider(height: 2)
|
Divider(height: 2)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
SizedBox(height: 20)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
@ -36,9 +36,9 @@ MediaControl stopControl = MediaControl(
|
||||||
label: 'Stop',
|
label: 'Stop',
|
||||||
action: MediaAction.stop,
|
action: MediaAction.stop,
|
||||||
);
|
);
|
||||||
MediaControl forward30 = MediaControl(
|
MediaControl forward = MediaControl(
|
||||||
androidIcon: 'drawable/ic_stat_forward_30',
|
androidIcon: 'drawable/baseline_fast_forward_white_24',
|
||||||
label: 'forward30',
|
label: 'forward',
|
||||||
action: MediaAction.fastForward,
|
action: MediaAction.fastForward,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -530,6 +530,14 @@ class AudioPlayerNotifier extends ChangeNotifier {
|
||||||
AudioService.seekTo(Duration(milliseconds: pos));
|
AudioService.seekTo(Duration(milliseconds: pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fastForward() async {
|
||||||
|
await AudioService.fastForward();
|
||||||
|
}
|
||||||
|
|
||||||
|
rewind() async {
|
||||||
|
await AudioService.rewind();
|
||||||
|
}
|
||||||
|
|
||||||
seekTo(int position) async {
|
seekTo(int position) async {
|
||||||
if (_audioState != AudioProcessingState.connecting &&
|
if (_audioState != AudioProcessingState.connecting &&
|
||||||
_audioState != AudioProcessingState.none)
|
_audioState != AudioProcessingState.none)
|
||||||
|
@ -848,7 +856,7 @@ class AudioPlayerTask extends BackgroundAudioTask {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onRewind() {
|
void onRewind() {
|
||||||
_seekRelative(rewindInterval);
|
_seekRelative(-rewindInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -930,9 +938,9 @@ class AudioPlayerTask extends BackgroundAudioTask {
|
||||||
|
|
||||||
List<MediaControl> getControls() {
|
List<MediaControl> getControls() {
|
||||||
if (_playing) {
|
if (_playing) {
|
||||||
return [pauseControl, forward30, skipToNextControl, stopControl];
|
return [pauseControl, forward, skipToNextControl, stopControl];
|
||||||
} else {
|
} else {
|
||||||
return [playControl, forward30, skipToNextControl, stopControl];
|
return [playControl, forward, skipToNextControl, stopControl];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,33 +77,29 @@ ThemeData lightTheme = ThemeData(
|
||||||
);
|
);
|
||||||
|
|
||||||
class SettingState extends ChangeNotifier {
|
class SettingState extends ChangeNotifier {
|
||||||
KeyValueStorage themeStorage = KeyValueStorage(themesKey);
|
var themeStorage = KeyValueStorage(themesKey);
|
||||||
KeyValueStorage accentStorage = KeyValueStorage(accentsKey);
|
var accentStorage = KeyValueStorage(accentsKey);
|
||||||
KeyValueStorage autoupdateStorage = KeyValueStorage(autoUpdateKey);
|
var autoupdateStorage = KeyValueStorage(autoUpdateKey);
|
||||||
KeyValueStorage intervalStorage = KeyValueStorage(updateIntervalKey);
|
var intervalStorage = KeyValueStorage(updateIntervalKey);
|
||||||
KeyValueStorage downloadUsingDataStorage =
|
var downloadUsingDataStorage = KeyValueStorage(downloadUsingDataKey);
|
||||||
KeyValueStorage(downloadUsingDataKey);
|
var introStorage = KeyValueStorage(introKey);
|
||||||
KeyValueStorage introStorage = KeyValueStorage(introKey);
|
var realDarkStorage = KeyValueStorage(realDarkKey);
|
||||||
KeyValueStorage realDarkStorage = KeyValueStorage(realDarkKey);
|
var autoPlayStorage = KeyValueStorage(autoPlayKey);
|
||||||
KeyValueStorage autoPlayStorage = KeyValueStorage(autoPlayKey);
|
var defaultSleepTimerStorage = KeyValueStorage(defaultSleepTimerKey);
|
||||||
KeyValueStorage defaultSleepTimerStorage =
|
var autoSleepTimerStorage = KeyValueStorage(autoSleepTimerKey);
|
||||||
KeyValueStorage(defaultSleepTimerKey);
|
var autoSleepTimerModeStorage = KeyValueStorage(autoSleepTimerModeKey);
|
||||||
KeyValueStorage autoSleepTimerStorage = KeyValueStorage(autoSleepTimerKey);
|
var autoSleepTimerStartStorage = KeyValueStorage(autoSleepTimerStartKey);
|
||||||
KeyValueStorage autoSleepTimerModeStorage =
|
var autoSleepTimerEndStorage = KeyValueStorage(autoSleepTimerEndKey);
|
||||||
KeyValueStorage(autoSleepTimerModeKey);
|
var tapToOpenPopupMenuStorage = KeyValueStorage(tapToOpenPopupMenuKey);
|
||||||
KeyValueStorage autoSleepTimerStartStorage =
|
var cacheStorage = KeyValueStorage(cacheMaxKey);
|
||||||
KeyValueStorage(autoSleepTimerStartKey);
|
var podcastLayoutStorage = KeyValueStorage(podcastLayoutKey);
|
||||||
KeyValueStorage autoSleepTimerEndStorage =
|
var favLayoutStorage = KeyValueStorage(favLayoutKey);
|
||||||
KeyValueStorage(autoSleepTimerEndKey);
|
var downloadLayoutStorage = KeyValueStorage(downloadLayoutKey);
|
||||||
KeyValueStorage tapToOpenPopupMenuStorage =
|
var recentLayoutStorage = KeyValueStorage(recentLayoutKey);
|
||||||
KeyValueStorage(tapToOpenPopupMenuKey);
|
var autoDeleteStorage = KeyValueStorage(autoDeleteKey);
|
||||||
KeyValueStorage cacheStorage = KeyValueStorage(cacheMaxKey);
|
var autoDownloadStorage = KeyValueStorage(autoDownloadNetworkKey);
|
||||||
KeyValueStorage podcastLayoutStorage = KeyValueStorage(podcastLayoutKey);
|
var fastForwardSecondsStorage = KeyValueStorage(fastForwardSecondsKey);
|
||||||
KeyValueStorage favLayoutStorage = KeyValueStorage(favLayoutKey);
|
var rewindSecondsStorage = KeyValueStorage(rewindSecondsKey);
|
||||||
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();
|
||||||
|
@ -238,17 +234,35 @@ class SettingState extends ChangeNotifier {
|
||||||
_saveAutoSleepTimerEnd();
|
_saveAutoSleepTimerEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int _fastForwardSeconds;
|
||||||
|
int get fastForwardSeconds => _fastForwardSeconds;
|
||||||
|
set setFastForwardSeconds(int sec) {
|
||||||
|
_fastForwardSeconds = sec;
|
||||||
|
notifyListeners();
|
||||||
|
_saveFastForwardSeconds();
|
||||||
|
}
|
||||||
|
|
||||||
|
int _rewindSeconds;
|
||||||
|
int get rewindSeconds => _rewindSeconds;
|
||||||
|
set setRewindSeconds(int sec) {
|
||||||
|
_rewindSeconds = sec;
|
||||||
|
notifyListeners();
|
||||||
|
_saveRewindSeconds();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void addListener(VoidCallback listener) {
|
void addListener(VoidCallback listener) {
|
||||||
super.addListener(listener);
|
super.addListener(listener);
|
||||||
_getAutoUpdate();
|
_getAutoUpdate();
|
||||||
_getDownloadUsingData();
|
_getDownloadUsingData();
|
||||||
_getSleepTimerData();
|
_getSleepTimerData();
|
||||||
|
_getPlayerSeconds();
|
||||||
_getUpdateInterval().then((value) async {
|
_getUpdateInterval().then((value) async {
|
||||||
if (_initUpdateTag == 0)
|
if (_initUpdateTag == 0)
|
||||||
setWorkManager(24);
|
setWorkManager(24);
|
||||||
//Restart worker if anythin changed in worker callback.
|
|
||||||
//varsion 2 add auto download new episodes
|
/// Restart worker if anythin changed in worker callback.
|
||||||
|
/// varsion 2 add auto download new episodes
|
||||||
else if (_autoUpdate && _initialShowIntor == 1) {
|
else if (_autoUpdate && _initialShowIntor == 1) {
|
||||||
await cancelWork();
|
await cancelWork();
|
||||||
setWorkManager(_initUpdateTag);
|
setWorkManager(_initUpdateTag);
|
||||||
|
@ -314,6 +328,12 @@ class SettingState extends ChangeNotifier {
|
||||||
_autoSleepTimerMode = await autoSleepTimerModeStorage.getInt();
|
_autoSleepTimerMode = await autoSleepTimerModeStorage.getInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future _getPlayerSeconds() async {
|
||||||
|
_rewindSeconds = await rewindSecondsStorage.getInt(defaultValue: 10);
|
||||||
|
_fastForwardSeconds =
|
||||||
|
await fastForwardSecondsStorage.getInt(defaultValue: 30);
|
||||||
|
}
|
||||||
|
|
||||||
Future _saveAccentSetColor() async {
|
Future _saveAccentSetColor() async {
|
||||||
await accentStorage
|
await accentStorage
|
||||||
.saveString(_accentSetColor.toString().substring(10, 16));
|
.saveString(_accentSetColor.toString().substring(10, 16));
|
||||||
|
@ -363,6 +383,14 @@ class SettingState extends ChangeNotifier {
|
||||||
await autoSleepTimerEndStorage.saveInt(_autoSleepTimerEnd);
|
await autoSleepTimerEndStorage.saveInt(_autoSleepTimerEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future _saveFastForwardSeconds() async {
|
||||||
|
await fastForwardSecondsStorage.saveInt(_fastForwardSeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future _saveRewindSeconds() async {
|
||||||
|
await rewindSecondsStorage.saveInt(_rewindSeconds);
|
||||||
|
}
|
||||||
|
|
||||||
Future<SettingsBackup> backup() async {
|
Future<SettingsBackup> backup() async {
|
||||||
int theme = await themeStorage.getInt();
|
int theme = await themeStorage.getInt();
|
||||||
String accentColor = await accentStorage.getString();
|
String accentColor = await accentStorage.getString();
|
||||||
|
@ -392,6 +420,9 @@ class SettingState extends ChangeNotifier {
|
||||||
int defaultSleepTime = await defaultSleepTimerStorage.getInt();
|
int defaultSleepTime = await defaultSleepTimerStorage.getInt();
|
||||||
bool tapToOpenPopupMenu = await KeyValueStorage(tapToOpenPopupMenuKey)
|
bool tapToOpenPopupMenu = await KeyValueStorage(tapToOpenPopupMenuKey)
|
||||||
.getBool(defaultValue: false);
|
.getBool(defaultValue: false);
|
||||||
|
int fastForwardSeconds =
|
||||||
|
await fastForwardSecondsStorage.getInt(defaultValue: 30);
|
||||||
|
int rewindSeconds = await rewindSecondsStorage.getInt(defaultValue: 10);
|
||||||
|
|
||||||
return SettingsBackup(
|
return SettingsBackup(
|
||||||
theme: theme,
|
theme: theme,
|
||||||
|
@ -414,7 +445,9 @@ class SettingState extends ChangeNotifier {
|
||||||
autoSleepTimerEnd: autoSleepTimerEnd,
|
autoSleepTimerEnd: autoSleepTimerEnd,
|
||||||
autoSleepTimerMode: autoSleepTimerMode,
|
autoSleepTimerMode: autoSleepTimerMode,
|
||||||
defaultSleepTime: defaultSleepTime,
|
defaultSleepTime: defaultSleepTime,
|
||||||
tapToOpenPopupMenu: tapToOpenPopupMenu);
|
tapToOpenPopupMenu: tapToOpenPopupMenu,
|
||||||
|
fastForwardSeconds: fastForwardSeconds,
|
||||||
|
rewindSeconds: rewindSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> restore(SettingsBackup backup) async {
|
Future<void> restore(SettingsBackup backup) async {
|
||||||
|
@ -440,6 +473,8 @@ class SettingState extends ChangeNotifier {
|
||||||
await autoSleepTimerEndStorage.saveInt(backup.autoSleepTimerEnd);
|
await autoSleepTimerEndStorage.saveInt(backup.autoSleepTimerEnd);
|
||||||
await autoSleepTimerModeStorage.saveInt(backup.autoSleepTimerMode);
|
await autoSleepTimerModeStorage.saveInt(backup.autoSleepTimerMode);
|
||||||
await defaultSleepTimerStorage.saveInt(backup.defaultSleepTime);
|
await defaultSleepTimerStorage.saveInt(backup.defaultSleepTime);
|
||||||
|
await fastForwardSecondsStorage.saveInt(backup.fastForwardSeconds);
|
||||||
|
await rewindSecondsStorage.saveInt(backup.rewindSeconds);
|
||||||
await KeyValueStorage(tapToOpenPopupMenuKey)
|
await KeyValueStorage(tapToOpenPopupMenuKey)
|
||||||
.saveBool(backup.tapToOpenPopupMenu);
|
.saveBool(backup.tapToOpenPopupMenu);
|
||||||
await initData();
|
await initData();
|
||||||
|
|
|
@ -20,6 +20,8 @@ class SettingsBackup {
|
||||||
final int defaultSleepTime;
|
final int defaultSleepTime;
|
||||||
final int autoSleepTimerMode;
|
final int autoSleepTimerMode;
|
||||||
final bool tapToOpenPopupMenu;
|
final bool tapToOpenPopupMenu;
|
||||||
|
final int fastForwardSeconds;
|
||||||
|
final int rewindSeconds;
|
||||||
SettingsBackup(
|
SettingsBackup(
|
||||||
{this.theme,
|
{this.theme,
|
||||||
this.accentColor,
|
this.accentColor,
|
||||||
|
@ -41,7 +43,9 @@ class SettingsBackup {
|
||||||
this.autoSleepTimerEnd,
|
this.autoSleepTimerEnd,
|
||||||
this.defaultSleepTime,
|
this.defaultSleepTime,
|
||||||
this.autoSleepTimerMode,
|
this.autoSleepTimerMode,
|
||||||
this.tapToOpenPopupMenu});
|
this.tapToOpenPopupMenu,
|
||||||
|
this.fastForwardSeconds,
|
||||||
|
this.rewindSeconds});
|
||||||
|
|
||||||
Map<String, Object> toJson() {
|
Map<String, Object> toJson() {
|
||||||
return {
|
return {
|
||||||
|
@ -64,7 +68,9 @@ class SettingsBackup {
|
||||||
'autoSleepTimerStart': autoSleepTimerStart,
|
'autoSleepTimerStart': autoSleepTimerStart,
|
||||||
'autoSleepTimerEnd': autoSleepTimerEnd,
|
'autoSleepTimerEnd': autoSleepTimerEnd,
|
||||||
'autoSleepTimerMode': autoSleepTimerMode,
|
'autoSleepTimerMode': autoSleepTimerMode,
|
||||||
'tapToOpenPopupMenu': tapToOpenPopupMenu
|
'tapToOpenPopupMenu': tapToOpenPopupMenu,
|
||||||
|
'fastForwardSeconds': fastForwardSeconds,
|
||||||
|
'rewindSeconds': rewindSeconds
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +96,8 @@ class SettingsBackup {
|
||||||
autoSleepTimerStart: json['autoSleepeTimerStart'] as int,
|
autoSleepTimerStart: json['autoSleepeTimerStart'] as int,
|
||||||
autoSleepTimerEnd: json['autoSleepTimerEnd'] as int,
|
autoSleepTimerEnd: json['autoSleepTimerEnd'] as int,
|
||||||
autoSleepTimerMode: json['autoSleepTimerMode'] as int,
|
autoSleepTimerMode: json['autoSleepTimerMode'] as int,
|
||||||
tapToOpenPopupMenu: json['tapToOpenPopupMenu'] as bool);
|
tapToOpenPopupMenu: json['tapToOpenPopupMenu'] as bool,
|
||||||
|
fastForwardSeconds: json['fastForwardSeconds'] as int,
|
||||||
|
rewindSeconds: json['rewindSeconds'] as int);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|