Seperate webfeed plugin from app.

This commit is contained in:
stonegate 2020-07-26 21:48:30 +08:00
parent 54120848bb
commit 691c25fd6b
66 changed files with 377 additions and 2151 deletions

1
.gitignore vendored
View File

@ -32,6 +32,7 @@
/build/
pubspec.lock
.vscode
analysis_options.yaml
# Web related
lib/generated_plugin_registrant.dart

View File

@ -42,8 +42,9 @@ MessageLookupByLibrary _findExact(String localeName) {
/// User programs should call this before using [localeName] for messages.
Future<bool> initializeMessages(String localeName) async {
var availableLocale = Intl.verifiedLocale(
localeName, (locale) => _deferredLibraries[locale] != null,
onFailure: (_) => null);
localeName,
(locale) => _deferredLibraries[locale] != null,
onFailure: (_) => null);
if (availableLocale == null) {
return new Future.value(false);
}
@ -57,15 +58,14 @@ Future<bool> initializeMessages(String localeName) async {
bool _messagesExistFor(String locale) {
try {
return _findExact(locale) != null;
// ignore: avoid_catches_without_on_clauses
} catch (e) {
return false;
}
}
MessageLookupByLibrary _findGeneratedMessagesFor(String locale) {
var actualLocale =
Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null);
var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor,
onFailure: (_) => null);
if (actualLocale == null) return null;
return _findExact(actualLocale);
}

View File

@ -71,7 +71,7 @@ class MessageLookup extends MessageLookupByLibrary {
static m25(time) => "${time} Restant";
static m26(time) => "Jusqu\'à ${time}";
static m26(time) => "à ${time}";
static m27(count) => "${Intl.plural(count, zero: 'Aucune mise à jour.', one: 'Mise à jour d\'${count} épisode.', other: 'Mise à jour de ${count} épisodes.')}";
@ -85,12 +85,12 @@ class MessageLookup extends MessageLookupByLibrary {
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Ajouter de nouveaux épisodes à la playlist."),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("Ajouter des groupes"),
"all" : MessageLookupByLibrary.simpleMessage("Tout"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("Téléchargements auto"),
"back" : MessageLookupByLibrary.simpleMessage("Retour"),
"buffering" : MessageLookupByLibrary.simpleMessage("Buffering"),
"cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("Cellular data warn"),
"cellularConfirmDes" : MessageLookupByLibrary.simpleMessage("Are you sure you want to use cellular data to download?"),
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("Avertissement utilisation des données mobiles"),
"cellularConfirmDes" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr d\'autoriser l\'utilisation des données mobiles ?"),
"changeLayout" : MessageLookupByLibrary.simpleMessage("Modifier l\'interface"),
"changelog" : MessageLookupByLibrary.simpleMessage("Historique des modifications"),
"chooseA" : MessageLookupByLibrary.simpleMessage("Choisir un"),
@ -104,8 +104,8 @@ class MessageLookup extends MessageLookupByLibrary {
"developer" : MessageLookupByLibrary.simpleMessage("Développeur"),
"dismiss" : MessageLookupByLibrary.simpleMessage("Rejeter"),
"done" : MessageLookupByLibrary.simpleMessage("Fait"),
"download" : MessageLookupByLibrary.simpleMessage("Télécharger"),
"downloaded" : MessageLookupByLibrary.simpleMessage("Téléchargé"),
"download" : MessageLookupByLibrary.simpleMessage("Téléchargés"),
"downloaded" : MessageLookupByLibrary.simpleMessage("Téléchargés"),
"editGroupName" : MessageLookupByLibrary.simpleMessage("Modifier le nom du groupe"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin de l\'épisode"),
"episode" : m4,
@ -127,11 +127,11 @@ class MessageLookup extends MessageLookupByLibrary {
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un défilement vertical pour changer de groupe."),
"featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("Appuyez pour chercher un podcast"),
"featureDiscoverySearchDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast."),
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("Me contacter"),
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("Soumettre un problème"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Noter sur le PlayStore"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Joindre le groupe"),
"filter" : MessageLookupByLibrary.simpleMessage("Filter"),
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("Contact"),
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("GitHub"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("PlayStore"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Telegram"),
"filter" : MessageLookupByLibrary.simpleMessage("Filtrer"),
"fonts" : MessageLookupByLibrary.simpleMessage("Polices"),
"from" : m5,
"goodNight" : MessageLookupByLibrary.simpleMessage("Bonne nuit"),
@ -143,7 +143,7 @@ class MessageLookup extends MessageLookupByLibrary {
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Classé par"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favoris"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Récent"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Récents"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("À propos"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Importer le fichier OPML"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Tout actualiser"),
@ -162,7 +162,7 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("Écoutés"),
"listened" : MessageLookupByLibrary.simpleMessage("Écouté "),
"loadMore" : MessageLookupByLibrary.simpleMessage("Voir plus"),
"mark" : MessageLookupByLibrary.simpleMessage("Marqué"),
"mark" : MessageLookupByLibrary.simpleMessage(""),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Marquage effectué"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Marquer tous les épisodes comme lus ?"),
"markListened" : MessageLookupByLibrary.simpleMessage("Marquer comme lu"),
@ -175,7 +175,7 @@ class MessageLookup extends MessageLookupByLibrary {
"minsCount" : m11,
"network" : MessageLookupByLibrary.simpleMessage("Réseau"),
"newGroup" : MessageLookupByLibrary.simpleMessage("Créer un nouveau groupe"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Le plus récent en premier."),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Le plus récent en premier"),
"next" : MessageLookupByLibrary.simpleMessage("Suivant"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("Aucun épisode n\'a encore été téléchargé"),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("Aucun épisode ajouté"),
@ -189,9 +189,9 @@ class MessageLookup extends MessageLookupByLibrary {
"notificationSuccess" : m16,
"notificationUpdate" : m17,
"notificationUpdateError" : m18,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier."),
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier"),
"play" : MessageLookupByLibrary.simpleMessage("Lecture"),
"playback" : MessageLookupByLibrary.simpleMessage("Playback control"),
"playback" : MessageLookupByLibrary.simpleMessage("Commandes du lecteur"),
"playing" : MessageLookupByLibrary.simpleMessage("En cours"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : m19,
@ -201,22 +201,22 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode aux favoris"),
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marquer l\'épisode comme lu"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Jouer l\'épisode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Politique relative aux données personnelles."),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Politique relative aux données personnelles"),
"published" : m20,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Published daily"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Published monthly"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Published weekly"),
"publishedYearly" : MessageLookupByLibrary.simpleMessage("Published yearly"),
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Quotidien"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Mensuel"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Hebdomadaire"),
"publishedYearly" : MessageLookupByLibrary.simpleMessage("Annuel"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Restaurer l\'abonnement"),
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("Update artwork"),
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("Mettre à jour la vignette"),
"remove" : MessageLookupByLibrary.simpleMessage("Supprimer"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Confirmer la suppression"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir vous désabonner ?"),
"removedAt" : m21,
"save" : MessageLookupByLibrary.simpleMessage("Sauvegarder"),
"schedule" : MessageLookupByLibrary.simpleMessage("Programmation"),
"search" : MessageLookupByLibrary.simpleMessage("Search"),
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Search episode"),
"search" : MessageLookupByLibrary.simpleMessage("Rechercher"),
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Rechercher un épisode"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Lien RSS invalide"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Chercher un podcast"),
"secCount" : m22,
@ -224,75 +224,75 @@ class MessageLookup extends MessageLookupByLibrary {
"settingStorage" : MessageLookupByLibrary.simpleMessage("Espace de stockage"),
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Inclure la couleur de superposition"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Sélection de la couleur du thème"),
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("App intro"),
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("Apparence"),
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("Couleurs et thèmes"),
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("Cache audio"),
"settingsAudioCacheDes" : MessageLookupByLibrary.simpleMessage("Taille maximum du cache audio"),
"settingsAutoDelete" : MessageLookupByLibrary.simpleMessage("Supprimer automatiquement les téléchargement après"),
"settingsAutoDelete" : MessageLookupByLibrary.simpleMessage("Suppression des fichiers "),
"settingsAutoDeleteDes" : MessageLookupByLibrary.simpleMessage("30 jours par défaut"),
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer automatiquement l\'épisode suivant"),
"settingsBackup" : MessageLookupByLibrary.simpleMessage("Backup"),
"settingsBackupDes" : MessageLookupByLibrary.simpleMessage("Sauvegarder les données de l\'application"),
"settingsBackupDes" : MessageLookupByLibrary.simpleMessage("Sauvegarde des données de l\'application"),
"settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("Vue par défaut"),
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("Onglet téléchargement"),
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("Onglet favoris"),
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("Onglet Téléchargés"),
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("Onglet Favoris"),
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("Page du podcast"),
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("Onglet récents"),
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("Onglet Récents"),
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("Revoir le tutoriel"),
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"),
"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"),
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Fast forward seconds"),
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Change the fast forward seconds in player"),
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualiser 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."),
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Avance rapide"),
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Vitesse de l\'avance rapide en secondes"),
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bugs et demande d\'ajout de fonction"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bug et demande d\'ajout de fonction"),
"settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"),
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Données d\'écoutes"),
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Gestion des données"),
"settingsInfo" : MessageLookupByLibrary.simpleMessage("Infos"),
"settingsInterface" : MessageLookupByLibrary.simpleMessage("Interface"),
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("Langues"),
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("Changer la langue"),
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("Sélection de la langue"),
"settingsLayout" : MessageLookupByLibrary.simpleMessage("Style"),
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("Style de l\'application"),
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("Librairies"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("Les librairies open source utilisées"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("Librairies opensource utilisées"),
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("Gérer les téléchargements"),
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("Gérer les fichiers audio téléchargés"),
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("Jouer automatiquement le suivant."),
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("Demander avant l\'utilisation du réseau mobile"),
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique sur réseau mobile."),
"settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez utiliser le téléchargement automatique du podcast sur la page de gestion des groupes."),
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("Si connecté à un réseau mobile, demander une confirmation avant le téléchargement."),
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("Lecture automatique"),
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("Utilisation du réseau mobile"),
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique sur réseau mobile"),
"settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("Vous pouvez automatiser le téléchargement des podcasts sur la page de gestion des groupes."),
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("Si connecté à un réseau mobile, demander une confirmation avant de télécharger."),
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("Playlist et lecteur"),
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("Menu popup des épisodes"),
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Modifier le menu popup de l\'épisode"),
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Configuration du menu popup"),
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Préférences"),
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"),
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activez pour un mode sombre accentué"),
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Rewind seconds"),
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Change the rewind seconds in player"),
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activer pour un mode sombre accentué"),
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Retour rapide"),
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Vitesse du retour rapide en secondes"),
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"),
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"),
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Temps par défaut"),
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("Temps par défaut de la minuterie"),
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("Configuration de la minuterie"),
"settingsSTMode" : MessageLookupByLibrary.simpleMessage("Mode minuterie automatique"),
"settingsStorageDes" : MessageLookupByLibrary.simpleMessage("Gérer le cache et l\'espace de stockage"),
"settingsStorageDes" : MessageLookupByLibrary.simpleMessage("Gestion du cache et de l\'espace de stockage"),
"settingsSyncing" : MessageLookupByLibrary.simpleMessage("Synchronisation"),
"settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualiser les podcasts en arrière-plan"),
"settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualisation des podcasts en arrière-plan"),
"settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("Appuyer pour ouvrir le menu"),
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Vous devez effectuer un appui long pour ouvrir la page de l\'épisode"),
"settingsTheme" : MessageLookupByLibrary.simpleMessage("Thème"),
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Intervalle de mise à jour"),
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Intervalle des mises à jour"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("24 heures par défaut"),
"share" : MessageLookupByLibrary.simpleMessage("Partager"),
"size" : MessageLookupByLibrary.simpleMessage("Taille"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Passer les premières secondes du début"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Minuterie"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Abonnements"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("Valeur du système par défaut"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts."),
"systemDefault" : MessageLookupByLibrary.simpleMessage("Système par défaut"),
"timeLastPlayed" : m24,
"timeLeft" : m25,
"to" : m26,
@ -310,7 +310,7 @@ class MessageLookup extends MessageLookupByLibrary {
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("Paramètres sauvegardés"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("Heure de fin"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("Heure de démarrage"),
"translators" : MessageLookupByLibrary.simpleMessage("Translators"),
"translators" : MessageLookupByLibrary.simpleMessage("Traducteurs"),
"understood" : MessageLookupByLibrary.simpleMessage("Compris"),
"undo" : MessageLookupByLibrary.simpleMessage("ANNULER"),
"unlike" : MessageLookupByLibrary.simpleMessage("Dislike"),

View File

@ -19,11 +19,9 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup extends MessageLookupByLibrary {
String get localeName => 'zh_Hans';
static m0(groupName, count) =>
"{count, plural, zero{} other{{group Name}分组${count}集节目添加到播放列表}}";
static m0(groupName, count) => "{count, plural, zero{} other{{group Name}分组${count}集节目添加到播放列表}}";
static m1(count) =>
"${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}";
static m1(count) => "${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}";
static m2(count) => "${Intl.plural(count, zero: '今天', other: '${count}天前')}";
@ -39,14 +37,11 @@ class MessageLookup extends MessageLookupByLibrary {
static m8(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}小时前')}";
static m9(count) =>
"${Intl.plural(count, zero: '0小时', other: '${count} 小时')}";
static m9(count) => "${Intl.plural(count, zero: '0小时', other: '${count} 小时')}";
static m10(count) =>
"${Intl.plural(count, zero: '刚刚', other: '${count}分钟前')}";
static m10(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}分钟前')}";
static m11(count) =>
"${Intl.plural(count, zero: '0分钟', other: '${count}分钟')}";
static m11(count) => "${Intl.plural(count, zero: '0分钟', other: '${count}分钟')}";
static m12(title) => "获取数据 ${title}";
@ -68,8 +63,7 @@ class MessageLookup extends MessageLookupByLibrary {
static m21(date) => "${date}移除";
static m22(count) =>
"${Intl.plural(count, zero: '0 秒', other: '${count} 秒')}";
static m22(count) => "${Intl.plural(count, zero: '0 秒', other: '${count} 秒')}";
static m23(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}秒前')}";
@ -79,301 +73,251 @@ class MessageLookup extends MessageLookupByLibrary {
static m26(time) => "${time}";
static m27(count) =>
"${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
static m27(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
static m28(version) => "版本:${version}";
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function>{
"add": MessageLookupByLibrary.simpleMessage("订阅"),
"addEpisodeGroup": m0,
"addNewEpisodeAll": m1,
"addNewEpisodeTooltip":
MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
"addSomeGroups": MessageLookupByLibrary.simpleMessage("请添加分组"),
"all": MessageLookupByLibrary.simpleMessage("全部"),
"autoDownload": MessageLookupByLibrary.simpleMessage("自动下载"),
"back": MessageLookupByLibrary.simpleMessage("返回"),
"buffering": MessageLookupByLibrary.simpleMessage("缓冲"),
"cancel": MessageLookupByLibrary.simpleMessage("取消"),
"cellularConfirm": MessageLookupByLibrary.simpleMessage("流量确认"),
"cellularConfirmDes":
MessageLookupByLibrary.simpleMessage("您确定使用流量下载吗"),
"changeLayout": MessageLookupByLibrary.simpleMessage("修改布局"),
"changelog": MessageLookupByLibrary.simpleMessage("更新日志"),
"chooseA": MessageLookupByLibrary.simpleMessage("选择"),
"clear": MessageLookupByLibrary.simpleMessage("清除"),
"color": MessageLookupByLibrary.simpleMessage("颜色"),
"confirm": MessageLookupByLibrary.simpleMessage("确认"),
"darkMode": MessageLookupByLibrary.simpleMessage("夜晚模式"),
"daysAgo": m2,
"daysCount": m3,
"delete": MessageLookupByLibrary.simpleMessage("删除"),
"developer": MessageLookupByLibrary.simpleMessage("关于我"),
"dismiss": MessageLookupByLibrary.simpleMessage("忽略"),
"done": MessageLookupByLibrary.simpleMessage("完成"),
"download": MessageLookupByLibrary.simpleMessage("下载"),
"downloaded": MessageLookupByLibrary.simpleMessage("已下载"),
"editGroupName": MessageLookupByLibrary.simpleMessage("修改组名"),
"endOfEpisode": MessageLookupByLibrary.simpleMessage("节目结束"),
"episode": m4,
"featureDiscoveryEditGroup":
MessageLookupByLibrary.simpleMessage("点击修改分组"),
"featureDiscoveryEditGroupDes": MessageLookupByLibrary.simpleMessage(
"您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
"featureDiscoveryEpisode": MessageLookupByLibrary.simpleMessage("节目界面"),
"featureDiscoveryEpisodeDes":
MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
"featureDiscoveryEpisodeTitle":
MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
"featureDiscoveryGroup": MessageLookupByLibrary.simpleMessage("点击添加分组"),
"featureDiscoveryGroupDes": MessageLookupByLibrary.simpleMessage(
"新订阅播客默认分组为 Home您可以添加新的分组移动播客到新的分组每个播客可以被添加到多个分组。"),
"featureDiscoveryGroupPodcast":
MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
"featureDiscoveryGroupPodcastDes":
MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
"featureDiscoveryOMPL":
MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
"featureDiscoveryOMPLDes": MessageLookupByLibrary.simpleMessage(
"在这里您可以导入OMPL文件打开设置页面或者刷新所有播客。"),
"featureDiscoveryPlaylist":
MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
"featureDiscoveryPlaylistDes": MessageLookupByLibrary.simpleMessage(
"您可以添加节目到播放列表,节目在播放后将会从播放列表自动移除。"),
"featureDiscoveryPodcast": MessageLookupByLibrary.simpleMessage("播客界面"),
"featureDiscoveryPodcastDes":
MessageLookupByLibrary.simpleMessage("您可以点击“查看所有”新增或管理分组。"),
"featureDiscoveryPodcastTitle":
MessageLookupByLibrary.simpleMessage("您可以通过上下滑动切换分组"),
"featureDiscoverySearch":
MessageLookupByLibrary.simpleMessage("点击搜索播客"),
"featureDiscoverySearchDes":
MessageLookupByLibrary.simpleMessage("您可以通过搜索播客名称、关键字或者RSS链接订阅播客。"),
"feedbackEmail": MessageLookupByLibrary.simpleMessage("发送邮件"),
"feedbackGithub": MessageLookupByLibrary.simpleMessage("提交Issue"),
"feedbackPlay": MessageLookupByLibrary.simpleMessage("Play评价"),
"feedbackTelegram": MessageLookupByLibrary.simpleMessage("加入小组"),
"filter": MessageLookupByLibrary.simpleMessage("过滤"),
"fonts": MessageLookupByLibrary.simpleMessage("字体"),
"from": m5,
"goodNight": MessageLookupByLibrary.simpleMessage("晚安"),
"groupExisted": MessageLookupByLibrary.simpleMessage("组名已使用"),
"groupFilter": MessageLookupByLibrary.simpleMessage("分组"),
"groupRemoveConfirm":
MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
"groups": m6,
"homeGroupsSeeAll": MessageLookupByLibrary.simpleMessage("查看全部"),
"homeMenuPlaylist": MessageLookupByLibrary.simpleMessage("播放列表"),
"homeSubMenuSortBy": MessageLookupByLibrary.simpleMessage("排序"),
"homeTabMenuFavotite": MessageLookupByLibrary.simpleMessage("收藏"),
"homeTabMenuRecent": MessageLookupByLibrary.simpleMessage("最近更新"),
"homeToprightMenuAbout": MessageLookupByLibrary.simpleMessage("关于"),
"homeToprightMenuImportOMPL":
MessageLookupByLibrary.simpleMessage("导入OMPL"),
"homeToprightMenuRefreshAll":
MessageLookupByLibrary.simpleMessage("全部刷新"),
"hostedOn": m7,
"hoursAgo": m8,
"hoursCount": m9,
"import": MessageLookupByLibrary.simpleMessage("导入"),
"introFourthPage":
MessageLookupByLibrary.simpleMessage("您可以长按节目打开快捷菜单。"),
"introSecondPage":
MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客也可以直接导入OMPL文件。"),
"introThirdPage":
MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
"later": MessageLookupByLibrary.simpleMessage("稍后"),
"lightMode": MessageLookupByLibrary.simpleMessage("明亮模式"),
"like": MessageLookupByLibrary.simpleMessage("喜欢"),
"likeDate": MessageLookupByLibrary.simpleMessage("收藏日期"),
"liked": MessageLookupByLibrary.simpleMessage("已收藏"),
"listen": MessageLookupByLibrary.simpleMessage("收听"),
"listened": MessageLookupByLibrary.simpleMessage("已收听"),
"loadMore": MessageLookupByLibrary.simpleMessage("加载更多"),
"mark": MessageLookupByLibrary.simpleMessage("标记"),
"markConfirm": MessageLookupByLibrary.simpleMessage("确认标记"),
"markConfirmContent":
MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
"markListened": MessageLookupByLibrary.simpleMessage("标记已收听"),
"menu": MessageLookupByLibrary.simpleMessage("菜单"),
"menuAllPodcasts": MessageLookupByLibrary.simpleMessage("所有订阅"),
"menuMarkAllListened": MessageLookupByLibrary.simpleMessage("标记所有已收听"),
"menuViewRSS": MessageLookupByLibrary.simpleMessage("查看 RSS"),
"menuVisitSite": MessageLookupByLibrary.simpleMessage("访问网站"),
"minsAgo": m10,
"minsCount": m11,
"network": MessageLookupByLibrary.simpleMessage("网络"),
"newGroup": MessageLookupByLibrary.simpleMessage("创建分组"),
"newestFirst": MessageLookupByLibrary.simpleMessage("由新到旧"),
"next": MessageLookupByLibrary.simpleMessage("下一步"),
"noEpisodeDownload": MessageLookupByLibrary.simpleMessage("暂无下载节目"),
"noEpisodeFavorite": MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
"noEpisodeRecent": MessageLookupByLibrary.simpleMessage("暂无节目"),
"noPodcastGroup": MessageLookupByLibrary.simpleMessage("分组无播客"),
"noShownote": MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"),
"notificaitonFatch": m12,
"notificationNetworkError": m13,
"notificationSubscribe": m14,
"notificationSubscribeExisted": m15,
"notificationSuccess": m16,
"notificationUpdate": m17,
"notificationUpdateError": m18,
"oldestFirst": MessageLookupByLibrary.simpleMessage("由旧到新"),
"play": MessageLookupByLibrary.simpleMessage("播放"),
"playback": MessageLookupByLibrary.simpleMessage("播放控制"),
"playing": MessageLookupByLibrary.simpleMessage("正在播放"),
"plugins": MessageLookupByLibrary.simpleMessage("插件"),
"podcast": m19,
"podcastSubscribed": MessageLookupByLibrary.simpleMessage("播客已订阅"),
"popupMenuDownloadDes": MessageLookupByLibrary.simpleMessage("下载节目"),
"popupMenuLaterDes": MessageLookupByLibrary.simpleMessage("添加到播放列表"),
"popupMenuLikeDes": MessageLookupByLibrary.simpleMessage("添加到收藏"),
"popupMenuMarkDes": MessageLookupByLibrary.simpleMessage("设置为已收听"),
"popupMenuPlayDes": MessageLookupByLibrary.simpleMessage("播放节目"),
"privacyPolicy": MessageLookupByLibrary.simpleMessage("隐私条款"),
"published": m20,
"publishedDaily": MessageLookupByLibrary.simpleMessage("每日更新"),
"publishedMonthly": MessageLookupByLibrary.simpleMessage("每月更新"),
"publishedWeekly": MessageLookupByLibrary.simpleMessage("每周更新"),
"publishedYearly": MessageLookupByLibrary.simpleMessage("每年更新"),
"recoverSubscribe": MessageLookupByLibrary.simpleMessage("恢复订阅"),
"refreshArtwork": MessageLookupByLibrary.simpleMessage("更新头像"),
"remove": MessageLookupByLibrary.simpleMessage("移除"),
"removeConfirm": MessageLookupByLibrary.simpleMessage("取消订阅"),
"removePodcastDes": MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
"removedAt": m21,
"save": MessageLookupByLibrary.simpleMessage("保存"),
"schedule": MessageLookupByLibrary.simpleMessage("定时"),
"search": MessageLookupByLibrary.simpleMessage("搜索"),
"searchEpisode": MessageLookupByLibrary.simpleMessage("搜索节目"),
"searchInvalidRss": MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
"searchPodcast": MessageLookupByLibrary.simpleMessage("搜索播客"),
"secCount": m22,
"secondsAgo": m23,
"settingStorage": MessageLookupByLibrary.simpleMessage("储存空间"),
"settings": MessageLookupByLibrary.simpleMessage("设置"),
"settingsAccentColor": MessageLookupByLibrary.simpleMessage("次要颜色"),
"settingsAccentColorDes":
MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
"settingsAppIntro": MessageLookupByLibrary.simpleMessage("引导页"),
"settingsAppearance": MessageLookupByLibrary.simpleMessage("界面"),
"settingsAppearanceDes": MessageLookupByLibrary.simpleMessage("颜色与主题"),
"settingsAudioCache": MessageLookupByLibrary.simpleMessage("播放缓存"),
"settingsAudioCacheDes": MessageLookupByLibrary.simpleMessage("播放缓存设置"),
"settingsAutoDelete": MessageLookupByLibrary.simpleMessage("自动删除下载节目"),
"settingsAutoDeleteDes":
MessageLookupByLibrary.simpleMessage("默认 30 天"),
"settingsAutoPlayDes": MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
"settingsBackup": MessageLookupByLibrary.simpleMessage("备份"),
"settingsBackupDes": MessageLookupByLibrary.simpleMessage("备份应用数据"),
"settingsDefaultGrid": MessageLookupByLibrary.simpleMessage("默认布局"),
"settingsDefaultGridDownload":
MessageLookupByLibrary.simpleMessage("下载页"),
"settingsDefaultGridFavorite":
MessageLookupByLibrary.simpleMessage("收藏页"),
"settingsDefaultGridPodcast":
MessageLookupByLibrary.simpleMessage("播客页"),
"settingsDefaultGridRecent":
MessageLookupByLibrary.simpleMessage("最近页"),
"settingsDiscovery": MessageLookupByLibrary.simpleMessage("再次功能介绍"),
"settingsEnableSyncing": MessageLookupByLibrary.simpleMessage("开启自动更新"),
"settingsEnableSyncingDes":
MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
"settingsExportDes": MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
"settingsFastForwardSec": MessageLookupByLibrary.simpleMessage("快进时间"),
"settingsFastForwardSecDes":
MessageLookupByLibrary.simpleMessage("修改播放器快进时间"),
"settingsFeedback": MessageLookupByLibrary.simpleMessage("反馈"),
"settingsFeedbackDes": MessageLookupByLibrary.simpleMessage("意见与建议"),
"settingsHistory": MessageLookupByLibrary.simpleMessage("历史记录"),
"settingsHistoryDes": MessageLookupByLibrary.simpleMessage("收听记录"),
"settingsInfo": MessageLookupByLibrary.simpleMessage("信息"),
"settingsInterface": MessageLookupByLibrary.simpleMessage("界面"),
"settingsLanguages": MessageLookupByLibrary.simpleMessage("语言"),
"settingsLanguagesDes": MessageLookupByLibrary.simpleMessage("设置语言"),
"settingsLayout": MessageLookupByLibrary.simpleMessage("布局"),
"settingsLayoutDes": MessageLookupByLibrary.simpleMessage("应用布局"),
"settingsLibraries": MessageLookupByLibrary.simpleMessage("开源"),
"settingsLibrariesDes": MessageLookupByLibrary.simpleMessage("开源项目使用"),
"settingsManageDownload": MessageLookupByLibrary.simpleMessage("下载管理"),
"settingsManageDownloadDes":
MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
"settingsMenuAutoPlay":
MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
"settingsNetworkCellular":
MessageLookupByLibrary.simpleMessage("蜂窝数据确认"),
"settingsNetworkCellularAuto":
MessageLookupByLibrary.simpleMessage("是否用蜂窝数据自动下载"),
"settingsNetworkCellularAutoDes":
MessageLookupByLibrary.simpleMessage("你可以在分组管理页面设置自动下载"),
"settingsNetworkCellularDes":
MessageLookupByLibrary.simpleMessage("在使用蜂窝数据下载前确认"),
"settingsPlayDes": MessageLookupByLibrary.simpleMessage("播放列表和播放器"),
"settingsPopupMenu": MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
"settingsPopupMenuDes":
MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
"settingsPrefrence": MessageLookupByLibrary.simpleMessage("首选项"),
"settingsRealDark": MessageLookupByLibrary.simpleMessage("极黑"),
"settingsRealDarkDes":
MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
"settingsRewindSec": MessageLookupByLibrary.simpleMessage("快退时间"),
"settingsRewindSecDes":
MessageLookupByLibrary.simpleMessage("修改播放器快退时间"),
"settingsSTAuto": MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
"settingsSTAutoDes": MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
"settingsSTDefaultTime": MessageLookupByLibrary.simpleMessage("默认时长"),
"settingsSTDefautTimeDes":
MessageLookupByLibrary.simpleMessage("睡眠模式默认时长"),
"settingsSTMode": MessageLookupByLibrary.simpleMessage("自动睡眠模式默认时长"),
"settingsStorageDes": MessageLookupByLibrary.simpleMessage("管理缓存和下载空间"),
"settingsSyncing": MessageLookupByLibrary.simpleMessage("同步"),
"settingsSyncingDes": MessageLookupByLibrary.simpleMessage("在后台更新播客"),
"settingsTapToOpenPopupMenu":
MessageLookupByLibrary.simpleMessage("轻点打开弹出菜单"),
"settingsTapToOpenPopupMenuDes":
MessageLookupByLibrary.simpleMessage("开启后您需长按打开节目页"),
"settingsTheme": MessageLookupByLibrary.simpleMessage("主题"),
"settingsUpdateInterval": MessageLookupByLibrary.simpleMessage("更新频率"),
"settingsUpdateIntervalDes":
MessageLookupByLibrary.simpleMessage("默认 24 小时"),
"share": MessageLookupByLibrary.simpleMessage("分享"),
"size": MessageLookupByLibrary.simpleMessage("大小"),
"skipSecondsAtStart": MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
"sleepTimer": MessageLookupByLibrary.simpleMessage("睡眠模式"),
"subscribe": MessageLookupByLibrary.simpleMessage("订阅"),
"subscribeExportDes":
MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
"systemDefault": MessageLookupByLibrary.simpleMessage("系统默认"),
"timeLastPlayed": m24,
"timeLeft": m25,
"to": m26,
"toastAddPlaylist": MessageLookupByLibrary.simpleMessage("添加到播放列表"),
"toastDiscovery": MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
"toastFileError": MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
"toastFileNotValid": MessageLookupByLibrary.simpleMessage("文件错误"),
"toastHomeGroupNotSupport":
MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"),
"toastImportSettingsSuccess":
MessageLookupByLibrary.simpleMessage("导入设置成功"),
"toastOneGroup": MessageLookupByLibrary.simpleMessage("请至少选择一个分组"),
"toastPodcastRecovering":
MessageLookupByLibrary.simpleMessage("恢复中,请稍后"),
"toastReadFile": MessageLookupByLibrary.simpleMessage("读取文件成功"),
"toastRecoverFailed": MessageLookupByLibrary.simpleMessage("恢复订阅失败"),
"toastRemovePlaylist": MessageLookupByLibrary.simpleMessage("从播放列表移除"),
"toastSettingSaved": MessageLookupByLibrary.simpleMessage("设置已保存"),
"toastTimeEqualEnd": MessageLookupByLibrary.simpleMessage("与结束时刻相同"),
"toastTimeEqualStart": MessageLookupByLibrary.simpleMessage("与起始时刻相同"),
"translators": MessageLookupByLibrary.simpleMessage("翻译者"),
"understood": MessageLookupByLibrary.simpleMessage("了解"),
"undo": MessageLookupByLibrary.simpleMessage("撤销"),
"unlike": MessageLookupByLibrary.simpleMessage("取消喜欢"),
"unliked": MessageLookupByLibrary.simpleMessage("从收藏移除"),
"updateDate": MessageLookupByLibrary.simpleMessage("更新日期"),
"updateEpisodesCount": m27,
"updateFailed": MessageLookupByLibrary.simpleMessage("更新失败"),
"version": m28
};
static _notInlinedMessages(_) => <String, Function> {
"add" : MessageLookupByLibrary.simpleMessage("订阅"),
"addEpisodeGroup" : m0,
"addNewEpisodeAll" : m1,
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("请添加分组"),
"all" : MessageLookupByLibrary.simpleMessage("全部"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("自动下载"),
"back" : MessageLookupByLibrary.simpleMessage("返回"),
"buffering" : MessageLookupByLibrary.simpleMessage("缓冲"),
"cancel" : MessageLookupByLibrary.simpleMessage("取消"),
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("流量确认"),
"cellularConfirmDes" : MessageLookupByLibrary.simpleMessage("您确定使用流量下载吗"),
"changeLayout" : MessageLookupByLibrary.simpleMessage("修改布局"),
"changelog" : MessageLookupByLibrary.simpleMessage("更新日志"),
"chooseA" : MessageLookupByLibrary.simpleMessage("选择"),
"clear" : MessageLookupByLibrary.simpleMessage("清除"),
"color" : MessageLookupByLibrary.simpleMessage("颜色"),
"confirm" : MessageLookupByLibrary.simpleMessage("确认"),
"darkMode" : MessageLookupByLibrary.simpleMessage("夜晚模式"),
"daysAgo" : m2,
"daysCount" : m3,
"delete" : MessageLookupByLibrary.simpleMessage("删除"),
"developer" : MessageLookupByLibrary.simpleMessage("关于我"),
"dismiss" : MessageLookupByLibrary.simpleMessage("忽略"),
"done" : MessageLookupByLibrary.simpleMessage("完成"),
"download" : MessageLookupByLibrary.simpleMessage("下载"),
"downloaded" : MessageLookupByLibrary.simpleMessage("已下载"),
"editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"),
"episode" : m4,
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"),
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("点击添加分组"),
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("新订阅播客默认分组为 Home您可以添加新的分组移动播客到新的分组每个播客可以被添加到多个分组。"),
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("在这里您可以导入OMPL文件打开设置页面或者刷新所有播客。"),
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
"featureDiscoveryPlaylistDes" : MessageLookupByLibrary.simpleMessage("您可以添加节目到播放列表,节目在播放后将会从播放列表自动移除。"),
"featureDiscoveryPodcast" : MessageLookupByLibrary.simpleMessage("播客界面"),
"featureDiscoveryPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击“查看所有”新增或管理分组。"),
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("您可以通过上下滑动切换分组"),
"featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("点击搜索播客"),
"featureDiscoverySearchDes" : MessageLookupByLibrary.simpleMessage("您可以通过搜索播客名称、关键字或者RSS链接订阅播客。"),
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("发送邮件"),
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("提交Issue"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Play评价"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("加入小组"),
"filter" : MessageLookupByLibrary.simpleMessage("过滤"),
"fonts" : MessageLookupByLibrary.simpleMessage("字体"),
"from" : m5,
"goodNight" : MessageLookupByLibrary.simpleMessage("晚安"),
"groupExisted" : MessageLookupByLibrary.simpleMessage("组名已使用"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("分组"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
"groups" : m6,
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("收藏"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("最近更新"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("关于"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("导入OMPL"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("全部刷新"),
"hostedOn" : m7,
"hoursAgo" : m8,
"hoursCount" : m9,
"import" : MessageLookupByLibrary.simpleMessage("导入"),
"introFourthPage" : MessageLookupByLibrary.simpleMessage("您可以长按节目打开快捷菜单。"),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客也可以直接导入OMPL文件。"),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
"later" : MessageLookupByLibrary.simpleMessage("稍后"),
"lightMode" : MessageLookupByLibrary.simpleMessage("明亮模式"),
"like" : MessageLookupByLibrary.simpleMessage("喜欢"),
"likeDate" : MessageLookupByLibrary.simpleMessage("收藏日期"),
"liked" : MessageLookupByLibrary.simpleMessage("已收藏"),
"listen" : MessageLookupByLibrary.simpleMessage("收听"),
"listened" : MessageLookupByLibrary.simpleMessage("已收听"),
"loadMore" : MessageLookupByLibrary.simpleMessage("加载更多"),
"mark" : MessageLookupByLibrary.simpleMessage("标记"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("确认标记"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
"markListened" : MessageLookupByLibrary.simpleMessage("标记已收听"),
"menu" : MessageLookupByLibrary.simpleMessage("菜单"),
"menuAllPodcasts" : MessageLookupByLibrary.simpleMessage("所有订阅"),
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("标记所有已收听"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("查看 RSS"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("访问网站"),
"minsAgo" : m10,
"minsCount" : m11,
"network" : MessageLookupByLibrary.simpleMessage("网络"),
"newGroup" : MessageLookupByLibrary.simpleMessage("创建分组"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("由新到旧"),
"next" : MessageLookupByLibrary.simpleMessage("下一步"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("暂无下载节目"),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("暂无节目"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("分组无播客"),
"noShownote" : MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"),
"notificaitonFatch" : m12,
"notificationNetworkError" : m13,
"notificationSubscribe" : m14,
"notificationSubscribeExisted" : m15,
"notificationSuccess" : m16,
"notificationUpdate" : m17,
"notificationUpdateError" : m18,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
"play" : MessageLookupByLibrary.simpleMessage("播放"),
"playback" : MessageLookupByLibrary.simpleMessage("播放控制"),
"playing" : MessageLookupByLibrary.simpleMessage("正在播放"),
"plugins" : MessageLookupByLibrary.simpleMessage("插件"),
"podcast" : m19,
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("播客已订阅"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("下载节目"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("添加到收藏"),
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("设置为已收听"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"),
"published" : m20,
"publishedDaily" : MessageLookupByLibrary.simpleMessage("每日更新"),
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("每月更新"),
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("每周更新"),
"publishedYearly" : MessageLookupByLibrary.simpleMessage("每年更新"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("恢复订阅"),
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("更新头像"),
"remove" : MessageLookupByLibrary.simpleMessage("移除"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("取消订阅"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
"removedAt" : m21,
"save" : MessageLookupByLibrary.simpleMessage("保存"),
"schedule" : MessageLookupByLibrary.simpleMessage("定时"),
"search" : MessageLookupByLibrary.simpleMessage("搜索"),
"searchEpisode" : MessageLookupByLibrary.simpleMessage("搜索节目"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"),
"secCount" : m22,
"secondsAgo" : m23,
"settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"),
"settings" : MessageLookupByLibrary.simpleMessage("设置"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("引导页"),
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("界面"),
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("颜色与主题"),
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("播放缓存"),
"settingsAudioCacheDes" : MessageLookupByLibrary.simpleMessage("播放缓存设置"),
"settingsAutoDelete" : MessageLookupByLibrary.simpleMessage("自动删除下载节目"),
"settingsAutoDeleteDes" : MessageLookupByLibrary.simpleMessage("默认 30 天"),
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
"settingsBackup" : MessageLookupByLibrary.simpleMessage("备份"),
"settingsBackupDes" : MessageLookupByLibrary.simpleMessage("备份应用数据"),
"settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("默认布局"),
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("下载页"),
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("收藏页"),
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("播客页"),
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("最近页"),
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("再次功能介绍"),
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("开启自动更新"),
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("快进时间"),
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快进时间"),
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("反馈"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("意见与建议"),
"settingsHistory" : MessageLookupByLibrary.simpleMessage("历史记录"),
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("收听记录"),
"settingsInfo" : MessageLookupByLibrary.simpleMessage("信息"),
"settingsInterface" : MessageLookupByLibrary.simpleMessage("界面"),
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("语言"),
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("设置语言"),
"settingsLayout" : MessageLookupByLibrary.simpleMessage("布局"),
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("应用布局"),
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("开源"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("开源项目使用"),
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("下载管理"),
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("蜂窝数据确认"),
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("是否用蜂窝数据自动下载"),
"settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("你可以在分组管理页面设置自动下载"),
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("在使用蜂窝数据下载前确认"),
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("播放列表和播放器"),
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"),
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("极黑"),
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("快退时间"),
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快退时间"),
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("默认时长"),
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("睡眠模式默认时长"),
"settingsSTMode" : MessageLookupByLibrary.simpleMessage("自动睡眠模式默认时长"),
"settingsStorageDes" : MessageLookupByLibrary.simpleMessage("管理缓存和下载空间"),
"settingsSyncing" : MessageLookupByLibrary.simpleMessage("同步"),
"settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新播客"),
"settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("轻点打开弹出菜单"),
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("开启后您需长按打开节目页"),
"settingsTheme" : MessageLookupByLibrary.simpleMessage("主题"),
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("更新频率"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("默认 24 小时"),
"share" : MessageLookupByLibrary.simpleMessage("分享"),
"size" : MessageLookupByLibrary.simpleMessage("大小"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"),
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),
"timeLastPlayed" : m24,
"timeLeft" : m25,
"to" : m26,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
"toastFileNotValid" : MessageLookupByLibrary.simpleMessage("文件错误"),
"toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"),
"toastImportSettingsSuccess" : MessageLookupByLibrary.simpleMessage("导入设置成功"),
"toastOneGroup" : MessageLookupByLibrary.simpleMessage("请至少选择一个分组"),
"toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("恢复中,请稍后"),
"toastReadFile" : MessageLookupByLibrary.simpleMessage("读取文件成功"),
"toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("恢复订阅失败"),
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("从播放列表移除"),
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("设置已保存"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("与结束时刻相同"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("与起始时刻相同"),
"translators" : MessageLookupByLibrary.simpleMessage("翻译者"),
"understood" : MessageLookupByLibrary.simpleMessage("了解"),
"undo" : MessageLookupByLibrary.simpleMessage("撤销"),
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),
"unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"),
"updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
"updateEpisodesCount" : m27,
"updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"),
"version" : m28
};
}

View File

@ -244,7 +244,7 @@ class AboutApp extends StatelessWidget {
),
Expanded(
child: Text(
'ppp(oza987@protonmail.com)',
'ppp',
maxLines: 1,
overflow: TextOverflow.fade,
)),

View File

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:webfeed/webfeed.dart';
import 'package:provider/provider.dart';
import '../service/api_search.dart';
@ -14,7 +15,6 @@ import '../state/podcast_group.dart';
import '../type/searchepisodes.dart';
import '../type/searchpodcast.dart';
import '../util/extension_helper.dart';
import '../webfeed/webfeed.dart';
class MyHomePageDelegate extends SearchDelegate<int> {
final String searchFieldLabel;

View File

@ -20,7 +20,7 @@
},
"all": "Tout",
"@all": {},
"autoDownload": "Téléchargement automatique",
"autoDownload": "Téléchargements auto",
"@autoDownload": {},
"back": "Retour",
"@back": {},
@ -28,9 +28,9 @@
"@buffering": {},
"cancel": "ANNULER",
"@cancel": {},
"cellularConfirm": "Cellular data warn",
"cellularConfirm": "Avertissement utilisation des données mobiles",
"@cellularConfirm": {},
"cellularConfirmDes": "Are you sure you want to use cellular data to download?",
"cellularConfirmDes": "Êtes-vous sûr d'autoriser l'utilisation des données mobiles ?",
"@cellularConfirmDes": {},
"changeLayout": "Modifier l'interface",
"@changeLayout": {},
@ -60,9 +60,9 @@
"@dismiss": {},
"done": "Fait",
"@done": {},
"download": "Télécharger",
"download": "Téléchargés",
"@download": {},
"downloaded": "Téléchargé",
"downloaded": "Téléchargés",
"@downloaded": {},
"editGroupName": "Modifier le nom du groupe",
"@editGroupName": {},
@ -106,17 +106,17 @@
"@featureDiscoverySearch": {},
"featureDiscoverySearchDes": "Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast.",
"@featureDiscoverySearchDes": {},
"feedbackEmail": "Me contacter",
"feedbackEmail": "Contact",
"@feedbackEmail": {},
"feedbackGithub": "Soumettre un problème",
"feedbackGithub": "GitHub",
"@feedbackGithub": {},
"feedbackPlay": "Noter sur le PlayStore",
"feedbackPlay": "PlayStore",
"@feedbackPlay": {
"description": "Rate on Google Play Store.\nUser can tap to open play link."
},
"feedbackTelegram": "Joindre le groupe",
"feedbackTelegram": "Telegram",
"@feedbackTelegram": {},
"filter": "Filter",
"filter": "Filtrer",
"@filter": {},
"fonts": "Polices",
"@fonts": {},
@ -146,7 +146,7 @@
"@homeSubMenuSortBy": {},
"homeTabMenuFavotite": "Favoris",
"@homeTabMenuFavotite": {},
"homeTabMenuRecent": "Récent",
"homeTabMenuRecent": "Récents",
"@homeTabMenuRecent": {},
"homeToprightMenuAbout": "À propos",
"@homeToprightMenuAbout": {},
@ -190,7 +190,7 @@
"@listened": {},
"loadMore": "Voir plus",
"@loadMore": {},
"mark": "Marqué",
"mark": "",
"@mark": {
"description": "In listen history page, if a episode is marked as listened."
},
@ -216,7 +216,7 @@
"@minsCount": {},
"network": "Réseau",
"@network": {},
"newestFirst": "Le plus récent en premier.",
"newestFirst": "Le plus récent en premier",
"@newestFirst": {},
"newGroup": "Créer un nouveau groupe",
"@newGroup": {},
@ -272,11 +272,11 @@
"title": {}
}
},
"oldestFirst": "Le plus ancien en premier.",
"oldestFirst": "Le plus ancien en premier",
"@oldestFirst": {},
"play": "Lecture",
"@play": {},
"playback": "Playback control",
"playback": "Commandes du lecteur",
"@playback": {},
"playing": "En cours",
"@playing": {},
@ -296,7 +296,7 @@
"@popupMenuMarkDes": {},
"popupMenuPlayDes": "Jouer l'épisode",
"@popupMenuPlayDes": {},
"privacyPolicy": "Politique relative aux données personnelles.",
"privacyPolicy": "Politique relative aux données personnelles",
"@privacyPolicy": {},
"published": "Publié le {date}",
"@published": {
@ -304,21 +304,21 @@
"date": {}
}
},
"publishedDaily": "Published daily",
"publishedDaily": "Quotidien",
"@publishedDaily": {},
"publishedMonthly": "Published monthly",
"publishedMonthly": "Mensuel",
"@publishedMonthly": {},
"publishedWeekly": "Published weekly",
"publishedWeekly": "Hebdomadaire",
"@publishedWeekly": {
"description": "In search podcast detail page."
},
"publishedYearly": "Published yearly",
"publishedYearly": "Annuel",
"@publishedYearly": {},
"recoverSubscribe": "Restaurer l'abonnement",
"@recoverSubscribe": {
"description": "User can recover subscribe podcast after remove it in subscribe history page."
},
"refreshArtwork": "Update artwork",
"refreshArtwork": "Mettre à jour la vignette",
"@refreshArtwork": {},
"remove": "Supprimer",
"@remove": {
@ -341,9 +341,9 @@
"@save": {},
"schedule": "Programmation",
"@schedule": {},
"search": "Search",
"search": "Rechercher",
"@search": {},
"searchEpisode": "Search episode",
"searchEpisode": "Rechercher un épisode",
"@searchEpisode": {},
"searchInvalidRss": "Lien RSS invalide",
"@searchInvalidRss": {},
@ -357,7 +357,7 @@
"@settings": {},
"settingsAccentColor": "Couleur principale",
"@settingsAccentColor": {},
"settingsAccentColorDes": "Inclure la couleur de superposition",
"settingsAccentColorDes": "Sélection de la couleur du thème",
"@settingsAccentColorDes": {},
"settingsAppearance": "Apparence",
"@settingsAppearance": {},
@ -369,7 +369,7 @@
"@settingsAudioCache": {},
"settingsAudioCacheDes": "Taille maximum du cache audio",
"@settingsAudioCacheDes": {},
"settingsAutoDelete": "Supprimer automatiquement les téléchargement après",
"settingsAutoDelete": "Suppression des fichiers ",
"@settingsAutoDelete": {},
"settingsAutoDeleteDes": "30 jours par défaut",
"@settingsAutoDeleteDes": {},
@ -377,17 +377,17 @@
"@settingsAutoPlayDes": {},
"settingsBackup": "Backup",
"@settingsBackup": {},
"settingsBackupDes": "Sauvegarder les données de l'application",
"settingsBackupDes": "Sauvegarde des données de l'application",
"@settingsBackupDes": {},
"settingsDefaultGrid": "Vue par défaut",
"@settingsDefaultGrid": {},
"settingsDefaultGridDownload": "Onglet téléchargement",
"settingsDefaultGridDownload": "Onglet Téléchargés",
"@settingsDefaultGridDownload": {},
"settingsDefaultGridFavorite": "Onglet favoris",
"settingsDefaultGridFavorite": "Onglet Favoris",
"@settingsDefaultGridFavorite": {},
"settingsDefaultGridPodcast": "Page du podcast",
"@settingsDefaultGridPodcast": {},
"settingsDefaultGridRecent": "Onglet récents",
"settingsDefaultGridRecent": "Onglet Récents",
"@settingsDefaultGridRecent": {},
"settingsDiscovery": "Revoir le tutoriel",
"@settingsDiscovery": {
@ -395,21 +395,21 @@
},
"settingsEnableSyncing": "Activer la synchronisation",
"@settingsEnableSyncing": {},
"settingsEnableSyncingDes": "Actualisez tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes",
"settingsEnableSyncingDes": "Actualiser tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes",
"@settingsEnableSyncingDes": {},
"settingsExportDes": "Exporter et importer les paramètres de l'application",
"settingsExportDes": "Exporter et importer les paramètres de l'application.",
"@settingsExportDes": {},
"settingsFastForwardSec": "Fast forward seconds",
"settingsFastForwardSec": "Avance rapide",
"@settingsFastForwardSec": {},
"settingsFastForwardSecDes": "Change the fast forward seconds in player",
"settingsFastForwardSecDes": "Vitesse de l'avance rapide en secondes",
"@settingsFastForwardSecDes": {},
"settingsFeedback": "Feedback",
"@settingsFeedback": {},
"settingsFeedbackDes": "Report de bugs et demande d'ajout de fonction",
"settingsFeedbackDes": "Report de bug et demande d'ajout de fonction",
"@settingsFeedbackDes": {},
"settingsHistory": "Historique",
"@settingsHistory": {},
"settingsHistoryDes": "Données d'écoutes",
"settingsHistoryDes": "Gestion des données",
"@settingsHistoryDes": {},
"settingsInfo": "Infos",
"@settingsInfo": {},
@ -417,7 +417,7 @@
"@settingsInterface": {},
"settingsLanguages": "Langues",
"@settingsLanguages": {},
"settingsLanguagesDes": "Changer la langue",
"settingsLanguagesDes": "Sélection de la langue",
"@settingsLanguagesDes": {},
"settingsLayout": "Style",
"@settingsLayout": {},
@ -425,37 +425,37 @@
"@settingsLayoutDes": {},
"settingsLibraries": "Librairies",
"@settingsLibraries": {},
"settingsLibrariesDes": "Les librairies open source utilisées",
"settingsLibrariesDes": "Librairies opensource utilisées",
"@settingsLibrariesDes": {},
"settingsManageDownload": "Gérer les téléchargements",
"@settingsManageDownload": {},
"settingsManageDownloadDes": "Gérer les fichiers audio téléchargés",
"@settingsManageDownloadDes": {},
"settingsMenuAutoPlay": "Jouer automatiquement le suivant.",
"settingsMenuAutoPlay": "Lecture automatique",
"@settingsMenuAutoPlay": {},
"settingsNetworkCellular": "Demander avant l'utilisation du réseau mobile",
"settingsNetworkCellular": "Utilisation du réseau mobile",
"@settingsNetworkCellular": {},
"settingsNetworkCellularAuto": "Téléchargement automatique sur réseau mobile.",
"settingsNetworkCellularAuto": "Téléchargement automatique sur réseau mobile",
"@settingsNetworkCellularAuto": {},
"settingsNetworkCellularAutoDes": "Vous pouvez utiliser le téléchargement automatique du podcast sur la page de gestion des groupes.",
"settingsNetworkCellularAutoDes": "Vous pouvez automatiser le téléchargement des podcasts sur la page de gestion des groupes.",
"@settingsNetworkCellularAutoDes": {},
"settingsNetworkCellularDes": "Si connecté à un réseau mobile, demander une confirmation avant le téléchargement.",
"settingsNetworkCellularDes": "Si connecté à un réseau mobile, demander une confirmation avant de télécharger.",
"@settingsNetworkCellularDes": {},
"settingsPlayDes": "Playlist et lecteur",
"@settingsPlayDes": {},
"settingsPopupMenu": "Menu popup des épisodes",
"@settingsPopupMenu": {},
"settingsPopupMenuDes": "Modifier le menu popup de l'épisode",
"settingsPopupMenuDes": "Configuration du menu popup",
"@settingsPopupMenuDes": {},
"settingsPrefrence": "Préférences",
"@settingsPrefrence": {},
"settingsRealDark": "Noir profond",
"@settingsRealDark": {},
"settingsRealDarkDes": "Activez pour un mode sombre accentué",
"settingsRealDarkDes": "Activer pour un mode sombre accentué",
"@settingsRealDarkDes": {},
"settingsRewindSec": "Rewind seconds",
"settingsRewindSec": "Retour rapide",
"@settingsRewindSec": {},
"settingsRewindSecDes": "Change the rewind seconds in player",
"settingsRewindSecDes": "Vitesse du retour rapide en secondes",
"@settingsRewindSecDes": {},
"settingsSTAuto": "Activation automatique de la minuterie",
"@settingsSTAuto": {},
@ -463,15 +463,15 @@
"@settingsSTAutoDes": {},
"settingsSTDefaultTime": "Temps par défaut",
"@settingsSTDefaultTime": {},
"settingsSTDefautTimeDes": "Temps par défaut de la minuterie",
"settingsSTDefautTimeDes": "Configuration de la minuterie",
"@settingsSTDefautTimeDes": {},
"settingsSTMode": "Mode minuterie automatique",
"@settingsSTMode": {},
"settingsStorageDes": "Gérer le cache et l'espace de stockage",
"settingsStorageDes": "Gestion du cache et de l'espace de stockage",
"@settingsStorageDes": {},
"settingsSyncing": "Synchronisation",
"@settingsSyncing": {},
"settingsSyncingDes": "Actualiser les podcasts en arrière-plan",
"settingsSyncingDes": "Actualisation des podcasts en arrière-plan",
"@settingsSyncingDes": {},
"settingsTapToOpenPopupMenu": "Appuyer pour ouvrir le menu",
"@settingsTapToOpenPopupMenu": {},
@ -481,7 +481,7 @@
"@settingsTheme": {},
"settingStorage": "Espace de stockage",
"@settingStorage": {},
"settingsUpdateInterval": "Intervalle de mise à jour",
"settingsUpdateInterval": "Intervalle des mises à jour",
"@settingsUpdateInterval": {},
"settingsUpdateIntervalDes": "24 heures par défaut",
"@settingsUpdateIntervalDes": {},
@ -495,9 +495,9 @@
"@sleepTimer": {},
"subscribe": "Abonnements",
"@subscribe": {},
"subscribeExportDes": "Exporter le fichier OPML de tous les podcasts",
"subscribeExportDes": "Exporter le fichier OPML de tous les podcasts.",
"@subscribeExportDes": {},
"systemDefault": "Valeur du système par défaut",
"systemDefault": "Système par défaut",
"@systemDefault": {},
"timeLastPlayed": "Dernière écoute à {time}",
"@timeLastPlayed": {
@ -512,7 +512,7 @@
"time": {}
}
},
"to": "Jusqu'à {time}",
"to": "à {time}",
"@to": {
"placeholders": {
"time": {}
@ -556,7 +556,7 @@
"@toastTimeEqualStart": {
"description": "User can't choose the same time as schedule start time."
},
"translators": "Translators",
"translators": "Traducteurs",
"@translators": {},
"understood": "Compris",
"@understood": {},

View File

@ -5,12 +5,12 @@ import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:intl/intl.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:webfeed/webfeed.dart';
import '../type/episodebrief.dart';
import '../type/play_histroy.dart';
import '../type/podcastlocal.dart';
import '../type/sub_history.dart';
import '../webfeed/webfeed.dart';
enum Filter { downloaded, liked, search, all }
@ -441,7 +441,7 @@ class DBHelper {
String description, url;
for (var i = 0; i < result; i++) {
print(feed.items[i].title);
description = _getDescription(feed.items[i].content.value ?? '',
description = _getDescription(feed.items[i]?.content?.value ?? '',
feed.items[i].description ?? '', feed.items[i].itunes.summary ?? '');
if (feed.items[i].enclosure != null) {
_isXimalaya(feed.items[i].enclosure.url)

View File

@ -6,6 +6,7 @@ import 'package:fluttertoast/fluttertoast.dart';
import 'package:intl/intl.dart';
import 'package:line_icons/line_icons.dart';
import 'package:provider/provider.dart';
import 'package:webfeed/webfeed.dart';
import '../local_storage/sqflite_localpodcast.dart';
import '../state/podcast_group.dart';
@ -13,7 +14,6 @@ import '../type/play_histroy.dart';
import '../type/searchpodcast.dart';
import '../type/sub_history.dart';
import '../util/extension_helper.dart';
import '../webfeed/webfeed.dart';
class PlayedHistory extends StatefulWidget {
@override

View File

@ -10,13 +10,13 @@ import 'package:flutter/material.dart';
import 'package:flutter_isolate/flutter_isolate.dart';
import 'package:image/image.dart' as img;
import 'package:path_provider/path_provider.dart';
import 'package:webfeed/webfeed.dart';
import 'package:uuid/uuid.dart';
import '../local_storage/key_value_storage.dart';
import '../local_storage/sqflite_localpodcast.dart';
import '../type/fireside_data.dart';
import '../type/podcastlocal.dart';
import '../webfeed/webfeed.dart';
class GroupEntity {
final String name;

View File

@ -70,6 +70,7 @@ class OnlinePodcast {
int get interval {
if (count < 1) {
// ignore: avoid_returning_null
return null;
}
return (latestPubDate - earliestPubDate) ~/ count;

View File

@ -1100,7 +1100,9 @@ class MyDropdownButton<T> extends StatefulWidget {
}
class _MyDropdownButtonState<T> extends State<MyDropdownButton<T>>
with WidgetsBindingObserver {
// ignore: prefer_mixin
with
WidgetsBindingObserver {
int _selectedIndex;
_DropdownRoute<T> _dropdownRoute;
Orientation _lastOrientation;

View File

@ -1,3 +0,0 @@
Forked from https://github.com/witochandra/webfeed
Copyright https://github.com/witochandra ALL RIGHT RESERVED
Mit License https://github.com/witochandra/webfeed/blob/master/LICENSE

View File

@ -1,16 +0,0 @@
import 'package:xml/xml.dart';
class AtomCategory {
final String term;
final String scheme;
final String label;
AtomCategory(this.term, this.scheme, this.label);
factory AtomCategory.parse(XmlElement element) {
var term = element.getAttribute("term");
var scheme = element.getAttribute("scheme");
var label = element.getAttribute("label");
return AtomCategory(term, scheme, label);
}
}

View File

@ -1,77 +0,0 @@
import 'package:tsacdop/webfeed/domain/atom_category.dart';
import 'package:tsacdop/webfeed/domain/atom_generator.dart';
import 'package:tsacdop/webfeed/domain/atom_item.dart';
import 'package:tsacdop/webfeed/domain/atom_link.dart';
import 'package:tsacdop/webfeed/domain/atom_person.dart';
import 'package:tsacdop/webfeed/util/helpers.dart';
import 'package:xml/xml.dart';
class AtomFeed {
final String id;
final String title;
final String updated;
final List<AtomItem> items;
final List<AtomLink> links;
final List<AtomPerson> authors;
final List<AtomPerson> contributors;
final List<AtomCategory> categories;
final AtomGenerator generator;
final String icon;
final String logo;
final String rights;
final String subtitle;
AtomFeed({
this.id,
this.title,
this.updated,
this.items,
this.links,
this.authors,
this.contributors,
this.categories,
this.generator,
this.icon,
this.logo,
this.rights,
this.subtitle,
});
factory AtomFeed.parse(String xmlString) {
var document = XmlDocument.parse(xmlString);
XmlElement feedElement;
try {
feedElement = document.findElements("feed").first;
} on StateError {
throw ArgumentError("feed not found");
}
return AtomFeed(
id: findElementOrNull(feedElement, "id")?.text,
title: findElementOrNull(feedElement, "title")?.text,
updated: findElementOrNull(feedElement, "updated")?.text,
items: feedElement.findElements("entry").map((element) {
return AtomItem.parse(element);
}).toList(),
links: feedElement.findElements("link").map((element) {
return AtomLink.parse(element);
}).toList(),
authors: feedElement.findElements("author").map((element) {
return AtomPerson.parse(element);
}).toList(),
contributors: feedElement.findElements("contributor").map((element) {
return AtomPerson.parse(element);
}).toList(),
categories: feedElement.findElements("category").map((element) {
return AtomCategory.parse(element);
}).toList(),
generator:
AtomGenerator.parse(findElementOrNull(feedElement, "generator")),
icon: findElementOrNull(feedElement, "icon")?.text,
logo: findElementOrNull(feedElement, "logo")?.text,
rights: findElementOrNull(feedElement, "rights")?.text,
subtitle: findElementOrNull(feedElement, "subtitle")?.text,
);
}
}

View File

@ -1,19 +0,0 @@
import 'package:xml/xml.dart';
class AtomGenerator {
final String uri;
final String version;
final String value;
AtomGenerator(this.uri, this.version, this.value);
factory AtomGenerator.parse(XmlElement element) {
if (element == null) {
return null;
}
var uri = element.getAttribute("uri");
var version = element.getAttribute("version");
var value = element.text;
return AtomGenerator(uri, version, value);
}
}

View File

@ -1,66 +0,0 @@
import 'package:tsacdop/webfeed/domain/atom_category.dart';
import 'package:tsacdop/webfeed/domain/atom_link.dart';
import 'package:tsacdop/webfeed/domain/atom_person.dart';
import 'package:tsacdop/webfeed/domain/atom_source.dart';
import 'package:tsacdop/webfeed/domain/media/media.dart';
import 'package:tsacdop/webfeed/util/helpers.dart';
import 'package:xml/xml.dart';
class AtomItem {
final String id;
final String title;
final String updated;
final List<AtomPerson> authors;
final List<AtomLink> links;
final List<AtomCategory> categories;
final List<AtomPerson> contributors;
final AtomSource source;
final String published;
final String content;
final String summary;
final String rights;
final Media media;
AtomItem({
this.id,
this.title,
this.updated,
this.authors,
this.links,
this.categories,
this.contributors,
this.source,
this.published,
this.content,
this.summary,
this.rights,
this.media,
});
factory AtomItem.parse(XmlElement element) {
return AtomItem(
id: findElementOrNull(element, "id")?.text,
title: findElementOrNull(element, "title")?.text,
updated: findElementOrNull(element, "updated")?.text,
authors: element.findElements("author").map((element) {
return AtomPerson.parse(element);
}).toList(),
links: element.findElements("link").map((element) {
return AtomLink.parse(element);
}).toList(),
categories: element.findElements("category").map((element) {
return AtomCategory.parse(element);
}).toList(),
contributors: element.findElements("contributor").map((element) {
return AtomPerson.parse(element);
}).toList(),
source: AtomSource.parse(findElementOrNull(element, "source")),
published: findElementOrNull(element, "published")?.text,
content: findElementOrNull(element, "content")?.text,
summary: findElementOrNull(element, "summary")?.text,
rights: findElementOrNull(element, "rights")?.text,
media: Media.parse(element),
);
}
}

View File

@ -1,32 +0,0 @@
import 'package:xml/xml.dart';
class AtomLink {
final String href;
final String rel;
final String type;
final String hreflang;
final String title;
final int length;
AtomLink(
this.href,
this.rel,
this.type,
this.hreflang,
this.title,
this.length,
);
factory AtomLink.parse(XmlElement element) {
var href = element.getAttribute("href");
var rel = element.getAttribute("rel");
var type = element.getAttribute("type");
var title = element.getAttribute("title");
var hreflang = element.getAttribute("hreflang");
var length = 0;
if (element.getAttribute("length") != null) {
length = int.parse(element.getAttribute("length"));
}
return AtomLink(href, rel, type, hreflang, title, length);
}
}

View File

@ -1,17 +0,0 @@
import 'package:tsacdop/webfeed/util/helpers.dart';
import 'package:xml/xml.dart';
class AtomPerson {
final String name;
final String uri;
final String email;
AtomPerson(this.name, this.uri, this.email);
factory AtomPerson.parse(XmlElement element) {
var name = findElementOrNull(element, "name")?.text;
var uri = findElementOrNull(element, "uri")?.text;
var email = findElementOrNull(element, "email")?.text;
return AtomPerson(name, uri, email);
}
}

View File

@ -1,21 +0,0 @@
import 'package:tsacdop/webfeed/util/helpers.dart';
import 'package:xml/xml.dart';
class AtomSource {
final String id;
final String title;
final String updated;
AtomSource(this.id, this.title, this.updated);
factory AtomSource.parse(XmlElement element) {
if (element == null) {
return null;
}
var id = findElementOrNull(element, "id")?.text;
var title = findElementOrNull(element, "title")?.text;
var updated = findElementOrNull(element, "updated")?.text;
return AtomSource(id, title, updated);
}
}

View File

@ -1,61 +0,0 @@
import '../../util/helpers.dart';
import 'package:xml/xml.dart';
class DublinCore {
final String title;
final String description;
final String creator;
final String subject;
final String publisher;
final String contributor;
final String date;
final String type;
final String format;
final String identifier;
final String source;
final String language;
final String relation;
final String coverage;
final String rights;
DublinCore({
this.title,
this.description,
this.creator,
this.subject,
this.publisher,
this.contributor,
this.date,
this.type,
this.format,
this.identifier,
this.source,
this.language,
this.relation,
this.coverage,
this.rights,
});
factory DublinCore.parse(XmlElement element) {
if (element == null) {
return null;
}
return DublinCore(
title: findElementOrNull(element, "dc:title")?.text,
description: findElementOrNull(element, "dc:description")?.text,
creator: findElementOrNull(element, "dc:creator")?.text,
subject: findElementOrNull(element, "dc:subject")?.text,
publisher: findElementOrNull(element, "dc:publisher")?.text,
contributor: findElementOrNull(element, "dc:contributor")?.text,
date: findElementOrNull(element, "dc:date")?.text,
type: findElementOrNull(element, "dc:type")?.text,
format: findElementOrNull(element, "dc:format")?.text,
identifier: findElementOrNull(element, "dc:identifier")?.text,
source: findElementOrNull(element, "dc:source")?.text,
language: findElementOrNull(element, "dc:language")?.text,
relation: findElementOrNull(element, "dc:relation")?.text,
coverage: findElementOrNull(element, "dc:coverage")?.text,
rights: findElementOrNull(element, "dc:rights")?.text,
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class Category {
final String scheme;
final String label;
final String value;
Category({
this.scheme,
this.label,
this.value,
});
factory Category.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Category(
scheme: element.getAttribute("scheme"),
label: element.getAttribute("label"),
value: element.text,
);
}
}

View File

@ -1,34 +0,0 @@
import 'package:tsacdop/webfeed/domain/media/star_rating.dart';
import 'package:tsacdop/webfeed/domain/media/statistics.dart';
import 'package:tsacdop/webfeed/domain/media/tags.dart';
import 'package:tsacdop/webfeed/util/helpers.dart';
import 'package:xml/xml.dart';
class Community {
final StarRating starRating;
final Statistics statistics;
final Tags tags;
Community({
this.starRating,
this.statistics,
this.tags,
});
factory Community.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Community(
starRating: new StarRating.parse(
findElementOrNull(element, "media:starRating"),
),
statistics: new Statistics.parse(
findElementOrNull(element, "media:statistics"),
),
tags: new Tags.parse(
findElementOrNull(element, "media:tags"),
),
);
}
}

View File

@ -1,56 +0,0 @@
import 'package:xml/xml.dart';
class Content {
final String url;
final String type;
final int fileSize;
final String medium;
final bool isDefault;
final String expression;
final int bitrate;
final double framerate;
final double samplingrate;
final int channels;
final int duration;
final int height;
final int width;
final String lang;
Content({
this.url,
this.type,
this.fileSize,
this.medium,
this.isDefault,
this.expression,
this.bitrate,
this.framerate,
this.samplingrate,
this.channels,
this.duration,
this.height,
this.width,
this.lang,
});
factory Content.parse(XmlElement element) {
return new Content(
url: element.getAttribute("url"),
type: element.getAttribute("type"),
fileSize: int.tryParse(element.getAttribute("fileSize") ?? "0"),
medium: element.getAttribute("medium"),
isDefault: element.getAttribute("isDefault") == "true",
expression: element.getAttribute("expression"),
bitrate: int.tryParse(element.getAttribute("bitrate") ?? "0"),
framerate: double.tryParse(element.getAttribute("framerate") ?? "0"),
samplingrate: double.tryParse(
element.getAttribute("samplingrate") ?? "0",
),
channels: int.tryParse(element.getAttribute("channels") ?? "0"),
duration: int.tryParse(element.getAttribute("duration") ?? "0"),
height: int.tryParse(element.getAttribute("height") ?? "0"),
width: int.tryParse(element.getAttribute("width") ?? "0"),
lang: element.getAttribute("lang"),
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Copyright {
final String url;
final String value;
Copyright({
this.url,
this.value,
});
factory Copyright.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Copyright(
url: element.getAttribute("url"),
value: element.text,
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Credit {
final String role;
final String scheme;
final String value;
Credit({
this.role,
this.scheme,
this.value,
});
factory Credit.parse(XmlElement element) {
return new Credit(
role: element.getAttribute("role"),
scheme: element.getAttribute("scheme"),
value: element.text,
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Description {
final String type;
final String value;
Description({
this.type,
this.value,
});
factory Description.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Description(
type: element.getAttribute("type"),
value: element.text,
);
}
}

View File

@ -1,30 +0,0 @@
import 'package:tsacdop/webfeed/domain/media/param.dart';
import 'package:xml/xml.dart';
class Embed {
final String url;
final int width;
final int height;
final List<Param> params;
Embed({
this.url,
this.width,
this.height,
this.params,
});
factory Embed.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Embed(
url: element.getAttribute("url"),
width: int.tryParse(element.getAttribute("width") ?? "0"),
height: int.tryParse(element.getAttribute("height") ?? "0"),
params: element.findElements("media:param").map((e) {
return new Param.parse(e);
}).toList(),
);
}
}

View File

@ -1,41 +0,0 @@
import 'package:xml/xml.dart';
import '../../util/helpers.dart';
import 'category.dart';
import 'content.dart';
import 'credit.dart';
import 'rating.dart';
class Group {
final List<Content> contents;
final List<Credit> credits;
final Category category;
final Rating rating;
Group({
this.contents,
this.credits,
this.category,
this.rating,
});
factory Group.parse(XmlElement element) {
if (element == null) {
return null;
}
return Group(
contents: element.findElements("media:content").map((e) {
return Content.parse(e);
}).toList(),
credits: element.findElements("media:credit").map((e) {
return Credit.parse(e);
}).toList(),
category: Category.parse(
findElementOrNull(element, "media:category"),
),
rating: Rating.parse(
findElementOrNull(element, "media:rating"),
),
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Hash {
final String algo;
final String value;
Hash({
this.algo,
this.value,
});
factory Hash.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Hash(
algo: element.getAttribute("algo"),
value: element.text,
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class License {
final String type;
final String href;
final String value;
License({
this.type,
this.href,
this.value,
});
factory License.parse(XmlElement element) {
if (element == null) {
return null;
}
return new License(
type: element.getAttribute("type"),
href: element.getAttribute("href"),
value: element.text,
);
}
}

View File

@ -1,169 +0,0 @@
import 'package:tsacdop/webfeed/domain/media/category.dart';
import 'package:tsacdop/webfeed/domain/media/community.dart';
import 'package:tsacdop/webfeed/domain/media/content.dart';
import 'package:tsacdop/webfeed/domain/media/copyright.dart';
import 'package:tsacdop/webfeed/domain/media/credit.dart';
import 'package:tsacdop/webfeed/domain/media/description.dart';
import 'package:tsacdop/webfeed/domain/media/embed.dart';
import 'package:tsacdop/webfeed/domain/media/group.dart';
import 'package:tsacdop/webfeed/domain/media/hash.dart';
import 'package:tsacdop/webfeed/domain/media/license.dart';
import 'package:tsacdop/webfeed/domain/media/peer_link.dart';
import 'package:tsacdop/webfeed/domain/media/player.dart';
import 'package:tsacdop/webfeed/domain/media/price.dart';
import 'package:tsacdop/webfeed/domain/media/rating.dart';
import 'package:tsacdop/webfeed/domain/media/restriction.dart';
import 'package:tsacdop/webfeed/domain/media/rights.dart';
import 'package:tsacdop/webfeed/domain/media/scene.dart';
import 'package:tsacdop/webfeed/domain/media/status.dart';
import 'package:tsacdop/webfeed/domain/media/text.dart';
import 'package:tsacdop/webfeed/domain/media/thumbnail.dart';
import 'package:tsacdop/webfeed/domain/media/title.dart';
import 'package:tsacdop/webfeed/util/helpers.dart';
import 'package:xml/xml.dart';
class Media {
final Group group;
final List<Content> contents;
final List<Credit> credits;
final Category category;
final Rating rating;
final Title title;
final Description description;
final String keywords;
final List<Thumbnail> thumbnails;
final Hash hash;
final Player player;
final Copyright copyright;
final Text text;
final Restriction restriction;
final Community community;
final List<String> comments;
final Embed embed;
final List<String> responses;
final List<String> backLinks;
final Status status;
final List<Price> prices;
final License license;
final PeerLink peerLink;
final Rights rights;
final List<Scene> scenes;
Media({
this.group,
this.contents,
this.credits,
this.category,
this.rating,
this.title,
this.description,
this.keywords,
this.thumbnails,
this.hash,
this.player,
this.copyright,
this.text,
this.restriction,
this.community,
this.comments,
this.embed,
this.responses,
this.backLinks,
this.status,
this.prices,
this.license,
this.peerLink,
this.rights,
this.scenes,
});
factory Media.parse(XmlElement element) {
return new Media(
group: new Group.parse(
findElementOrNull(element, "media:group"),
),
contents: element.findElements("media:content").map((e) {
return new Content.parse(e);
}).toList(),
credits: element.findElements("media:credit").map((e) {
return new Credit.parse(e);
}).toList(),
category: new Category.parse(
findElementOrNull(element, "media:category"),
),
rating: new Rating.parse(
findElementOrNull(element, "media:rating"),
),
title: new Title.parse(
findElementOrNull(element, "media:title"),
),
description: new Description.parse(
findElementOrNull(element, "media:description"),
),
keywords: findElementOrNull(element, "media:keywords")?.text,
thumbnails: element.findElements("media:thumbnail").map((e) {
return new Thumbnail.parse(e);
}).toList(),
hash: new Hash.parse(
findElementOrNull(element, "media:hash"),
),
player: new Player.parse(
findElementOrNull(element, "media:player"),
),
copyright: new Copyright.parse(
findElementOrNull(element, "media:copyright"),
),
text: new Text.parse(
findElementOrNull(element, "media:text"),
),
restriction: new Restriction.parse(
findElementOrNull(element, "media:restriction"),
),
community: new Community.parse(
findElementOrNull(element, "media:community"),
),
comments: findElementOrNull(element, "media:comments")
?.findElements("media:comment")
?.map((e) {
return e.text;
})?.toList() ??
[],
embed: new Embed.parse(
findElementOrNull(element, "media:embed"),
),
responses: findElementOrNull(element, "media:responses")
?.findElements("media:response")
?.map((e) {
return e.text;
})?.toList() ??
[],
backLinks: findElementOrNull(element, "media:backLinks")
?.findElements("media:backLink")
?.map((e) {
return e.text;
})?.toList() ??
[],
status: new Status.parse(
findElementOrNull(element, "media:status"),
),
prices: element.findElements("media:price").map((e) {
return new Price.parse(e);
}).toList(),
license: new License.parse(
findElementOrNull(element, "media:license"),
),
peerLink: new PeerLink.parse(
findElementOrNull(element, "media:peerLink"),
),
rights: new Rights.parse(
findElementOrNull(element, "media:rights"),
),
scenes: findElementOrNull(element, "media:scenes")
?.findElements("media:scene")
?.map((e) {
return new Scene.parse(e);
})?.toList() ??
[],
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Param {
final String name;
final String value;
Param({
this.name,
this.value,
});
factory Param.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Param(
name: element.getAttribute("name"),
value: element.text,
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class PeerLink {
final String type;
final String href;
final String value;
PeerLink({
this.type,
this.href,
this.value,
});
factory PeerLink.parse(XmlElement element) {
if (element == null) {
return null;
}
return new PeerLink(
type: element.getAttribute("type"),
href: element.getAttribute("href"),
value: element.text,
);
}
}

View File

@ -1,27 +0,0 @@
import 'package:xml/xml.dart';
class Player {
final String url;
final int width;
final int height;
final String value;
Player({
this.url,
this.width,
this.height,
this.value,
});
factory Player.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Player(
url: element.getAttribute("url"),
width: int.tryParse(element.getAttribute("width") ?? "0"),
height: int.tryParse(element.getAttribute("height") ?? "0"),
value: element.text,
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class Price {
final double price;
final String type;
final String info;
final String currency;
Price({
this.price,
this.type,
this.info,
this.currency,
});
factory Price.parse(XmlElement element) {
return new Price(
price: double.tryParse(element.getAttribute("price") ?? "0"),
type: element.getAttribute("type"),
info: element.getAttribute("info"),
currency: element.getAttribute("currency"),
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Rating {
final String scheme;
final String value;
Rating({
this.scheme,
this.value,
});
factory Rating.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Rating(
scheme: element.getAttribute("scheme"),
value: element.text,
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class Restriction {
final String relationship;
final String type;
final String value;
Restriction({
this.relationship,
this.type,
this.value,
});
factory Restriction.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Restriction(
relationship: element.getAttribute("relationship"),
type: element.getAttribute("type"),
value: element.text,
);
}
}

View File

@ -1,18 +0,0 @@
import 'package:xml/xml.dart';
class Rights {
final String status;
Rights({
this.status,
});
factory Rights.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Rights(
status: element.getAttribute("status"),
);
}
}

View File

@ -1,28 +0,0 @@
import 'package:tsacdop/webfeed/util/helpers.dart';
import 'package:xml/xml.dart';
class Scene {
final String title;
final String description;
final String startTime;
final String endTime;
Scene({
this.title,
this.description,
this.startTime,
this.endTime,
});
factory Scene.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Scene(
title: findElementOrNull(element, "sceneTitle")?.text,
description: findElementOrNull(element, "sceneDescription")?.text,
startTime: findElementOrNull(element, "sceneStartTime")?.text,
endTime: findElementOrNull(element, "sceneEndTime")?.text,
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class StarRating {
final double average;
final int count;
final int min;
final int max;
StarRating({
this.average,
this.count,
this.min,
this.max,
});
factory StarRating.parse(XmlElement element) {
return new StarRating(
average: double.tryParse(element.getAttribute("average") ?? "0"),
count: int.tryParse(element.getAttribute("count") ?? "0"),
min: int.tryParse(element.getAttribute("min") ?? "0"),
max: int.tryParse(element.getAttribute("max") ?? "0"),
);
}
}

View File

@ -1,18 +0,0 @@
import 'package:xml/xml.dart';
class Statistics {
final int views;
final int favorites;
Statistics({
this.views,
this.favorites,
});
factory Statistics.parse(XmlElement element) {
return new Statistics(
views: int.tryParse(element.getAttribute("views") ?? "0"),
favorites: int.tryParse(element.getAttribute("favorites") ?? "0"),
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Status {
final String state;
final String reason;
Status({
this.state,
this.reason,
});
factory Status.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Status(
state: element.getAttribute("state"),
reason: element.getAttribute("reason"),
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Tags {
final String tags;
final int weight;
Tags({
this.tags,
this.weight,
});
factory Tags.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Tags(
tags: element.text,
weight: int.tryParse(element.getAttribute("weight") ?? "1"),
);
}
}

View File

@ -1,30 +0,0 @@
import 'package:xml/xml.dart';
class Text {
final String type;
final String lang;
final String start;
final String end;
final String value;
Text({
this.type,
this.lang,
this.start,
this.end,
this.value,
});
factory Text.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Text(
type: element.getAttribute("type"),
lang: element.getAttribute("lang"),
start: element.getAttribute("start"),
end: element.getAttribute("end"),
value: element.text,
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class Thumbnail {
final String url;
final String width;
final String height;
final String time;
Thumbnail({
this.url,
this.width,
this.height,
this.time,
});
factory Thumbnail.parse(XmlElement element) {
return new Thumbnail(
url: element.getAttribute("url"),
width: element.getAttribute("width"),
height: element.getAttribute("height"),
time: element.getAttribute("time"),
);
}
}

View File

@ -1,21 +0,0 @@
import 'package:xml/xml.dart';
class Title {
final String type;
final String value;
Title({
this.type,
this.value,
});
factory Title.parse(XmlElement element) {
if (element == null) {
return null;
}
return new Title(
type: element.getAttribute("type"),
value: element.text,
);
}
}

View File

@ -1,18 +0,0 @@
import 'package:xml/xml.dart';
class RssCategory {
final String domain;
final String value;
RssCategory(this.domain, this.value);
factory RssCategory.parse(XmlElement element) {
if (element == null) {
return null;
}
var domain = element.getAttribute("domain");
var value = element.text;
return RssCategory(domain, value);
}
}

View File

@ -1,29 +0,0 @@
import 'package:xml/xml.dart';
class RssCloud {
final String domain;
final String port;
final String path;
final String registerProcedure;
final String protocol;
RssCloud(
this.domain,
this.port,
this.path,
this.registerProcedure,
this.protocol,
);
factory RssCloud.parse(XmlElement node) {
if (node == null) {
return null;
}
var domain = node.getAttribute("domain");
var port = node.getAttribute("port");
var path = node.getAttribute("path");
var registerProcedure = node.getAttribute("registerProcedure");
var protocol = node.getAttribute("protocol");
return RssCloud(domain, port, path, registerProcedure, protocol);
}
}

View File

@ -1,30 +0,0 @@
import 'package:xml/xml.dart';
final _imagesRegExp = new RegExp(
"<img\\s.*?src=(?:'|\")([^'\">]+)(?:'|\")",
multiLine: true,
caseSensitive: false,
);
/// For RSS Content Module:
///
/// - `xmlns:content="http://purl.org/rss/1.0/modules/content/"`
///
class RssContent {
String value;
Iterable<String> images;
RssContent(this.value, this.images);
factory RssContent.parse(XmlElement element) {
if (element == null) {
return RssContent('', ['']);
}
final content = element.text.trim();
final images = <String>[];
_imagesRegExp.allMatches(content).forEach((match) {
images.add(match.group(1));
});
return RssContent(content, images);
}
}

View File

@ -1,19 +0,0 @@
import 'package:xml/xml.dart';
class RssEnclosure {
final String url;
final String type;
final int length;
RssEnclosure(this.url, this.type, this.length);
factory RssEnclosure.parse(XmlElement element) {
if (element == null) {
return null;
}
var url = element.getAttribute("url");
var type = element.getAttribute("type");
var length = int.tryParse(element.getAttribute("length") ?? "0");
return RssEnclosure(url, type, length);
}
}

View File

@ -1,108 +0,0 @@
import 'dart:core';
import '../domain/dublin_core/dublin_core.dart';
import '../domain/rss_category.dart';
import '../domain/rss_cloud.dart';
import '../domain/rss_image.dart';
import '../domain/rss_item.dart';
import '../util/helpers.dart';
import 'package:xml/xml.dart';
import 'rss_itunes.dart';
class RssFeed {
final String title;
final String author;
final String description;
final String link;
final List<RssItem> items;
final RssImage image;
final RssCloud cloud;
final List<RssCategory> categories;
final List<String> skipDays;
final List<int> skipHours;
final String lastBuildDate;
final String language;
final String generator;
final String copyright;
final String docs;
final String managingEditor;
final String rating;
final String webMaster;
final int ttl;
final DublinCore dc;
final RssItunes itunes;
RssFeed({
this.title,
this.author,
this.description,
this.link,
this.items,
this.image,
this.cloud,
this.categories,
this.skipDays,
this.skipHours,
this.lastBuildDate,
this.language,
this.generator,
this.copyright,
this.docs,
this.managingEditor,
this.rating,
this.webMaster,
this.ttl,
this.dc,
this.itunes,
});
factory RssFeed.parse(String xmlString) {
var document = XmlDocument.parse(xmlString);
XmlElement channelElement;
try {
channelElement = document.findAllElements("channel").first;
} on StateError {
throw ArgumentError("channel not found");
}
return RssFeed(
title: findElementOrNull(channelElement, "title")?.text,
author: findElementOrNull(channelElement, "author")?.text,
description: findElementOrNull(channelElement, "description")?.text,
link: findElementOrNull(channelElement, "link")?.text,
items: channelElement.findElements("item").map((element) {
return RssItem.parse(element);
}).toList(),
image: RssImage.parse(findElementOrNull(channelElement, "image")),
cloud: RssCloud.parse(findElementOrNull(channelElement, "cloud")),
categories: channelElement.findElements("category").map((element) {
return RssCategory.parse(element);
}).toList(),
skipDays: findElementOrNull(channelElement, "skipDays")
?.findAllElements("day")
?.map((element) {
return element.text;
})?.toList() ??
[],
skipHours: findElementOrNull(channelElement, "skipHours")
?.findAllElements("hour")
?.map((element) {
return int.tryParse(element.text ?? "0");
})?.toList() ??
[],
lastBuildDate: findElementOrNull(channelElement, "lastBuildDate")?.text,
language: findElementOrNull(channelElement, "language")?.text,
generator: findElementOrNull(channelElement, "generator")?.text,
copyright: findElementOrNull(channelElement, "copyright")?.text,
docs: findElementOrNull(channelElement, "docs")?.text,
managingEditor: findElementOrNull(channelElement, "managingEditor")?.text,
rating: findElementOrNull(channelElement, "rating")?.text,
webMaster: findElementOrNull(channelElement, "webMaster")?.text,
ttl: int.tryParse(findElementOrNull(channelElement, "ttl")?.text ?? "0"),
dc: DublinCore.parse(channelElement),
itunes: RssItunes.parse(channelElement),
);
}
}

View File

@ -1,21 +0,0 @@
import '../util/helpers.dart';
import 'package:xml/xml.dart';
class RssImage {
final String title;
final String url;
final String link;
RssImage(this.title, this.url, this.link);
factory RssImage.parse(XmlElement element) {
if (element == null) {
return null;
}
var title = findElementOrNull(element, "title")?.text;
var url = findElementOrNull(element, "url")?.text;
var link = findElementOrNull(element, "link")?.text;
return RssImage(title, url, link);
}
}

View File

@ -1,69 +0,0 @@
import '../domain/dublin_core/dublin_core.dart';
import '../domain/media/media.dart';
import '../domain/rss_category.dart';
import '../domain/rss_content.dart';
import '../domain/rss_enclosure.dart';
import '../domain/rss_source.dart';
import '../util/helpers.dart';
import 'package:xml/xml.dart';
import 'rss_item_itunes.dart';
class RssItem {
final String title;
final String description;
final String link;
final List<RssCategory> categories;
final String guid;
final String pubDate;
final String author;
final String comments;
final RssSource source;
final RssContent content;
final Media media;
final RssEnclosure enclosure;
final DublinCore dc;
final RssItemItunes itunes;
RssItem({
this.title,
this.description,
this.link,
this.categories,
this.guid,
this.pubDate,
this.author,
this.comments,
this.source,
this.content,
this.media,
this.enclosure,
this.dc,
this.itunes,
});
factory RssItem.parse(XmlElement element) {
if (RssEnclosure.parse(findElementOrNull(element, "enclosure")) == null) {
return null;
}
return RssItem(
title: findElementOrNull(element, "title")?.text,
description: findElementOrNull(element, "description")?.text?.trim(),
link: findElementOrNull(element, "link")?.text?.trim(),
categories: element.findElements("category").map((element) {
return RssCategory.parse(element);
}).toList(),
//guid: findElementOrNull(element, "guid")?.text,
pubDate: findElementOrNull(element, "pubDate")?.text?.trim(),
author: findElementOrNull(element, "author")?.text?.trim(),
// comments: findElementOrNull(element, "comments")?.text,
// source: RssSource.parse(findElementOrNull(element, "source")),
content: RssContent.parse(findElementOrNull(element, "content:encoded")),
// media: Media.parse(element),
enclosure: RssEnclosure.parse(findElementOrNull(element, "enclosure")),
//dc: DublinCore.parse(element),
itunes: RssItemItunes.parse(element),
);
}
}

View File

@ -1,89 +0,0 @@
import '../util/helpers.dart';
import 'package:xml/xml.dart';
import 'rss_itunes_category.dart';
import 'rss_itunes_episode_type.dart';
import 'rss_itunes_image.dart';
class RssItemItunes {
final String title;
final int episode;
final int season;
final Duration duration;
final RssItunesEpisodeType episodeType;
final String author;
final String summary;
final bool explicit;
final String subtitle;
final List<String> keywords;
final RssItunesImage image;
final RssItunesCategory category;
final bool block;
RssItemItunes({
this.title,
this.episode,
this.season,
this.duration,
this.episodeType,
this.author,
this.summary,
this.explicit,
this.subtitle,
this.keywords,
this.image,
this.category,
this.block,
});
factory RssItemItunes.parse(XmlElement element) {
if (element == null) {
return null;
}
//var episodeStr = findElementOrNull(element, "itunes:episode")?.text?.trim();
//var seasonStr = findElementOrNull(element, "itunes:season")?.text?.trim();
var durationStr =
findElementOrNull(element, "itunes:duration")?.text?.trim();
return RssItemItunes(
title: findElementOrNull(element, "itunes:title")?.text?.trim(),
//episode: episodeStr == null ? null : int.parse(episodeStr),
//season: seasonStr == null ? null : int.parse(seasonStr),
duration: durationStr == null ? null : parseDuration(durationStr),
// episodeType: newRssItunesEpisodeType(findElementOrNull(element, "itunes:episodeType")),
author: findElementOrNull(element, "itunes:author")?.text?.trim(),
summary: findElementOrNull(element, "itunes:summary")?.text?.trim(),
explicit: parseBoolLiteral(element, "itunes:explicit"),
//subtitle: findElementOrNull(element, "itunes:subtitle")?.text?.trim(),
// keywords: findElementOrNull(element, "itunes:keywords")?.text?.split(",")?.map((keyword) => keyword.trim())?.toList(),
// image: RssItunesImage.parse(findElementOrNull(element, "itunes:image")),
// category: RssItunesCategory.parse(
// findElementOrNull(element, "itunes:category")),
// block: parseBoolLiteral(element, "itunes:block"),
);
}
}
Duration parseDuration(String s) {
var hours = 0;
var minutes = 0;
var seconds = 0;
var parts = s.split(':');
try {
if (parts.length > 2) {
hours = int.parse(parts[parts.length - 3]);
}
if (parts.length > 1) {
minutes = int.parse(parts[parts.length - 2]);
}
seconds = int.parse(parts[parts.length - 1]);
} catch (e) {
print(e);
}
return Duration(
hours: hours,
minutes: minutes,
seconds: seconds,
);
}

View File

@ -1,70 +0,0 @@
import '../util/helpers.dart';
import 'package:xml/xml.dart';
//import 'package:webfeed/util/helpers.dart';
import 'rss_itunes_category.dart';
import 'rss_itunes_image.dart';
import 'rss_itunes_owner.dart';
import 'rss_itunes_type.dart';
class RssItunes {
final String author;
final String summary;
final bool explicit;
final String title;
final String subtitle;
final RssItunesOwner owner;
final List<String> keywords;
final RssItunesImage image;
final List<RssItunesCategory> categories;
final RssItunesType type;
final String newFeedUrl;
final bool block;
final bool complete;
RssItunes({
this.author,
this.summary,
this.explicit,
this.title,
this.subtitle,
this.owner,
this.keywords,
this.image,
this.categories,
this.type,
this.newFeedUrl,
this.block,
this.complete,
});
factory RssItunes.parse(XmlElement element) {
if (element == null) {
return null;
}
return RssItunes(
author: findElementOrNull(element, "itunes:author")?.text?.trim(),
summary: findElementOrNull(element, "itunes:summary")?.text?.trim(),
explicit: parseBoolLiteral(element, "itunes:explicit"),
title: findElementOrNull(element, "itunes:title")?.text?.trim(),
// subtitle: findElementOrNull(element, "itunes:subtitle")?.text?.trim(),
//owner: RssItunesOwner.parse(findElementOrNull(element, "itunes:owner")),
// keywords: findElementOrNull(element, "itunes:keywords")
// ?.text
// ?.split(",")
// ?.map((keyword) => keyword.trim())
// ?.toList(),
image: RssItunesImage.parse(findElementOrNull(element, "itunes:image")),
// categories: findAllDirectElementsOrNull(element, "itunes:category")
// .map((ele) => RssItunesCategory.parse(ele))
// .toList(),
// type: newRssItunesType(findElementOrNull(element, "itunes:type")),
// newFeedUrl:
// findElementOrNull(element, "itunes:new-feed-url")?.text?.trim(),
// block: parseBoolLiteral(element, "itunes:block"),
// complete: parseBoolLiteral(element, "itunes:complete"),
);
}
}

View File

@ -1,24 +0,0 @@
import 'package:xml/xml.dart';
class RssItunesCategory {
final String category;
final List<String> subCategories;
RssItunesCategory({this.category, this.subCategories});
factory RssItunesCategory.parse(XmlElement element) {
if (element == null) return null;
Iterable<XmlElement> subCategories;
try {
subCategories = element.findElements("itunes:category");
} on StateError {
subCategories = null;
}
return RssItunesCategory(
category: element.getAttribute("text")?.trim(),
subCategories:
subCategories?.map((ele) => ele.getAttribute("text")?.trim())?.toList(),
);
}
}

View File

@ -1,19 +0,0 @@
import 'package:xml/xml.dart';
enum RssItunesEpisodeType {full, trailer, bonus}
RssItunesEpisodeType newRssItunesEpisodeType(XmlElement element) {
// "full" is default type
if (element == null) return RssItunesEpisodeType.full;
switch (element.text) {
case "full":
return RssItunesEpisodeType.full;
case "trailer":
return RssItunesEpisodeType.trailer;
case "bonus":
return RssItunesEpisodeType.bonus;
default:
return null;
}
}

View File

@ -1,14 +0,0 @@
import 'package:xml/xml.dart';
class RssItunesImage {
final String href;
RssItunesImage({this.href});
factory RssItunesImage.parse(XmlElement element) {
if (element == null) return null;
return RssItunesImage(
href: element.getAttribute("href")?.trim(),
);
}
}

View File

@ -1,18 +0,0 @@
import 'package:xml/xml.dart';
import '../util/helpers.dart';
class RssItunesOwner {
final String name;
final String email;
RssItunesOwner({this.name, this.email});
factory RssItunesOwner.parse(XmlElement element) {
if (element == null) return null;
return RssItunesOwner(
name: findElementOrNull(element, "itunes:name")?.text?.trim(),
email: findElementOrNull(element, "itunes:email")?.text?.trim(),
);
}
}

View File

@ -1,17 +0,0 @@
import 'package:xml/xml.dart';
enum RssItunesType { episodic, serial }
RssItunesType newRssItunesType(XmlElement element) {
// "episodic" is default type
if (element == null) return RssItunesType.episodic;
switch (element.text) {
case "episodic":
return RssItunesType.episodic;
case "serial":
return RssItunesType.serial;
default:
return null;
}
}

View File

@ -1,18 +0,0 @@
import 'package:xml/xml.dart';
class RssSource {
final String url;
final String value;
RssSource(this.url, this.value);
factory RssSource.parse(XmlElement element) {
if (element == null) {
return null;
}
var url = element.getAttribute("url");
var value = element.text;
return RssSource(url, value);
}
}

View File

@ -1,29 +0,0 @@
import 'dart:core';
import 'package:xml/xml.dart';
XmlElement findElementOrNull(XmlElement element, String name,
{String namespace}) {
try {
return element.findAllElements(name, namespace: namespace).first;
} on StateError {
return null;
}
}
List<XmlElement> findAllDirectElementsOrNull(XmlElement element, String name,
{String namespace}) {
try {
return element.findElements(name, namespace: namespace).toList();
} on StateError {
return null;
}
}
bool parseBoolLiteral(XmlElement element, String tagName) {
var v = findElementOrNull(element, tagName)?.text?.toLowerCase()?.trim();
if (v == null) return null;
return ["yes", "true"].contains(v);
}

View File

@ -1,13 +0,0 @@
export 'domain/atom_category.dart';
export 'domain/atom_feed.dart';
export 'domain/atom_generator.dart';
export 'domain/atom_item.dart';
export 'domain/atom_link.dart';
export 'domain/atom_person.dart';
export 'domain/atom_source.dart';
export 'domain/rss_category.dart';
export 'domain/rss_cloud.dart';
export 'domain/rss_feed.dart';
export 'domain/rss_image.dart';
export 'domain/rss_item.dart';
export 'domain/rss_source.dart';

View File

@ -58,6 +58,9 @@ dependencies:
focused_menu:
git:
url: https://github.com/stonega/focused_menu.git
webfeed:
git:
url: https://github.com/stonega/webfeed.git
dev_dependencies:
flutter_test:

View File

@ -10,7 +10,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:tsacdop/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
testWidgets('Counter increments smoke test', (tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());