Merge branch 'master' of gitlab.gnome.org:World/podcasts
This commit is contained in:
+15
-18
@@ -5,47 +5,44 @@ version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
chrono = "0.4.9"
|
||||
chrono = "0.4.11"
|
||||
crossbeam-channel = "0.3.9"
|
||||
gdk = "0.12.0"
|
||||
gdk = "0.12.1"
|
||||
gdk-pixbuf = "0.8.0"
|
||||
gobject-sys = "0.9.1"
|
||||
glib-sys = "0.9.1"
|
||||
gst = { version = "0.15.2", package = "gstreamer" }
|
||||
gst-player = { version = "0.15.0", package = "gstreamer-player" }
|
||||
gst = { version = "0.15.7", package = "gstreamer" }
|
||||
gst-player = { version = "0.15.5", package = "gstreamer-player" }
|
||||
humansize = "1.1.0"
|
||||
lazy_static = "1.4.0"
|
||||
log = "0.4.8"
|
||||
loggerv = "0.7.2"
|
||||
open = "1.3.2"
|
||||
rayon = "1.2.0"
|
||||
open = "1.4.0"
|
||||
rayon = "1.3.1"
|
||||
url = "2.1.0"
|
||||
failure = "0.1.6"
|
||||
failure_derive = "0.1.6"
|
||||
fragile = "0.3.0"
|
||||
regex = "1.3.1"
|
||||
failure = "0.1.8"
|
||||
failure_derive = "0.1.8"
|
||||
fragile = "1.0.0"
|
||||
regex = "1.3.9"
|
||||
reqwest = "0.9.22"
|
||||
serde_json = "1.0.41"
|
||||
# html2text = "0.1.8"
|
||||
html2text = { git = "https://github.com/jugglerchris/rust-html2text" }
|
||||
serde_json = "1.0.55"
|
||||
html2text = "0.1.12"
|
||||
mpris-player = "0.5.0"
|
||||
pango = "0.8.0"
|
||||
glib = "0.9.3"
|
||||
|
||||
[dependencies.gettext-rs]
|
||||
git = "https://github.com/danigm/gettext-rs"
|
||||
branch = "no-gettext"
|
||||
features = ["gettext-system"]
|
||||
|
||||
[dependencies.glib]
|
||||
version = "0.9.1"
|
||||
|
||||
[dependencies.gio]
|
||||
features = ["v2_50"]
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
|
||||
[dependencies.gtk]
|
||||
features = ["v3_24"]
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
|
||||
[dependencies.libhandy]
|
||||
version = "0.5.0"
|
||||
|
||||
+139
-122
@@ -2,22 +2,23 @@
|
||||
# Copyright (C) 2018 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# arverne73 <arverne@wanadoo.fr>, 2018.
|
||||
# Alexandre Franke <alexandre.franke@gmail.com>, 2018
|
||||
# Alexandre Franke <alexandre.franke@gmail.com>, 2018, 2020
|
||||
# Thibault Martin <mail@thibaultmart.in>, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2018-10-23 10:23+0000\n"
|
||||
"PO-Revision-Date: 2018-10-29 13:53+0100\n"
|
||||
"Last-Translator: Alexandre Franke <alexandre.franke@gmail.com>\n"
|
||||
"POT-Creation-Date: 2020-06-03 20:13+0000\n"
|
||||
"PO-Revision-Date: 2020-06-19 17:15+0200\n"
|
||||
"Last-Translator: Thibault Martin <mail@thibaultmart.in>\n"
|
||||
"Language-Team: French <gnomefr@traduc.org>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||
"X-Generator: Gtranslator 3.36.0\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@@ -49,8 +50,7 @@ msgstr "Indique s’il faut actualiser périodiquement le contenu"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:46
|
||||
msgid "How many periods of time to wait between automatic refreshes"
|
||||
msgstr ""
|
||||
"Nombre de périodes de délais à attendre entre les actualisations automatiques"
|
||||
msgstr "Nombre de délais à attendre entre les actualisations automatiques"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:50
|
||||
msgid "What period of time to wait between automatic refreshes"
|
||||
@@ -71,8 +71,8 @@ msgstr "Délai entre les nettoyages automatiques"
|
||||
#. Weird magic I copy-pasted that sets the Application Name in the Shell.
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.desktop.in.in:3
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:4
|
||||
#: podcasts-gtk/src/app.rs:92 podcasts-gtk/src/app.rs:416
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:37
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:353
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:82
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@@ -81,11 +81,6 @@ msgstr "Podcasts"
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "Écouter vos podcasts favoris directement sur votre bureau."
|
||||
|
||||
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.desktop.in.in:6
|
||||
msgid "@icon@"
|
||||
msgstr "@icon@"
|
||||
|
||||
#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.desktop.in.in:13
|
||||
msgid "Podcast;RSS;"
|
||||
@@ -95,13 +90,13 @@ msgstr "Podcast;RSS;Baladodiffusion;Émissions;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Application de podcast pour GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:68
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:46
|
||||
msgid "This show does not have episodes yet"
|
||||
msgstr "Cette émission n’a pas encore d’épisodes"
|
||||
msgstr "Cette émission n’a pas encore d’épisode"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:62
|
||||
msgid "If you think this is an error, please consider writing a bug report."
|
||||
@@ -119,19 +114,23 @@ msgstr "Ajouter de nouvelles émissions via une URL de flux"
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Importer des émissions à partir d’un autre appareil"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:180
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Vous avez déjà écouté cet épisode."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Calcul de la taille de l’épisode…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Lire cet épisode"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Annuler le téléchargement"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
msgid "Download this episode"
|
||||
msgstr "Télécharger cet épisode"
|
||||
|
||||
@@ -143,20 +142,20 @@ msgstr "_Chercher de nouveaux épisodes"
|
||||
msgid "_Import Shows"
|
||||
msgstr "_Importer les émissions"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "_Préférences"
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:16
|
||||
msgid "_Export Shows"
|
||||
msgstr "_Exporter les émissions"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:27
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Raccourcis clavier"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "À _propos de Podcasts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Ajouter un nouveau flux"
|
||||
|
||||
@@ -168,15 +167,11 @@ msgstr "Entrer l’adresse du flux à ajouter"
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Vous êtes déjà abonné à ce flux !"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Titre de l’émission"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
@@ -191,11 +186,6 @@ msgstr "Chercher de nouveaux épisodes"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "Préférences"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Quitter l’application"
|
||||
|
||||
@@ -227,71 +217,54 @@ msgstr "Une notification d’action intégrée à l’application"
|
||||
msgid "Undo"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Reculer de 10 secondes"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Lecture en cours"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Lire"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Avancer de 10 secondes"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Changer la vitesse de lecture"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:300
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:380
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:47
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:122
|
||||
msgid "1.00×"
|
||||
msgstr "1,00×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:344
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:86
|
||||
msgid "1.50×"
|
||||
msgstr "1,50×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:348
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:90
|
||||
msgid "1.5 speed rate"
|
||||
msgstr "Débit × 1,5"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:362
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:104
|
||||
msgid "1.25×"
|
||||
msgstr "1,25×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:366
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:108
|
||||
msgid "1.25 speed rate"
|
||||
msgstr "Débit × 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Vitesse normale"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Préférences"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Reculer de 10 secondes"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Apparence"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Lire"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Thème sombre"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "Supprimer les épisodes lus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "Après"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Avancer de 10 secondes"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
@@ -317,91 +290,135 @@ msgstr "Marquer tout comme lu"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Se désabonner"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:333
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "En savoir plus"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:287
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Récupérer les nouveaux épisodes"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:98
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Vous êtes déjà abonné à cette émission"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:106
|
||||
msgid "Invalid URL"
|
||||
msgstr "URL non valide"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:59
|
||||
msgid "Seconds"
|
||||
msgstr "Secondes"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:60
|
||||
msgid "Minutes"
|
||||
msgstr "Minutes"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:61
|
||||
msgid "Hours"
|
||||
msgstr "Heures"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:62
|
||||
msgid "Days"
|
||||
msgstr "Jours"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:63
|
||||
msgid "Weeks"
|
||||
msgstr "Semaines"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:35
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Nouveau"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:36
|
||||
#: podcasts-gtk/src/stacks/content.rs:55
|
||||
msgid "Shows"
|
||||
msgstr "Émissions"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:357
|
||||
#: podcasts-gtk/src/utils.rs:398
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Sélectionnez le fichier à partir duquel importer les émissions."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:360
|
||||
#: podcasts-gtk/src/utils.rs:401
|
||||
msgid "_Import"
|
||||
msgstr "_Importer"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:369
|
||||
#: podcasts-gtk/src/utils.rs:410 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "Fichier OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:386
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Échec de l’analyse du fichier importé"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:391
|
||||
#: podcasts-gtk/src/utils.rs:432 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Le fichier sélectionné n’est pas accessible."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:32
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Exporter les émissions vers…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Exporter"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "A_nnuler"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Abonnements GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Échec de l’exportation des podcasts"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:51
|
||||
msgid "Podcast Client for the GNOME Desktop."
|
||||
msgstr "Client de podcast pour le bureau GNOME."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:39
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:58
|
||||
msgid "Learn more about GNOME Podcasts"
|
||||
msgstr "En apprendre plus sur GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:44
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
msgid "translator-credits"
|
||||
msgstr "Alexandre Franke"
|
||||
msgstr ""
|
||||
"Alexandre Franke\n"
|
||||
"Thibault Martin"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:130
|
||||
#: podcasts-gtk/src/widgets/episode.rs:149
|
||||
msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:365
|
||||
#: podcasts-gtk/src/widgets/player.rs:828
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Le lecteur n’a pas pu réaliser l’action."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:150
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Marquer tous les épisodes comme écoutés"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:155
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Se désabonner de {}"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
#~ msgid "_Preferences"
|
||||
#~ msgstr "_Préférences"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "Vous êtes déjà abonné à ce flux !"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Préférences"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Préférences"
|
||||
|
||||
#~ msgid "Appearance"
|
||||
#~ msgstr "Apparence"
|
||||
|
||||
#~ msgid "Dark Theme"
|
||||
#~ msgstr "Thème sombre"
|
||||
|
||||
#~ msgid "Delete played episodes"
|
||||
#~ msgstr "Supprimer les épisodes lus"
|
||||
|
||||
#~ msgid "After"
|
||||
#~ msgstr "Après"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "URL non valide"
|
||||
|
||||
#~ msgid "Seconds"
|
||||
#~ msgstr "Secondes"
|
||||
|
||||
#~ msgid "Minutes"
|
||||
#~ msgstr "Minutes"
|
||||
|
||||
#~ msgid "Hours"
|
||||
#~ msgstr "Heures"
|
||||
|
||||
#~ msgid "Days"
|
||||
#~ msgstr "Jours"
|
||||
|
||||
#~ msgid "Weeks"
|
||||
#~ msgstr "Semaines"
|
||||
|
||||
@@ -110,6 +110,9 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -143,6 +146,9 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -177,6 +183,9 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -212,6 +221,9 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
||||
@@ -132,6 +132,9 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="width_chars">5</property>
|
||||
<property name="xalign">1</property>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
<class name="small-label"/>
|
||||
@@ -154,6 +157,9 @@
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="width_chars">5</property>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
<class name="small-label"/>
|
||||
|
||||
@@ -45,6 +45,9 @@ Tobias Bernard
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">1.00×</property>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -75,23 +78,15 @@ Tobias Bernard
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_start">6</property>
|
||||
<property name="margin_end">6</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="margin_bottom">6</property>
|
||||
<property name="margin">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">3</property>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_3_00">
|
||||
<property name="label" translatable="yes">3.00×</property>
|
||||
<object class="GtkModelButton" id="rate_4_00">
|
||||
<property name="text"><span font-features="tnum=1">4.00×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">3.0 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">4.0 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -100,16 +95,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_2_75">
|
||||
<property name="label" translatable="yes">2.75×</property>
|
||||
<object class="GtkModelButton" id="rate_3_75">
|
||||
<property name="text"><span font-features="tnum=1">3.75×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">2.75 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">3.75 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -118,16 +109,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_2_50">
|
||||
<property name="label" translatable="yes">2.50×</property>
|
||||
<object class="GtkModelButton" id="rate_3_50">
|
||||
<property name="text"><span font-features="tnum=1">3.50×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">2.5 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">3.5 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -136,16 +123,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_2_25">
|
||||
<property name="label" translatable="yes">2.25×</property>
|
||||
<object class="GtkModelButton" id="rate_3_25">
|
||||
<property name="text"><span font-features="tnum=1">3.25×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">2.25 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">3.25 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -154,16 +137,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_2_00">
|
||||
<property name="label" translatable="yes">2.00×</property>
|
||||
<object class="GtkModelButton" id="rate_3_00">
|
||||
<property name="text"><span font-features="tnum=1">3.00×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">2.0 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">3.0 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -172,16 +151,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_1_75">
|
||||
<property name="label" translatable="yes">1.75×</property>
|
||||
<object class="GtkModelButton" id="rate_2_75">
|
||||
<property name="text"><span font-features="tnum=1">2.75×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">1.75 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">2.75 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -190,16 +165,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_1_50">
|
||||
<property name="label" translatable="yes">1.50×</property>
|
||||
<object class="GtkModelButton" id="rate_2_50">
|
||||
<property name="text"><span font-features="tnum=1">2.50×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">1.5 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">2.5 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -208,16 +179,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_1_25">
|
||||
<property name="label" translatable="yes">1.25×</property>
|
||||
<object class="GtkModelButton" id="rate_2_25">
|
||||
<property name="text"><span font-features="tnum=1">2.25×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">1.25 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
<property name="tooltip_text" translatable="yes">2.25 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -226,16 +193,12 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="normal_rate">
|
||||
<property name="label" translatable="yes">1.00×</property>
|
||||
<object class="GtkModelButton" id="rate_2_00">
|
||||
<property name="text"><span font-features="tnum=1">2.00×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Normal speed</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="tooltip_text" translatable="yes">2.0 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
@@ -243,6 +206,63 @@ Tobias Bernard
|
||||
<property name="position">8</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="rate_1_75">
|
||||
<property name="text"><span font-features="tnum=1">1.75×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip_text" translatable="yes">1.75 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">9</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="rate_1_50">
|
||||
<property name="text"><span font-features="tnum=1">1.50×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip_text" translatable="yes">1.5 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">10</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="rate_1_25">
|
||||
<property name="text"><span font-features="tnum=1">1.25×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip_text" translatable="yes">1.25 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">11</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="normal_rate">
|
||||
<property name="text"><span font-features="tnum=1">1.00×</span></property>
|
||||
<property name="use-markup">True</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Normal speed</property>
|
||||
<property name="active">True</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">12</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
||||
@@ -263,6 +263,9 @@ Tobias Bernard
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">0:00</property>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -291,6 +294,9 @@ Tobias Bernard
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">0:00</property>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
||||
@@ -51,13 +51,13 @@
|
||||
<release version="0.4.5" date="2018-08-31">
|
||||
<description>
|
||||
<p>
|
||||
Podcasts 0.4.5 brings a month of bug fixes, performance improvements and initial tranlations support.
|
||||
Podcasts 0.4.5 brings a month of bug fixes, performance improvements and initial translations support.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Finish, Polish, Turkish, Spanish, German, Galician, Indonesian and Korean Translations were added.</li>
|
||||
<li>Views now adapt better to different window sizes, thanks to libhandy HdyColumn</li>
|
||||
<li>The update indacator was moved to an In-App notification</li>
|
||||
<li>Performance improvments when loading Show Cover images.</li>
|
||||
<li>Performance improvements when loading Show Cover images.</li>
|
||||
<li>Improved handling of HTTP Redirects</li>
|
||||
</ul>
|
||||
</description>
|
||||
|
||||
@@ -54,12 +54,14 @@ podcasts_sources = files(
|
||||
'main.rs',
|
||||
'manager.rs',
|
||||
'settings.rs',
|
||||
'utils.rs'
|
||||
'utils.rs',
|
||||
'window.rs',
|
||||
)
|
||||
|
||||
cargo_release = custom_target('cargo-build',
|
||||
build_by_default: true,
|
||||
input: [
|
||||
podcast_toml,
|
||||
data_sources,
|
||||
downloader_sources,
|
||||
podcasts_sources,
|
||||
|
||||
@@ -88,7 +88,7 @@ use crate::i18n::i18n;
|
||||
pub(crate) fn lazy_load<T, C, F, W, U>(
|
||||
data: T,
|
||||
container: WeakRef<C>,
|
||||
mut contructor: F,
|
||||
mut constructor: F,
|
||||
callback: U,
|
||||
) where
|
||||
T: IntoIterator + 'static,
|
||||
@@ -104,7 +104,7 @@ pub(crate) fn lazy_load<T, C, F, W, U>(
|
||||
None => return,
|
||||
};
|
||||
|
||||
let widget = contructor(x);
|
||||
let widget = constructor(x);
|
||||
container.add(&widget);
|
||||
widget.show();
|
||||
};
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
@@ -82,21 +83,17 @@ impl InAppNotification {
|
||||
let notif = InAppNotification::default();
|
||||
notif.text.set_text(&text);
|
||||
|
||||
let revealer_weak = notif.revealer.downgrade();
|
||||
let mut time = 0;
|
||||
let id = timeout_add(250, move || {
|
||||
if time < timer {
|
||||
time += 250;
|
||||
return glib::Continue(true);
|
||||
};
|
||||
|
||||
let revealer = match revealer_weak.upgrade() {
|
||||
Some(r) => r,
|
||||
None => return glib::Continue(false),
|
||||
};
|
||||
|
||||
callback(revealer)
|
||||
});
|
||||
let id = timeout_add(
|
||||
250,
|
||||
clone!(@weak notif.revealer as revealer => @default-return glib::Continue(false), move || {
|
||||
if time < timer {
|
||||
time += 250;
|
||||
return glib::Continue(true);
|
||||
};
|
||||
callback(revealer)
|
||||
}),
|
||||
);
|
||||
let id = Rc::new(RefCell::new(Some(id)));
|
||||
|
||||
if undo_callback.is_some() {
|
||||
|
||||
@@ -22,6 +22,8 @@ use failure::Error;
|
||||
|
||||
use gtk::{self, prelude::*, Adjustment};
|
||||
|
||||
use glib::clone;
|
||||
|
||||
use crossbeam_channel::Sender;
|
||||
use libhandy::{Column, ColumnExt};
|
||||
use podcasts_data::dbqueries;
|
||||
@@ -135,17 +137,11 @@ impl HomeView {
|
||||
}
|
||||
};
|
||||
|
||||
let home_weak = Rc::downgrade(&home);
|
||||
let callback = move || {
|
||||
let home = match home_weak.upgrade() {
|
||||
Some(h) => h,
|
||||
None => return,
|
||||
};
|
||||
|
||||
let callback = clone!(@weak home => move || {
|
||||
if let Some(ref v) = vadj {
|
||||
home.view.set_adjustments(None, Some(v))
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
lazy_load_full(episodes, func, callback);
|
||||
home.view.container().show_all();
|
||||
|
||||
@@ -208,15 +208,19 @@ fn format_duration(seconds: u32) -> String {
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct PlayerRate {
|
||||
radio300: gtk::RadioButton,
|
||||
radio275: gtk::RadioButton,
|
||||
radio250: gtk::RadioButton,
|
||||
radio225: gtk::RadioButton,
|
||||
radio200: gtk::RadioButton,
|
||||
radio175: gtk::RadioButton,
|
||||
radio150: gtk::RadioButton,
|
||||
radio125: gtk::RadioButton,
|
||||
radio_normal: gtk::RadioButton,
|
||||
radio400: gtk::ModelButton,
|
||||
radio375: gtk::ModelButton,
|
||||
radio350: gtk::ModelButton,
|
||||
radio325: gtk::ModelButton,
|
||||
radio300: gtk::ModelButton,
|
||||
radio275: gtk::ModelButton,
|
||||
radio250: gtk::ModelButton,
|
||||
radio225: gtk::ModelButton,
|
||||
radio200: gtk::ModelButton,
|
||||
radio175: gtk::ModelButton,
|
||||
radio150: gtk::ModelButton,
|
||||
radio125: gtk::ModelButton,
|
||||
radio_normal: gtk::ModelButton,
|
||||
popover: gtk::Popover,
|
||||
btn: gtk::MenuButton,
|
||||
label: gtk::Label,
|
||||
@@ -226,20 +230,28 @@ impl PlayerRate {
|
||||
fn new() -> Self {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/Podcasts/gtk/player_rate.ui");
|
||||
|
||||
let radio300: gtk::RadioButton = builder.get_object("rate_3_00").unwrap();
|
||||
let radio275: gtk::RadioButton = builder.get_object("rate_2_75").unwrap();
|
||||
let radio250: gtk::RadioButton = builder.get_object("rate_2_50").unwrap();
|
||||
let radio225: gtk::RadioButton = builder.get_object("rate_2_25").unwrap();
|
||||
let radio200: gtk::RadioButton = builder.get_object("rate_2_00").unwrap();
|
||||
let radio175: gtk::RadioButton = builder.get_object("rate_1_75").unwrap();
|
||||
let radio150: gtk::RadioButton = builder.get_object("rate_1_50").unwrap();
|
||||
let radio125: gtk::RadioButton = builder.get_object("rate_1_25").unwrap();
|
||||
let radio_normal: gtk::RadioButton = builder.get_object("normal_rate").unwrap();
|
||||
let radio400: gtk::ModelButton = builder.get_object("rate_4_00").unwrap();
|
||||
let radio375: gtk::ModelButton = builder.get_object("rate_3_75").unwrap();
|
||||
let radio350: gtk::ModelButton = builder.get_object("rate_3_50").unwrap();
|
||||
let radio325: gtk::ModelButton = builder.get_object("rate_3_25").unwrap();
|
||||
let radio300: gtk::ModelButton = builder.get_object("rate_3_00").unwrap();
|
||||
let radio275: gtk::ModelButton = builder.get_object("rate_2_75").unwrap();
|
||||
let radio250: gtk::ModelButton = builder.get_object("rate_2_50").unwrap();
|
||||
let radio225: gtk::ModelButton = builder.get_object("rate_2_25").unwrap();
|
||||
let radio200: gtk::ModelButton = builder.get_object("rate_2_00").unwrap();
|
||||
let radio175: gtk::ModelButton = builder.get_object("rate_1_75").unwrap();
|
||||
let radio150: gtk::ModelButton = builder.get_object("rate_1_50").unwrap();
|
||||
let radio125: gtk::ModelButton = builder.get_object("rate_1_25").unwrap();
|
||||
let radio_normal: gtk::ModelButton = builder.get_object("normal_rate").unwrap();
|
||||
let popover = builder.get_object("rate_popover").unwrap();
|
||||
let btn = builder.get_object("rate_button").unwrap();
|
||||
let label = builder.get_object("rate_label").unwrap();
|
||||
|
||||
PlayerRate {
|
||||
radio400,
|
||||
radio375,
|
||||
radio350,
|
||||
radio325,
|
||||
radio300,
|
||||
radio275,
|
||||
radio250,
|
||||
@@ -257,45 +269,74 @@ impl PlayerRate {
|
||||
|
||||
fn set_rate(&self, rate: f64) {
|
||||
self.label.set_text(&format!("{:.2}×", rate));
|
||||
self.radio_normal.set_property_active(rate == 1.0);
|
||||
self.radio125.set_property_active(rate == 1.25);
|
||||
self.radio150.set_property_active(rate == 1.5);
|
||||
self.radio175.set_property_active(rate == 1.75);
|
||||
self.radio200.set_property_active(rate == 2.0);
|
||||
self.radio225.set_property_active(rate == 2.25);
|
||||
self.radio250.set_property_active(rate == 2.5);
|
||||
self.radio275.set_property_active(rate == 2.75);
|
||||
self.radio300.set_property_active(rate == 3.0);
|
||||
self.radio325.set_property_active(rate == 3.25);
|
||||
self.radio350.set_property_active(rate == 3.5);
|
||||
self.radio375.set_property_active(rate == 3.75);
|
||||
self.radio400.set_property_active(rate == 4.0);
|
||||
}
|
||||
|
||||
fn connect_signals(&self, widget: &Rc<PlayerWidget>) {
|
||||
self.radio_normal
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.00);
|
||||
}));
|
||||
self.radio125
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.25);
|
||||
}));
|
||||
self.radio150
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.50);
|
||||
}));
|
||||
self.radio175
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.75);
|
||||
}));
|
||||
self.radio200
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.00);
|
||||
}));
|
||||
self.radio225
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.25);
|
||||
}));
|
||||
self.radio250
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.50);
|
||||
}));
|
||||
self.radio275
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.75);
|
||||
}));
|
||||
self.radio300
|
||||
.connect_toggled(clone!(@weak widget => move |_| {
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(3.00);
|
||||
}));
|
||||
self.radio325
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(3.25);
|
||||
}));
|
||||
self.radio350
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(3.50);
|
||||
}));
|
||||
self.radio375
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(3.75);
|
||||
}));
|
||||
self.radio400
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(4.00);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib::clone;
|
||||
use gtk::{self, prelude::*, Adjustment, Align, SelectionMode};
|
||||
|
||||
use crossbeam_channel::Sender;
|
||||
@@ -83,16 +84,14 @@ impl ShowsView {
|
||||
fn populate_flowbox(shows: &Rc<ShowsView>, vadj: Option<Adjustment>) -> Result<(), Error> {
|
||||
let ignore = get_ignored_shows()?;
|
||||
let podcasts = dbqueries::get_podcasts_filter(&ignore)?;
|
||||
let show_weak = Rc::downgrade(&shows);
|
||||
let flowbox_weak = shows.flowbox.downgrade();
|
||||
|
||||
let constructor = move |parent| ShowsChild::new(&parent).child;
|
||||
let callback = move || {
|
||||
match (show_weak.upgrade(), &vadj) {
|
||||
(Some(ref shows), Some(ref v)) => shows.view.set_adjustments(None, Some(v)),
|
||||
_ => (),
|
||||
};
|
||||
};
|
||||
let callback = clone!(@weak shows => move || {
|
||||
if vadj.is_some() {
|
||||
shows.view.set_adjustments(None, vadj.as_ref())
|
||||
}
|
||||
});
|
||||
|
||||
lazy_load(podcasts, flowbox_weak, constructor, callback);
|
||||
Ok(())
|
||||
|
||||
+44
-53
@@ -48,7 +48,7 @@ use crate::i18n::i18n;
|
||||
fn action<T, F>(thing: &T, name: &str, action: F)
|
||||
where
|
||||
T: ActionMapExt,
|
||||
for<'r, 's> F: Fn(&'r gio::SimpleAction, Option<&Variant>) + 'static,
|
||||
F: Fn(&gio::SimpleAction, Option<&Variant>) + 'static,
|
||||
{
|
||||
// Create a stateless, parameterless action
|
||||
let act = gio::SimpleAction::new(name, None);
|
||||
@@ -84,27 +84,17 @@ impl MainWindow {
|
||||
window.get_style_context().add_class("devel");
|
||||
}
|
||||
|
||||
let weak_s = settings.downgrade();
|
||||
let weak_app = app.downgrade();
|
||||
window.connect_delete_event(move |window, _| {
|
||||
let app = match weak_app.upgrade() {
|
||||
Some(a) => a,
|
||||
None => return Inhibit(false),
|
||||
};
|
||||
window.connect_delete_event(
|
||||
clone!(@strong settings, @weak app => @default-return Inhibit(false), move |window, _| {
|
||||
info!("Saving window position");
|
||||
WindowGeometry::from_window(&window).write(&settings);
|
||||
|
||||
let settings = match weak_s.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return Inhibit(false),
|
||||
};
|
||||
|
||||
info!("Saving window position");
|
||||
WindowGeometry::from_window(&window).write(&settings);
|
||||
|
||||
info!("Application is exiting");
|
||||
let app = app.clone().upcast::<gio::Application>();
|
||||
app.quit();
|
||||
Inhibit(false)
|
||||
});
|
||||
info!("Application is exiting");
|
||||
let app = app.upcast::<gio::Application>();
|
||||
app.quit();
|
||||
Inhibit(false)
|
||||
}),
|
||||
);
|
||||
|
||||
// Create a content instance
|
||||
let content = Content::new(&sender).expect("Content initialization failed.");
|
||||
@@ -128,8 +118,6 @@ impl MainWindow {
|
||||
|
||||
wrap.add(&header.bottom_switcher);
|
||||
|
||||
let updater = RefCell::new(None);
|
||||
|
||||
window.add(&wrap);
|
||||
|
||||
// Retrieve the previous window position and size.
|
||||
@@ -138,20 +126,19 @@ impl MainWindow {
|
||||
// Update the feeds right after the Window is initialized.
|
||||
if settings.get_boolean("refresh-on-startup") {
|
||||
info!("Refresh on startup.");
|
||||
let s: Option<Vec<_>> = None;
|
||||
utils::schedule_refresh(s, sender.clone());
|
||||
utils::schedule_refresh(None, sender.clone());
|
||||
}
|
||||
|
||||
let refresh_interval = settings::get_refresh_interval(&settings).num_seconds() as u32;
|
||||
info!("Auto-refresh every {:?} seconds.", refresh_interval);
|
||||
|
||||
let r_sender = sender.clone();
|
||||
gtk::timeout_add_seconds(refresh_interval, move || {
|
||||
let s: Option<Vec<_>> = None;
|
||||
utils::schedule_refresh(s, r_sender.clone());
|
||||
|
||||
glib::Continue(true)
|
||||
});
|
||||
gtk::timeout_add_seconds(
|
||||
refresh_interval,
|
||||
clone!(@strong sender => move || {
|
||||
utils::schedule_refresh(None, sender.clone());
|
||||
glib::Continue(true)
|
||||
}),
|
||||
);
|
||||
|
||||
Self {
|
||||
app: app.clone(),
|
||||
@@ -161,7 +148,7 @@ impl MainWindow {
|
||||
content,
|
||||
player,
|
||||
updating: Cell::new(false),
|
||||
updater,
|
||||
updater: RefCell::new(None),
|
||||
sender,
|
||||
receiver,
|
||||
}
|
||||
@@ -176,41 +163,45 @@ impl MainWindow {
|
||||
// Create the `refresh` action.
|
||||
//
|
||||
// This will trigger a refresh of all the shows in the database.
|
||||
action(&self.window, "refresh", clone!(@strong sender => move |_, _| {
|
||||
gtk::idle_add(clone!(@strong sender => move || {
|
||||
let s: Option<Vec<_>> = None;
|
||||
utils::schedule_refresh(s, sender.clone());
|
||||
glib::Continue(false)
|
||||
action(&self.window, "refresh",
|
||||
clone!(@strong sender => move |_, _| {
|
||||
gtk::idle_add(
|
||||
clone!(@strong sender => move || {
|
||||
utils::schedule_refresh(None, sender.clone());
|
||||
glib::Continue(false)
|
||||
}));
|
||||
}));
|
||||
self.app.set_accels_for_action("win.refresh", &["<primary>r"]);
|
||||
|
||||
// Create the `OPML` import action
|
||||
action(&self.window, "import", clone!(@strong sender, @weak self.window as win => move |_, _| {
|
||||
utils::on_import_clicked(&win, &sender);
|
||||
action(&self.window, "import",
|
||||
clone!(@strong sender, @weak self.window as window => move |_, _| {
|
||||
utils::on_import_clicked(&window, &sender);
|
||||
}));
|
||||
|
||||
action(&self.window, "export", clone!(@strong sender, @weak self.window as win => move |_, _| {
|
||||
utils::on_export_clicked(&win, &sender);
|
||||
action(&self.window, "export",
|
||||
clone!(@strong sender, @weak self.window as window => move |_, _| {
|
||||
utils::on_export_clicked(&window, &sender);
|
||||
}));
|
||||
|
||||
// Create the action that shows a `gtk::AboutDialog`
|
||||
action(&self.window, "about", clone!(@weak self.window as win => move |_, _| {
|
||||
about_dialog(&win);
|
||||
action(&self.window, "about",
|
||||
clone!(@weak self.window as win => move |_, _| {
|
||||
about_dialog(&win);
|
||||
}));
|
||||
|
||||
// Create the quit action
|
||||
let weak_instance = self.app.downgrade();
|
||||
action(&self.window, "quit", move |_, _| {
|
||||
weak_instance.upgrade().map(|app| app.quit());
|
||||
});
|
||||
action(&self.window, "quit",
|
||||
clone!(@weak self.app as app => move |_, _| {
|
||||
app.quit();
|
||||
}));
|
||||
self.app.set_accels_for_action("win.quit", &["<primary>q"]);
|
||||
|
||||
// Create the menu action
|
||||
let header = Rc::downgrade(&self.headerbar);
|
||||
action(&self.window, "menu", move |_, _| {
|
||||
header.upgrade().map(|h| h.open_menu());
|
||||
});
|
||||
// Create the menu actions
|
||||
action(&self.window, "menu",
|
||||
clone!(@weak self.headerbar as headerbar => move |_, _| {
|
||||
headerbar.open_menu();
|
||||
}));
|
||||
// Bind the hamburger menu button to `F10`
|
||||
self.app.set_accels_for_action("win.menu", &["F10"]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user