Seperate webfeed plugin from app.
This commit is contained in:
parent
54120848bb
commit
691c25fd6b
|
@ -32,6 +32,7 @@
|
||||||
/build/
|
/build/
|
||||||
pubspec.lock
|
pubspec.lock
|
||||||
.vscode
|
.vscode
|
||||||
|
analysis_options.yaml
|
||||||
|
|
||||||
# Web related
|
# Web related
|
||||||
lib/generated_plugin_registrant.dart
|
lib/generated_plugin_registrant.dart
|
||||||
|
|
|
@ -42,8 +42,9 @@ MessageLookupByLibrary _findExact(String localeName) {
|
||||||
/// User programs should call this before using [localeName] for messages.
|
/// User programs should call this before using [localeName] for messages.
|
||||||
Future<bool> initializeMessages(String localeName) async {
|
Future<bool> initializeMessages(String localeName) async {
|
||||||
var availableLocale = Intl.verifiedLocale(
|
var availableLocale = Intl.verifiedLocale(
|
||||||
localeName, (locale) => _deferredLibraries[locale] != null,
|
localeName,
|
||||||
onFailure: (_) => null);
|
(locale) => _deferredLibraries[locale] != null,
|
||||||
|
onFailure: (_) => null);
|
||||||
if (availableLocale == null) {
|
if (availableLocale == null) {
|
||||||
return new Future.value(false);
|
return new Future.value(false);
|
||||||
}
|
}
|
||||||
|
@ -57,15 +58,14 @@ Future<bool> initializeMessages(String localeName) async {
|
||||||
bool _messagesExistFor(String locale) {
|
bool _messagesExistFor(String locale) {
|
||||||
try {
|
try {
|
||||||
return _findExact(locale) != null;
|
return _findExact(locale) != null;
|
||||||
// ignore: avoid_catches_without_on_clauses
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageLookupByLibrary _findGeneratedMessagesFor(String locale) {
|
MessageLookupByLibrary _findGeneratedMessagesFor(String locale) {
|
||||||
var actualLocale =
|
var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor,
|
||||||
Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null);
|
onFailure: (_) => null);
|
||||||
if (actualLocale == null) return null;
|
if (actualLocale == null) return null;
|
||||||
return _findExact(actualLocale);
|
return _findExact(actualLocale);
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
|
|
||||||
static m25(time) => "${time} Restant";
|
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.')}";
|
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."),
|
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Ajouter de nouveaux épisodes à la playlist."),
|
||||||
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("Ajouter des groupes"),
|
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("Ajouter des groupes"),
|
||||||
"all" : MessageLookupByLibrary.simpleMessage("Tout"),
|
"all" : MessageLookupByLibrary.simpleMessage("Tout"),
|
||||||
"autoDownload" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique"),
|
"autoDownload" : MessageLookupByLibrary.simpleMessage("Téléchargements auto"),
|
||||||
"back" : MessageLookupByLibrary.simpleMessage("Retour"),
|
"back" : MessageLookupByLibrary.simpleMessage("Retour"),
|
||||||
"buffering" : MessageLookupByLibrary.simpleMessage("Buffering"),
|
"buffering" : MessageLookupByLibrary.simpleMessage("Buffering"),
|
||||||
"cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
|
"cancel" : MessageLookupByLibrary.simpleMessage("ANNULER"),
|
||||||
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("Cellular data warn"),
|
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("Avertissement utilisation des données mobiles"),
|
||||||
"cellularConfirmDes" : MessageLookupByLibrary.simpleMessage("Are you sure you want to use cellular data to download?"),
|
"cellularConfirmDes" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr d\'autoriser l\'utilisation des données mobiles ?"),
|
||||||
"changeLayout" : MessageLookupByLibrary.simpleMessage("Modifier l\'interface"),
|
"changeLayout" : MessageLookupByLibrary.simpleMessage("Modifier l\'interface"),
|
||||||
"changelog" : MessageLookupByLibrary.simpleMessage("Historique des modifications"),
|
"changelog" : MessageLookupByLibrary.simpleMessage("Historique des modifications"),
|
||||||
"chooseA" : MessageLookupByLibrary.simpleMessage("Choisir un"),
|
"chooseA" : MessageLookupByLibrary.simpleMessage("Choisir un"),
|
||||||
|
@ -104,8 +104,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"developer" : MessageLookupByLibrary.simpleMessage("Développeur"),
|
"developer" : MessageLookupByLibrary.simpleMessage("Développeur"),
|
||||||
"dismiss" : MessageLookupByLibrary.simpleMessage("Rejeter"),
|
"dismiss" : MessageLookupByLibrary.simpleMessage("Rejeter"),
|
||||||
"done" : MessageLookupByLibrary.simpleMessage("Fait"),
|
"done" : MessageLookupByLibrary.simpleMessage("Fait"),
|
||||||
"download" : MessageLookupByLibrary.simpleMessage("Télécharger"),
|
"download" : MessageLookupByLibrary.simpleMessage("Téléchargés"),
|
||||||
"downloaded" : MessageLookupByLibrary.simpleMessage("Téléchargé"),
|
"downloaded" : MessageLookupByLibrary.simpleMessage("Téléchargés"),
|
||||||
"editGroupName" : MessageLookupByLibrary.simpleMessage("Modifier le nom du groupe"),
|
"editGroupName" : MessageLookupByLibrary.simpleMessage("Modifier le nom du groupe"),
|
||||||
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin de l\'épisode"),
|
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("Fin de l\'épisode"),
|
||||||
"episode" : m4,
|
"episode" : m4,
|
||||||
|
@ -127,11 +127,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un défilement vertical pour changer de groupe."),
|
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("Effectuez un défilement vertical pour changer de groupe."),
|
||||||
"featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("Appuyez pour chercher un podcast"),
|
"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."),
|
"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"),
|
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("Contact"),
|
||||||
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("Soumettre un problème"),
|
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("GitHub"),
|
||||||
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Noter sur le PlayStore"),
|
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("PlayStore"),
|
||||||
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Joindre le groupe"),
|
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Telegram"),
|
||||||
"filter" : MessageLookupByLibrary.simpleMessage("Filter"),
|
"filter" : MessageLookupByLibrary.simpleMessage("Filtrer"),
|
||||||
"fonts" : MessageLookupByLibrary.simpleMessage("Polices"),
|
"fonts" : MessageLookupByLibrary.simpleMessage("Polices"),
|
||||||
"from" : m5,
|
"from" : m5,
|
||||||
"goodNight" : MessageLookupByLibrary.simpleMessage("Bonne nuit"),
|
"goodNight" : MessageLookupByLibrary.simpleMessage("Bonne nuit"),
|
||||||
|
@ -143,7 +143,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
|
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
|
||||||
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Classé par"),
|
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Classé par"),
|
||||||
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favoris"),
|
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favoris"),
|
||||||
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Récent"),
|
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Récents"),
|
||||||
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("À propos"),
|
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("À propos"),
|
||||||
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Importer le fichier OPML"),
|
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Importer le fichier OPML"),
|
||||||
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Tout actualiser"),
|
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Tout actualiser"),
|
||||||
|
@ -162,7 +162,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"listen" : MessageLookupByLibrary.simpleMessage("Écoutés"),
|
"listen" : MessageLookupByLibrary.simpleMessage("Écoutés"),
|
||||||
"listened" : MessageLookupByLibrary.simpleMessage("Écouté "),
|
"listened" : MessageLookupByLibrary.simpleMessage("Écouté "),
|
||||||
"loadMore" : MessageLookupByLibrary.simpleMessage("Voir plus"),
|
"loadMore" : MessageLookupByLibrary.simpleMessage("Voir plus"),
|
||||||
"mark" : MessageLookupByLibrary.simpleMessage("Marqué"),
|
"mark" : MessageLookupByLibrary.simpleMessage("✓"),
|
||||||
"markConfirm" : MessageLookupByLibrary.simpleMessage("Marquage effectué"),
|
"markConfirm" : MessageLookupByLibrary.simpleMessage("Marquage effectué"),
|
||||||
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Marquer tous les épisodes comme lus ?"),
|
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Marquer tous les épisodes comme lus ?"),
|
||||||
"markListened" : MessageLookupByLibrary.simpleMessage("Marquer comme lu"),
|
"markListened" : MessageLookupByLibrary.simpleMessage("Marquer comme lu"),
|
||||||
|
@ -175,7 +175,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"minsCount" : m11,
|
"minsCount" : m11,
|
||||||
"network" : MessageLookupByLibrary.simpleMessage("Réseau"),
|
"network" : MessageLookupByLibrary.simpleMessage("Réseau"),
|
||||||
"newGroup" : MessageLookupByLibrary.simpleMessage("Créer un nouveau groupe"),
|
"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"),
|
"next" : MessageLookupByLibrary.simpleMessage("Suivant"),
|
||||||
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("Aucun épisode n\'a encore été téléchargé"),
|
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("Aucun épisode n\'a encore été téléchargé"),
|
||||||
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("Aucun épisode ajouté"),
|
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("Aucun épisode ajouté"),
|
||||||
|
@ -189,9 +189,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"notificationSuccess" : m16,
|
"notificationSuccess" : m16,
|
||||||
"notificationUpdate" : m17,
|
"notificationUpdate" : m17,
|
||||||
"notificationUpdateError" : m18,
|
"notificationUpdateError" : m18,
|
||||||
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier."),
|
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Le plus ancien en premier"),
|
||||||
"play" : MessageLookupByLibrary.simpleMessage("Lecture"),
|
"play" : MessageLookupByLibrary.simpleMessage("Lecture"),
|
||||||
"playback" : MessageLookupByLibrary.simpleMessage("Playback control"),
|
"playback" : MessageLookupByLibrary.simpleMessage("Commandes du lecteur"),
|
||||||
"playing" : MessageLookupByLibrary.simpleMessage("En cours"),
|
"playing" : MessageLookupByLibrary.simpleMessage("En cours"),
|
||||||
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
|
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
|
||||||
"podcast" : m19,
|
"podcast" : m19,
|
||||||
|
@ -201,22 +201,22 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode aux favoris"),
|
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("Ajouter l\'épisode aux favoris"),
|
||||||
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marquer l\'épisode comme lu"),
|
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Marquer l\'épisode comme lu"),
|
||||||
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Jouer l\'épisode"),
|
"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,
|
"published" : m20,
|
||||||
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Published daily"),
|
"publishedDaily" : MessageLookupByLibrary.simpleMessage("Quotidien"),
|
||||||
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Published monthly"),
|
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("Mensuel"),
|
||||||
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Published weekly"),
|
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("Hebdomadaire"),
|
||||||
"publishedYearly" : MessageLookupByLibrary.simpleMessage("Published yearly"),
|
"publishedYearly" : MessageLookupByLibrary.simpleMessage("Annuel"),
|
||||||
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Restaurer l\'abonnement"),
|
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Restaurer l\'abonnement"),
|
||||||
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("Update artwork"),
|
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("Mettre à jour la vignette"),
|
||||||
"remove" : MessageLookupByLibrary.simpleMessage("Supprimer"),
|
"remove" : MessageLookupByLibrary.simpleMessage("Supprimer"),
|
||||||
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Confirmer la suppression"),
|
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Confirmer la suppression"),
|
||||||
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir vous désabonner ?"),
|
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("Êtes-vous sûr de vouloir vous désabonner ?"),
|
||||||
"removedAt" : m21,
|
"removedAt" : m21,
|
||||||
"save" : MessageLookupByLibrary.simpleMessage("Sauvegarder"),
|
"save" : MessageLookupByLibrary.simpleMessage("Sauvegarder"),
|
||||||
"schedule" : MessageLookupByLibrary.simpleMessage("Programmation"),
|
"schedule" : MessageLookupByLibrary.simpleMessage("Programmation"),
|
||||||
"search" : MessageLookupByLibrary.simpleMessage("Search"),
|
"search" : MessageLookupByLibrary.simpleMessage("Rechercher"),
|
||||||
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Search episode"),
|
"searchEpisode" : MessageLookupByLibrary.simpleMessage("Rechercher un épisode"),
|
||||||
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Lien RSS invalide"),
|
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Lien RSS invalide"),
|
||||||
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Chercher un podcast"),
|
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Chercher un podcast"),
|
||||||
"secCount" : m22,
|
"secCount" : m22,
|
||||||
|
@ -224,75 +224,75 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"settingStorage" : MessageLookupByLibrary.simpleMessage("Espace de stockage"),
|
"settingStorage" : MessageLookupByLibrary.simpleMessage("Espace de stockage"),
|
||||||
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
|
"settings" : MessageLookupByLibrary.simpleMessage("Paramètres"),
|
||||||
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
|
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Couleur principale"),
|
||||||
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Inclure la couleur de superposition"),
|
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Sélection de la couleur du thème"),
|
||||||
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("App intro"),
|
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("App intro"),
|
||||||
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("Apparence"),
|
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("Apparence"),
|
||||||
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("Couleurs et thèmes"),
|
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("Couleurs et thèmes"),
|
||||||
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("Cache audio"),
|
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("Cache audio"),
|
||||||
"settingsAudioCacheDes" : MessageLookupByLibrary.simpleMessage("Taille maximum du 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"),
|
"settingsAutoDeleteDes" : MessageLookupByLibrary.simpleMessage("30 jours par défaut"),
|
||||||
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer automatiquement l\'épisode suivant"),
|
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("Lancer automatiquement l\'épisode suivant"),
|
||||||
"settingsBackup" : MessageLookupByLibrary.simpleMessage("Backup"),
|
"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"),
|
"settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("Vue par défaut"),
|
||||||
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("Onglet téléchargement"),
|
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("Onglet Téléchargés"),
|
||||||
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("Onglet favoris"),
|
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("Onglet Favoris"),
|
||||||
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("Page du podcast"),
|
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("Page du podcast"),
|
||||||
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("Onglet récents"),
|
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("Onglet Récents"),
|
||||||
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("Revoir le tutoriel"),
|
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("Revoir le tutoriel"),
|
||||||
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"),
|
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("Activer la synchronisation"),
|
||||||
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("Actualisez tous les podcasts en arrière-plan pour toujours afficher les derniers épisodes"),
|
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("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"),
|
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Exporter et importer les paramètres de l\'application."),
|
||||||
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Fast forward seconds"),
|
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("Avance rapide"),
|
||||||
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Change the fast forward seconds in player"),
|
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("Vitesse de l\'avance rapide en secondes"),
|
||||||
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
|
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
|
||||||
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bugs et demande d\'ajout de fonction"),
|
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Report de bug et demande d\'ajout de fonction"),
|
||||||
"settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"),
|
"settingsHistory" : MessageLookupByLibrary.simpleMessage("Historique"),
|
||||||
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Données d\'écoutes"),
|
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Gestion des données"),
|
||||||
"settingsInfo" : MessageLookupByLibrary.simpleMessage("Infos"),
|
"settingsInfo" : MessageLookupByLibrary.simpleMessage("Infos"),
|
||||||
"settingsInterface" : MessageLookupByLibrary.simpleMessage("Interface"),
|
"settingsInterface" : MessageLookupByLibrary.simpleMessage("Interface"),
|
||||||
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("Langues"),
|
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("Langues"),
|
||||||
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("Changer la langue"),
|
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("Sélection de la langue"),
|
||||||
"settingsLayout" : MessageLookupByLibrary.simpleMessage("Style"),
|
"settingsLayout" : MessageLookupByLibrary.simpleMessage("Style"),
|
||||||
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("Style de l\'application"),
|
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("Style de l\'application"),
|
||||||
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("Librairies"),
|
"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"),
|
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("Gérer les téléchargements"),
|
||||||
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("Gérer les fichiers audio téléchargés"),
|
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("Gérer les fichiers audio téléchargés"),
|
||||||
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("Jouer automatiquement le suivant."),
|
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("Lecture automatique"),
|
||||||
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("Demander avant l\'utilisation du réseau mobile"),
|
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("Utilisation du réseau mobile"),
|
||||||
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("Téléchargement automatique sur 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."),
|
"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 le téléchargement."),
|
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("Si connecté à un réseau mobile, demander une confirmation avant de télécharger."),
|
||||||
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("Playlist et lecteur"),
|
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("Playlist et lecteur"),
|
||||||
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("Menu popup des épisodes"),
|
"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"),
|
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("Préférences"),
|
||||||
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"),
|
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("Noir profond"),
|
||||||
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activez pour un mode sombre accentué"),
|
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("Activer pour un mode sombre accentué"),
|
||||||
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Rewind seconds"),
|
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("Retour rapide"),
|
||||||
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Change the rewind seconds in player"),
|
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("Vitesse du retour rapide en secondes"),
|
||||||
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"),
|
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("Activation automatique de la minuterie"),
|
||||||
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"),
|
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("Démarrer la minuterie à l\'horaire programmé"),
|
||||||
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Temps par défaut"),
|
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("Temps par défaut"),
|
||||||
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("Temps par défaut de la minuterie"),
|
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("Configuration de la minuterie"),
|
||||||
"settingsSTMode" : MessageLookupByLibrary.simpleMessage("Mode minuterie automatique"),
|
"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"),
|
"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"),
|
"settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("Appuyer pour ouvrir le menu"),
|
||||||
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Vous devez effectuer un appui long pour ouvrir la page de l\'épisode"),
|
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("Vous devez effectuer un appui long pour ouvrir la page de l\'épisode"),
|
||||||
"settingsTheme" : MessageLookupByLibrary.simpleMessage("Thème"),
|
"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"),
|
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("24 heures par défaut"),
|
||||||
"share" : MessageLookupByLibrary.simpleMessage("Partager"),
|
"share" : MessageLookupByLibrary.simpleMessage("Partager"),
|
||||||
"size" : MessageLookupByLibrary.simpleMessage("Taille"),
|
"size" : MessageLookupByLibrary.simpleMessage("Taille"),
|
||||||
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Passer les premières secondes du début"),
|
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Passer les premières secondes du début"),
|
||||||
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Minuterie"),
|
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Minuterie"),
|
||||||
"subscribe" : MessageLookupByLibrary.simpleMessage("Abonnements"),
|
"subscribe" : MessageLookupByLibrary.simpleMessage("Abonnements"),
|
||||||
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts"),
|
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("Exporter le fichier OPML de tous les podcasts."),
|
||||||
"systemDefault" : MessageLookupByLibrary.simpleMessage("Valeur du système par défaut"),
|
"systemDefault" : MessageLookupByLibrary.simpleMessage("Système par défaut"),
|
||||||
"timeLastPlayed" : m24,
|
"timeLastPlayed" : m24,
|
||||||
"timeLeft" : m25,
|
"timeLeft" : m25,
|
||||||
"to" : m26,
|
"to" : m26,
|
||||||
|
@ -310,7 +310,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("Paramètres sauvegardés"),
|
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("Paramètres sauvegardés"),
|
||||||
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("Heure de fin"),
|
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("Heure de fin"),
|
||||||
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("Heure de démarrage"),
|
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("Heure de démarrage"),
|
||||||
"translators" : MessageLookupByLibrary.simpleMessage("Translators"),
|
"translators" : MessageLookupByLibrary.simpleMessage("Traducteurs"),
|
||||||
"understood" : MessageLookupByLibrary.simpleMessage("Compris"),
|
"understood" : MessageLookupByLibrary.simpleMessage("Compris"),
|
||||||
"undo" : MessageLookupByLibrary.simpleMessage("ANNULER"),
|
"undo" : MessageLookupByLibrary.simpleMessage("ANNULER"),
|
||||||
"unlike" : MessageLookupByLibrary.simpleMessage("Dislike"),
|
"unlike" : MessageLookupByLibrary.simpleMessage("Dislike"),
|
||||||
|
|
|
@ -19,11 +19,9 @@ typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
||||||
class MessageLookup extends MessageLookupByLibrary {
|
class MessageLookup extends MessageLookupByLibrary {
|
||||||
String get localeName => 'zh_Hans';
|
String get localeName => 'zh_Hans';
|
||||||
|
|
||||||
static m0(groupName, count) =>
|
static m0(groupName, count) => "{count, plural, zero{} other{{group Name}分组${count}集节目添加到播放列表}}";
|
||||||
"{count, plural, zero{} other{{group Name}分组${count}集节目添加到播放列表}}";
|
|
||||||
|
|
||||||
static m1(count) =>
|
static m1(count) => "${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}";
|
||||||
"${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}";
|
|
||||||
|
|
||||||
static m2(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 m8(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}小时前')}";
|
||||||
|
|
||||||
static m9(count) =>
|
static m9(count) => "${Intl.plural(count, zero: '0小时', other: '${count} 小时')}";
|
||||||
"${Intl.plural(count, zero: '0小时', other: '${count} 小时')}";
|
|
||||||
|
|
||||||
static m10(count) =>
|
static m10(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}分钟前')}";
|
||||||
"${Intl.plural(count, zero: '刚刚', other: '${count}分钟前')}";
|
|
||||||
|
|
||||||
static m11(count) =>
|
static m11(count) => "${Intl.plural(count, zero: '0分钟', other: '${count}分钟')}";
|
||||||
"${Intl.plural(count, zero: '0分钟', other: '${count}分钟')}";
|
|
||||||
|
|
||||||
static m12(title) => "获取数据 ${title}";
|
static m12(title) => "获取数据 ${title}";
|
||||||
|
|
||||||
|
@ -68,8 +63,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
|
|
||||||
static m21(date) => "${date}移除";
|
static m21(date) => "${date}移除";
|
||||||
|
|
||||||
static m22(count) =>
|
static m22(count) => "${Intl.plural(count, zero: '0 秒', other: '${count} 秒')}";
|
||||||
"${Intl.plural(count, zero: '0 秒', other: '${count} 秒')}";
|
|
||||||
|
|
||||||
static m23(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}秒前')}";
|
static m23(count) => "${Intl.plural(count, zero: '刚刚', other: '${count}秒前')}";
|
||||||
|
|
||||||
|
@ -79,301 +73,251 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||||
|
|
||||||
static m26(time) => "到${time}";
|
static m26(time) => "到${time}";
|
||||||
|
|
||||||
static m27(count) =>
|
static m27(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
|
||||||
"${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
|
|
||||||
|
|
||||||
static m28(version) => "版本:${version}";
|
static m28(version) => "版本:${version}";
|
||||||
|
|
||||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
static _notInlinedMessages(_) => <String, Function>{
|
static _notInlinedMessages(_) => <String, Function> {
|
||||||
"add": MessageLookupByLibrary.simpleMessage("订阅"),
|
"add" : MessageLookupByLibrary.simpleMessage("订阅"),
|
||||||
"addEpisodeGroup": m0,
|
"addEpisodeGroup" : m0,
|
||||||
"addNewEpisodeAll": m1,
|
"addNewEpisodeAll" : m1,
|
||||||
"addNewEpisodeTooltip":
|
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
|
||||||
MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
|
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("请添加分组"),
|
||||||
"addSomeGroups": MessageLookupByLibrary.simpleMessage("请添加分组"),
|
"all" : MessageLookupByLibrary.simpleMessage("全部"),
|
||||||
"all": MessageLookupByLibrary.simpleMessage("全部"),
|
"autoDownload" : MessageLookupByLibrary.simpleMessage("自动下载"),
|
||||||
"autoDownload": MessageLookupByLibrary.simpleMessage("自动下载"),
|
"back" : MessageLookupByLibrary.simpleMessage("返回"),
|
||||||
"back": MessageLookupByLibrary.simpleMessage("返回"),
|
"buffering" : MessageLookupByLibrary.simpleMessage("缓冲"),
|
||||||
"buffering": MessageLookupByLibrary.simpleMessage("缓冲"),
|
"cancel" : MessageLookupByLibrary.simpleMessage("取消"),
|
||||||
"cancel": MessageLookupByLibrary.simpleMessage("取消"),
|
"cellularConfirm" : MessageLookupByLibrary.simpleMessage("流量确认"),
|
||||||
"cellularConfirm": MessageLookupByLibrary.simpleMessage("流量确认"),
|
"cellularConfirmDes" : MessageLookupByLibrary.simpleMessage("您确定使用流量下载吗"),
|
||||||
"cellularConfirmDes":
|
"changeLayout" : MessageLookupByLibrary.simpleMessage("修改布局"),
|
||||||
MessageLookupByLibrary.simpleMessage("您确定使用流量下载吗"),
|
"changelog" : MessageLookupByLibrary.simpleMessage("更新日志"),
|
||||||
"changeLayout": MessageLookupByLibrary.simpleMessage("修改布局"),
|
"chooseA" : MessageLookupByLibrary.simpleMessage("选择"),
|
||||||
"changelog": MessageLookupByLibrary.simpleMessage("更新日志"),
|
"clear" : MessageLookupByLibrary.simpleMessage("清除"),
|
||||||
"chooseA": MessageLookupByLibrary.simpleMessage("选择"),
|
"color" : MessageLookupByLibrary.simpleMessage("颜色"),
|
||||||
"clear": MessageLookupByLibrary.simpleMessage("清除"),
|
"confirm" : MessageLookupByLibrary.simpleMessage("确认"),
|
||||||
"color": MessageLookupByLibrary.simpleMessage("颜色"),
|
"darkMode" : MessageLookupByLibrary.simpleMessage("夜晚模式"),
|
||||||
"confirm": MessageLookupByLibrary.simpleMessage("确认"),
|
"daysAgo" : m2,
|
||||||
"darkMode": MessageLookupByLibrary.simpleMessage("夜晚模式"),
|
"daysCount" : m3,
|
||||||
"daysAgo": m2,
|
"delete" : MessageLookupByLibrary.simpleMessage("删除"),
|
||||||
"daysCount": m3,
|
"developer" : MessageLookupByLibrary.simpleMessage("关于我"),
|
||||||
"delete": MessageLookupByLibrary.simpleMessage("删除"),
|
"dismiss" : MessageLookupByLibrary.simpleMessage("忽略"),
|
||||||
"developer": MessageLookupByLibrary.simpleMessage("关于我"),
|
"done" : MessageLookupByLibrary.simpleMessage("完成"),
|
||||||
"dismiss": MessageLookupByLibrary.simpleMessage("忽略"),
|
"download" : MessageLookupByLibrary.simpleMessage("下载"),
|
||||||
"done": MessageLookupByLibrary.simpleMessage("完成"),
|
"downloaded" : MessageLookupByLibrary.simpleMessage("已下载"),
|
||||||
"download": MessageLookupByLibrary.simpleMessage("下载"),
|
"editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"),
|
||||||
"downloaded": MessageLookupByLibrary.simpleMessage("已下载"),
|
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"),
|
||||||
"editGroupName": MessageLookupByLibrary.simpleMessage("修改组名"),
|
"episode" : m4,
|
||||||
"endOfEpisode": MessageLookupByLibrary.simpleMessage("节目结束"),
|
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"),
|
||||||
"episode": m4,
|
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
|
||||||
"featureDiscoveryEditGroup":
|
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"),
|
||||||
MessageLookupByLibrary.simpleMessage("点击修改分组"),
|
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
|
||||||
"featureDiscoveryEditGroupDes": MessageLookupByLibrary.simpleMessage(
|
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
|
||||||
"您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
|
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("点击添加分组"),
|
||||||
"featureDiscoveryEpisode": MessageLookupByLibrary.simpleMessage("节目界面"),
|
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("新订阅播客默认分组为 Home,您可以添加新的分组,移动播客到新的分组,每个播客可以被添加到多个分组。"),
|
||||||
"featureDiscoveryEpisodeDes":
|
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
|
||||||
MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
|
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
|
||||||
"featureDiscoveryEpisodeTitle":
|
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
|
||||||
MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
|
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("在这里您可以导入OMPL文件,打开设置页面,或者刷新所有播客。"),
|
||||||
"featureDiscoveryGroup": MessageLookupByLibrary.simpleMessage("点击添加分组"),
|
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
|
||||||
"featureDiscoveryGroupDes": MessageLookupByLibrary.simpleMessage(
|
"featureDiscoveryPlaylistDes" : MessageLookupByLibrary.simpleMessage("您可以添加节目到播放列表,节目在播放后将会从播放列表自动移除。"),
|
||||||
"新订阅播客默认分组为 Home,您可以添加新的分组,移动播客到新的分组,每个播客可以被添加到多个分组。"),
|
"featureDiscoveryPodcast" : MessageLookupByLibrary.simpleMessage("播客界面"),
|
||||||
"featureDiscoveryGroupPodcast":
|
"featureDiscoveryPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击“查看所有”新增或管理分组。"),
|
||||||
MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
|
"featureDiscoveryPodcastTitle" : MessageLookupByLibrary.simpleMessage("您可以通过上下滑动切换分组"),
|
||||||
"featureDiscoveryGroupPodcastDes":
|
"featureDiscoverySearch" : MessageLookupByLibrary.simpleMessage("点击搜索播客"),
|
||||||
MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
|
"featureDiscoverySearchDes" : MessageLookupByLibrary.simpleMessage("您可以通过搜索播客名称、关键字或者RSS链接订阅播客。"),
|
||||||
"featureDiscoveryOMPL":
|
"feedbackEmail" : MessageLookupByLibrary.simpleMessage("发送邮件"),
|
||||||
MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
|
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("提交Issue"),
|
||||||
"featureDiscoveryOMPLDes": MessageLookupByLibrary.simpleMessage(
|
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Play评价"),
|
||||||
"在这里您可以导入OMPL文件,打开设置页面,或者刷新所有播客。"),
|
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("加入小组"),
|
||||||
"featureDiscoveryPlaylist":
|
"filter" : MessageLookupByLibrary.simpleMessage("过滤"),
|
||||||
MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
|
"fonts" : MessageLookupByLibrary.simpleMessage("字体"),
|
||||||
"featureDiscoveryPlaylistDes": MessageLookupByLibrary.simpleMessage(
|
"from" : m5,
|
||||||
"您可以添加节目到播放列表,节目在播放后将会从播放列表自动移除。"),
|
"goodNight" : MessageLookupByLibrary.simpleMessage("晚安"),
|
||||||
"featureDiscoveryPodcast": MessageLookupByLibrary.simpleMessage("播客界面"),
|
"groupExisted" : MessageLookupByLibrary.simpleMessage("组名已使用"),
|
||||||
"featureDiscoveryPodcastDes":
|
"groupFilter" : MessageLookupByLibrary.simpleMessage("分组"),
|
||||||
MessageLookupByLibrary.simpleMessage("您可以点击“查看所有”新增或管理分组。"),
|
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
|
||||||
"featureDiscoveryPodcastTitle":
|
"groups" : m6,
|
||||||
MessageLookupByLibrary.simpleMessage("您可以通过上下滑动切换分组"),
|
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"),
|
||||||
"featureDiscoverySearch":
|
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"),
|
||||||
MessageLookupByLibrary.simpleMessage("点击搜索播客"),
|
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"),
|
||||||
"featureDiscoverySearchDes":
|
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("收藏"),
|
||||||
MessageLookupByLibrary.simpleMessage("您可以通过搜索播客名称、关键字或者RSS链接订阅播客。"),
|
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("最近更新"),
|
||||||
"feedbackEmail": MessageLookupByLibrary.simpleMessage("发送邮件"),
|
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("关于"),
|
||||||
"feedbackGithub": MessageLookupByLibrary.simpleMessage("提交Issue"),
|
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("导入OMPL"),
|
||||||
"feedbackPlay": MessageLookupByLibrary.simpleMessage("Play评价"),
|
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("全部刷新"),
|
||||||
"feedbackTelegram": MessageLookupByLibrary.simpleMessage("加入小组"),
|
"hostedOn" : m7,
|
||||||
"filter": MessageLookupByLibrary.simpleMessage("过滤"),
|
"hoursAgo" : m8,
|
||||||
"fonts": MessageLookupByLibrary.simpleMessage("字体"),
|
"hoursCount" : m9,
|
||||||
"from": m5,
|
"import" : MessageLookupByLibrary.simpleMessage("导入"),
|
||||||
"goodNight": MessageLookupByLibrary.simpleMessage("晚安"),
|
"introFourthPage" : MessageLookupByLibrary.simpleMessage("您可以长按节目打开快捷菜单。"),
|
||||||
"groupExisted": MessageLookupByLibrary.simpleMessage("组名已使用"),
|
"introSecondPage" : MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客,也可以直接导入OMPL文件。"),
|
||||||
"groupFilter": MessageLookupByLibrary.simpleMessage("分组"),
|
"introThirdPage" : MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
|
||||||
"groupRemoveConfirm":
|
"later" : MessageLookupByLibrary.simpleMessage("稍后"),
|
||||||
MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
|
"lightMode" : MessageLookupByLibrary.simpleMessage("明亮模式"),
|
||||||
"groups": m6,
|
"like" : MessageLookupByLibrary.simpleMessage("喜欢"),
|
||||||
"homeGroupsSeeAll": MessageLookupByLibrary.simpleMessage("查看全部"),
|
"likeDate" : MessageLookupByLibrary.simpleMessage("收藏日期"),
|
||||||
"homeMenuPlaylist": MessageLookupByLibrary.simpleMessage("播放列表"),
|
"liked" : MessageLookupByLibrary.simpleMessage("已收藏"),
|
||||||
"homeSubMenuSortBy": MessageLookupByLibrary.simpleMessage("排序"),
|
"listen" : MessageLookupByLibrary.simpleMessage("收听"),
|
||||||
"homeTabMenuFavotite": MessageLookupByLibrary.simpleMessage("收藏"),
|
"listened" : MessageLookupByLibrary.simpleMessage("已收听"),
|
||||||
"homeTabMenuRecent": MessageLookupByLibrary.simpleMessage("最近更新"),
|
"loadMore" : MessageLookupByLibrary.simpleMessage("加载更多"),
|
||||||
"homeToprightMenuAbout": MessageLookupByLibrary.simpleMessage("关于"),
|
"mark" : MessageLookupByLibrary.simpleMessage("标记"),
|
||||||
"homeToprightMenuImportOMPL":
|
"markConfirm" : MessageLookupByLibrary.simpleMessage("确认标记"),
|
||||||
MessageLookupByLibrary.simpleMessage("导入OMPL"),
|
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
|
||||||
"homeToprightMenuRefreshAll":
|
"markListened" : MessageLookupByLibrary.simpleMessage("标记已收听"),
|
||||||
MessageLookupByLibrary.simpleMessage("全部刷新"),
|
"menu" : MessageLookupByLibrary.simpleMessage("菜单"),
|
||||||
"hostedOn": m7,
|
"menuAllPodcasts" : MessageLookupByLibrary.simpleMessage("所有订阅"),
|
||||||
"hoursAgo": m8,
|
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("标记所有已收听"),
|
||||||
"hoursCount": m9,
|
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("查看 RSS"),
|
||||||
"import": MessageLookupByLibrary.simpleMessage("导入"),
|
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("访问网站"),
|
||||||
"introFourthPage":
|
"minsAgo" : m10,
|
||||||
MessageLookupByLibrary.simpleMessage("您可以长按节目打开快捷菜单。"),
|
"minsCount" : m11,
|
||||||
"introSecondPage":
|
"network" : MessageLookupByLibrary.simpleMessage("网络"),
|
||||||
MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客,也可以直接导入OMPL文件。"),
|
"newGroup" : MessageLookupByLibrary.simpleMessage("创建分组"),
|
||||||
"introThirdPage":
|
"newestFirst" : MessageLookupByLibrary.simpleMessage("由新到旧"),
|
||||||
MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
|
"next" : MessageLookupByLibrary.simpleMessage("下一步"),
|
||||||
"later": MessageLookupByLibrary.simpleMessage("稍后"),
|
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("暂无下载节目"),
|
||||||
"lightMode": MessageLookupByLibrary.simpleMessage("明亮模式"),
|
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
|
||||||
"like": MessageLookupByLibrary.simpleMessage("喜欢"),
|
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("暂无节目"),
|
||||||
"likeDate": MessageLookupByLibrary.simpleMessage("收藏日期"),
|
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("分组无播客"),
|
||||||
"liked": MessageLookupByLibrary.simpleMessage("已收藏"),
|
"noShownote" : MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"),
|
||||||
"listen": MessageLookupByLibrary.simpleMessage("收听"),
|
"notificaitonFatch" : m12,
|
||||||
"listened": MessageLookupByLibrary.simpleMessage("已收听"),
|
"notificationNetworkError" : m13,
|
||||||
"loadMore": MessageLookupByLibrary.simpleMessage("加载更多"),
|
"notificationSubscribe" : m14,
|
||||||
"mark": MessageLookupByLibrary.simpleMessage("标记"),
|
"notificationSubscribeExisted" : m15,
|
||||||
"markConfirm": MessageLookupByLibrary.simpleMessage("确认标记"),
|
"notificationSuccess" : m16,
|
||||||
"markConfirmContent":
|
"notificationUpdate" : m17,
|
||||||
MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
|
"notificationUpdateError" : m18,
|
||||||
"markListened": MessageLookupByLibrary.simpleMessage("标记已收听"),
|
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
|
||||||
"menu": MessageLookupByLibrary.simpleMessage("菜单"),
|
"play" : MessageLookupByLibrary.simpleMessage("播放"),
|
||||||
"menuAllPodcasts": MessageLookupByLibrary.simpleMessage("所有订阅"),
|
"playback" : MessageLookupByLibrary.simpleMessage("播放控制"),
|
||||||
"menuMarkAllListened": MessageLookupByLibrary.simpleMessage("标记所有已收听"),
|
"playing" : MessageLookupByLibrary.simpleMessage("正在播放"),
|
||||||
"menuViewRSS": MessageLookupByLibrary.simpleMessage("查看 RSS"),
|
"plugins" : MessageLookupByLibrary.simpleMessage("插件"),
|
||||||
"menuVisitSite": MessageLookupByLibrary.simpleMessage("访问网站"),
|
"podcast" : m19,
|
||||||
"minsAgo": m10,
|
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("播客已订阅"),
|
||||||
"minsCount": m11,
|
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("下载节目"),
|
||||||
"network": MessageLookupByLibrary.simpleMessage("网络"),
|
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
||||||
"newGroup": MessageLookupByLibrary.simpleMessage("创建分组"),
|
"popupMenuLikeDes" : MessageLookupByLibrary.simpleMessage("添加到收藏"),
|
||||||
"newestFirst": MessageLookupByLibrary.simpleMessage("由新到旧"),
|
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("设置为已收听"),
|
||||||
"next": MessageLookupByLibrary.simpleMessage("下一步"),
|
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"),
|
||||||
"noEpisodeDownload": MessageLookupByLibrary.simpleMessage("暂无下载节目"),
|
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"),
|
||||||
"noEpisodeFavorite": MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
|
"published" : m20,
|
||||||
"noEpisodeRecent": MessageLookupByLibrary.simpleMessage("暂无节目"),
|
"publishedDaily" : MessageLookupByLibrary.simpleMessage("每日更新"),
|
||||||
"noPodcastGroup": MessageLookupByLibrary.simpleMessage("分组无播客"),
|
"publishedMonthly" : MessageLookupByLibrary.simpleMessage("每月更新"),
|
||||||
"noShownote": MessageLookupByLibrary.simpleMessage("节目简介暂未收到。"),
|
"publishedWeekly" : MessageLookupByLibrary.simpleMessage("每周更新"),
|
||||||
"notificaitonFatch": m12,
|
"publishedYearly" : MessageLookupByLibrary.simpleMessage("每年更新"),
|
||||||
"notificationNetworkError": m13,
|
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("恢复订阅"),
|
||||||
"notificationSubscribe": m14,
|
"refreshArtwork" : MessageLookupByLibrary.simpleMessage("更新头像"),
|
||||||
"notificationSubscribeExisted": m15,
|
"remove" : MessageLookupByLibrary.simpleMessage("移除"),
|
||||||
"notificationSuccess": m16,
|
"removeConfirm" : MessageLookupByLibrary.simpleMessage("取消订阅"),
|
||||||
"notificationUpdate": m17,
|
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
|
||||||
"notificationUpdateError": m18,
|
"removedAt" : m21,
|
||||||
"oldestFirst": MessageLookupByLibrary.simpleMessage("由旧到新"),
|
"save" : MessageLookupByLibrary.simpleMessage("保存"),
|
||||||
"play": MessageLookupByLibrary.simpleMessage("播放"),
|
"schedule" : MessageLookupByLibrary.simpleMessage("定时"),
|
||||||
"playback": MessageLookupByLibrary.simpleMessage("播放控制"),
|
"search" : MessageLookupByLibrary.simpleMessage("搜索"),
|
||||||
"playing": MessageLookupByLibrary.simpleMessage("正在播放"),
|
"searchEpisode" : MessageLookupByLibrary.simpleMessage("搜索节目"),
|
||||||
"plugins": MessageLookupByLibrary.simpleMessage("插件"),
|
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
|
||||||
"podcast": m19,
|
"searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"),
|
||||||
"podcastSubscribed": MessageLookupByLibrary.simpleMessage("播客已订阅"),
|
"secCount" : m22,
|
||||||
"popupMenuDownloadDes": MessageLookupByLibrary.simpleMessage("下载节目"),
|
"secondsAgo" : m23,
|
||||||
"popupMenuLaterDes": MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
"settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"),
|
||||||
"popupMenuLikeDes": MessageLookupByLibrary.simpleMessage("添加到收藏"),
|
"settings" : MessageLookupByLibrary.simpleMessage("设置"),
|
||||||
"popupMenuMarkDes": MessageLookupByLibrary.simpleMessage("设置为已收听"),
|
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"),
|
||||||
"popupMenuPlayDes": MessageLookupByLibrary.simpleMessage("播放节目"),
|
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
|
||||||
"privacyPolicy": MessageLookupByLibrary.simpleMessage("隐私条款"),
|
"settingsAppIntro" : MessageLookupByLibrary.simpleMessage("引导页"),
|
||||||
"published": m20,
|
"settingsAppearance" : MessageLookupByLibrary.simpleMessage("界面"),
|
||||||
"publishedDaily": MessageLookupByLibrary.simpleMessage("每日更新"),
|
"settingsAppearanceDes" : MessageLookupByLibrary.simpleMessage("颜色与主题"),
|
||||||
"publishedMonthly": MessageLookupByLibrary.simpleMessage("每月更新"),
|
"settingsAudioCache" : MessageLookupByLibrary.simpleMessage("播放缓存"),
|
||||||
"publishedWeekly": MessageLookupByLibrary.simpleMessage("每周更新"),
|
"settingsAudioCacheDes" : MessageLookupByLibrary.simpleMessage("播放缓存设置"),
|
||||||
"publishedYearly": MessageLookupByLibrary.simpleMessage("每年更新"),
|
"settingsAutoDelete" : MessageLookupByLibrary.simpleMessage("自动删除下载节目"),
|
||||||
"recoverSubscribe": MessageLookupByLibrary.simpleMessage("恢复订阅"),
|
"settingsAutoDeleteDes" : MessageLookupByLibrary.simpleMessage("默认 30 天"),
|
||||||
"refreshArtwork": MessageLookupByLibrary.simpleMessage("更新头像"),
|
"settingsAutoPlayDes" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
||||||
"remove": MessageLookupByLibrary.simpleMessage("移除"),
|
"settingsBackup" : MessageLookupByLibrary.simpleMessage("备份"),
|
||||||
"removeConfirm": MessageLookupByLibrary.simpleMessage("取消订阅"),
|
"settingsBackupDes" : MessageLookupByLibrary.simpleMessage("备份应用数据"),
|
||||||
"removePodcastDes": MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
|
"settingsDefaultGrid" : MessageLookupByLibrary.simpleMessage("默认布局"),
|
||||||
"removedAt": m21,
|
"settingsDefaultGridDownload" : MessageLookupByLibrary.simpleMessage("下载页"),
|
||||||
"save": MessageLookupByLibrary.simpleMessage("保存"),
|
"settingsDefaultGridFavorite" : MessageLookupByLibrary.simpleMessage("收藏页"),
|
||||||
"schedule": MessageLookupByLibrary.simpleMessage("定时"),
|
"settingsDefaultGridPodcast" : MessageLookupByLibrary.simpleMessage("播客页"),
|
||||||
"search": MessageLookupByLibrary.simpleMessage("搜索"),
|
"settingsDefaultGridRecent" : MessageLookupByLibrary.simpleMessage("最近页"),
|
||||||
"searchEpisode": MessageLookupByLibrary.simpleMessage("搜索节目"),
|
"settingsDiscovery" : MessageLookupByLibrary.simpleMessage("再次功能介绍"),
|
||||||
"searchInvalidRss": MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
|
"settingsEnableSyncing" : MessageLookupByLibrary.simpleMessage("开启自动更新"),
|
||||||
"searchPodcast": MessageLookupByLibrary.simpleMessage("搜索播客"),
|
"settingsEnableSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
|
||||||
"secCount": m22,
|
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
|
||||||
"secondsAgo": m23,
|
"settingsFastForwardSec" : MessageLookupByLibrary.simpleMessage("快进时间"),
|
||||||
"settingStorage": MessageLookupByLibrary.simpleMessage("储存空间"),
|
"settingsFastForwardSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快进时间"),
|
||||||
"settings": MessageLookupByLibrary.simpleMessage("设置"),
|
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("反馈"),
|
||||||
"settingsAccentColor": MessageLookupByLibrary.simpleMessage("次要颜色"),
|
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("意见与建议"),
|
||||||
"settingsAccentColorDes":
|
"settingsHistory" : MessageLookupByLibrary.simpleMessage("历史记录"),
|
||||||
MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
|
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("收听记录"),
|
||||||
"settingsAppIntro": MessageLookupByLibrary.simpleMessage("引导页"),
|
"settingsInfo" : MessageLookupByLibrary.simpleMessage("信息"),
|
||||||
"settingsAppearance": MessageLookupByLibrary.simpleMessage("界面"),
|
"settingsInterface" : MessageLookupByLibrary.simpleMessage("界面"),
|
||||||
"settingsAppearanceDes": MessageLookupByLibrary.simpleMessage("颜色与主题"),
|
"settingsLanguages" : MessageLookupByLibrary.simpleMessage("语言"),
|
||||||
"settingsAudioCache": MessageLookupByLibrary.simpleMessage("播放缓存"),
|
"settingsLanguagesDes" : MessageLookupByLibrary.simpleMessage("设置语言"),
|
||||||
"settingsAudioCacheDes": MessageLookupByLibrary.simpleMessage("播放缓存设置"),
|
"settingsLayout" : MessageLookupByLibrary.simpleMessage("布局"),
|
||||||
"settingsAutoDelete": MessageLookupByLibrary.simpleMessage("自动删除下载节目"),
|
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("应用布局"),
|
||||||
"settingsAutoDeleteDes":
|
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("开源"),
|
||||||
MessageLookupByLibrary.simpleMessage("默认 30 天"),
|
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("开源项目使用"),
|
||||||
"settingsAutoPlayDes": MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("下载管理"),
|
||||||
"settingsBackup": MessageLookupByLibrary.simpleMessage("备份"),
|
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
|
||||||
"settingsBackupDes": MessageLookupByLibrary.simpleMessage("备份应用数据"),
|
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
||||||
"settingsDefaultGrid": MessageLookupByLibrary.simpleMessage("默认布局"),
|
"settingsNetworkCellular" : MessageLookupByLibrary.simpleMessage("蜂窝数据确认"),
|
||||||
"settingsDefaultGridDownload":
|
"settingsNetworkCellularAuto" : MessageLookupByLibrary.simpleMessage("是否用蜂窝数据自动下载"),
|
||||||
MessageLookupByLibrary.simpleMessage("下载页"),
|
"settingsNetworkCellularAutoDes" : MessageLookupByLibrary.simpleMessage("你可以在分组管理页面设置自动下载"),
|
||||||
"settingsDefaultGridFavorite":
|
"settingsNetworkCellularDes" : MessageLookupByLibrary.simpleMessage("在使用蜂窝数据下载前确认"),
|
||||||
MessageLookupByLibrary.simpleMessage("收藏页"),
|
"settingsPlayDes" : MessageLookupByLibrary.simpleMessage("播放列表和播放器"),
|
||||||
"settingsDefaultGridPodcast":
|
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
|
||||||
MessageLookupByLibrary.simpleMessage("播客页"),
|
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
|
||||||
"settingsDefaultGridRecent":
|
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"),
|
||||||
MessageLookupByLibrary.simpleMessage("最近页"),
|
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("极黑"),
|
||||||
"settingsDiscovery": MessageLookupByLibrary.simpleMessage("再次功能介绍"),
|
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
|
||||||
"settingsEnableSyncing": MessageLookupByLibrary.simpleMessage("开启自动更新"),
|
"settingsRewindSec" : MessageLookupByLibrary.simpleMessage("快退时间"),
|
||||||
"settingsEnableSyncingDes":
|
"settingsRewindSecDes" : MessageLookupByLibrary.simpleMessage("修改播放器快退时间"),
|
||||||
MessageLookupByLibrary.simpleMessage("在后台更新所有订阅播客"),
|
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
|
||||||
"settingsExportDes": MessageLookupByLibrary.simpleMessage("导出及恢复所有设置项"),
|
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
|
||||||
"settingsFastForwardSec": MessageLookupByLibrary.simpleMessage("快进时间"),
|
"settingsSTDefaultTime" : MessageLookupByLibrary.simpleMessage("默认时长"),
|
||||||
"settingsFastForwardSecDes":
|
"settingsSTDefautTimeDes" : MessageLookupByLibrary.simpleMessage("睡眠模式默认时长"),
|
||||||
MessageLookupByLibrary.simpleMessage("修改播放器快进时间"),
|
"settingsSTMode" : MessageLookupByLibrary.simpleMessage("自动睡眠模式默认时长"),
|
||||||
"settingsFeedback": MessageLookupByLibrary.simpleMessage("反馈"),
|
"settingsStorageDes" : MessageLookupByLibrary.simpleMessage("管理缓存和下载空间"),
|
||||||
"settingsFeedbackDes": MessageLookupByLibrary.simpleMessage("意见与建议"),
|
"settingsSyncing" : MessageLookupByLibrary.simpleMessage("同步"),
|
||||||
"settingsHistory": MessageLookupByLibrary.simpleMessage("历史记录"),
|
"settingsSyncingDes" : MessageLookupByLibrary.simpleMessage("在后台更新播客"),
|
||||||
"settingsHistoryDes": MessageLookupByLibrary.simpleMessage("收听记录"),
|
"settingsTapToOpenPopupMenu" : MessageLookupByLibrary.simpleMessage("轻点打开弹出菜单"),
|
||||||
"settingsInfo": MessageLookupByLibrary.simpleMessage("信息"),
|
"settingsTapToOpenPopupMenuDes" : MessageLookupByLibrary.simpleMessage("开启后您需长按打开节目页"),
|
||||||
"settingsInterface": MessageLookupByLibrary.simpleMessage("界面"),
|
"settingsTheme" : MessageLookupByLibrary.simpleMessage("主题"),
|
||||||
"settingsLanguages": MessageLookupByLibrary.simpleMessage("语言"),
|
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("更新频率"),
|
||||||
"settingsLanguagesDes": MessageLookupByLibrary.simpleMessage("设置语言"),
|
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("默认 24 小时"),
|
||||||
"settingsLayout": MessageLookupByLibrary.simpleMessage("布局"),
|
"share" : MessageLookupByLibrary.simpleMessage("分享"),
|
||||||
"settingsLayoutDes": MessageLookupByLibrary.simpleMessage("应用布局"),
|
"size" : MessageLookupByLibrary.simpleMessage("大小"),
|
||||||
"settingsLibraries": MessageLookupByLibrary.simpleMessage("开源"),
|
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
|
||||||
"settingsLibrariesDes": MessageLookupByLibrary.simpleMessage("开源项目使用"),
|
"sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"),
|
||||||
"settingsManageDownload": MessageLookupByLibrary.simpleMessage("下载管理"),
|
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
|
||||||
"settingsManageDownloadDes":
|
"subscribeExportDes" : MessageLookupByLibrary.simpleMessage("导出 OMPL 文件"),
|
||||||
MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
|
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),
|
||||||
"settingsMenuAutoPlay":
|
"timeLastPlayed" : m24,
|
||||||
MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
|
"timeLeft" : m25,
|
||||||
"settingsNetworkCellular":
|
"to" : m26,
|
||||||
MessageLookupByLibrary.simpleMessage("蜂窝数据确认"),
|
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
|
||||||
"settingsNetworkCellularAuto":
|
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
|
||||||
MessageLookupByLibrary.simpleMessage("是否用蜂窝数据自动下载"),
|
"toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
|
||||||
"settingsNetworkCellularAutoDes":
|
"toastFileNotValid" : MessageLookupByLibrary.simpleMessage("文件错误"),
|
||||||
MessageLookupByLibrary.simpleMessage("你可以在分组管理页面设置自动下载"),
|
"toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"),
|
||||||
"settingsNetworkCellularDes":
|
"toastImportSettingsSuccess" : MessageLookupByLibrary.simpleMessage("导入设置成功"),
|
||||||
MessageLookupByLibrary.simpleMessage("在使用蜂窝数据下载前确认"),
|
"toastOneGroup" : MessageLookupByLibrary.simpleMessage("请至少选择一个分组"),
|
||||||
"settingsPlayDes": MessageLookupByLibrary.simpleMessage("播放列表和播放器"),
|
"toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("恢复中,请稍后"),
|
||||||
"settingsPopupMenu": MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
|
"toastReadFile" : MessageLookupByLibrary.simpleMessage("读取文件成功"),
|
||||||
"settingsPopupMenuDes":
|
"toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("恢复订阅失败"),
|
||||||
MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
|
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("从播放列表移除"),
|
||||||
"settingsPrefrence": MessageLookupByLibrary.simpleMessage("首选项"),
|
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("设置已保存"),
|
||||||
"settingsRealDark": MessageLookupByLibrary.simpleMessage("极黑"),
|
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("与结束时刻相同"),
|
||||||
"settingsRealDarkDes":
|
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("与起始时刻相同"),
|
||||||
MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
|
"translators" : MessageLookupByLibrary.simpleMessage("翻译者"),
|
||||||
"settingsRewindSec": MessageLookupByLibrary.simpleMessage("快退时间"),
|
"understood" : MessageLookupByLibrary.simpleMessage("了解"),
|
||||||
"settingsRewindSecDes":
|
"undo" : MessageLookupByLibrary.simpleMessage("撤销"),
|
||||||
MessageLookupByLibrary.simpleMessage("修改播放器快退时间"),
|
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),
|
||||||
"settingsSTAuto": MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
|
"unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"),
|
||||||
"settingsSTAutoDes": MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
|
"updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
|
||||||
"settingsSTDefaultTime": MessageLookupByLibrary.simpleMessage("默认时长"),
|
"updateEpisodesCount" : m27,
|
||||||
"settingsSTDefautTimeDes":
|
"updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"),
|
||||||
MessageLookupByLibrary.simpleMessage("睡眠模式默认时长"),
|
"version" : m28
|
||||||
"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(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
'ppp(oza987@protonmail.com)',
|
'ppp',
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.fade,
|
overflow: TextOverflow.fade,
|
||||||
)),
|
)),
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_html/flutter_html.dart';
|
import 'package:flutter_html/flutter_html.dart';
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import 'package:webfeed/webfeed.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import '../service/api_search.dart';
|
import '../service/api_search.dart';
|
||||||
|
@ -14,7 +15,6 @@ import '../state/podcast_group.dart';
|
||||||
import '../type/searchepisodes.dart';
|
import '../type/searchepisodes.dart';
|
||||||
import '../type/searchpodcast.dart';
|
import '../type/searchpodcast.dart';
|
||||||
import '../util/extension_helper.dart';
|
import '../util/extension_helper.dart';
|
||||||
import '../webfeed/webfeed.dart';
|
|
||||||
|
|
||||||
class MyHomePageDelegate extends SearchDelegate<int> {
|
class MyHomePageDelegate extends SearchDelegate<int> {
|
||||||
final String searchFieldLabel;
|
final String searchFieldLabel;
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
},
|
},
|
||||||
"all": "Tout",
|
"all": "Tout",
|
||||||
"@all": {},
|
"@all": {},
|
||||||
"autoDownload": "Téléchargement automatique",
|
"autoDownload": "Téléchargements auto",
|
||||||
"@autoDownload": {},
|
"@autoDownload": {},
|
||||||
"back": "Retour",
|
"back": "Retour",
|
||||||
"@back": {},
|
"@back": {},
|
||||||
|
@ -28,9 +28,9 @@
|
||||||
"@buffering": {},
|
"@buffering": {},
|
||||||
"cancel": "ANNULER",
|
"cancel": "ANNULER",
|
||||||
"@cancel": {},
|
"@cancel": {},
|
||||||
"cellularConfirm": "Cellular data warn",
|
"cellularConfirm": "Avertissement utilisation des données mobiles",
|
||||||
"@cellularConfirm": {},
|
"@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": {},
|
"@cellularConfirmDes": {},
|
||||||
"changeLayout": "Modifier l'interface",
|
"changeLayout": "Modifier l'interface",
|
||||||
"@changeLayout": {},
|
"@changeLayout": {},
|
||||||
|
@ -60,9 +60,9 @@
|
||||||
"@dismiss": {},
|
"@dismiss": {},
|
||||||
"done": "Fait",
|
"done": "Fait",
|
||||||
"@done": {},
|
"@done": {},
|
||||||
"download": "Télécharger",
|
"download": "Téléchargés",
|
||||||
"@download": {},
|
"@download": {},
|
||||||
"downloaded": "Téléchargé",
|
"downloaded": "Téléchargés",
|
||||||
"@downloaded": {},
|
"@downloaded": {},
|
||||||
"editGroupName": "Modifier le nom du groupe",
|
"editGroupName": "Modifier le nom du groupe",
|
||||||
"@editGroupName": {},
|
"@editGroupName": {},
|
||||||
|
@ -106,17 +106,17 @@
|
||||||
"@featureDiscoverySearch": {},
|
"@featureDiscoverySearch": {},
|
||||||
"featureDiscoverySearchDes": "Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast.",
|
"featureDiscoverySearchDes": "Vous pouvez effectuer une recherche par titre, mots clés ou lien RSS pour vous abonner à un nouveau podcast.",
|
||||||
"@featureDiscoverySearchDes": {},
|
"@featureDiscoverySearchDes": {},
|
||||||
"feedbackEmail": "Me contacter",
|
"feedbackEmail": "Contact",
|
||||||
"@feedbackEmail": {},
|
"@feedbackEmail": {},
|
||||||
"feedbackGithub": "Soumettre un problème",
|
"feedbackGithub": "GitHub",
|
||||||
"@feedbackGithub": {},
|
"@feedbackGithub": {},
|
||||||
"feedbackPlay": "Noter sur le PlayStore",
|
"feedbackPlay": "PlayStore",
|
||||||
"@feedbackPlay": {
|
"@feedbackPlay": {
|
||||||
"description": "Rate on Google Play Store.\nUser can tap to open play link."
|
"description": "Rate on Google Play Store.\nUser can tap to open play link."
|
||||||
},
|
},
|
||||||
"feedbackTelegram": "Joindre le groupe",
|
"feedbackTelegram": "Telegram",
|
||||||
"@feedbackTelegram": {},
|
"@feedbackTelegram": {},
|
||||||
"filter": "Filter",
|
"filter": "Filtrer",
|
||||||
"@filter": {},
|
"@filter": {},
|
||||||
"fonts": "Polices",
|
"fonts": "Polices",
|
||||||
"@fonts": {},
|
"@fonts": {},
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
"@homeSubMenuSortBy": {},
|
"@homeSubMenuSortBy": {},
|
||||||
"homeTabMenuFavotite": "Favoris",
|
"homeTabMenuFavotite": "Favoris",
|
||||||
"@homeTabMenuFavotite": {},
|
"@homeTabMenuFavotite": {},
|
||||||
"homeTabMenuRecent": "Récent",
|
"homeTabMenuRecent": "Récents",
|
||||||
"@homeTabMenuRecent": {},
|
"@homeTabMenuRecent": {},
|
||||||
"homeToprightMenuAbout": "À propos",
|
"homeToprightMenuAbout": "À propos",
|
||||||
"@homeToprightMenuAbout": {},
|
"@homeToprightMenuAbout": {},
|
||||||
|
@ -190,7 +190,7 @@
|
||||||
"@listened": {},
|
"@listened": {},
|
||||||
"loadMore": "Voir plus",
|
"loadMore": "Voir plus",
|
||||||
"@loadMore": {},
|
"@loadMore": {},
|
||||||
"mark": "Marqué",
|
"mark": "✓",
|
||||||
"@mark": {
|
"@mark": {
|
||||||
"description": "In listen history page, if a episode is marked as listened."
|
"description": "In listen history page, if a episode is marked as listened."
|
||||||
},
|
},
|
||||||
|
@ -216,7 +216,7 @@
|
||||||
"@minsCount": {},
|
"@minsCount": {},
|
||||||
"network": "Réseau",
|
"network": "Réseau",
|
||||||
"@network": {},
|
"@network": {},
|
||||||
"newestFirst": "Le plus récent en premier.",
|
"newestFirst": "Le plus récent en premier",
|
||||||
"@newestFirst": {},
|
"@newestFirst": {},
|
||||||
"newGroup": "Créer un nouveau groupe",
|
"newGroup": "Créer un nouveau groupe",
|
||||||
"@newGroup": {},
|
"@newGroup": {},
|
||||||
|
@ -272,11 +272,11 @@
|
||||||
"title": {}
|
"title": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"oldestFirst": "Le plus ancien en premier.",
|
"oldestFirst": "Le plus ancien en premier",
|
||||||
"@oldestFirst": {},
|
"@oldestFirst": {},
|
||||||
"play": "Lecture",
|
"play": "Lecture",
|
||||||
"@play": {},
|
"@play": {},
|
||||||
"playback": "Playback control",
|
"playback": "Commandes du lecteur",
|
||||||
"@playback": {},
|
"@playback": {},
|
||||||
"playing": "En cours",
|
"playing": "En cours",
|
||||||
"@playing": {},
|
"@playing": {},
|
||||||
|
@ -296,7 +296,7 @@
|
||||||
"@popupMenuMarkDes": {},
|
"@popupMenuMarkDes": {},
|
||||||
"popupMenuPlayDes": "Jouer l'épisode",
|
"popupMenuPlayDes": "Jouer l'épisode",
|
||||||
"@popupMenuPlayDes": {},
|
"@popupMenuPlayDes": {},
|
||||||
"privacyPolicy": "Politique relative aux données personnelles.",
|
"privacyPolicy": "Politique relative aux données personnelles",
|
||||||
"@privacyPolicy": {},
|
"@privacyPolicy": {},
|
||||||
"published": "Publié le {date}",
|
"published": "Publié le {date}",
|
||||||
"@published": {
|
"@published": {
|
||||||
|
@ -304,21 +304,21 @@
|
||||||
"date": {}
|
"date": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"publishedDaily": "Published daily",
|
"publishedDaily": "Quotidien",
|
||||||
"@publishedDaily": {},
|
"@publishedDaily": {},
|
||||||
"publishedMonthly": "Published monthly",
|
"publishedMonthly": "Mensuel",
|
||||||
"@publishedMonthly": {},
|
"@publishedMonthly": {},
|
||||||
"publishedWeekly": "Published weekly",
|
"publishedWeekly": "Hebdomadaire",
|
||||||
"@publishedWeekly": {
|
"@publishedWeekly": {
|
||||||
"description": "In search podcast detail page."
|
"description": "In search podcast detail page."
|
||||||
},
|
},
|
||||||
"publishedYearly": "Published yearly",
|
"publishedYearly": "Annuel",
|
||||||
"@publishedYearly": {},
|
"@publishedYearly": {},
|
||||||
"recoverSubscribe": "Restaurer l'abonnement",
|
"recoverSubscribe": "Restaurer l'abonnement",
|
||||||
"@recoverSubscribe": {
|
"@recoverSubscribe": {
|
||||||
"description": "User can recover subscribe podcast after remove it in subscribe history page."
|
"description": "User can recover subscribe podcast after remove it in subscribe history page."
|
||||||
},
|
},
|
||||||
"refreshArtwork": "Update artwork",
|
"refreshArtwork": "Mettre à jour la vignette",
|
||||||
"@refreshArtwork": {},
|
"@refreshArtwork": {},
|
||||||
"remove": "Supprimer",
|
"remove": "Supprimer",
|
||||||
"@remove": {
|
"@remove": {
|
||||||
|
@ -341,9 +341,9 @@
|
||||||
"@save": {},
|
"@save": {},
|
||||||
"schedule": "Programmation",
|
"schedule": "Programmation",
|
||||||
"@schedule": {},
|
"@schedule": {},
|
||||||
"search": "Search",
|
"search": "Rechercher",
|
||||||
"@search": {},
|
"@search": {},
|
||||||
"searchEpisode": "Search episode",
|
"searchEpisode": "Rechercher un épisode",
|
||||||
"@searchEpisode": {},
|
"@searchEpisode": {},
|
||||||
"searchInvalidRss": "Lien RSS invalide",
|
"searchInvalidRss": "Lien RSS invalide",
|
||||||
"@searchInvalidRss": {},
|
"@searchInvalidRss": {},
|
||||||
|
@ -357,7 +357,7 @@
|
||||||
"@settings": {},
|
"@settings": {},
|
||||||
"settingsAccentColor": "Couleur principale",
|
"settingsAccentColor": "Couleur principale",
|
||||||
"@settingsAccentColor": {},
|
"@settingsAccentColor": {},
|
||||||
"settingsAccentColorDes": "Inclure la couleur de superposition",
|
"settingsAccentColorDes": "Sélection de la couleur du thème",
|
||||||
"@settingsAccentColorDes": {},
|
"@settingsAccentColorDes": {},
|
||||||
"settingsAppearance": "Apparence",
|
"settingsAppearance": "Apparence",
|
||||||
"@settingsAppearance": {},
|
"@settingsAppearance": {},
|
||||||
|
@ -369,7 +369,7 @@
|
||||||
"@settingsAudioCache": {},
|
"@settingsAudioCache": {},
|
||||||
"settingsAudioCacheDes": "Taille maximum du cache audio",
|
"settingsAudioCacheDes": "Taille maximum du cache audio",
|
||||||
"@settingsAudioCacheDes": {},
|
"@settingsAudioCacheDes": {},
|
||||||
"settingsAutoDelete": "Supprimer automatiquement les téléchargement après",
|
"settingsAutoDelete": "Suppression des fichiers ",
|
||||||
"@settingsAutoDelete": {},
|
"@settingsAutoDelete": {},
|
||||||
"settingsAutoDeleteDes": "30 jours par défaut",
|
"settingsAutoDeleteDes": "30 jours par défaut",
|
||||||
"@settingsAutoDeleteDes": {},
|
"@settingsAutoDeleteDes": {},
|
||||||
|
@ -377,17 +377,17 @@
|
||||||
"@settingsAutoPlayDes": {},
|
"@settingsAutoPlayDes": {},
|
||||||
"settingsBackup": "Backup",
|
"settingsBackup": "Backup",
|
||||||
"@settingsBackup": {},
|
"@settingsBackup": {},
|
||||||
"settingsBackupDes": "Sauvegarder les données de l'application",
|
"settingsBackupDes": "Sauvegarde des données de l'application",
|
||||||
"@settingsBackupDes": {},
|
"@settingsBackupDes": {},
|
||||||
"settingsDefaultGrid": "Vue par défaut",
|
"settingsDefaultGrid": "Vue par défaut",
|
||||||
"@settingsDefaultGrid": {},
|
"@settingsDefaultGrid": {},
|
||||||
"settingsDefaultGridDownload": "Onglet téléchargement",
|
"settingsDefaultGridDownload": "Onglet Téléchargés",
|
||||||
"@settingsDefaultGridDownload": {},
|
"@settingsDefaultGridDownload": {},
|
||||||
"settingsDefaultGridFavorite": "Onglet favoris",
|
"settingsDefaultGridFavorite": "Onglet Favoris",
|
||||||
"@settingsDefaultGridFavorite": {},
|
"@settingsDefaultGridFavorite": {},
|
||||||
"settingsDefaultGridPodcast": "Page du podcast",
|
"settingsDefaultGridPodcast": "Page du podcast",
|
||||||
"@settingsDefaultGridPodcast": {},
|
"@settingsDefaultGridPodcast": {},
|
||||||
"settingsDefaultGridRecent": "Onglet récents",
|
"settingsDefaultGridRecent": "Onglet Récents",
|
||||||
"@settingsDefaultGridRecent": {},
|
"@settingsDefaultGridRecent": {},
|
||||||
"settingsDiscovery": "Revoir le tutoriel",
|
"settingsDiscovery": "Revoir le tutoriel",
|
||||||
"@settingsDiscovery": {
|
"@settingsDiscovery": {
|
||||||
|
@ -395,21 +395,21 @@
|
||||||
},
|
},
|
||||||
"settingsEnableSyncing": "Activer la synchronisation",
|
"settingsEnableSyncing": "Activer la synchronisation",
|
||||||
"@settingsEnableSyncing": {},
|
"@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": {},
|
"@settingsEnableSyncingDes": {},
|
||||||
"settingsExportDes": "Exporter et importer les paramètres de l'application",
|
"settingsExportDes": "Exporter et importer les paramètres de l'application.",
|
||||||
"@settingsExportDes": {},
|
"@settingsExportDes": {},
|
||||||
"settingsFastForwardSec": "Fast forward seconds",
|
"settingsFastForwardSec": "Avance rapide",
|
||||||
"@settingsFastForwardSec": {},
|
"@settingsFastForwardSec": {},
|
||||||
"settingsFastForwardSecDes": "Change the fast forward seconds in player",
|
"settingsFastForwardSecDes": "Vitesse de l'avance rapide en secondes",
|
||||||
"@settingsFastForwardSecDes": {},
|
"@settingsFastForwardSecDes": {},
|
||||||
"settingsFeedback": "Feedback",
|
"settingsFeedback": "Feedback",
|
||||||
"@settingsFeedback": {},
|
"@settingsFeedback": {},
|
||||||
"settingsFeedbackDes": "Report de bugs et demande d'ajout de fonction",
|
"settingsFeedbackDes": "Report de bug et demande d'ajout de fonction",
|
||||||
"@settingsFeedbackDes": {},
|
"@settingsFeedbackDes": {},
|
||||||
"settingsHistory": "Historique",
|
"settingsHistory": "Historique",
|
||||||
"@settingsHistory": {},
|
"@settingsHistory": {},
|
||||||
"settingsHistoryDes": "Données d'écoutes",
|
"settingsHistoryDes": "Gestion des données",
|
||||||
"@settingsHistoryDes": {},
|
"@settingsHistoryDes": {},
|
||||||
"settingsInfo": "Infos",
|
"settingsInfo": "Infos",
|
||||||
"@settingsInfo": {},
|
"@settingsInfo": {},
|
||||||
|
@ -417,7 +417,7 @@
|
||||||
"@settingsInterface": {},
|
"@settingsInterface": {},
|
||||||
"settingsLanguages": "Langues",
|
"settingsLanguages": "Langues",
|
||||||
"@settingsLanguages": {},
|
"@settingsLanguages": {},
|
||||||
"settingsLanguagesDes": "Changer la langue",
|
"settingsLanguagesDes": "Sélection de la langue",
|
||||||
"@settingsLanguagesDes": {},
|
"@settingsLanguagesDes": {},
|
||||||
"settingsLayout": "Style",
|
"settingsLayout": "Style",
|
||||||
"@settingsLayout": {},
|
"@settingsLayout": {},
|
||||||
|
@ -425,37 +425,37 @@
|
||||||
"@settingsLayoutDes": {},
|
"@settingsLayoutDes": {},
|
||||||
"settingsLibraries": "Librairies",
|
"settingsLibraries": "Librairies",
|
||||||
"@settingsLibraries": {},
|
"@settingsLibraries": {},
|
||||||
"settingsLibrariesDes": "Les librairies open source utilisées",
|
"settingsLibrariesDes": "Librairies opensource utilisées",
|
||||||
"@settingsLibrariesDes": {},
|
"@settingsLibrariesDes": {},
|
||||||
"settingsManageDownload": "Gérer les téléchargements",
|
"settingsManageDownload": "Gérer les téléchargements",
|
||||||
"@settingsManageDownload": {},
|
"@settingsManageDownload": {},
|
||||||
"settingsManageDownloadDes": "Gérer les fichiers audio téléchargés",
|
"settingsManageDownloadDes": "Gérer les fichiers audio téléchargés",
|
||||||
"@settingsManageDownloadDes": {},
|
"@settingsManageDownloadDes": {},
|
||||||
"settingsMenuAutoPlay": "Jouer automatiquement le suivant.",
|
"settingsMenuAutoPlay": "Lecture automatique",
|
||||||
"@settingsMenuAutoPlay": {},
|
"@settingsMenuAutoPlay": {},
|
||||||
"settingsNetworkCellular": "Demander avant l'utilisation du réseau mobile",
|
"settingsNetworkCellular": "Utilisation du réseau mobile",
|
||||||
"@settingsNetworkCellular": {},
|
"@settingsNetworkCellular": {},
|
||||||
"settingsNetworkCellularAuto": "Téléchargement automatique sur réseau mobile.",
|
"settingsNetworkCellularAuto": "Téléchargement automatique sur réseau mobile",
|
||||||
"@settingsNetworkCellularAuto": {},
|
"@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": {},
|
"@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": {},
|
"@settingsNetworkCellularDes": {},
|
||||||
"settingsPlayDes": "Playlist et lecteur",
|
"settingsPlayDes": "Playlist et lecteur",
|
||||||
"@settingsPlayDes": {},
|
"@settingsPlayDes": {},
|
||||||
"settingsPopupMenu": "Menu popup des épisodes",
|
"settingsPopupMenu": "Menu popup des épisodes",
|
||||||
"@settingsPopupMenu": {},
|
"@settingsPopupMenu": {},
|
||||||
"settingsPopupMenuDes": "Modifier le menu popup de l'épisode",
|
"settingsPopupMenuDes": "Configuration du menu popup",
|
||||||
"@settingsPopupMenuDes": {},
|
"@settingsPopupMenuDes": {},
|
||||||
"settingsPrefrence": "Préférences",
|
"settingsPrefrence": "Préférences",
|
||||||
"@settingsPrefrence": {},
|
"@settingsPrefrence": {},
|
||||||
"settingsRealDark": "Noir profond",
|
"settingsRealDark": "Noir profond",
|
||||||
"@settingsRealDark": {},
|
"@settingsRealDark": {},
|
||||||
"settingsRealDarkDes": "Activez pour un mode sombre accentué",
|
"settingsRealDarkDes": "Activer pour un mode sombre accentué",
|
||||||
"@settingsRealDarkDes": {},
|
"@settingsRealDarkDes": {},
|
||||||
"settingsRewindSec": "Rewind seconds",
|
"settingsRewindSec": "Retour rapide",
|
||||||
"@settingsRewindSec": {},
|
"@settingsRewindSec": {},
|
||||||
"settingsRewindSecDes": "Change the rewind seconds in player",
|
"settingsRewindSecDes": "Vitesse du retour rapide en secondes",
|
||||||
"@settingsRewindSecDes": {},
|
"@settingsRewindSecDes": {},
|
||||||
"settingsSTAuto": "Activation automatique de la minuterie",
|
"settingsSTAuto": "Activation automatique de la minuterie",
|
||||||
"@settingsSTAuto": {},
|
"@settingsSTAuto": {},
|
||||||
|
@ -463,15 +463,15 @@
|
||||||
"@settingsSTAutoDes": {},
|
"@settingsSTAutoDes": {},
|
||||||
"settingsSTDefaultTime": "Temps par défaut",
|
"settingsSTDefaultTime": "Temps par défaut",
|
||||||
"@settingsSTDefaultTime": {},
|
"@settingsSTDefaultTime": {},
|
||||||
"settingsSTDefautTimeDes": "Temps par défaut de la minuterie",
|
"settingsSTDefautTimeDes": "Configuration de la minuterie",
|
||||||
"@settingsSTDefautTimeDes": {},
|
"@settingsSTDefautTimeDes": {},
|
||||||
"settingsSTMode": "Mode minuterie automatique",
|
"settingsSTMode": "Mode minuterie automatique",
|
||||||
"@settingsSTMode": {},
|
"@settingsSTMode": {},
|
||||||
"settingsStorageDes": "Gérer le cache et l'espace de stockage",
|
"settingsStorageDes": "Gestion du cache et de l'espace de stockage",
|
||||||
"@settingsStorageDes": {},
|
"@settingsStorageDes": {},
|
||||||
"settingsSyncing": "Synchronisation",
|
"settingsSyncing": "Synchronisation",
|
||||||
"@settingsSyncing": {},
|
"@settingsSyncing": {},
|
||||||
"settingsSyncingDes": "Actualiser les podcasts en arrière-plan",
|
"settingsSyncingDes": "Actualisation des podcasts en arrière-plan",
|
||||||
"@settingsSyncingDes": {},
|
"@settingsSyncingDes": {},
|
||||||
"settingsTapToOpenPopupMenu": "Appuyer pour ouvrir le menu",
|
"settingsTapToOpenPopupMenu": "Appuyer pour ouvrir le menu",
|
||||||
"@settingsTapToOpenPopupMenu": {},
|
"@settingsTapToOpenPopupMenu": {},
|
||||||
|
@ -481,7 +481,7 @@
|
||||||
"@settingsTheme": {},
|
"@settingsTheme": {},
|
||||||
"settingStorage": "Espace de stockage",
|
"settingStorage": "Espace de stockage",
|
||||||
"@settingStorage": {},
|
"@settingStorage": {},
|
||||||
"settingsUpdateInterval": "Intervalle de mise à jour",
|
"settingsUpdateInterval": "Intervalle des mises à jour",
|
||||||
"@settingsUpdateInterval": {},
|
"@settingsUpdateInterval": {},
|
||||||
"settingsUpdateIntervalDes": "24 heures par défaut",
|
"settingsUpdateIntervalDes": "24 heures par défaut",
|
||||||
"@settingsUpdateIntervalDes": {},
|
"@settingsUpdateIntervalDes": {},
|
||||||
|
@ -495,9 +495,9 @@
|
||||||
"@sleepTimer": {},
|
"@sleepTimer": {},
|
||||||
"subscribe": "Abonnements",
|
"subscribe": "Abonnements",
|
||||||
"@subscribe": {},
|
"@subscribe": {},
|
||||||
"subscribeExportDes": "Exporter le fichier OPML de tous les podcasts",
|
"subscribeExportDes": "Exporter le fichier OPML de tous les podcasts.",
|
||||||
"@subscribeExportDes": {},
|
"@subscribeExportDes": {},
|
||||||
"systemDefault": "Valeur du système par défaut",
|
"systemDefault": "Système par défaut",
|
||||||
"@systemDefault": {},
|
"@systemDefault": {},
|
||||||
"timeLastPlayed": "Dernière écoute à {time}",
|
"timeLastPlayed": "Dernière écoute à {time}",
|
||||||
"@timeLastPlayed": {
|
"@timeLastPlayed": {
|
||||||
|
@ -512,7 +512,7 @@
|
||||||
"time": {}
|
"time": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"to": "Jusqu'à {time}",
|
"to": "à {time}",
|
||||||
"@to": {
|
"@to": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"time": {}
|
"time": {}
|
||||||
|
@ -556,7 +556,7 @@
|
||||||
"@toastTimeEqualStart": {
|
"@toastTimeEqualStart": {
|
||||||
"description": "User can't choose the same time as schedule start time."
|
"description": "User can't choose the same time as schedule start time."
|
||||||
},
|
},
|
||||||
"translators": "Translators",
|
"translators": "Traducteurs",
|
||||||
"@translators": {},
|
"@translators": {},
|
||||||
"understood": "Compris",
|
"understood": "Compris",
|
||||||
"@understood": {},
|
"@understood": {},
|
||||||
|
|
|
@ -5,12 +5,12 @@ import 'package:flutter_downloader/flutter_downloader.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:path/path.dart';
|
import 'package:path/path.dart';
|
||||||
import 'package:sqflite/sqflite.dart';
|
import 'package:sqflite/sqflite.dart';
|
||||||
|
import 'package:webfeed/webfeed.dart';
|
||||||
|
|
||||||
import '../type/episodebrief.dart';
|
import '../type/episodebrief.dart';
|
||||||
import '../type/play_histroy.dart';
|
import '../type/play_histroy.dart';
|
||||||
import '../type/podcastlocal.dart';
|
import '../type/podcastlocal.dart';
|
||||||
import '../type/sub_history.dart';
|
import '../type/sub_history.dart';
|
||||||
import '../webfeed/webfeed.dart';
|
|
||||||
|
|
||||||
enum Filter { downloaded, liked, search, all }
|
enum Filter { downloaded, liked, search, all }
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ class DBHelper {
|
||||||
String description, url;
|
String description, url;
|
||||||
for (var i = 0; i < result; i++) {
|
for (var i = 0; i < result; i++) {
|
||||||
print(feed.items[i].title);
|
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 ?? '');
|
feed.items[i].description ?? '', feed.items[i].itunes.summary ?? '');
|
||||||
if (feed.items[i].enclosure != null) {
|
if (feed.items[i].enclosure != null) {
|
||||||
_isXimalaya(feed.items[i].enclosure.url)
|
_isXimalaya(feed.items[i].enclosure.url)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:line_icons/line_icons.dart';
|
import 'package:line_icons/line_icons.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:webfeed/webfeed.dart';
|
||||||
|
|
||||||
import '../local_storage/sqflite_localpodcast.dart';
|
import '../local_storage/sqflite_localpodcast.dart';
|
||||||
import '../state/podcast_group.dart';
|
import '../state/podcast_group.dart';
|
||||||
|
@ -13,7 +14,6 @@ import '../type/play_histroy.dart';
|
||||||
import '../type/searchpodcast.dart';
|
import '../type/searchpodcast.dart';
|
||||||
import '../type/sub_history.dart';
|
import '../type/sub_history.dart';
|
||||||
import '../util/extension_helper.dart';
|
import '../util/extension_helper.dart';
|
||||||
import '../webfeed/webfeed.dart';
|
|
||||||
|
|
||||||
class PlayedHistory extends StatefulWidget {
|
class PlayedHistory extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -10,13 +10,13 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_isolate/flutter_isolate.dart';
|
import 'package:flutter_isolate/flutter_isolate.dart';
|
||||||
import 'package:image/image.dart' as img;
|
import 'package:image/image.dart' as img;
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
import 'package:webfeed/webfeed.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
import '../local_storage/key_value_storage.dart';
|
import '../local_storage/key_value_storage.dart';
|
||||||
import '../local_storage/sqflite_localpodcast.dart';
|
import '../local_storage/sqflite_localpodcast.dart';
|
||||||
import '../type/fireside_data.dart';
|
import '../type/fireside_data.dart';
|
||||||
import '../type/podcastlocal.dart';
|
import '../type/podcastlocal.dart';
|
||||||
import '../webfeed/webfeed.dart';
|
|
||||||
|
|
||||||
class GroupEntity {
|
class GroupEntity {
|
||||||
final String name;
|
final String name;
|
||||||
|
|
|
@ -70,6 +70,7 @@ class OnlinePodcast {
|
||||||
|
|
||||||
int get interval {
|
int get interval {
|
||||||
if (count < 1) {
|
if (count < 1) {
|
||||||
|
// ignore: avoid_returning_null
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (latestPubDate - earliestPubDate) ~/ count;
|
return (latestPubDate - earliestPubDate) ~/ count;
|
||||||
|
|
|
@ -1100,7 +1100,9 @@ class MyDropdownButton<T> extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _MyDropdownButtonState<T> extends State<MyDropdownButton<T>>
|
class _MyDropdownButtonState<T> extends State<MyDropdownButton<T>>
|
||||||
with WidgetsBindingObserver {
|
// ignore: prefer_mixin
|
||||||
|
with
|
||||||
|
WidgetsBindingObserver {
|
||||||
int _selectedIndex;
|
int _selectedIndex;
|
||||||
_DropdownRoute<T> _dropdownRoute;
|
_DropdownRoute<T> _dropdownRoute;
|
||||||
Orientation _lastOrientation;
|
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:
|
focused_menu:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/stonega/focused_menu.git
|
url: https://github.com/stonega/focused_menu.git
|
||||||
|
webfeed:
|
||||||
|
git:
|
||||||
|
url: https://github.com/stonega/webfeed.git
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
|
@ -10,7 +10,7 @@ import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:tsacdop/main.dart';
|
import 'package:tsacdop/main.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
testWidgets('Counter increments smoke test', (tester) async {
|
||||||
// Build our app and trigger a frame.
|
// Build our app and trigger a frame.
|
||||||
await tester.pumpWidget(MyApp());
|
await tester.pumpWidget(MyApp());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue