mirror of
https://github.com/stonega/tsacdop
synced 2025-02-17 20:10:37 +01:00
Seperate webfeed plugin from app.
This commit is contained in:
parent
54120848bb
commit
691c25fd6b
1
.gitignore
vendored
1
.gitignore
vendored
@ -32,6 +32,7 @@
|
||||
/build/
|
||||
pubspec.lock
|
||||
.vscode
|
||||
analysis_options.yaml
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
@ -42,8 +42,9 @@ MessageLookupByLibrary _findExact(String localeName) {
|
||||
/// User programs should call this before using [localeName] for messages.
|
||||
Future<bool> initializeMessages(String localeName) async {
|
||||
var availableLocale = Intl.verifiedLocale(
|
||||
localeName, (locale) => _deferredLibraries[locale] != null,
|
||||
onFailure: (_) => null);
|
||||
localeName,
|
||||
(locale) => _deferredLibraries[locale] != null,
|
||||
onFailure: (_) => null);
|
||||
if (availableLocale == null) {
|
||||
return new Future.value(false);
|
||||
}
|
||||
@ -57,15 +58,14 @@ Future<bool> initializeMessages(String localeName) async {
|
||||
bool _messagesExistFor(String locale) {
|
||||
try {
|
||||
return _findExact(locale) != null;
|
||||
// ignore: avoid_catches_without_on_clauses
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
MessageLookupByLibrary _findGeneratedMessagesFor(String locale) {
|
||||
var actualLocale =
|
||||
Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null);
|
||||
var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor,
|
||||
onFailure: (_) => null);
|
||||
if (actualLocale == null) return null;
|
||||
return _findExact(actualLocale);
|
||||
}
|
||||
|
@ -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"),
|
||||
|
@ -19,11 +19,9 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
||||
class MessageLookup extends MessageLookupByLibrary {
|
||||
String get localeName => 'zh_Hans';
|
||||
|
||||
static m0(groupName, count) =>
|
||||
"{count, plural, zero{} other{{group Name}分组${count}集节目添加到播放列表}}";
|
||||
static m0(groupName, count) => "{count, plural, zero{} other{{group Name}分组${count}集节目添加到播放列表}}";
|
||||
|
||||
static m1(count) =>
|
||||
"${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}";
|
||||
static m1(count) => "${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}";
|
||||
|
||||
static m2(count) => "${Intl.plural(count, zero: '今天', other: '${count}天前')}";
|
||||
|
||||
@ -39,14 +37,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static m8(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}小时前')}";
|
||||
|
||||
static m9(count) =>
|
||||
"${Intl.plural(count, zero: '0小时', other: '${count} 小时')}";
|
||||
static m9(count) => "${Intl.plural(count, zero: '0小时', other: '${count} 小时')}";
|
||||
|
||||
static m10(count) =>
|
||||
"${Intl.plural(count, zero: '刚刚', other: '${count}分钟前')}";
|
||||
static m10(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}分钟前')}";
|
||||
|
||||
static m11(count) =>
|
||||
"${Intl.plural(count, zero: '0分钟', other: '${count}分钟')}";
|
||||
static m11(count) => "${Intl.plural(count, zero: '0分钟', other: '${count}分钟')}";
|
||||
|
||||
static m12(title) => "获取数据 ${title}";
|
||||
|
||||
@ -68,8 +63,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static m21(date) => "${date}移除";
|
||||
|
||||
static m22(count) =>
|
||||
"${Intl.plural(count, zero: '0 秒', other: '${count} 秒')}";
|
||||
static m22(count) => "${Intl.plural(count, zero: '0 秒', other: '${count} 秒')}";
|
||||
|
||||
static m23(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}秒前')}";
|
||||
|
||||
@ -79,301 +73,251 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static m26(time) => "到${time}";
|
||||
|
||||
static m27(count) =>
|
||||
"${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
|
||||
static m27(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
|
||||
|
||||
static m28(version) => "版本:${version}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static _notInlinedMessages(_) => <String, Function>{
|
||||
"add": MessageLookupByLibrary.simpleMessage("订阅"),
|
||||
"addEpisodeGroup": m0,
|
||||
"addNewEpisodeAll": m1,
|
||||
"addNewEpisodeTooltip":
|
||||
MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
|
||||
"addSomeGroups": MessageLookupByLibrary.simpleMessage("请添加分组"),
|
||||
"all": MessageLookupByLibrary.simpleMessage("全部"),
|
||||
"autoDownload": MessageLookupByLibrary.simpleMessage("自动下载"),
|
||||
"back": MessageLookupByLibrary.simpleMessage("返回"),
|
||||
"buffering": MessageLookupByLibrary.simpleMessage("缓冲"),
|
||||
"cancel": MessageLookupByLibrary.simpleMessage("取消"),
|
||||
"cellularConfirm": MessageLookupByLibrary.simpleMessage("流量确认"),
|
||||
"cellularConfirmDes":
|
||||
MessageLookupByLibrary.simpleMessage("您确定使用流量下载吗"),
|
||||
"changeLayout": MessageLookupByLibrary.simpleMessage("修改布局"),
|
||||
"changelog": MessageLookupByLibrary.simpleMessage("更新日志"),
|
||||
"chooseA": MessageLookupByLibrary.simpleMessage("选择"),
|
||||
"clear": MessageLookupByLibrary.simpleMessage("清除"),
|
||||
"color": MessageLookupByLibrary.simpleMessage("颜色"),
|
||||
"confirm": MessageLookupByLibrary.simpleMessage("确认"),
|
||||
"darkMode": MessageLookupByLibrary.simpleMessage("夜晚模式"),
|
||||
"daysAgo": m2,
|
||||
"daysCount": m3,
|
||||
"delete": MessageLookupByLibrary.simpleMessage("删除"),
|
||||
"developer": MessageLookupByLibrary.simpleMessage("关于我"),
|
||||
"dismiss": MessageLookupByLibrary.simpleMessage("忽略"),
|
||||
"done": MessageLookupByLibrary.simpleMessage("完成"),
|
||||
"download": MessageLookupByLibrary.simpleMessage("下载"),
|
||||
"downloaded": MessageLookupByLibrary.simpleMessage("已下载"),
|
||||
"editGroupName": MessageLookupByLibrary.simpleMessage("修改组名"),
|
||||
"endOfEpisode": MessageLookupByLibrary.simpleMessage("节目结束"),
|
||||
"episode": m4,
|
||||
"featureDiscoveryEditGroup":
|
||||
MessageLookupByLibrary.simpleMessage("点击修改分组"),
|
||||
"featureDiscoveryEditGroupDes": MessageLookupByLibrary.simpleMessage(
|
||||
"您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
|
||||
"featureDiscoveryEpisode": MessageLookupByLibrary.simpleMessage("节目界面"),
|
||||
"featureDiscoveryEpisodeDes":
|
||||
MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
|
||||
"featureDiscoveryEpisodeTitle":
|
||||
MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
|
||||
"featureDiscoveryGroup": MessageLookupByLibrary.simpleMessage("点击添加分组"),
|
||||
"featureDiscoveryGroupDes": MessageLookupByLibrary.simpleMessage(
|
||||
"新订阅播客默认分组为 Home,您可以添加新的分组,移动播客到新的分组,每个播客可以被添加到多个分组。"),
|
||||
"featureDiscoveryGroupPodcast":
|
||||
MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
|
||||
"featureDiscoveryGroupPodcastDes":
|
||||
MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
|
||||
"featureDiscoveryOMPL":
|
||||
MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
|
||||
"featureDiscoveryOMPLDes": MessageLookupByLibrary.simpleMessage(
|
||||
"在这里您可以导入OMPL文件,打开设置页面,或者刷新所有播客。"),
|
||||
"featureDiscoveryPlaylist":
|
||||
MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
|
||||
"featureDiscoveryPlaylistDes": MessageLookupByLibrary.simpleMessage(
|
||||
"您可以添加节目到播放列表,节目在播放后将会从播放列表自动移除。"),
|
||||
"featureDiscoveryPodcast": MessageLookupByLibrary.simpleMessage("播客界面"),
|
||||
"featureDiscoveryPodcastDes":
|
||||
MessageLookupByLibrary.simpleMessage("您可以点击“查看所有”新增或管理分组。"),
|
||||
"featureDiscoveryPodcastTitle":
|
||||
MessageLookupByLibrary.simpleMessage("您可以通过上下滑动切换分组"),
|
||||
"featureDiscoverySearch":
|
||||
MessageLookupByLibrary.simpleMessage("点击搜索播客"),
|
||||
"featureDiscoverySearchDes":
|
||||
MessageLookupByLibrary.simpleMessage("您可以通过搜索播客名称、关键字或者RSS链接订阅播客。"),
|
||||
"feedbackEmail": MessageLookupByLibrary.simpleMessage("发送邮件"),
|
||||
"feedbackGithub": MessageLookupByLibrary.simpleMessage("提交Issue"),
|
||||
"feedbackPlay": MessageLookupByLibrary.simpleMessage("Play评价"),
|
||||
"feedbackTelegram": MessageLookupByLibrary.simpleMessage("加入小组"),
|
||||
"filter": MessageLookupByLibrary.simpleMessage("过滤"),
|
||||
"fonts": MessageLookupByLibrary.simpleMessage("字体"),
|
||||
"from": m5,
|
||||
"goodNight": MessageLookupByLibrary.simpleMessage("晚安"),
|
||||
"groupExisted": MessageLookupByLibrary.simpleMessage("组名已使用"),
|
||||
"groupFilter": MessageLookupByLibrary.simpleMessage("分组"),
|
||||
"groupRemoveConfirm":
|
||||
MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
|
||||
"groups": m6,
|
||||
"homeGroupsSeeAll": MessageLookupByLibrary.simpleMessage("查看全部"),
|
||||
"homeMenuPlaylist": MessageLookupByLibrary.simpleMessage("播放列表"),
|
||||
"homeSubMenuSortBy": MessageLookupByLibrary.simpleMessage("排序"),
|
||||
"homeTabMenuFavotite": MessageLookupByLibrary.simpleMessage("收藏"),
|
||||
"homeTabMenuRecent": MessageLookupByLibrary.simpleMessage("最近更新"),
|
||||
"homeToprightMenuAbout": MessageLookupByLibrary.simpleMessage("关于"),
|
||||
"homeToprightMenuImportOMPL":
|
||||
MessageLookupByLibrary.simpleMessage("导入OMPL"),
|
||||
"homeToprightMenuRefreshAll":
|
||||
MessageLookupByLibrary.simpleMessage("全部刷新"),
|
||||
"hostedOn": m7,
|
||||
"hoursAgo": m8,
|
||||
"hoursCount": m9,
|
||||
"import": MessageLookupByLibrary.simpleMessage("导入"),
|
||||
"introFourthPage":
|
||||
MessageLookupByLibrary.simpleMessage("您可以长按节目打开快捷菜单。"),
|
||||
"introSecondPage":
|
||||
MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客,也可以直接导入OMPL文件。"),
|
||||
"introThirdPage":
|
||||
MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
|
||||
"later": MessageLookupByLibrary.simpleMessage("稍后"),
|
||||
"lightMode": MessageLookupByLibrary.simpleMessage("明亮模式"),
|
||||
"like": MessageLookupByLibrary.simpleMessage("喜欢"),
|
||||
"likeDate": MessageLookupByLibrary.simpleMessage("收藏日期"),
|
||||
"liked": MessageLookupByLibrary.simpleMessage("已收藏"),
|
||||
"listen": MessageLookupByLibrary.simpleMessage("收听"),
|
||||
"listened": MessageLookupByLibrary.simpleMessage("已收听"),
|
||||
"loadMore": MessageLookupByLibrary.simpleMessage("加载更多"),
|
||||
"mark": MessageLookupByLibrary.simpleMessage("标记"),
|
||||
"markConfirm": MessageLookupByLibrary.simpleMessage("确认标记"),
|
||||
"markConfirmContent":
|
||||
MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
|
||||
"markListened": MessageLookupByLibrary.simpleMessage("标记已收听"),
|
||||
"menu": MessageLookupByLibrary.simpleMessage("菜单"),
|
||||
"menuAllPodcasts": MessageLookupByLibrary.simpleMessage("所有订阅"),
|
||||
"menuMarkAllListened": MessageLookupByLibrary.simpleMessage("标记所有已收听"),
|
||||
"menuViewRSS": MessageLookupByLibrary.simpleMessage("查看 RSS"),
|
||||
"menuVisitSite": MessageLookupByLibrary.simpleMessage("访问网站"),
|
||||
"minsAgo": m10,
|
||||
"minsCount": m11,
|
||||
"network": MessageLookupByLibrary.simpleMessage("网络"),
|
||||
"newGroup": MessageLookupByLibrary.simpleMessage("创建分组"),
|
||||
"newestFirst": MessageLookupByLibrary.simpleMessage("由新到旧"),
|
||||
"next": MessageLookupByLibrary.simpleMessage("下一步"),
|
||||
"noEpisodeDownload": MessageLookupByLibrary.simpleMessage("暂无下载节目"),
|
||||
"noEpisodeFavorite": MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
|
||||
"noEpisodeRecent": MessageLookupByLibrary.simpleMessage("暂无节目"),
|
||||
"noPodcastGroup": MessageLookupByLibrary.simpleMessage("分组无播客"),
|
||||
"noShownote": MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"),
|
||||
"notificaitonFatch": m12,
|
||||
"notificationNetworkError": m13,
|
||||
"notificationSubscribe": m14,
|
||||
"notificationSubscribeExisted": m15,
|
||||
"notificationSuccess": m16,
|
||||
"notificationUpdate": m17,
|
||||
"notificationUpdateError": m18,
|
||||
"oldestFirst": MessageLookupByLibrary.simpleMessage("由旧到新"),
|
||||
"play": MessageLookupByLibrary.simpleMessage("播放"),
|
||||
"playback": MessageLookupByLibrary.simpleMessage("播放控制"),
|
||||
"playing": MessageLookupByLibrary.simpleMessage("正在播放"),
|
||||
"plugins": MessageLookupByLibrary.simpleMessage("插件"),
|
||||
"podcast": m19,
|
||||
"podcastSubscribed": MessageLookupByLibrary.simpleMessage("播客已订阅"),
|
||||
"popupMenuDownloadDes": MessageLookupByLibrary.simpleMessage("下载节目"),
|
||||
"popupMenuLaterDes": MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
||||
"popupMenuLikeDes": MessageLookupByLibrary.simpleMessage("添加到收藏"),
|
||||
"popupMenuMarkDes": MessageLookupByLibrary.simpleMessage("设置为已收听"),
|
||||
"popupMenuPlayDes": MessageLookupByLibrary.simpleMessage("播放节目"),
|
||||
"privacyPolicy": MessageLookupByLibrary.simpleMessage("隐私条款"),
|
||||
"published": m20,
|
||||
"publishedDaily": MessageLookupByLibrary.simpleMessage("每日更新"),
|
||||
"publishedMonthly": MessageLookupByLibrary.simpleMessage("每月更新"),
|
||||
"publishedWeekly": MessageLookupByLibrary.simpleMessage("每周更新"),
|
||||
"publishedYearly": MessageLookupByLibrary.simpleMessage("每年更新"),
|
||||
"recoverSubscribe": MessageLookupByLibrary.simpleMessage("恢复订阅"),
|
||||
"refreshArtwork": MessageLookupByLibrary.simpleMessage("更新头像"),
|
||||
"remove": MessageLookupByLibrary.simpleMessage("移除"),
|
||||
"removeConfirm": MessageLookupByLibrary.simpleMessage("取消订阅"),
|
||||
"removePodcastDes": MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
|
||||
"removedAt": m21,
|
||||
"save": MessageLookupByLibrary.simpleMessage("保存"),
|
||||
"schedule": MessageLookupByLibrary.simpleMessage("定时"),
|
||||
"search": MessageLookupByLibrary.simpleMessage("搜索"),
|
||||
"searchEpisode": MessageLookupByLibrary.simpleMessage("搜索节目"),
|
||||
"searchInvalidRss": MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
|
||||
"searchPodcast": MessageLookupByLibrary.simpleMessage("搜索播客"),
|
||||
"secCount": m22,
|
||||
"secondsAgo": m23,
|
||||
"settingStorage": MessageLookupByLibrary.simpleMessage("储存空间"),
|
||||
"settings": MessageLookupByLibrary.simpleMessage("设置"),
|
||||
"settingsAccentColor": MessageLookupByLibrary.simpleMessage("次要颜色"),
|
||||
"settingsAccentColorDes":
|
||||
MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
|
||||
"settingsAppIntro": MessageLookupByLibrary.simpleMessage("引导页"),
|
||||
"settingsAppearance": MessageLookupByLibrary.simpleMessage("界面"),
|
||||
"settingsAppearanceDes": MessageLookupByLibrary.simpleMessage("颜色与主题"),
|
||||
"settingsAudioCache": MessageLookupByLibrary.simpleMessage("播放缓存"),
|
||||
"settingsAudioCacheDes": MessageLookupByLibrary.simpleMessage("播放缓存设置"),
|
||||
"settingsAutoDelete": MessageLookupByLibrary.simpleMessage("自动删除下载节目"),
|
||||
"settingsAutoDeleteDes":
|
||||
MessageLookupByLibrary.simpleMessage("默认 30 天"),
|
||||
"settingsAutoPlayDes": MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
||||
"settingsBackup": MessageLookupByLibrary.simpleMessage("备份"),
|
||||
"settingsBackupDes": MessageLookupByLibrary.simpleMessage("备份应用数据"),
|
||||
"settingsDefaultGrid": MessageLookupByLibrary.simpleMessage("默认布局"),
|
||||
"settingsDefaultGridDownload":
|
||||
MessageLookupByLibrary.simpleMessage("下载页"),
|
||||
"settingsDefaultGridFavorite":
|
||||
MessageLookupByLibrary.simpleMessage("收藏页"),
|
||||
"settingsDefaultGridPodcast":
|
||||
MessageLookupByLibrary.simpleMessage("播客页"),
|
||||
"settingsDefaultGridRecent":
|
||||
MessageLookupByLibrary.simpleMessage("最近页"),
|
||||
"settingsDiscovery": MessageLookupByLibrary.simpleMessage("再次功能介绍"),
|
||||
"settingsEnableSyncing": MessageLookupByLibrary.simpleMessage("开启自动更新"),
|
||||
"settingsEnableSyncingDes":
|
||||
MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
|
||||
"settingsExportDes": MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
|
||||
"settingsFastForwardSec": MessageLookupByLibrary.simpleMessage("快进时间"),
|
||||
"settingsFastForwardSecDes":
|
||||
MessageLookupByLibrary.simpleMessage("修改播放器快进时间"),
|
||||
"settingsFeedback": MessageLookupByLibrary.simpleMessage("反馈"),
|
||||
"settingsFeedbackDes": MessageLookupByLibrary.simpleMessage("意见与建议"),
|
||||
"settingsHistory": MessageLookupByLibrary.simpleMessage("历史记录"),
|
||||
"settingsHistoryDes": MessageLookupByLibrary.simpleMessage("收听记录"),
|
||||
"settingsInfo": MessageLookupByLibrary.simpleMessage("信息"),
|
||||
"settingsInterface": MessageLookupByLibrary.simpleMessage("界面"),
|
||||
"settingsLanguages": MessageLookupByLibrary.simpleMessage("语言"),
|
||||
"settingsLanguagesDes": MessageLookupByLibrary.simpleMessage("设置语言"),
|
||||
"settingsLayout": MessageLookupByLibrary.simpleMessage("布局"),
|
||||
"settingsLayoutDes": MessageLookupByLibrary.simpleMessage("应用布局"),
|
||||
"settingsLibraries": MessageLookupByLibrary.simpleMessage("开源"),
|
||||
"settingsLibrariesDes": MessageLookupByLibrary.simpleMessage("开源项目使用"),
|
||||
"settingsManageDownload": MessageLookupByLibrary.simpleMessage("下载管理"),
|
||||
"settingsManageDownloadDes":
|
||||
MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
|
||||
"settingsMenuAutoPlay":
|
||||
MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
||||
"settingsNetworkCellular":
|
||||
MessageLookupByLibrary.simpleMessage("蜂窝数据确认"),
|
||||
"settingsNetworkCellularAuto":
|
||||
MessageLookupByLibrary.simpleMessage("是否用蜂窝数据自动下载"),
|
||||
"settingsNetworkCellularAutoDes":
|
||||
MessageLookupByLibrary.simpleMessage("你可以在分组管理页面设置自动下载"),
|
||||
"settingsNetworkCellularDes":
|
||||
MessageLookupByLibrary.simpleMessage("在使用蜂窝数据下载前确认"),
|
||||
"settingsPlayDes": MessageLookupByLibrary.simpleMessage("播放列表和播放器"),
|
||||
"settingsPopupMenu": MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
|
||||
"settingsPopupMenuDes":
|
||||
MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
|
||||
"settingsPrefrence": MessageLookupByLibrary.simpleMessage("首选项"),
|
||||
"settingsRealDark": MessageLookupByLibrary.simpleMessage("极黑"),
|
||||
"settingsRealDarkDes":
|
||||
MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
|
||||
"settingsRewindSec": MessageLookupByLibrary.simpleMessage("快退时间"),
|
||||
"settingsRewindSecDes":
|
||||
MessageLookupByLibrary.simpleMessage("修改播放器快退时间"),
|
||||
"settingsSTAuto": MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
|
||||
"settingsSTAutoDes": MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
|
||||
"settingsSTDefaultTime": MessageLookupByLibrary.simpleMessage("默认时长"),
|
||||
"settingsSTDefautTimeDes":
|
||||
MessageLookupByLibrary.simpleMessage("睡眠模式默认时长"),
|
||||
"settingsSTMode": MessageLookupByLibrary.simpleMessage("自动睡眠模式默认时长"),
|
||||
"settingsStorageDes": MessageLookupByLibrary.simpleMessage("管理缓存和下载空间"),
|
||||
"settingsSyncing": MessageLookupByLibrary.simpleMessage("同步"),
|
||||
"settingsSyncingDes": MessageLookupByLibrary.simpleMessage("在后台更新播客"),
|
||||
"settingsTapToOpenPopupMenu":
|
||||
MessageLookupByLibrary.simpleMessage("轻点打开弹出菜单"),
|
||||
"settingsTapToOpenPopupMenuDes":
|
||||
MessageLookupByLibrary.simpleMessage("开启后您需长按打开节目页"),
|
||||
"settingsTheme": MessageLookupByLibrary.simpleMessage("主题"),
|
||||
"settingsUpdateInterval": MessageLookupByLibrary.simpleMessage("更新频率"),
|
||||
"settingsUpdateIntervalDes":
|
||||
MessageLookupByLibrary.simpleMessage("默认 24 小时"),
|
||||
"share": MessageLookupByLibrary.simpleMessage("分享"),
|
||||
"size": MessageLookupByLibrary.simpleMessage("大小"),
|
||||
"skipSecondsAtStart": MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
|
||||
"sleepTimer": MessageLookupByLibrary.simpleMessage("睡眠模式"),
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("订阅"),
|
||||
"subscribeExportDes":
|
||||
MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
|
||||
"systemDefault": MessageLookupByLibrary.simpleMessage("系统默认"),
|
||||
"timeLastPlayed": m24,
|
||||
"timeLeft": m25,
|
||||
"to": m26,
|
||||
"toastAddPlaylist": MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
||||
"toastDiscovery": MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
|
||||
"toastFileError": MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
|
||||
"toastFileNotValid": MessageLookupByLibrary.simpleMessage("文件错误"),
|
||||
"toastHomeGroupNotSupport":
|
||||
MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"),
|
||||
"toastImportSettingsSuccess":
|
||||
MessageLookupByLibrary.simpleMessage("导入设置成功"),
|
||||
"toastOneGroup": MessageLookupByLibrary.simpleMessage("请至少选择一个分组"),
|
||||
"toastPodcastRecovering":
|
||||
MessageLookupByLibrary.simpleMessage("恢复中,请稍后"),
|
||||
"toastReadFile": MessageLookupByLibrary.simpleMessage("读取文件成功"),
|
||||
"toastRecoverFailed": MessageLookupByLibrary.simpleMessage("恢复订阅失败"),
|
||||
"toastRemovePlaylist": MessageLookupByLibrary.simpleMessage("从播放列表移除"),
|
||||
"toastSettingSaved": MessageLookupByLibrary.simpleMessage("设置已保存"),
|
||||
"toastTimeEqualEnd": MessageLookupByLibrary.simpleMessage("与结束时刻相同"),
|
||||
"toastTimeEqualStart": MessageLookupByLibrary.simpleMessage("与起始时刻相同"),
|
||||
"translators": MessageLookupByLibrary.simpleMessage("翻译者"),
|
||||
"understood": MessageLookupByLibrary.simpleMessage("了解"),
|
||||
"undo": MessageLookupByLibrary.simpleMessage("撤销"),
|
||||
"unlike": MessageLookupByLibrary.simpleMessage("取消喜欢"),
|
||||
"unliked": MessageLookupByLibrary.simpleMessage("从收藏移除"),
|
||||
"updateDate": MessageLookupByLibrary.simpleMessage("更新日期"),
|
||||
"updateEpisodesCount": m27,
|
||||
"updateFailed": MessageLookupByLibrary.simpleMessage("更新失败"),
|
||||
"version": m28
|
||||
};
|
||||
static _notInlinedMessages(_) => <String, Function> {
|
||||
"add" : MessageLookupByLibrary.simpleMessage("订阅"),
|
||||
"addEpisodeGroup" : m0,
|
||||
"addNewEpisodeAll" : m1,
|
||||
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
|
||||
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("请添加分组"),
|
||||
"all" : MessageLookupByLibrary.simpleMessage("全部"),
|
||||
"autoDownload" : MessageLookupByLibrary.simpleMessage("自动下载"),
|
||||
"back" : MessageLookupByLibrary.simpleMessage("返回"),
|
||||
"buffering" : MessageLookupByLibrary.simpleMessage("缓冲"),
|
||||
"cancel" : MessageLookupByLibrary.simpleMessage("取消"),
|
||||
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("流量确认"),
|
||||
"cellularConfirmDes" : MessageLookupByLibrary.simpleMessage("您确定使用流量下载吗"),
|
||||
"changeLayout" : MessageLookupByLibrary.simpleMessage("修改布局"),
|
||||
"changelog" : MessageLookupByLibrary.simpleMessage("更新日志"),
|
||||
"chooseA" : MessageLookupByLibrary.simpleMessage("选择"),
|
||||
"clear" : MessageLookupByLibrary.simpleMessage("清除"),
|
||||
"color" : MessageLookupByLibrary.simpleMessage("颜色"),
|
||||
"confirm" : MessageLookupByLibrary.simpleMessage("确认"),
|
||||
"darkMode" : MessageLookupByLibrary.simpleMessage("夜晚模式"),
|
||||
"daysAgo" : m2,
|
||||
"daysCount" : m3,
|
||||
"delete" : MessageLookupByLibrary.simpleMessage("删除"),
|
||||
"developer" : MessageLookupByLibrary.simpleMessage("关于我"),
|
||||
"dismiss" : MessageLookupByLibrary.simpleMessage("忽略"),
|
||||
"done" : MessageLookupByLibrary.simpleMessage("完成"),
|
||||
"download" : MessageLookupByLibrary.simpleMessage("下载"),
|
||||
"downloaded" : MessageLookupByLibrary.simpleMessage("已下载"),
|
||||
"editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"),
|
||||
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"),
|
||||
"episode" : m4,
|
||||
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"),
|
||||
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
|
||||
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"),
|
||||
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
|
||||
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
|
||||
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("点击添加分组"),
|
||||
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("新订阅播客默认分组为 Home,您可以添加新的分组,移动播客到新的分组,每个播客可以被添加到多个分组。"),
|
||||
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
|
||||
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
|
||||
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
|
||||
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("在这里您可以导入OMPL文件,打开设置页面,或者刷新所有播客。"),
|
||||
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
|
||||
"featureDiscoveryPlaylistDes" : MessageLookupByLibrary.simpleMessage("您可以添加节目到播放列表,节目在播放后将会从播放列表自动移除。"),
|
||||
"featureDiscoveryPodcast" : MessageLookupByLibrary.simpleMessage("播客界面"),
|
||||
"featureDiscoveryPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击“查看所有”新增或管理分组。"),
|
||||
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("您可以通过上下滑动切换分组"),
|
||||
"featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("点击搜索播客"),
|
||||
"featureDiscoverySearchDes" : MessageLookupByLibrary.simpleMessage("您可以通过搜索播客名称、关键字或者RSS链接订阅播客。"),
|
||||
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("发送邮件"),
|
||||
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("提交Issue"),
|
||||
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Play评价"),
|
||||
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("加入小组"),
|
||||
"filter" : MessageLookupByLibrary.simpleMessage("过滤"),
|
||||
"fonts" : MessageLookupByLibrary.simpleMessage("字体"),
|
||||
"from" : m5,
|
||||
"goodNight" : MessageLookupByLibrary.simpleMessage("晚安"),
|
||||
"groupExisted" : MessageLookupByLibrary.simpleMessage("组名已使用"),
|
||||
"groupFilter" : MessageLookupByLibrary.simpleMessage("分组"),
|
||||
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
|
||||
"groups" : m6,
|
||||
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"),
|
||||
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"),
|
||||
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"),
|
||||
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("收藏"),
|
||||
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("最近更新"),
|
||||
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("关于"),
|
||||
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("导入OMPL"),
|
||||
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("全部刷新"),
|
||||
"hostedOn" : m7,
|
||||
"hoursAgo" : m8,
|
||||
"hoursCount" : m9,
|
||||
"import" : MessageLookupByLibrary.simpleMessage("导入"),
|
||||
"introFourthPage" : MessageLookupByLibrary.simpleMessage("您可以长按节目打开快捷菜单。"),
|
||||
"introSecondPage" : MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客,也可以直接导入OMPL文件。"),
|
||||
"introThirdPage" : MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
|
||||
"later" : MessageLookupByLibrary.simpleMessage("稍后"),
|
||||
"lightMode" : MessageLookupByLibrary.simpleMessage("明亮模式"),
|
||||
"like" : MessageLookupByLibrary.simpleMessage("喜欢"),
|
||||
"likeDate" : MessageLookupByLibrary.simpleMessage("收藏日期"),
|
||||
"liked" : MessageLookupByLibrary.simpleMessage("已收藏"),
|
||||
"listen" : MessageLookupByLibrary.simpleMessage("收听"),
|
||||
"listened" : MessageLookupByLibrary.simpleMessage("已收听"),
|
||||
"loadMore" : MessageLookupByLibrary.simpleMessage("加载更多"),
|
||||
"mark" : MessageLookupByLibrary.simpleMessage("标记"),
|
||||
"markConfirm" : MessageLookupByLibrary.simpleMessage("确认标记"),
|
||||
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
|
||||
"markListened" : MessageLookupByLibrary.simpleMessage("标记已收听"),
|
||||
"menu" : MessageLookupByLibrary.simpleMessage("菜单"),
|
||||
"menuAllPodcasts" : MessageLookupByLibrary.simpleMessage("所有订阅"),
|
||||
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("标记所有已收听"),
|
||||
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("查看 RSS"),
|
||||
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("访问网站"),
|
||||
"minsAgo" : m10,
|
||||
"minsCount" : m11,
|
||||
"network" : MessageLookupByLibrary.simpleMessage("网络"),
|
||||
"newGroup" : MessageLookupByLibrary.simpleMessage("创建分组"),
|
||||
"newestFirst" : MessageLookupByLibrary.simpleMessage("由新到旧"),
|
||||
"next" : MessageLookupByLibrary.simpleMessage("下一步"),
|
||||
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("暂无下载节目"),
|
||||
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
|
||||
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("暂无节目"),
|
||||
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("分组无播客"),
|
||||
"noShownote" : MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"),
|
||||
"notificaitonFatch" : m12,
|
||||
"notificationNetworkError" : m13,
|
||||
"notificationSubscribe" : m14,
|
||||
"notificationSubscribeExisted" : m15,
|
||||
"notificationSuccess" : m16,
|
||||
"notificationUpdate" : m17,
|
||||
"notificationUpdateError" : m18,
|
||||
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
|
||||
"play" : MessageLookupByLibrary.simpleMessage("播放"),
|
||||
"playback" : MessageLookupByLibrary.simpleMessage("播放控制"),
|
||||
"playing" : MessageLookupByLibrary.simpleMessage("正在播放"),
|
||||
"plugins" : MessageLookupByLibrary.simpleMessage("插件"),
|
||||
"podcast" : m19,
|
||||
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("播客已订阅"),
|
||||
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("下载节目"),
|
||||
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
||||
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("添加到收藏"),
|
||||
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("设置为已收听"),
|
||||
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"),
|
||||
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"),
|
||||
"published" : m20,
|
||||
"publishedDaily" : MessageLookupByLibrary.simpleMessage("每日更新"),
|
||||
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("每月更新"),
|
||||
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("每周更新"),
|
||||
"publishedYearly" : MessageLookupByLibrary.simpleMessage("每年更新"),
|
||||
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("恢复订阅"),
|
||||
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("更新头像"),
|
||||
"remove" : MessageLookupByLibrary.simpleMessage("移除"),
|
||||
"removeConfirm" : MessageLookupByLibrary.simpleMessage("取消订阅"),
|
||||
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
|
||||
"removedAt" : m21,
|
||||
"save" : MessageLookupByLibrary.simpleMessage("保存"),
|
||||
"schedule" : MessageLookupByLibrary.simpleMessage("定时"),
|
||||
"search" : MessageLookupByLibrary.simpleMessage("搜索"),
|
||||
"searchEpisode" : MessageLookupByLibrary.simpleMessage("搜索节目"),
|
||||
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
|
||||
"searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"),
|
||||
"secCount" : m22,
|
||||
"secondsAgo" : m23,
|
||||
"settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"),
|
||||
"settings" : MessageLookupByLibrary.simpleMessage("设置"),
|
||||
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"),
|
||||
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
|
||||
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("引导页"),
|
||||
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("界面"),
|
||||
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("颜色与主题"),
|
||||
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("播放缓存"),
|
||||
"settingsAudioCacheDes" : MessageLookupByLibrary.simpleMessage("播放缓存设置"),
|
||||
"settingsAutoDelete" : MessageLookupByLibrary.simpleMessage("自动删除下载节目"),
|
||||
"settingsAutoDeleteDes" : MessageLookupByLibrary.simpleMessage("默认 30 天"),
|
||||
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
||||
"settingsBackup" : MessageLookupByLibrary.simpleMessage("备份"),
|
||||
"settingsBackupDes" : MessageLookupByLibrary.simpleMessage("备份应用数据"),
|
||||
"settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("默认布局"),
|
||||
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("下载页"),
|
||||
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("收藏页"),
|
||||
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("播客页"),
|
||||
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("最近页"),
|
||||
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("再次功能介绍"),
|
||||
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("开启自动更新"),
|
||||
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
|
||||
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
|
||||
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("快进时间"),
|
||||
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快进时间"),
|
||||
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("反馈"),
|
||||
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("意见与建议"),
|
||||
"settingsHistory" : MessageLookupByLibrary.simpleMessage("历史记录"),
|
||||
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("收听记录"),
|
||||
"settingsInfo" : MessageLookupByLibrary.simpleMessage("信息"),
|
||||
"settingsInterface" : MessageLookupByLibrary.simpleMessage("界面"),
|
||||
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("语言"),
|
||||
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("设置语言"),
|
||||
"settingsLayout" : MessageLookupByLibrary.simpleMessage("布局"),
|
||||
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("应用布局"),
|
||||
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("开源"),
|
||||
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("开源项目使用"),
|
||||
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("下载管理"),
|
||||
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
|
||||
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
||||
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("蜂窝数据确认"),
|
||||
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("是否用蜂窝数据自动下载"),
|
||||
"settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("你可以在分组管理页面设置自动下载"),
|
||||
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("在使用蜂窝数据下载前确认"),
|
||||
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("播放列表和播放器"),
|
||||
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
|
||||
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
|
||||
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"),
|
||||
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("极黑"),
|
||||
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
|
||||
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("快退时间"),
|
||||
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快退时间"),
|
||||
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
|
||||
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
|
||||
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("默认时长"),
|
||||
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("睡眠模式默认时长"),
|
||||
"settingsSTMode" : MessageLookupByLibrary.simpleMessage("自动睡眠模式默认时长"),
|
||||
"settingsStorageDes" : MessageLookupByLibrary.simpleMessage("管理缓存和下载空间"),
|
||||
"settingsSyncing" : MessageLookupByLibrary.simpleMessage("同步"),
|
||||
"settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新播客"),
|
||||
"settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("轻点打开弹出菜单"),
|
||||
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("开启后您需长按打开节目页"),
|
||||
"settingsTheme" : MessageLookupByLibrary.simpleMessage("主题"),
|
||||
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("更新频率"),
|
||||
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("默认 24 小时"),
|
||||
"share" : MessageLookupByLibrary.simpleMessage("分享"),
|
||||
"size" : MessageLookupByLibrary.simpleMessage("大小"),
|
||||
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
|
||||
"sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"),
|
||||
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
|
||||
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
|
||||
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),
|
||||
"timeLastPlayed" : m24,
|
||||
"timeLeft" : m25,
|
||||
"to" : m26,
|
||||
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
||||
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
|
||||
"toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
|
||||
"toastFileNotValid" : MessageLookupByLibrary.simpleMessage("文件错误"),
|
||||
"toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"),
|
||||
"toastImportSettingsSuccess" : MessageLookupByLibrary.simpleMessage("导入设置成功"),
|
||||
"toastOneGroup" : MessageLookupByLibrary.simpleMessage("请至少选择一个分组"),
|
||||
"toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("恢复中,请稍后"),
|
||||
"toastReadFile" : MessageLookupByLibrary.simpleMessage("读取文件成功"),
|
||||
"toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("恢复订阅失败"),
|
||||
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("从播放列表移除"),
|
||||
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("设置已保存"),
|
||||
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("与结束时刻相同"),
|
||||
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("与起始时刻相同"),
|
||||
"translators" : MessageLookupByLibrary.simpleMessage("翻译者"),
|
||||
"understood" : MessageLookupByLibrary.simpleMessage("了解"),
|
||||
"undo" : MessageLookupByLibrary.simpleMessage("撤销"),
|
||||
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),
|
||||
"unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"),
|
||||
"updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
|
||||
"updateEpisodesCount" : m27,
|
||||
"updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"),
|
||||
"version" : m28
|
||||
};
|
||||
}
|
||||
|
@ -244,7 +244,7 @@ class AboutApp extends StatelessWidget {
|
||||
),
|
||||
Expanded(
|
||||
child: Text(
|
||||
'ppp(oza987@protonmail.com)',
|
||||
'ppp',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.fade,
|
||||
)),
|
||||
|
@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_html/flutter_html.dart';
|
||||
import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:webfeed/webfeed.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../service/api_search.dart';
|
||||
@ -14,7 +15,6 @@ import '../state/podcast_group.dart';
|
||||
import '../type/searchepisodes.dart';
|
||||
import '../type/searchpodcast.dart';
|
||||
import '../util/extension_helper.dart';
|
||||
import '../webfeed/webfeed.dart';
|
||||
|
||||
class MyHomePageDelegate extends SearchDelegate<int> {
|
||||
final String searchFieldLabel;
|
||||
|
@ -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": {},
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -70,6 +70,7 @@ class OnlinePodcast {
|
||||
|
||||
int get interval {
|
||||
if (count < 1) {
|
||||
// ignore: avoid_returning_null
|
||||
return null;
|
||||
}
|
||||
return (latestPubDate - earliestPubDate) ~/ count;
|
||||
|
@ -1100,7 +1100,9 @@ class MyDropdownButton<T> extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _MyDropdownButtonState<T> extends State<MyDropdownButton<T>>
|
||||
with WidgetsBindingObserver {
|
||||
// ignore: prefer_mixin
|
||||
with
|
||||
WidgetsBindingObserver {
|
||||
int _selectedIndex;
|
||||
_DropdownRoute<T> _dropdownRoute;
|
||||
Orientation _lastOrientation;
|
||||
|
@ -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
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,77 +0,0 @@
|
||||
import 'package:tsacdop/webfeed/domain/atom_category.dart';
|
||||
import 'package:tsacdop/webfeed/domain/atom_generator.dart';
|
||||
import 'package:tsacdop/webfeed/domain/atom_item.dart';
|
||||
import 'package:tsacdop/webfeed/domain/atom_link.dart';
|
||||
import 'package:tsacdop/webfeed/domain/atom_person.dart';
|
||||
import 'package:tsacdop/webfeed/util/helpers.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
class AtomFeed {
|
||||
final String id;
|
||||
final String title;
|
||||
final String updated;
|
||||
final List<AtomItem> items;
|
||||
|
||||
final List<AtomLink> links;
|
||||
final List<AtomPerson> authors;
|
||||
final List<AtomPerson> contributors;
|
||||
final List<AtomCategory> categories;
|
||||
final AtomGenerator generator;
|
||||
final String icon;
|
||||
final String logo;
|
||||
final String rights;
|
||||
final String subtitle;
|
||||
|
||||
AtomFeed({
|
||||
this.id,
|
||||
this.title,
|
||||
this.updated,
|
||||
this.items,
|
||||
this.links,
|
||||
this.authors,
|
||||
this.contributors,
|
||||
this.categories,
|
||||
this.generator,
|
||||
this.icon,
|
||||
this.logo,
|
||||
this.rights,
|
||||
this.subtitle,
|
||||
});
|
||||
|
||||
factory AtomFeed.parse(String xmlString) {
|
||||
var document = XmlDocument.parse(xmlString);
|
||||
XmlElement feedElement;
|
||||
try {
|
||||
feedElement = document.findElements("feed").first;
|
||||
} on StateError {
|
||||
throw ArgumentError("feed not found");
|
||||
}
|
||||
|
||||
return AtomFeed(
|
||||
id: findElementOrNull(feedElement, "id")?.text,
|
||||
title: findElementOrNull(feedElement, "title")?.text,
|
||||
updated: findElementOrNull(feedElement, "updated")?.text,
|
||||
items: feedElement.findElements("entry").map((element) {
|
||||
return AtomItem.parse(element);
|
||||
}).toList(),
|
||||
links: feedElement.findElements("link").map((element) {
|
||||
return AtomLink.parse(element);
|
||||
}).toList(),
|
||||
authors: feedElement.findElements("author").map((element) {
|
||||
return AtomPerson.parse(element);
|
||||
}).toList(),
|
||||
contributors: feedElement.findElements("contributor").map((element) {
|
||||
return AtomPerson.parse(element);
|
||||
}).toList(),
|
||||
categories: feedElement.findElements("category").map((element) {
|
||||
return AtomCategory.parse(element);
|
||||
}).toList(),
|
||||
generator:
|
||||
AtomGenerator.parse(findElementOrNull(feedElement, "generator")),
|
||||
icon: findElementOrNull(feedElement, "icon")?.text,
|
||||
logo: findElementOrNull(feedElement, "logo")?.text,
|
||||
rights: findElementOrNull(feedElement, "rights")?.text,
|
||||
subtitle: findElementOrNull(feedElement, "subtitle")?.text,
|
||||
);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,66 +0,0 @@
|
||||
import 'package:tsacdop/webfeed/domain/atom_category.dart';
|
||||
import 'package:tsacdop/webfeed/domain/atom_link.dart';
|
||||
import 'package:tsacdop/webfeed/domain/atom_person.dart';
|
||||
import 'package:tsacdop/webfeed/domain/atom_source.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/media.dart';
|
||||
import 'package:tsacdop/webfeed/util/helpers.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
class AtomItem {
|
||||
final String id;
|
||||
final String title;
|
||||
final String updated;
|
||||
|
||||
final List<AtomPerson> authors;
|
||||
final List<AtomLink> links;
|
||||
final List<AtomCategory> categories;
|
||||
final List<AtomPerson> contributors;
|
||||
final AtomSource source;
|
||||
final String published;
|
||||
final String content;
|
||||
final String summary;
|
||||
final String rights;
|
||||
final Media media;
|
||||
|
||||
AtomItem({
|
||||
this.id,
|
||||
this.title,
|
||||
this.updated,
|
||||
this.authors,
|
||||
this.links,
|
||||
this.categories,
|
||||
this.contributors,
|
||||
this.source,
|
||||
this.published,
|
||||
this.content,
|
||||
this.summary,
|
||||
this.rights,
|
||||
this.media,
|
||||
});
|
||||
|
||||
factory AtomItem.parse(XmlElement element) {
|
||||
return AtomItem(
|
||||
id: findElementOrNull(element, "id")?.text,
|
||||
title: findElementOrNull(element, "title")?.text,
|
||||
updated: findElementOrNull(element, "updated")?.text,
|
||||
authors: element.findElements("author").map((element) {
|
||||
return AtomPerson.parse(element);
|
||||
}).toList(),
|
||||
links: element.findElements("link").map((element) {
|
||||
return AtomLink.parse(element);
|
||||
}).toList(),
|
||||
categories: element.findElements("category").map((element) {
|
||||
return AtomCategory.parse(element);
|
||||
}).toList(),
|
||||
contributors: element.findElements("contributor").map((element) {
|
||||
return AtomPerson.parse(element);
|
||||
}).toList(),
|
||||
source: AtomSource.parse(findElementOrNull(element, "source")),
|
||||
published: findElementOrNull(element, "published")?.text,
|
||||
content: findElementOrNull(element, "content")?.text,
|
||||
summary: findElementOrNull(element, "summary")?.text,
|
||||
rights: findElementOrNull(element, "rights")?.text,
|
||||
media: Media.parse(element),
|
||||
);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
import 'package:tsacdop/webfeed/domain/media/param.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
class Embed {
|
||||
final String url;
|
||||
final int width;
|
||||
final int height;
|
||||
final List<Param> params;
|
||||
|
||||
Embed({
|
||||
this.url,
|
||||
this.width,
|
||||
this.height,
|
||||
this.params,
|
||||
});
|
||||
|
||||
factory Embed.parse(XmlElement element) {
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
return new Embed(
|
||||
url: element.getAttribute("url"),
|
||||
width: int.tryParse(element.getAttribute("width") ?? "0"),
|
||||
height: int.tryParse(element.getAttribute("height") ?? "0"),
|
||||
params: element.findElements("media:param").map((e) {
|
||||
return new Param.parse(e);
|
||||
}).toList(),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
import '../../util/helpers.dart';
|
||||
import 'category.dart';
|
||||
import 'content.dart';
|
||||
import 'credit.dart';
|
||||
import 'rating.dart';
|
||||
|
||||
class Group {
|
||||
final List<Content> contents;
|
||||
final List<Credit> credits;
|
||||
final Category category;
|
||||
final Rating rating;
|
||||
|
||||
Group({
|
||||
this.contents,
|
||||
this.credits,
|
||||
this.category,
|
||||
this.rating,
|
||||
});
|
||||
|
||||
factory Group.parse(XmlElement element) {
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
return Group(
|
||||
contents: element.findElements("media:content").map((e) {
|
||||
return Content.parse(e);
|
||||
}).toList(),
|
||||
credits: element.findElements("media:credit").map((e) {
|
||||
return Credit.parse(e);
|
||||
}).toList(),
|
||||
category: Category.parse(
|
||||
findElementOrNull(element, "media:category"),
|
||||
),
|
||||
rating: Rating.parse(
|
||||
findElementOrNull(element, "media:rating"),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -1,169 +0,0 @@
|
||||
import 'package:tsacdop/webfeed/domain/media/category.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/community.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/content.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/copyright.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/credit.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/description.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/embed.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/group.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/hash.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/license.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/peer_link.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/player.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/price.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/rating.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/restriction.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/rights.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/scene.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/status.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/text.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/thumbnail.dart';
|
||||
import 'package:tsacdop/webfeed/domain/media/title.dart';
|
||||
import 'package:tsacdop/webfeed/util/helpers.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
class Media {
|
||||
final Group group;
|
||||
final List<Content> contents;
|
||||
final List<Credit> credits;
|
||||
final Category category;
|
||||
final Rating rating;
|
||||
final Title title;
|
||||
final Description description;
|
||||
final String keywords;
|
||||
final List<Thumbnail> thumbnails;
|
||||
final Hash hash;
|
||||
final Player player;
|
||||
final Copyright copyright;
|
||||
final Text text;
|
||||
final Restriction restriction;
|
||||
final Community community;
|
||||
final List<String> comments;
|
||||
final Embed embed;
|
||||
final List<String> responses;
|
||||
final List<String> backLinks;
|
||||
final Status status;
|
||||
final List<Price> prices;
|
||||
final License license;
|
||||
final PeerLink peerLink;
|
||||
final Rights rights;
|
||||
final List<Scene> scenes;
|
||||
|
||||
Media({
|
||||
this.group,
|
||||
this.contents,
|
||||
this.credits,
|
||||
this.category,
|
||||
this.rating,
|
||||
this.title,
|
||||
this.description,
|
||||
this.keywords,
|
||||
this.thumbnails,
|
||||
this.hash,
|
||||
this.player,
|
||||
this.copyright,
|
||||
this.text,
|
||||
this.restriction,
|
||||
this.community,
|
||||
this.comments,
|
||||
this.embed,
|
||||
this.responses,
|
||||
this.backLinks,
|
||||
this.status,
|
||||
this.prices,
|
||||
this.license,
|
||||
this.peerLink,
|
||||
this.rights,
|
||||
this.scenes,
|
||||
});
|
||||
|
||||
factory Media.parse(XmlElement element) {
|
||||
return new Media(
|
||||
group: new Group.parse(
|
||||
findElementOrNull(element, "media:group"),
|
||||
),
|
||||
contents: element.findElements("media:content").map((e) {
|
||||
return new Content.parse(e);
|
||||
}).toList(),
|
||||
credits: element.findElements("media:credit").map((e) {
|
||||
return new Credit.parse(e);
|
||||
}).toList(),
|
||||
category: new Category.parse(
|
||||
findElementOrNull(element, "media:category"),
|
||||
),
|
||||
rating: new Rating.parse(
|
||||
findElementOrNull(element, "media:rating"),
|
||||
),
|
||||
title: new Title.parse(
|
||||
findElementOrNull(element, "media:title"),
|
||||
),
|
||||
description: new Description.parse(
|
||||
findElementOrNull(element, "media:description"),
|
||||
),
|
||||
keywords: findElementOrNull(element, "media:keywords")?.text,
|
||||
thumbnails: element.findElements("media:thumbnail").map((e) {
|
||||
return new Thumbnail.parse(e);
|
||||
}).toList(),
|
||||
hash: new Hash.parse(
|
||||
findElementOrNull(element, "media:hash"),
|
||||
),
|
||||
player: new Player.parse(
|
||||
findElementOrNull(element, "media:player"),
|
||||
),
|
||||
copyright: new Copyright.parse(
|
||||
findElementOrNull(element, "media:copyright"),
|
||||
),
|
||||
text: new Text.parse(
|
||||
findElementOrNull(element, "media:text"),
|
||||
),
|
||||
restriction: new Restriction.parse(
|
||||
findElementOrNull(element, "media:restriction"),
|
||||
),
|
||||
community: new Community.parse(
|
||||
findElementOrNull(element, "media:community"),
|
||||
),
|
||||
comments: findElementOrNull(element, "media:comments")
|
||||
?.findElements("media:comment")
|
||||
?.map((e) {
|
||||
return e.text;
|
||||
})?.toList() ??
|
||||
[],
|
||||
embed: new Embed.parse(
|
||||
findElementOrNull(element, "media:embed"),
|
||||
),
|
||||
responses: findElementOrNull(element, "media:responses")
|
||||
?.findElements("media:response")
|
||||
?.map((e) {
|
||||
return e.text;
|
||||
})?.toList() ??
|
||||
[],
|
||||
backLinks: findElementOrNull(element, "media:backLinks")
|
||||
?.findElements("media:backLink")
|
||||
?.map((e) {
|
||||
return e.text;
|
||||
})?.toList() ??
|
||||
[],
|
||||
status: new Status.parse(
|
||||
findElementOrNull(element, "media:status"),
|
||||
),
|
||||
prices: element.findElements("media:price").map((e) {
|
||||
return new Price.parse(e);
|
||||
}).toList(),
|
||||
license: new License.parse(
|
||||
findElementOrNull(element, "media:license"),
|
||||
),
|
||||
peerLink: new PeerLink.parse(
|
||||
findElementOrNull(element, "media:peerLink"),
|
||||
),
|
||||
rights: new Rights.parse(
|
||||
findElementOrNull(element, "media:rights"),
|
||||
),
|
||||
scenes: findElementOrNull(element, "media:scenes")
|
||||
?.findElements("media:scene")
|
||||
?.map((e) {
|
||||
return new Scene.parse(e);
|
||||
})?.toList() ??
|
||||
[],
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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"),
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
final _imagesRegExp = new RegExp(
|
||||
"<img\\s.*?src=(?:'|\")([^'\">]+)(?:'|\")",
|
||||
multiLine: true,
|
||||
caseSensitive: false,
|
||||
);
|
||||
|
||||
/// For RSS Content Module:
|
||||
///
|
||||
/// - `xmlns:content="http://purl.org/rss/1.0/modules/content/"`
|
||||
///
|
||||
class RssContent {
|
||||
String value;
|
||||
Iterable<String> images;
|
||||
|
||||
RssContent(this.value, this.images);
|
||||
|
||||
factory RssContent.parse(XmlElement element) {
|
||||
if (element == null) {
|
||||
return RssContent('', ['']);
|
||||
}
|
||||
final content = element.text.trim();
|
||||
final images = <String>[];
|
||||
_imagesRegExp.allMatches(content).forEach((match) {
|
||||
images.add(match.group(1));
|
||||
});
|
||||
return RssContent(content, images);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,108 +0,0 @@
|
||||
import 'dart:core';
|
||||
|
||||
import '../domain/dublin_core/dublin_core.dart';
|
||||
import '../domain/rss_category.dart';
|
||||
import '../domain/rss_cloud.dart';
|
||||
import '../domain/rss_image.dart';
|
||||
import '../domain/rss_item.dart';
|
||||
import '../util/helpers.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
import 'rss_itunes.dart';
|
||||
|
||||
class RssFeed {
|
||||
final String title;
|
||||
final String author;
|
||||
final String description;
|
||||
final String link;
|
||||
final List<RssItem> items;
|
||||
|
||||
final RssImage image;
|
||||
final RssCloud cloud;
|
||||
final List<RssCategory> categories;
|
||||
final List<String> skipDays;
|
||||
final List<int> skipHours;
|
||||
final String lastBuildDate;
|
||||
final String language;
|
||||
final String generator;
|
||||
final String copyright;
|
||||
final String docs;
|
||||
final String managingEditor;
|
||||
final String rating;
|
||||
final String webMaster;
|
||||
final int ttl;
|
||||
final DublinCore dc;
|
||||
final RssItunes itunes;
|
||||
|
||||
RssFeed({
|
||||
this.title,
|
||||
this.author,
|
||||
this.description,
|
||||
this.link,
|
||||
this.items,
|
||||
this.image,
|
||||
this.cloud,
|
||||
this.categories,
|
||||
this.skipDays,
|
||||
this.skipHours,
|
||||
this.lastBuildDate,
|
||||
this.language,
|
||||
this.generator,
|
||||
this.copyright,
|
||||
this.docs,
|
||||
this.managingEditor,
|
||||
this.rating,
|
||||
this.webMaster,
|
||||
this.ttl,
|
||||
this.dc,
|
||||
this.itunes,
|
||||
});
|
||||
|
||||
factory RssFeed.parse(String xmlString) {
|
||||
var document = XmlDocument.parse(xmlString);
|
||||
XmlElement channelElement;
|
||||
try {
|
||||
channelElement = document.findAllElements("channel").first;
|
||||
} on StateError {
|
||||
throw ArgumentError("channel not found");
|
||||
}
|
||||
|
||||
return RssFeed(
|
||||
title: findElementOrNull(channelElement, "title")?.text,
|
||||
author: findElementOrNull(channelElement, "author")?.text,
|
||||
description: findElementOrNull(channelElement, "description")?.text,
|
||||
link: findElementOrNull(channelElement, "link")?.text,
|
||||
items: channelElement.findElements("item").map((element) {
|
||||
return RssItem.parse(element);
|
||||
}).toList(),
|
||||
image: RssImage.parse(findElementOrNull(channelElement, "image")),
|
||||
cloud: RssCloud.parse(findElementOrNull(channelElement, "cloud")),
|
||||
categories: channelElement.findElements("category").map((element) {
|
||||
return RssCategory.parse(element);
|
||||
}).toList(),
|
||||
skipDays: findElementOrNull(channelElement, "skipDays")
|
||||
?.findAllElements("day")
|
||||
?.map((element) {
|
||||
return element.text;
|
||||
})?.toList() ??
|
||||
[],
|
||||
skipHours: findElementOrNull(channelElement, "skipHours")
|
||||
?.findAllElements("hour")
|
||||
?.map((element) {
|
||||
return int.tryParse(element.text ?? "0");
|
||||
})?.toList() ??
|
||||
[],
|
||||
lastBuildDate: findElementOrNull(channelElement, "lastBuildDate")?.text,
|
||||
language: findElementOrNull(channelElement, "language")?.text,
|
||||
generator: findElementOrNull(channelElement, "generator")?.text,
|
||||
copyright: findElementOrNull(channelElement, "copyright")?.text,
|
||||
docs: findElementOrNull(channelElement, "docs")?.text,
|
||||
managingEditor: findElementOrNull(channelElement, "managingEditor")?.text,
|
||||
rating: findElementOrNull(channelElement, "rating")?.text,
|
||||
webMaster: findElementOrNull(channelElement, "webMaster")?.text,
|
||||
ttl: int.tryParse(findElementOrNull(channelElement, "ttl")?.text ?? "0"),
|
||||
dc: DublinCore.parse(channelElement),
|
||||
itunes: RssItunes.parse(channelElement),
|
||||
);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
import '../domain/dublin_core/dublin_core.dart';
|
||||
import '../domain/media/media.dart';
|
||||
import '../domain/rss_category.dart';
|
||||
import '../domain/rss_content.dart';
|
||||
import '../domain/rss_enclosure.dart';
|
||||
import '../domain/rss_source.dart';
|
||||
import '../util/helpers.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
import 'rss_item_itunes.dart';
|
||||
|
||||
class RssItem {
|
||||
final String title;
|
||||
final String description;
|
||||
final String link;
|
||||
|
||||
final List<RssCategory> categories;
|
||||
final String guid;
|
||||
final String pubDate;
|
||||
final String author;
|
||||
final String comments;
|
||||
final RssSource source;
|
||||
final RssContent content;
|
||||
final Media media;
|
||||
final RssEnclosure enclosure;
|
||||
final DublinCore dc;
|
||||
final RssItemItunes itunes;
|
||||
|
||||
RssItem({
|
||||
this.title,
|
||||
this.description,
|
||||
this.link,
|
||||
this.categories,
|
||||
this.guid,
|
||||
this.pubDate,
|
||||
this.author,
|
||||
this.comments,
|
||||
this.source,
|
||||
this.content,
|
||||
this.media,
|
||||
this.enclosure,
|
||||
this.dc,
|
||||
this.itunes,
|
||||
});
|
||||
|
||||
factory RssItem.parse(XmlElement element) {
|
||||
if (RssEnclosure.parse(findElementOrNull(element, "enclosure")) == null) {
|
||||
return null;
|
||||
}
|
||||
return RssItem(
|
||||
title: findElementOrNull(element, "title")?.text,
|
||||
description: findElementOrNull(element, "description")?.text?.trim(),
|
||||
link: findElementOrNull(element, "link")?.text?.trim(),
|
||||
categories: element.findElements("category").map((element) {
|
||||
return RssCategory.parse(element);
|
||||
}).toList(),
|
||||
//guid: findElementOrNull(element, "guid")?.text,
|
||||
pubDate: findElementOrNull(element, "pubDate")?.text?.trim(),
|
||||
author: findElementOrNull(element, "author")?.text?.trim(),
|
||||
// comments: findElementOrNull(element, "comments")?.text,
|
||||
// source: RssSource.parse(findElementOrNull(element, "source")),
|
||||
content: RssContent.parse(findElementOrNull(element, "content:encoded")),
|
||||
// media: Media.parse(element),
|
||||
enclosure: RssEnclosure.parse(findElementOrNull(element, "enclosure")),
|
||||
//dc: DublinCore.parse(element),
|
||||
itunes: RssItemItunes.parse(element),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,89 +0,0 @@
|
||||
import '../util/helpers.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
import 'rss_itunes_category.dart';
|
||||
import 'rss_itunes_episode_type.dart';
|
||||
import 'rss_itunes_image.dart';
|
||||
|
||||
class RssItemItunes {
|
||||
final String title;
|
||||
final int episode;
|
||||
final int season;
|
||||
final Duration duration;
|
||||
final RssItunesEpisodeType episodeType;
|
||||
final String author;
|
||||
final String summary;
|
||||
final bool explicit;
|
||||
final String subtitle;
|
||||
final List<String> keywords;
|
||||
final RssItunesImage image;
|
||||
final RssItunesCategory category;
|
||||
final bool block;
|
||||
|
||||
RssItemItunes({
|
||||
this.title,
|
||||
this.episode,
|
||||
this.season,
|
||||
this.duration,
|
||||
this.episodeType,
|
||||
this.author,
|
||||
this.summary,
|
||||
this.explicit,
|
||||
this.subtitle,
|
||||
this.keywords,
|
||||
this.image,
|
||||
this.category,
|
||||
this.block,
|
||||
});
|
||||
|
||||
factory RssItemItunes.parse(XmlElement element) {
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
//var episodeStr = findElementOrNull(element, "itunes:episode")?.text?.trim();
|
||||
//var seasonStr = findElementOrNull(element, "itunes:season")?.text?.trim();
|
||||
var durationStr =
|
||||
findElementOrNull(element, "itunes:duration")?.text?.trim();
|
||||
|
||||
return RssItemItunes(
|
||||
title: findElementOrNull(element, "itunes:title")?.text?.trim(),
|
||||
//episode: episodeStr == null ? null : int.parse(episodeStr),
|
||||
//season: seasonStr == null ? null : int.parse(seasonStr),
|
||||
duration: durationStr == null ? null : parseDuration(durationStr),
|
||||
// episodeType: newRssItunesEpisodeType(findElementOrNull(element, "itunes:episodeType")),
|
||||
author: findElementOrNull(element, "itunes:author")?.text?.trim(),
|
||||
summary: findElementOrNull(element, "itunes:summary")?.text?.trim(),
|
||||
explicit: parseBoolLiteral(element, "itunes:explicit"),
|
||||
//subtitle: findElementOrNull(element, "itunes:subtitle")?.text?.trim(),
|
||||
// keywords: findElementOrNull(element, "itunes:keywords")?.text?.split(",")?.map((keyword) => keyword.trim())?.toList(),
|
||||
// image: RssItunesImage.parse(findElementOrNull(element, "itunes:image")),
|
||||
// category: RssItunesCategory.parse(
|
||||
// findElementOrNull(element, "itunes:category")),
|
||||
// block: parseBoolLiteral(element, "itunes:block"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Duration parseDuration(String s) {
|
||||
var hours = 0;
|
||||
var minutes = 0;
|
||||
var seconds = 0;
|
||||
var parts = s.split(':');
|
||||
try {
|
||||
if (parts.length > 2) {
|
||||
hours = int.parse(parts[parts.length - 3]);
|
||||
}
|
||||
if (parts.length > 1) {
|
||||
minutes = int.parse(parts[parts.length - 2]);
|
||||
}
|
||||
seconds = int.parse(parts[parts.length - 1]);
|
||||
} catch (e) {
|
||||
print(e);
|
||||
}
|
||||
|
||||
return Duration(
|
||||
hours: hours,
|
||||
minutes: minutes,
|
||||
seconds: seconds,
|
||||
);
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
import '../util/helpers.dart';
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
//import 'package:webfeed/util/helpers.dart';
|
||||
|
||||
import 'rss_itunes_category.dart';
|
||||
import 'rss_itunes_image.dart';
|
||||
import 'rss_itunes_owner.dart';
|
||||
import 'rss_itunes_type.dart';
|
||||
|
||||
class RssItunes {
|
||||
final String author;
|
||||
final String summary;
|
||||
final bool explicit;
|
||||
final String title;
|
||||
final String subtitle;
|
||||
final RssItunesOwner owner;
|
||||
final List<String> keywords;
|
||||
final RssItunesImage image;
|
||||
final List<RssItunesCategory> categories;
|
||||
final RssItunesType type;
|
||||
final String newFeedUrl;
|
||||
final bool block;
|
||||
final bool complete;
|
||||
|
||||
RssItunes({
|
||||
this.author,
|
||||
this.summary,
|
||||
this.explicit,
|
||||
this.title,
|
||||
this.subtitle,
|
||||
this.owner,
|
||||
this.keywords,
|
||||
this.image,
|
||||
this.categories,
|
||||
this.type,
|
||||
this.newFeedUrl,
|
||||
this.block,
|
||||
this.complete,
|
||||
});
|
||||
|
||||
factory RssItunes.parse(XmlElement element) {
|
||||
if (element == null) {
|
||||
return null;
|
||||
}
|
||||
return RssItunes(
|
||||
author: findElementOrNull(element, "itunes:author")?.text?.trim(),
|
||||
summary: findElementOrNull(element, "itunes:summary")?.text?.trim(),
|
||||
explicit: parseBoolLiteral(element, "itunes:explicit"),
|
||||
title: findElementOrNull(element, "itunes:title")?.text?.trim(),
|
||||
// subtitle: findElementOrNull(element, "itunes:subtitle")?.text?.trim(),
|
||||
//owner: RssItunesOwner.parse(findElementOrNull(element, "itunes:owner")),
|
||||
// keywords: findElementOrNull(element, "itunes:keywords")
|
||||
// ?.text
|
||||
// ?.split(",")
|
||||
// ?.map((keyword) => keyword.trim())
|
||||
// ?.toList(),
|
||||
image: RssItunesImage.parse(findElementOrNull(element, "itunes:image")),
|
||||
// categories: findAllDirectElementsOrNull(element, "itunes:category")
|
||||
// .map((ele) => RssItunesCategory.parse(ele))
|
||||
// .toList(),
|
||||
// type: newRssItunesType(findElementOrNull(element, "itunes:type")),
|
||||
// newFeedUrl:
|
||||
// findElementOrNull(element, "itunes:new-feed-url")?.text?.trim(),
|
||||
// block: parseBoolLiteral(element, "itunes:block"),
|
||||
// complete: parseBoolLiteral(element, "itunes:complete"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
class RssItunesCategory {
|
||||
final String category;
|
||||
final List<String> subCategories;
|
||||
|
||||
RssItunesCategory({this.category, this.subCategories});
|
||||
|
||||
factory RssItunesCategory.parse(XmlElement element) {
|
||||
if (element == null) return null;
|
||||
|
||||
Iterable<XmlElement> subCategories;
|
||||
try {
|
||||
subCategories = element.findElements("itunes:category");
|
||||
} on StateError {
|
||||
subCategories = null;
|
||||
}
|
||||
return RssItunesCategory(
|
||||
category: element.getAttribute("text")?.trim(),
|
||||
subCategories:
|
||||
subCategories?.map((ele) => ele.getAttribute("text")?.trim())?.toList(),
|
||||
);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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(),
|
||||
);
|
||||
}
|
||||
}
|
@ -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(),
|
||||
);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:xml/xml.dart';
|
||||
|
||||
XmlElement findElementOrNull(XmlElement element, String name,
|
||||
{String namespace}) {
|
||||
try {
|
||||
|
||||
return element.findAllElements(name, namespace: namespace).first;
|
||||
} on StateError {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
List<XmlElement> findAllDirectElementsOrNull(XmlElement element, String name,
|
||||
{String namespace}) {
|
||||
try {
|
||||
return element.findElements(name, namespace: namespace).toList();
|
||||
} on StateError {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
bool parseBoolLiteral(XmlElement element, String tagName) {
|
||||
var v = findElementOrNull(element, tagName)?.text?.toLowerCase()?.trim();
|
||||
if (v == null) return null;
|
||||
return ["yes", "true"].contains(v);
|
||||
}
|
||||
|
@ -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';
|
@ -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:
|
||||
|
@ -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());
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user