diff --git a/.gitignore b/.gitignore index 821d7ac..bdb020c 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ /build/ pubspec.lock .vscode +analysis_options.yaml # Web related lib/generated_plugin_registrant.dart diff --git a/lib/generated/intl/messages_all.dart b/lib/generated/intl/messages_all.dart index cefdb1e..1895d15 100644 --- a/lib/generated/intl/messages_all.dart +++ b/lib/generated/intl/messages_all.dart @@ -42,8 +42,9 @@ MessageLookupByLibrary _findExact(String localeName) { /// User programs should call this before using [localeName] for messages. Future 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 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); } diff --git a/lib/generated/intl/messages_fr.dart b/lib/generated/intl/messages_fr.dart index b91676d..d44941c 100644 --- a/lib/generated/intl/messages_fr.dart +++ b/lib/generated/intl/messages_fr.dart @@ -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"), diff --git a/lib/generated/intl/messages_zh-Hans.dart b/lib/generated/intl/messages_zh-Hans.dart index 3ac8a77..a862b33 100644 --- a/lib/generated/intl/messages_zh-Hans.dart +++ b/lib/generated/intl/messages_zh-Hans.dart @@ -19,11 +19,9 @@ typedef String MessageIfAbsent(String messageStr, List 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(_) => { - "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(_) => { + "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 + }; } diff --git a/lib/home/about.dart b/lib/home/about.dart index 4ec3cc8..9424396 100644 --- a/lib/home/about.dart +++ b/lib/home/about.dart @@ -244,7 +244,7 @@ class AboutApp extends StatelessWidget { ), Expanded( child: Text( - 'ppp(oza987@protonmail.com)', + 'ppp', maxLines: 1, overflow: TextOverflow.fade, )), diff --git a/lib/home/search_podcast.dart b/lib/home/search_podcast.dart index 9b20528..d57597f 100644 --- a/lib/home/search_podcast.dart +++ b/lib/home/search_podcast.dart @@ -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 { final String searchFieldLabel; diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 9bcc56b..539c2bc 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -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": {}, diff --git a/lib/local_storage/sqflite_localpodcast.dart b/lib/local_storage/sqflite_localpodcast.dart index 91df114..96cc32f 100644 --- a/lib/local_storage/sqflite_localpodcast.dart +++ b/lib/local_storage/sqflite_localpodcast.dart @@ -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) diff --git a/lib/settings/history.dart b/lib/settings/history.dart index a2d5908..9c8b3b1 100644 --- a/lib/settings/history.dart +++ b/lib/settings/history.dart @@ -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 diff --git a/lib/state/podcast_group.dart b/lib/state/podcast_group.dart index 6eb6255..6797340 100644 --- a/lib/state/podcast_group.dart +++ b/lib/state/podcast_group.dart @@ -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; diff --git a/lib/type/searchpodcast.dart b/lib/type/searchpodcast.dart index 5bc1c41..1197241 100644 --- a/lib/type/searchpodcast.dart +++ b/lib/type/searchpodcast.dart @@ -70,6 +70,7 @@ class OnlinePodcast { int get interval { if (count < 1) { + // ignore: avoid_returning_null return null; } return (latestPubDate - earliestPubDate) ~/ count; diff --git a/lib/util/custom_dropdown.dart b/lib/util/custom_dropdown.dart index b1600ec..d13eaa2 100644 --- a/lib/util/custom_dropdown.dart +++ b/lib/util/custom_dropdown.dart @@ -1100,7 +1100,9 @@ class MyDropdownButton extends StatefulWidget { } class _MyDropdownButtonState extends State> - with WidgetsBindingObserver { + // ignore: prefer_mixin + with + WidgetsBindingObserver { int _selectedIndex; _DropdownRoute _dropdownRoute; Orientation _lastOrientation; diff --git a/lib/webfeed/README.md b/lib/webfeed/README.md deleted file mode 100644 index ea9e518..0000000 --- a/lib/webfeed/README.md +++ /dev/null @@ -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 \ No newline at end of file diff --git a/lib/webfeed/domain/atom_category.dart b/lib/webfeed/domain/atom_category.dart deleted file mode 100644 index 22c6a97..0000000 --- a/lib/webfeed/domain/atom_category.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/atom_feed.dart b/lib/webfeed/domain/atom_feed.dart deleted file mode 100644 index 8a4245b..0000000 --- a/lib/webfeed/domain/atom_feed.dart +++ /dev/null @@ -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 items; - - final List links; - final List authors; - final List contributors; - final List 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, - ); - } -} diff --git a/lib/webfeed/domain/atom_generator.dart b/lib/webfeed/domain/atom_generator.dart deleted file mode 100644 index 14eb70d..0000000 --- a/lib/webfeed/domain/atom_generator.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/atom_item.dart b/lib/webfeed/domain/atom_item.dart deleted file mode 100644 index ce7b35e..0000000 --- a/lib/webfeed/domain/atom_item.dart +++ /dev/null @@ -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 authors; - final List links; - final List categories; - final List 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), - ); - } -} diff --git a/lib/webfeed/domain/atom_link.dart b/lib/webfeed/domain/atom_link.dart deleted file mode 100644 index 3b570f2..0000000 --- a/lib/webfeed/domain/atom_link.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/atom_person.dart b/lib/webfeed/domain/atom_person.dart deleted file mode 100644 index e0d8e80..0000000 --- a/lib/webfeed/domain/atom_person.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/atom_source.dart b/lib/webfeed/domain/atom_source.dart deleted file mode 100644 index ddc53b5..0000000 --- a/lib/webfeed/domain/atom_source.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/dublin_core/dublin_core.dart b/lib/webfeed/domain/dublin_core/dublin_core.dart deleted file mode 100644 index 16cf96c..0000000 --- a/lib/webfeed/domain/dublin_core/dublin_core.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/category.dart b/lib/webfeed/domain/media/category.dart deleted file mode 100644 index 4796cd7..0000000 --- a/lib/webfeed/domain/media/category.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/community.dart b/lib/webfeed/domain/media/community.dart deleted file mode 100644 index 752b5f3..0000000 --- a/lib/webfeed/domain/media/community.dart +++ /dev/null @@ -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"), - ), - ); - } -} diff --git a/lib/webfeed/domain/media/content.dart b/lib/webfeed/domain/media/content.dart deleted file mode 100644 index 3a4ebaa..0000000 --- a/lib/webfeed/domain/media/content.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/copyright.dart b/lib/webfeed/domain/media/copyright.dart deleted file mode 100644 index 1cad059..0000000 --- a/lib/webfeed/domain/media/copyright.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/credit.dart b/lib/webfeed/domain/media/credit.dart deleted file mode 100644 index 70a5e50..0000000 --- a/lib/webfeed/domain/media/credit.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/description.dart b/lib/webfeed/domain/media/description.dart deleted file mode 100644 index ba6f0e0..0000000 --- a/lib/webfeed/domain/media/description.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/embed.dart b/lib/webfeed/domain/media/embed.dart deleted file mode 100644 index 615575f..0000000 --- a/lib/webfeed/domain/media/embed.dart +++ /dev/null @@ -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 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(), - ); - } -} diff --git a/lib/webfeed/domain/media/group.dart b/lib/webfeed/domain/media/group.dart deleted file mode 100644 index 7784afd..0000000 --- a/lib/webfeed/domain/media/group.dart +++ /dev/null @@ -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 contents; - final List 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"), - ), - ); - } -} diff --git a/lib/webfeed/domain/media/hash.dart b/lib/webfeed/domain/media/hash.dart deleted file mode 100644 index 72ce859..0000000 --- a/lib/webfeed/domain/media/hash.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/license.dart b/lib/webfeed/domain/media/license.dart deleted file mode 100644 index c52a8c6..0000000 --- a/lib/webfeed/domain/media/license.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/media.dart b/lib/webfeed/domain/media/media.dart deleted file mode 100644 index 5c584c2..0000000 --- a/lib/webfeed/domain/media/media.dart +++ /dev/null @@ -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 contents; - final List credits; - final Category category; - final Rating rating; - final Title title; - final Description description; - final String keywords; - final List thumbnails; - final Hash hash; - final Player player; - final Copyright copyright; - final Text text; - final Restriction restriction; - final Community community; - final List comments; - final Embed embed; - final List responses; - final List backLinks; - final Status status; - final List prices; - final License license; - final PeerLink peerLink; - final Rights rights; - final List 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() ?? - [], - ); - } -} diff --git a/lib/webfeed/domain/media/param.dart b/lib/webfeed/domain/media/param.dart deleted file mode 100644 index 175e6b8..0000000 --- a/lib/webfeed/domain/media/param.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/peer_link.dart b/lib/webfeed/domain/media/peer_link.dart deleted file mode 100644 index 6c51a17..0000000 --- a/lib/webfeed/domain/media/peer_link.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/player.dart b/lib/webfeed/domain/media/player.dart deleted file mode 100644 index 23d5e7a..0000000 --- a/lib/webfeed/domain/media/player.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/price.dart b/lib/webfeed/domain/media/price.dart deleted file mode 100644 index 6da075b..0000000 --- a/lib/webfeed/domain/media/price.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/rating.dart b/lib/webfeed/domain/media/rating.dart deleted file mode 100644 index 77c2b12..0000000 --- a/lib/webfeed/domain/media/rating.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/restriction.dart b/lib/webfeed/domain/media/restriction.dart deleted file mode 100644 index 4aa56bd..0000000 --- a/lib/webfeed/domain/media/restriction.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/rights.dart b/lib/webfeed/domain/media/rights.dart deleted file mode 100644 index eb00d4d..0000000 --- a/lib/webfeed/domain/media/rights.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/scene.dart b/lib/webfeed/domain/media/scene.dart deleted file mode 100644 index f388674..0000000 --- a/lib/webfeed/domain/media/scene.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/star_rating.dart b/lib/webfeed/domain/media/star_rating.dart deleted file mode 100644 index ae4c400..0000000 --- a/lib/webfeed/domain/media/star_rating.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/statistics.dart b/lib/webfeed/domain/media/statistics.dart deleted file mode 100644 index d93461f..0000000 --- a/lib/webfeed/domain/media/statistics.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/status.dart b/lib/webfeed/domain/media/status.dart deleted file mode 100644 index 3071a09..0000000 --- a/lib/webfeed/domain/media/status.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/tags.dart b/lib/webfeed/domain/media/tags.dart deleted file mode 100644 index c7001a7..0000000 --- a/lib/webfeed/domain/media/tags.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/text.dart b/lib/webfeed/domain/media/text.dart deleted file mode 100644 index 1ff886b..0000000 --- a/lib/webfeed/domain/media/text.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/media/thumbnail.dart b/lib/webfeed/domain/media/thumbnail.dart deleted file mode 100644 index 8adce3b..0000000 --- a/lib/webfeed/domain/media/thumbnail.dart +++ /dev/null @@ -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"), - ); - } -} diff --git a/lib/webfeed/domain/media/title.dart b/lib/webfeed/domain/media/title.dart deleted file mode 100644 index 8c875a6..0000000 --- a/lib/webfeed/domain/media/title.dart +++ /dev/null @@ -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, - ); - } -} diff --git a/lib/webfeed/domain/rss_category.dart b/lib/webfeed/domain/rss_category.dart deleted file mode 100644 index 845a837..0000000 --- a/lib/webfeed/domain/rss_category.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/rss_cloud.dart b/lib/webfeed/domain/rss_cloud.dart deleted file mode 100644 index 74d8b6a..0000000 --- a/lib/webfeed/domain/rss_cloud.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/rss_content.dart b/lib/webfeed/domain/rss_content.dart deleted file mode 100644 index 5e512c8..0000000 --- a/lib/webfeed/domain/rss_content.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:xml/xml.dart'; - -final _imagesRegExp = new RegExp( - "]+)(?:'|\")", - multiLine: true, - caseSensitive: false, -); - -/// For RSS Content Module: -/// -/// - `xmlns:content="http://purl.org/rss/1.0/modules/content/"` -/// -class RssContent { - String value; - Iterable images; - - RssContent(this.value, this.images); - - factory RssContent.parse(XmlElement element) { - if (element == null) { - return RssContent('', ['']); - } - final content = element.text.trim(); - final images = []; - _imagesRegExp.allMatches(content).forEach((match) { - images.add(match.group(1)); - }); - return RssContent(content, images); - } -} diff --git a/lib/webfeed/domain/rss_enclosure.dart b/lib/webfeed/domain/rss_enclosure.dart deleted file mode 100644 index 4b125e2..0000000 --- a/lib/webfeed/domain/rss_enclosure.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/rss_feed.dart b/lib/webfeed/domain/rss_feed.dart deleted file mode 100644 index 4e91dc5..0000000 --- a/lib/webfeed/domain/rss_feed.dart +++ /dev/null @@ -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 items; - - final RssImage image; - final RssCloud cloud; - final List categories; - final List skipDays; - final List 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), - ); - } -} diff --git a/lib/webfeed/domain/rss_image.dart b/lib/webfeed/domain/rss_image.dart deleted file mode 100644 index 680c47d..0000000 --- a/lib/webfeed/domain/rss_image.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/domain/rss_item.dart b/lib/webfeed/domain/rss_item.dart deleted file mode 100644 index e96428c..0000000 --- a/lib/webfeed/domain/rss_item.dart +++ /dev/null @@ -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 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), - ); - } -} diff --git a/lib/webfeed/domain/rss_item_itunes.dart b/lib/webfeed/domain/rss_item_itunes.dart deleted file mode 100644 index 04ecedd..0000000 --- a/lib/webfeed/domain/rss_item_itunes.dart +++ /dev/null @@ -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 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, - ); -} diff --git a/lib/webfeed/domain/rss_itunes.dart b/lib/webfeed/domain/rss_itunes.dart deleted file mode 100644 index 2278ab4..0000000 --- a/lib/webfeed/domain/rss_itunes.dart +++ /dev/null @@ -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 keywords; - final RssItunesImage image; - final List 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"), - ); - } -} - diff --git a/lib/webfeed/domain/rss_itunes_category.dart b/lib/webfeed/domain/rss_itunes_category.dart deleted file mode 100644 index b79f339..0000000 --- a/lib/webfeed/domain/rss_itunes_category.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:xml/xml.dart'; - -class RssItunesCategory { - final String category; - final List subCategories; - - RssItunesCategory({this.category, this.subCategories}); - - factory RssItunesCategory.parse(XmlElement element) { - if (element == null) return null; - - Iterable 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(), - ); - } -} diff --git a/lib/webfeed/domain/rss_itunes_episode_type.dart b/lib/webfeed/domain/rss_itunes_episode_type.dart deleted file mode 100644 index 30e639d..0000000 --- a/lib/webfeed/domain/rss_itunes_episode_type.dart +++ /dev/null @@ -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; - } -} diff --git a/lib/webfeed/domain/rss_itunes_image.dart b/lib/webfeed/domain/rss_itunes_image.dart deleted file mode 100644 index 7b2ef2f..0000000 --- a/lib/webfeed/domain/rss_itunes_image.dart +++ /dev/null @@ -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(), - ); - } -} diff --git a/lib/webfeed/domain/rss_itunes_owner.dart b/lib/webfeed/domain/rss_itunes_owner.dart deleted file mode 100644 index 4bcadc5..0000000 --- a/lib/webfeed/domain/rss_itunes_owner.dart +++ /dev/null @@ -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(), - ); - } -} diff --git a/lib/webfeed/domain/rss_itunes_type.dart b/lib/webfeed/domain/rss_itunes_type.dart deleted file mode 100644 index b2cb031..0000000 --- a/lib/webfeed/domain/rss_itunes_type.dart +++ /dev/null @@ -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; - } -} diff --git a/lib/webfeed/domain/rss_source.dart b/lib/webfeed/domain/rss_source.dart deleted file mode 100644 index 6d82be8..0000000 --- a/lib/webfeed/domain/rss_source.dart +++ /dev/null @@ -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); - } -} diff --git a/lib/webfeed/util/helpers.dart b/lib/webfeed/util/helpers.dart deleted file mode 100644 index 91ba26b..0000000 --- a/lib/webfeed/util/helpers.dart +++ /dev/null @@ -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 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); -} - diff --git a/lib/webfeed/webfeed.dart b/lib/webfeed/webfeed.dart deleted file mode 100644 index 94c2632..0000000 --- a/lib/webfeed/webfeed.dart +++ /dev/null @@ -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'; diff --git a/pubspec.yaml b/pubspec.yaml index 188bcc0..a586674 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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: diff --git a/test/widget_test.dart b/test/widget_test.dart index b303281..20eeb83 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -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());