Compare commits
84 Commits
alatiera/n
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| f2ac198831 | |||
|
|
abd263f127 | ||
|
|
9c2d4ac6a7 | ||
|
|
4d950ac17e | ||
|
|
5e688c104c | ||
|
|
4ce0819c68 | ||
|
|
f7d9d0555c | ||
|
|
b754182e0d | ||
|
|
7b3a607b5e | ||
|
|
0e47e9c07f | ||
|
|
c140e5a163 | ||
|
|
0bc379bf42 | ||
|
|
9f0a3a0d9f | ||
|
|
355cf9a36c | ||
|
|
d9792e99c1 | ||
|
|
6cb7de7fb3 | ||
|
|
cb0860cddf | ||
|
|
6edeb59b16 | ||
|
|
a245aa73d4 | ||
|
|
08be9bdb4e | ||
|
|
2ee2181211 | ||
|
|
59e1c7d6f4 | ||
|
|
c2aca6e3a0 | ||
| 5f39da9273 | |||
| e16d69737e | |||
|
|
e6e2af38d3 | ||
|
|
975697728e | ||
|
|
a2789c9dba | ||
|
|
096197cf81 | ||
|
|
f9d577f596 | ||
|
|
429356a217 | ||
|
|
636e2aefde | ||
|
|
e830589e38 | ||
|
|
933ba62f39 | ||
|
|
93f7aa4457 | ||
|
|
3ef45c42fb | ||
|
|
071e5978aa | ||
|
|
fba5102705 | ||
|
|
138e308c32 | ||
|
|
fa8f1a0c8e | ||
|
|
7325c3b4d3 | ||
|
|
3e5ddb2aff | ||
|
|
d1ebbde778 | ||
|
|
8a042c5714 | ||
|
|
7a2c252bbc | ||
|
|
7d212174a6 | ||
|
|
685b35cb23 | ||
|
|
1175a54266 | ||
|
|
d38064e1c0 | ||
|
|
59a57a740f | ||
|
|
f319851753 | ||
|
|
ce424977c0 | ||
|
|
62c6b0d4cb | ||
|
|
7685570da9 | ||
|
|
ff0c488968 | ||
|
|
ebc6c8df4d | ||
|
|
06a2c3ab12 | ||
|
|
e877da1825 | ||
|
|
0b744b1179 | ||
|
|
1041f21724 | ||
|
|
73012f7976 | ||
|
|
a1b4cece7d | ||
|
|
ac4cd50929 | ||
|
|
bb5b3846a6 | ||
|
|
3a11fbcf18 | ||
|
|
a8da740ada | ||
|
|
082ec0f592 | ||
|
|
d49cad0bc0 | ||
|
|
75d8676de5 | ||
|
|
8228bc8996 | ||
|
|
8081990895 | ||
|
|
eb2d5419f9 | ||
|
|
a9ba3fcbab | ||
|
|
bcd610e2e3 | ||
|
|
217362fe14 | ||
|
|
0e0d860cd2 | ||
|
|
a8246a96cd | ||
|
|
33d28d1e7b | ||
|
|
377d7bdf47 | ||
|
|
f6eb3dd90e | ||
|
|
f632a66d60 | ||
|
|
ea0bb607b6 | ||
|
|
85e15b77d9 | ||
|
|
95055dea1d |
@ -1,89 +1,24 @@
|
||||
stages:
|
||||
- lint
|
||||
- test
|
||||
- review
|
||||
|
||||
variables:
|
||||
BUNDLE: "org.gnome.Podcasts.Devel.flatpak"
|
||||
include:
|
||||
- project: 'gnome/citemplates'
|
||||
file: 'flatpak/flatpak-ci-initiative-sdk-extensions.yml'
|
||||
# ref: ''
|
||||
|
||||
flatpak:
|
||||
image: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/rust_bundle:master"
|
||||
stage: "test"
|
||||
variables:
|
||||
MANIFEST_PATH: "org.gnome.Podcasts.Devel.json"
|
||||
FLATPAK_MODULE: "gnome-podcasts"
|
||||
CONFIGURE_ARGS: "-Dprofile=development"
|
||||
DBUS_ID: "org.gnome.Podcasts.Devel"
|
||||
|
||||
script:
|
||||
- flatpak-builder --stop-at=${FLATPAK_MODULE} app ${MANIFEST_PATH}
|
||||
|
||||
# Build the flatpak repo
|
||||
- flatpak-builder --run app ${MANIFEST_PATH} meson --prefix=/app ${CONFIGURE_ARGS} _build
|
||||
- flatpak-builder --run app ${MANIFEST_PATH} ninja -C _build install
|
||||
|
||||
# Run the tests
|
||||
- |
|
||||
xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||
flatpak-builder --run \
|
||||
--env=CARGO_HOME="${CI_PROJECT_DIR}/target/cargo-home" \
|
||||
--env=CARGO_TARGET_DIR="${CI_PROJECT_DIR}/target/" \
|
||||
app ${MANIFEST_PATH} \
|
||||
ninja -C _build test
|
||||
|
||||
# Create a flatpak bundle
|
||||
- flatpak-builder --finish-only app ${MANIFEST_PATH}
|
||||
- flatpak build-export repo app
|
||||
- flatpak build-bundle repo ${BUNDLE} ${DBUS_ID}
|
||||
|
||||
artifacts:
|
||||
paths:
|
||||
- $BUNDLE
|
||||
expire_in: 2 days
|
||||
|
||||
cache:
|
||||
key: "flatpak"
|
||||
paths:
|
||||
- .flatpak-builder/downloads/
|
||||
- .flatpak-builder/git/
|
||||
- target/
|
||||
- target_test/
|
||||
|
||||
review:
|
||||
stage: review
|
||||
dependencies:
|
||||
- flatpak
|
||||
script:
|
||||
- echo "Generating flatpak deployment"
|
||||
artifacts:
|
||||
paths:
|
||||
- $BUNDLE
|
||||
expire_in: 30 days
|
||||
environment:
|
||||
name: review/$CI_COMMIT_REF_NAME
|
||||
url: https://gitlab.gnome.org/$CI_PROJECT_PATH/-/jobs/$CI_JOB_ID/artifacts/raw/${BUNDLE}
|
||||
on_stop: stop_review
|
||||
except:
|
||||
- master@World/podcasts
|
||||
- tags
|
||||
|
||||
stop_review:
|
||||
stage: review
|
||||
script:
|
||||
- echo "Stopping flatpak deployment"
|
||||
when: manual
|
||||
environment:
|
||||
name: review/$CI_COMMIT_REF_NAME
|
||||
action: stop
|
||||
except:
|
||||
- master@World/podcasts
|
||||
- tags
|
||||
image: 'registry.gitlab.gnome.org/gnome/gnome-runtime-images/rust_bundle:3.36'
|
||||
variables:
|
||||
MANIFEST_PATH: "org.gnome.Podcasts.Devel.json"
|
||||
FLATPAK_MODULE: "gnome-podcasts"
|
||||
MESON_ARGS: "-Dprofile=development"
|
||||
APP_ID: "org.gnome.Podcasts.Devel"
|
||||
RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo"
|
||||
BUNDLE: "org.gnome.Podcasts.Devel.flatpak"
|
||||
extends: '.flatpak'
|
||||
|
||||
# Configure and run rustfmt
|
||||
# Exits and builds fails if on bad format
|
||||
rustfmt:
|
||||
image: "rust:slim"
|
||||
stage: "lint"
|
||||
stage: ".pre"
|
||||
script:
|
||||
- rustup component add rustfmt
|
||||
# Create blank versions of our configured files
|
||||
|
||||
32
CHANGELOG.md
32
CHANGELOG.md
@ -14,6 +14,38 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
||||
|
||||
### Removed:
|
||||
|
||||
## [0.4.7] - 2019-10-23
|
||||
|
||||
### Added:
|
||||
- Improved appdata validation and meson tests World/podcasts!89
|
||||
- The ability to export show subscriptions to opml files World/podcasts!77
|
||||
- Support for feeds requiring authentication World/podcasts!120
|
||||
|
||||
### Changed:
|
||||
|
||||
- Episodes now have a checkmark to show whether or not they've been played World/podcasts!106
|
||||
- Changed to how errors are shown when adding podcasts World/podcasts!108 World/podcasts!109 World/podcasts!110
|
||||
- Improved integration of cargo and meson World/podcasts!94
|
||||
- Refactored some macros for error handling World/podcasts!82
|
||||
- Refactored the handling of styling changes World/podcasts!119
|
||||
- Updated the icon to better match the HIG guidlines World/podcasts#102
|
||||
- Made Podcasts use a GtkApplication subclass World/podcasts!113
|
||||
- Updated the MPRIS permissions in order to remove a sandbox hole World/podcasts!124
|
||||
- Bumped gtk and libhandy minimum versions
|
||||
|
||||
### Fixed:
|
||||
|
||||
- Rewind now works regardless if its the start or the end of the episode World/podcasts!83
|
||||
- Typos in the README and CONTRIBUTING docs World/podcast!97 World/podcast!98 World/podcast!99 World/podcasts!121
|
||||
- Show cover is reset properly now if there isn't an image World/podcasts#114
|
||||
- Query pairs are no longer stripped from URLs World/podcasts!111
|
||||
- Pause MPRIS button now works on KDE Plasma World/podcasts#115
|
||||
- The playback widget now properly reflects the playback state on episode change World/podcasts!116
|
||||
|
||||
### Removed:
|
||||
|
||||
- All preferences World/podcast!104
|
||||
|
||||
## [0.4.6] - 2018-10-07
|
||||
|
||||
### Added:
|
||||
|
||||
2904
Cargo.lock
generated
2904
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
12
meson.build
12
meson.build
@ -1,6 +1,6 @@
|
||||
project(
|
||||
'gnome-podcasts', 'rust',
|
||||
version: '0.4.6',
|
||||
version: '0.4.7',
|
||||
license: 'GPLv3',
|
||||
)
|
||||
|
||||
@ -12,7 +12,7 @@ dependency('glib-2.0', version: '>= 2.56')
|
||||
dependency('gio-2.0', version: '>= 2.56')
|
||||
dependency('gdk-pixbuf-2.0')
|
||||
dependency('gtk+-3.0', version: '>= 3.24.11')
|
||||
dependency('libhandy-0.0', version: '>= 0.0.11')
|
||||
dependency('libhandy-0.0', version: '>= 0.0.13')
|
||||
|
||||
dependency('gstreamer-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-base-1.0', version: '>= 1.16')
|
||||
@ -40,6 +40,14 @@ else
|
||||
version_suffix = ''
|
||||
endif
|
||||
|
||||
podcast_toml = files(
|
||||
'Cargo.toml',
|
||||
'Cargo.lock',
|
||||
'podcasts-data/Cargo.toml',
|
||||
'podcasts-downloader/Cargo.toml',
|
||||
'podcasts-gtk/Cargo.toml',
|
||||
)
|
||||
|
||||
application_id = 'org.gnome.Podcasts@0@'.format(profile)
|
||||
i18n = import('i18n')
|
||||
gnome = import('gnome')
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"app-id" : "org.gnome.Podcasts.Devel",
|
||||
"runtime" : "org.gnome.Platform",
|
||||
"runtime-version" : "master",
|
||||
"runtime-version" : "3.36",
|
||||
"sdk" : "org.gnome.Sdk",
|
||||
"sdk-extensions" : [
|
||||
"org.freedesktop.Sdk.Extension.rust-stable"
|
||||
@ -25,8 +25,8 @@
|
||||
"--share=network"
|
||||
],
|
||||
"env" : {
|
||||
"RUSTFLAGS" : "--error-format=short --remap-path-prefix =../",
|
||||
"CARGO_HOME" : "/run/build/Podcasts/cargo",
|
||||
"RUSTFLAGS" : "",
|
||||
"RUST_BACKTRACE" : "1"
|
||||
}
|
||||
},
|
||||
@ -50,7 +50,7 @@
|
||||
{
|
||||
"type" : "git",
|
||||
"url" : "https://source.puri.sm/Librem5/libhandy.git",
|
||||
"commit" : "f5909a897f70143bdd2f89f47a63c1bf848330ce"
|
||||
"tag" : "v0.0.13"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"app-id" : "org.gnome.Podcasts",
|
||||
"runtime" : "org.gnome.Platform",
|
||||
"runtime-version" : "master",
|
||||
"runtime-version" : "3.36",
|
||||
"sdk" : "org.gnome.Sdk",
|
||||
"sdk-extensions" : [
|
||||
"org.freedesktop.Sdk.Extension.rust-stable"
|
||||
@ -27,7 +27,6 @@
|
||||
],
|
||||
"env" : {
|
||||
"CARGO_HOME" : "/run/build/Podcasts/cargo",
|
||||
"RUSTFLAGS" : "--error-format=short --remap-path-prefix =../",
|
||||
"RUST_BACKTRACE" : "1"
|
||||
}
|
||||
},
|
||||
@ -51,7 +50,7 @@
|
||||
{
|
||||
"type" : "git",
|
||||
"url" : "https://source.puri.sm/Librem5/libhandy.git",
|
||||
"commit" : "f5909a897f70143bdd2f89f47a63c1bf848330ce"
|
||||
"tag" : "v0.0.13"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@ -5,31 +5,31 @@ version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
ammonia = "3.0.0"
|
||||
chrono = "0.4.9"
|
||||
derive_builder = "0.8.0"
|
||||
ammonia = "3.1.0"
|
||||
chrono = "0.4.11"
|
||||
derive_builder = "0.9.0"
|
||||
lazy_static = "1.4.0"
|
||||
log = "0.4.8"
|
||||
rayon = "1.2.0"
|
||||
rayon = "1.3.1"
|
||||
rfc822_sanitizer = "0.3.3"
|
||||
rss = "1.8.0"
|
||||
url = "2.1.0"
|
||||
rss = "1.9.0"
|
||||
url = "2.1.1"
|
||||
xdg = "2.2.0"
|
||||
xml-rs = "0.8.0"
|
||||
xml-rs = "0.8.3"
|
||||
futures = "0.1.29"
|
||||
hyper = "0.12.35"
|
||||
http = "0.1.19"
|
||||
tokio = "0.1.22"
|
||||
hyper-tls = "0.3.2"
|
||||
native-tls = "0.2.3"
|
||||
num_cpus = "1.10.1"
|
||||
failure = "0.1.6"
|
||||
failure_derive = "0.1.6"
|
||||
base64 = "0.10.1"
|
||||
num_cpus = "1.13.0"
|
||||
failure = "0.1.8"
|
||||
failure_derive = "0.1.8"
|
||||
base64 = "0.12.2"
|
||||
|
||||
[dependencies.diesel]
|
||||
features = ["sqlite", "r2d2"]
|
||||
version = "1.4.3"
|
||||
version = "1.4.5"
|
||||
|
||||
[dependencies.diesel_migrations]
|
||||
features = ["sqlite"]
|
||||
|
||||
@ -84,7 +84,10 @@ pub enum DataError {
|
||||
FeedRedirect(Source),
|
||||
#[fail(display = "Feed is up to date")]
|
||||
FeedNotModified(Source),
|
||||
#[fail(display = "Error occured while Parsing an Episode. Reason: {}", reason)]
|
||||
#[fail(
|
||||
display = "Error occurred while Parsing an Episode. Reason: {}",
|
||||
reason
|
||||
)]
|
||||
ParseEpisodeError { reason: String, parent_id: i32 },
|
||||
#[fail(display = "Episode was not changed and thus skipped.")]
|
||||
EpisodeNotChanged,
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
#![cfg_attr(feature = "cargo-clippy", allow(unit_arg))]
|
||||
#![allow(clippy::unit_arg)]
|
||||
//! Index Feeds.
|
||||
|
||||
use futures::future::*;
|
||||
@ -198,7 +198,7 @@ mod tests {
|
||||
})
|
||||
.collect();
|
||||
|
||||
// Index the channes
|
||||
// Index the channels
|
||||
let stream_ = stream::iter_ok(feeds).for_each(|x| x.index());
|
||||
tokio::run(stream_.map_err(|_| ()));
|
||||
|
||||
|
||||
@ -111,7 +111,7 @@ pub use crate::models::{Episode, EpisodeWidgetModel, Show, ShowCoverModel, Sourc
|
||||
/// It originates from the Tor-browser UA.
|
||||
pub const USER_AGENT: &str = "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0";
|
||||
|
||||
/// [XDG Base Direcotory](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) Paths.
|
||||
/// [XDG Base Directory](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) Paths.
|
||||
#[allow(missing_debug_implementations)]
|
||||
pub mod xdg_dirs {
|
||||
use std::path::PathBuf;
|
||||
@ -137,7 +137,7 @@ pub mod xdg_dirs {
|
||||
PODCASTS_XDG.create_cache_directory(PODCASTS_XDG.get_cache_home()).unwrap()
|
||||
};
|
||||
|
||||
/// GNOME Podcasts Download Direcotry `PathBuf`.
|
||||
/// GNOME Podcasts Download Directory `PathBuf`.
|
||||
pub static ref DL_DIR: PathBuf = {
|
||||
PODCASTS_XDG.create_data_directory("Downloads").unwrap()
|
||||
};
|
||||
|
||||
@ -255,7 +255,7 @@ impl NewEpisodeMinimal {
|
||||
return Err(err);
|
||||
};
|
||||
|
||||
// Default to rfc2822 represantation of epoch 0.
|
||||
// Default to rfc2822 representation of epoch 0.
|
||||
let date = parse_rfc822(item.pub_date().unwrap_or("Thu, 1 Jan 1970 00:00:00 +0000"));
|
||||
// Should treat information from the rss feeds as invalid by default.
|
||||
// Case: "Thu, 05 Aug 2016 06:00:00 -0400" <-- Actually that was friday.
|
||||
@ -342,7 +342,7 @@ mod tests {
|
||||
use std::io::BufReader;
|
||||
|
||||
// TODO: Add tests for other feeds too.
|
||||
// Especially if you find an *intresting* generated feed.
|
||||
// Especially if you find an *interesting* generated feed.
|
||||
|
||||
// Known prebuilt expected objects.
|
||||
lazy_static! {
|
||||
|
||||
@ -216,7 +216,10 @@ impl Source {
|
||||
self = self.save()?;
|
||||
|
||||
debug!("Updated Source: {:#?}", &self);
|
||||
info!("Feed url of Source {}, was updated succesfully.", self.id());
|
||||
info!(
|
||||
"Feed url of Source {}, was updated successfully.",
|
||||
self.id()
|
||||
);
|
||||
}
|
||||
|
||||
Ok(self)
|
||||
|
||||
@ -43,7 +43,7 @@ use failure::Error;
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
// FIXME: Make it a Diesel model
|
||||
/// Represents an `outline` xml element as per the `OPML` [specification][spec]
|
||||
/// not `RSS` related sub-elements are ommited.
|
||||
/// not `RSS` related sub-elements are omitted.
|
||||
///
|
||||
/// [spec]: http://dev.opml.org/spec2.html
|
||||
pub struct Opml {
|
||||
@ -82,7 +82,7 @@ pub fn import_from_file<P: AsRef<Path>>(path: P) -> Result<Vec<Source>, DataErro
|
||||
import_to_db(content.as_slice()).map_err(From::from)
|
||||
}
|
||||
|
||||
/// Export a file to `P`, taking the feeds from the database and outputing
|
||||
/// Export a file to `P`, taking the feeds from the database and outputting
|
||||
/// them in opml format.
|
||||
pub fn export_from_db<P: AsRef<Path>>(path: P, export_title: &str) -> Result<(), Error> {
|
||||
let file = File::create(path)?;
|
||||
@ -163,7 +163,7 @@ pub fn export_to_file<F: Write>(file: F, export_title: &str) -> Result<(), Error
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Extracts the `outline` elemnts from a reader `R` and returns a `HashSet` of `Opml` structs.
|
||||
/// Extracts the `outline` elements from a reader `R` and returns a `HashSet` of `Opml` structs.
|
||||
pub fn extract_sources<R: Read>(reader: R) -> Result<HashSet<Opml>, reader::Error> {
|
||||
let mut list = HashSet::new();
|
||||
let parser = reader::EventReader::new(reader);
|
||||
|
||||
@ -56,7 +56,7 @@ fn download_checker() -> Result<(), DataError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Delete watched `episodes` that have exceded their liftime after played.
|
||||
/// Delete watched `episodes` that have exceeded their lifetime after played.
|
||||
fn played_cleaner(cleanup_date: DateTime<Utc>) -> Result<(), DataError> {
|
||||
let mut episodes = dbqueries::get_played_cleaner_episodes()?;
|
||||
let now_utc = cleanup_date.timestamp() as i32;
|
||||
@ -68,7 +68,7 @@ fn played_cleaner(cleanup_date: DateTime<Utc>) -> Result<(), DataError> {
|
||||
let limit = ep.played().unwrap();
|
||||
if now_utc > limit {
|
||||
delete_local_content(ep)
|
||||
.map(|_| info!("Episode {:?} was deleted succesfully.", ep.local_uri()))
|
||||
.map(|_| info!("Episode {:?} was deleted successfully.", ep.local_uri()))
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
.map_err(|_| error!("Failed to delete file: {:?}", ep.local_uri()))
|
||||
.ok();
|
||||
@ -144,11 +144,11 @@ pub fn get_download_folder(pd_title: &str) -> Result<String, DataError> {
|
||||
// TODO: Write Tests
|
||||
pub fn delete_show(pd: &Show) -> Result<(), DataError> {
|
||||
dbqueries::remove_feed(pd)?;
|
||||
info!("{} was removed succesfully.", pd.title());
|
||||
info!("{} was removed successfully.", pd.title());
|
||||
|
||||
let fold = get_download_folder(pd.title())?;
|
||||
fs::remove_dir_all(&fold)?;
|
||||
info!("All the content at, {} was removed succesfully", &fold);
|
||||
info!("All the content at, {} was removed successfully", &fold);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -161,7 +161,6 @@ use crate::Feed;
|
||||
pub fn get_feed(file_path: &str, id: i32) -> Feed {
|
||||
use crate::feed::FeedBuilder;
|
||||
use rss::Channel;
|
||||
use std::fs;
|
||||
use std::io::BufReader;
|
||||
|
||||
// open the xml file
|
||||
|
||||
@ -5,14 +5,13 @@ version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
error-chain = "0.12.1"
|
||||
log = "0.4.8"
|
||||
mime_guess = "2.0.1"
|
||||
mime_guess = "2.0.3"
|
||||
reqwest = "0.9.22"
|
||||
tempdir = "0.3.7"
|
||||
glob = "0.3.0"
|
||||
failure = "0.1.6"
|
||||
failure_derive = "0.1.6"
|
||||
failure = "0.1.8"
|
||||
failure_derive = "0.1.8"
|
||||
|
||||
[dependencies.podcasts-data]
|
||||
path = "../podcasts-data"
|
||||
|
||||
@ -54,7 +54,7 @@ pub trait DownloadProgress {
|
||||
// Sorry to those who will have to work with that code.
|
||||
// Would much rather use a crate,
|
||||
// or bindings for a lib like youtube-dl(python),
|
||||
// But cant seem to find one.
|
||||
// But can't seem to find one.
|
||||
// TODO: Write unit-tests.
|
||||
fn download_into(
|
||||
dir: &str,
|
||||
@ -64,7 +64,7 @@ fn download_into(
|
||||
) -> Result<String, DownloadError> {
|
||||
info!("GET request to: {}", url);
|
||||
// Haven't included the loop check as
|
||||
// Steal the Stars would tigger it as
|
||||
// Steal the Stars would trigger it as
|
||||
// it has a loop back before giving correct url
|
||||
let policy = RedirectPolicy::custom(|attempt| {
|
||||
info!("Redirect Attempt URL: {:?}", attempt.url());
|
||||
@ -104,7 +104,7 @@ fn download_into(
|
||||
.and_then(|h| h.to_str().ok())
|
||||
.map(From::from);
|
||||
|
||||
ct_len.map(|x| info!("File Lenght: {}", x));
|
||||
ct_len.map(|x| info!("File Length: {}", x));
|
||||
ct_type.map(|x| info!("Content Type: {}", x));
|
||||
|
||||
let ext = get_ext(ct_type).unwrap_or_else(|| String::from("unknown"));
|
||||
@ -131,7 +131,7 @@ fn download_into(
|
||||
let target = format!("{}/{}.{}", dir, file_title, ext);
|
||||
// Rename/move the tempfile into a permanent place upon success.
|
||||
rename(out_file, &target)?;
|
||||
info!("Downloading of {} completed succesfully.", &target);
|
||||
info!("Downloading of {} completed successfully.", &target);
|
||||
Ok(target)
|
||||
}
|
||||
|
||||
@ -153,7 +153,7 @@ fn get_ext(content: Option<&str>) -> Option<String> {
|
||||
// TODO: Refactor... Somehow.
|
||||
/// Handles the I/O of fetching a remote file and saving into a Buffer and A
|
||||
/// File.
|
||||
#[allow(needless_pass_by_value)]
|
||||
#[allow(clippy::needless_pass_by_value)]
|
||||
fn save_io(
|
||||
file: &str,
|
||||
resp: &mut reqwest::Response,
|
||||
@ -219,10 +219,10 @@ pub fn get_episode(
|
||||
progress,
|
||||
)?;
|
||||
|
||||
// If download succedes set episode local_uri to dlpath.
|
||||
// If download succeeds set episode local_uri to dlpath.
|
||||
ep.set_local_uri(Some(&path));
|
||||
|
||||
// Over-write episode lenght
|
||||
// Over-write episode length
|
||||
let size = fs::metadata(path);
|
||||
if let Ok(s) = size {
|
||||
ep.set_length(Some(s.len() as i32))
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
#![recursion_limit = "1024"]
|
||||
#![allow(unknown_lints)]
|
||||
#![cfg_attr(feature = "cargo-clippy", allow(blacklisted_name))]
|
||||
#![allow(clippy::blacklisted_name)]
|
||||
// Enable lint group collections
|
||||
#![warn(nonstandard_style, edition_2018, rust_2018_idioms, bad_style, unused)]
|
||||
// standalone lints
|
||||
|
||||
@ -5,50 +5,47 @@ version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
chrono = "0.4.9"
|
||||
chrono = "0.4.11"
|
||||
crossbeam-channel = "0.3.9"
|
||||
gdk = "0.11.0"
|
||||
gdk-pixbuf = "0.7.0"
|
||||
gobject-sys = "0.9.0"
|
||||
glib-sys = "0.9.0"
|
||||
gst = { version = "0.14.0", package = "gstreamer" }
|
||||
gst-player = { version = "0.14.0", package = "gstreamer-player" }
|
||||
gdk = "0.12.1"
|
||||
gdk-pixbuf = "0.8.0"
|
||||
gobject-sys = "0.9.1"
|
||||
glib-sys = "0.9.1"
|
||||
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" }
|
||||
mpris-player = "0.4.0"
|
||||
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]
|
||||
features = ["subclassing"]
|
||||
version = "0.8.2"
|
||||
|
||||
[dependencies.gio]
|
||||
features = ["v2_50", "subclassing"]
|
||||
version = "0.7.0"
|
||||
features = ["v2_50"]
|
||||
version = "0.8.1"
|
||||
|
||||
[dependencies.gtk]
|
||||
features = ["v3_24", "subclassing"]
|
||||
version = "0.7.0"
|
||||
features = ["v3_24"]
|
||||
version = "0.8.1"
|
||||
|
||||
[dependencies.libhandy]
|
||||
version = "0.4.0"
|
||||
version = "0.5.0"
|
||||
features = [ "v0_0_10"]
|
||||
|
||||
# [dependencies.mpris-player]
|
||||
|
||||
@ -23,3 +23,5 @@ pt_BR
|
||||
sk
|
||||
sv
|
||||
tr
|
||||
uk
|
||||
zh_CN
|
||||
|
||||
@ -13,6 +13,8 @@ podcasts-gtk/resources/gtk/help-overlay.ui
|
||||
podcasts-gtk/resources/gtk/home_episode.ui
|
||||
podcasts-gtk/resources/gtk/home_view.ui
|
||||
podcasts-gtk/resources/gtk/inapp_notif.ui
|
||||
podcasts-gtk/resources/gtk/player_dialog.ui
|
||||
podcasts-gtk/resources/gtk/player_rate.ui
|
||||
podcasts-gtk/resources/gtk/player_toolbar.ui
|
||||
podcasts-gtk/resources/gtk/secondary_menu.ui
|
||||
podcasts-gtk/resources/gtk/show_menu.ui
|
||||
@ -42,3 +44,4 @@ podcasts-gtk/src/widgets/player.rs
|
||||
podcasts-gtk/src/widgets/show_menu.rs
|
||||
podcasts-gtk/src/widgets/show.rs
|
||||
podcasts-gtk/src/widgets/shows_view.rs
|
||||
podcasts-gtk/src/window.rs
|
||||
|
||||
@ -35,7 +35,7 @@ msgstr "Amplada de l'última finestra principal oberta"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:31
|
||||
msgid "Maximized state of the last open main window"
|
||||
msgstr "Estat de maximització de l'ultima finestra principal oberta"
|
||||
msgstr "Estat de maximització de l'última finestra principal oberta"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:36
|
||||
msgid "Enable or disable dark theme"
|
||||
|
||||
@ -8,16 +8,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-02-02 15:17+0000\n"
|
||||
"PO-Revision-Date: 2019-03-09 17:13+0100\n"
|
||||
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
|
||||
"POT-Creation-Date: 2020-04-06 16:50+0000\n"
|
||||
"PO-Revision-Date: 2020-05-09 16:54+0200\n"
|
||||
"Last-Translator: Onno Giesmann <nutzer3105@gmail.com>\n"
|
||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||
"Language: de\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.2.1\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -71,8 +71,8 @@ msgstr "Zeitintervall zwischen automatischen Löschvorgängen"
|
||||
#. 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:124 podcasts-gtk/src/app.rs:455
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: 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 "Hören Sie Ihre Lieblings-Podcasts direkt in Ihrer Arbeitsumgebung."
|
||||
|
||||
#. 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,7 +90,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Podcast-Anwendung für GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -121,19 +116,23 @@ msgstr "Neue Podcasts mittels Quellen-Adresse hinzufügen"
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Podcasts von einem anderen Gerät importieren"
|
||||
|
||||
#: 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 "Sie haben sich diese Folge bereits angehört."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Größe der Folge wird ermittelt …"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Diese Folge abspielen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Herunterladen abbrechen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
msgid "Download this episode"
|
||||
msgstr "Diese Folge herunterladen"
|
||||
|
||||
@ -150,19 +149,15 @@ msgid "_Export Shows"
|
||||
msgstr "Podcasts e_xportieren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "_Einstellungen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:27
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "Tasten_kürzel"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "Info zu _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 "Neue Quelle hinzufügen"
|
||||
|
||||
@ -174,15 +169,11 @@ msgstr "Hinzuzufügende Quellen-Adresse eingeben"
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Sie haben diese Quelle bereits abonniert!"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Titel anzeigen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
@ -197,11 +188,6 @@ msgstr "Auf neue Folgen prüfen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Die Anwendung beenden"
|
||||
|
||||
@ -233,71 +219,54 @@ msgstr "Eine anwendungsinterne Aktionsmeldung"
|
||||
msgid "Undo"
|
||||
msgstr "Rückgängig"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 Sekunden zurückspulen"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Läuft gerade"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Wiedergeben"
|
||||
|
||||
#: 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 "10 Sekunden vorspulen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Die Wiedergabegeschwindigkeit ändern"
|
||||
|
||||
#: 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 "1,5-fache Geschwindigkeit"
|
||||
|
||||
#: 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 "1,25-fache Geschwindigkeit"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normale Geschwidigkeit"
|
||||
msgstr "Normale Geschwindigkeit"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 Sekunden zurückspulen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Erscheinungsbild"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Wiedergeben"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Dunkles Thema"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "Angehörte Folgen löschen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "Nach"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "10 Sekunden vorspulen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
@ -323,38 +292,14 @@ msgstr "Alle als angehört markieren"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Abbestellen"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:369
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Weiterlesen"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:287
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Neue Folgen werden abgerufen"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Sie haben diese Show nun abonniert"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "Ungültige Adresse"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:78
|
||||
msgid "Seconds"
|
||||
msgstr "Sekunden"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:79
|
||||
msgid "Minutes"
|
||||
msgstr "Minuten"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:80
|
||||
msgid "Hours"
|
||||
msgstr "Stunden"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:81
|
||||
msgid "Days"
|
||||
msgstr "Tage"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:82
|
||||
msgid "Weeks"
|
||||
msgstr "Wochen"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Neu"
|
||||
@ -363,43 +308,43 @@ msgstr "Neu"
|
||||
msgid "Shows"
|
||||
msgstr "Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:377
|
||||
#: podcasts-gtk/src/utils.rs:398
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Wählen Sie die Datei aus, aus der Sie Shows importieren wollen."
|
||||
msgstr "Wählen Sie die Datei aus, aus der Sie Podcasts importieren wollen."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:380
|
||||
#: podcasts-gtk/src/utils.rs:401
|
||||
msgid "_Import"
|
||||
msgstr "_Importieren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:389 podcasts-gtk/src/utils.rs:435
|
||||
#: podcasts-gtk/src/utils.rs:410 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-Datei"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:406
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Die importierte Datei konnte nicht ausgewertet werden"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:411 podcasts-gtk/src/utils.rs:453
|
||||
#: podcasts-gtk/src/utils.rs:432 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Auf die gewählte Datei konnte nicht zugegriffen werden."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:423
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Podcasts exportieren nach …"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "E_xportieren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "A_bbrechen"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcasts Abonnements"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Export der Podcasts ist fehlgeschlagen"
|
||||
|
||||
@ -415,24 +360,71 @@ msgstr "Erfahren Sie mehr über GNOME Podcasts"
|
||||
msgid "translator-credits"
|
||||
msgstr ""
|
||||
"Mario Blättermann <mario.blaettermann@gmail.com>\n"
|
||||
"Tim Sabsch <tim@sabsch.com>"
|
||||
"Tim Sabsch <tim@sabsch.com>\n"
|
||||
"Onno Giesmann <nutzer3105@gmail.com>"
|
||||
|
||||
#: 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:536
|
||||
#: podcasts-gtk/src/widgets/player.rs:828
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Die Medienwiedergabe konnte eine Aktion nicht ausführen."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:169
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Alle Folgen als angehört markieren"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Abonnement von {} gekündigt"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
#~ msgid "_Preferences"
|
||||
#~ msgstr "_Einstellungen"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "Sie haben diese Quelle bereits abonniert!"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Einstellungen"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Einstellungen"
|
||||
|
||||
#~ msgid "Appearance"
|
||||
#~ msgstr "Erscheinungsbild"
|
||||
|
||||
#~ msgid "Dark Theme"
|
||||
#~ msgstr "Dunkles Thema"
|
||||
|
||||
#~ msgid "Delete played episodes"
|
||||
#~ msgstr "Angehörte Folgen löschen"
|
||||
|
||||
#~ msgid "After"
|
||||
#~ msgstr "Nach"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "Ungültige Adresse"
|
||||
|
||||
#~ msgid "Seconds"
|
||||
#~ msgstr "Sekunden"
|
||||
|
||||
#~ msgid "Minutes"
|
||||
#~ msgstr "Minuten"
|
||||
|
||||
#~ msgid "Hours"
|
||||
#~ msgstr "Stunden"
|
||||
|
||||
#~ msgid "Days"
|
||||
#~ msgstr "Tage"
|
||||
|
||||
#~ msgid "Weeks"
|
||||
#~ msgstr "Wochen"
|
||||
|
||||
#~ msgid "_About"
|
||||
#~ msgstr "I_nfo"
|
||||
|
||||
@ -5,22 +5,22 @@
|
||||
# Daniel Garcia Moreno <danigm@wadobo.com>, 2018.
|
||||
# Rodrigo <rodhos92@gmail.com>, 2018.
|
||||
# Rodrigo Lledó <rodhos92@gmail.com>, 2019.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2018-2019.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2018-2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-podcasts\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-06-15 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-06-19 12:19+0200\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-07 13:18+0100\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
||||
"Language: es\n"
|
||||
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
|
||||
"Language: es_ES\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: Gtranslator 3.32.0\n"
|
||||
"X-Generator: Gtranslator 3.34.0\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -75,8 +75,8 @@ msgstr "Cuántos periodos de tiempo hay que esperar entre limpiezas automáticas
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -94,7 +94,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Aplicación de Podcast para GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -119,7 +119,6 @@ msgid "Import shows from another device"
|
||||
msgstr "Importar programas de otro dispositivo"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
#| msgid "You've already listened to this episode."
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Ya ha escuchado este episodio."
|
||||
|
||||
@ -160,7 +159,7 @@ msgid "_About Podcasts"
|
||||
msgstr "_Acerca de Podcasts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Añadir un canal nuevo"
|
||||
|
||||
@ -172,11 +171,11 @@ msgstr "Introduzca la dirección del canal que añadir"
|
||||
msgid "Add"
|
||||
msgstr "Añadir"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Título del programa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
|
||||
@ -222,51 +221,55 @@ msgstr "Una notificación de acción dentro de la aplicación"
|
||||
msgid "Undo"
|
||||
msgstr "Deshacer"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Retroceder 10 segundos"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Reproduciendo ahora"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Reproducir"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Avanzar 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Cambiar velocidad de reproducción"
|
||||
|
||||
#: 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 "velocidad 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 "velocidad 1.25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocidad normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Retroceder 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Reproducir"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Avanzar 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Marcar todos los episodios como reproducidos"
|
||||
@ -291,18 +294,14 @@ msgstr "Marcar todo como reproducido"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar suscripción"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Leer más"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Obteniendo nuevos episodios"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:127
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Ya está suscrito a este programa"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:145
|
||||
msgid "Invalid URL"
|
||||
msgstr "URL no válido"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Nuevo"
|
||||
@ -311,43 +310,43 @@ msgstr "Nuevo"
|
||||
msgid "Shows"
|
||||
msgstr "Programas"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Selecciona el fichero desde el que quiere importar programas."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Importar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "fichero OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Fallo al analizar el fichero importado"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "No se ha podido acceder al archivo seleccionado."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Exportar programas a…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Exportar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Cancelar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Suscripciones a podcasts de GNOME"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Falló al exportar podcasts"
|
||||
|
||||
@ -370,7 +369,7 @@ msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "El reproductor no ha podido reproducir una acción."
|
||||
|
||||
@ -382,6 +381,12 @@ msgstr "Marcar todos los episodios como escuchados"
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Suscripción cancelada para {}"
|
||||
|
||||
#~ msgid "You are already subscribed to this show"
|
||||
#~ msgstr "Ya está suscrito a este programa"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "URL no válido"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "¡Ya está suscrito a este canal!"
|
||||
|
||||
|
||||
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-05-18 12:55+0000\n"
|
||||
"PO-Revision-Date: 2019-06-01 20:20+0300\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-23 13:44+0200\n"
|
||||
"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
|
||||
"Language-Team: Finnish <lokalisointi-lista@googlegroups.com>\n"
|
||||
"Language: fi\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"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"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -69,8 +69,8 @@ msgstr ""
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcastit"
|
||||
|
||||
@ -88,7 +88,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Podcast-sovellus Gnomelle"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -153,7 +153,7 @@ msgid "_About Podcasts"
|
||||
msgstr "_Tietoja - Podcastit"
|
||||
|
||||
#: 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 "Lisää uusi syöte"
|
||||
|
||||
@ -165,15 +165,11 @@ msgstr "Anna lisättävän syötteen osoite"
|
||||
msgid "Add"
|
||||
msgstr "Lisää"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Olet jo tilannut kyseisen syötteen!"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Ohjelman nimi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
|
||||
@ -219,51 +215,55 @@ msgstr "Sovelluksen sisäinen ilmoitus"
|
||||
msgid "Undo"
|
||||
msgstr "Kumoa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Siirry taakse 10 sekuntia"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Nyt toistetaan"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Toista"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Keskeytä"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Siirry eteen 10 sekuntia"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Vaihda toistonopeutta"
|
||||
|
||||
#: 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 "1,5-kertainen nopeus"
|
||||
|
||||
#: 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 "1,25-kertainen nopeus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Tavallinen nopeus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Siirry taakse 10 sekuntia"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Toista"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Keskeytä"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Siirry eteen 10 sekuntia"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Merkitse kaikki jaksot toistetuiksi"
|
||||
@ -288,18 +288,14 @@ msgstr "Merkitse kaikki toistetuiksi"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Lopeta tilaus"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Lue lisää"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Noudetaan uusia jaksoja"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Olet jo tilannut tämän ohjelman"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "Virheellinen osoite"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Uudet"
|
||||
@ -308,43 +304,43 @@ msgstr "Uudet"
|
||||
msgid "Shows"
|
||||
msgstr "Ohjelmat"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Valitse tiedosto, josta haluat tuoda ohjelmia."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Tuo"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-tiedosto"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Tuotua tiedostoa ei voitu jäsentää"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Valittua tiedostoa ei voitu käyttää."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Vie jaksot…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Vie"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Peru"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Gnomen podcastsovelluksen tilaukset"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Podcastien vienti epäonnistui"
|
||||
|
||||
@ -365,7 +361,7 @@ msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Mediasoitin ei kyennyt suorittamaan toimintoa."
|
||||
|
||||
@ -377,6 +373,15 @@ msgstr "Merkitse kaikki jaksot toistetuiksi"
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Lopeta syötteen {} tilaus"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "Olet jo tilannut kyseisen syötteen!"
|
||||
|
||||
#~ msgid "You are already subscribed to this show"
|
||||
#~ msgstr "Olet jo tilannut tämän ohjelman"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "Virheellinen osoite"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2018-09-03 13:42+0000\n"
|
||||
"PO-Revision-Date: 2018-09-04 20:17+0200\n"
|
||||
"POT-Creation-Date: 2019-12-08 20:03+0000\n"
|
||||
"PO-Revision-Date: 2020-01-21 11:00+0100\n"
|
||||
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
|
||||
"Language-Team: Friulian <fur@li.org>\n"
|
||||
"Language: fur\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Last-Translator: \n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
"X-Generator: Poedit 2.2.4\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -68,8 +68,8 @@ msgstr "Ce periodi di timp di spietâ tra lis netisiis automatichis"
|
||||
#. 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:91 podcasts-gtk/src/app.rs:414
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:31
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -78,11 +78,6 @@ msgstr "Podcasts"
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "Scolte i tiei podcast preferîts, daurman dal to scritori."
|
||||
|
||||
#. 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;"
|
||||
@ -92,7 +87,7 @@ msgstr "Podcast;RSS;Regjistrazion;Trasmission;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Aplicazion podcast par GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:51
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -102,7 +97,9 @@ msgstr "Chest spetacul nol à ancjemò episodis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:62
|
||||
msgid "If you think this is an error, please consider writing a bug report."
|
||||
msgstr "Se tu pensis che chest al sedi un erôr, considere di scrivi une segnalazion di erôr."
|
||||
msgstr ""
|
||||
"Se tu pensis che chest al sedi un erôr, considere di scrivi une segnalazion "
|
||||
"di erôr."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:106
|
||||
msgid "Get some shows"
|
||||
@ -116,22 +113,26 @@ msgstr "Zonte gnûfs spetacui vie URL di feed"
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Impuarte i spetacui di un altri dispositîf"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:178
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Tu âs za scoltât chest episodi."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Calcul de dimension dal episodi…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:214
|
||||
msgid "Cancel"
|
||||
msgstr "Anule"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:232
|
||||
msgid "Download this episode"
|
||||
msgstr "Discjarie chest episodi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:256
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Viôt chest episodi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Anule il procès di discjariament"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
msgid "Download this episode"
|
||||
msgstr "Discjarie chest episodi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:7
|
||||
msgid "_Check for New Episodes"
|
||||
msgstr "_Controle par gnûfs episodis"
|
||||
@ -140,20 +141,20 @@ msgstr "_Controle par gnûfs episodis"
|
||||
msgid "_Import Shows"
|
||||
msgstr "_Impuarte spetacui"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "_Preferencis"
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:16
|
||||
msgid "_Export Shows"
|
||||
msgstr "_Espuarte spetacui"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:29
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Scurtis tastiere"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:37
|
||||
msgid "_About"
|
||||
msgstr "_Informazions"
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "_Informazions su 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 "Zonte un gnûf feed"
|
||||
|
||||
@ -165,15 +166,11 @@ msgstr "Inserìs la direzion dal feed di zontâ"
|
||||
msgid "Add"
|
||||
msgstr "Zonte"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Tu sês za sotscrit a chest feed!"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Titul dal spetacul"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Indaûr"
|
||||
|
||||
@ -188,11 +185,6 @@ msgstr "Controle se a son gnûfs episodis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Jes de aplicazion"
|
||||
|
||||
@ -269,27 +261,6 @@ msgstr "rapuart di velocitât 1.25"
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocitât normâl"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Aspiet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Teme scûr"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "Elimine i episodis viodûts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "Dopo"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Segne ducj i episodis come viodûts"
|
||||
@ -314,91 +285,136 @@ msgstr "Segne dut come viodût"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Anule sotscrizion"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:332
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Lei di plui"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Daûr a recuperâ i gnûfs episodis"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:98
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Tu sês za sotscrit a chest spetacul"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:106
|
||||
msgid "Invalid URL"
|
||||
msgstr "URL no valit"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:59
|
||||
msgid "Seconds"
|
||||
msgstr "Seconts"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:60
|
||||
msgid "Minutes"
|
||||
msgstr "Minûts"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:61
|
||||
msgid "Hours"
|
||||
msgstr "Oris"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:62
|
||||
msgid "Days"
|
||||
msgstr "Diis"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:63
|
||||
msgid "Weeks"
|
||||
msgstr "Setemanis"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:35
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Gnûf"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:36
|
||||
#: podcasts-gtk/src/stacks/content.rs:55
|
||||
msgid "Shows"
|
||||
msgstr "Spetacui"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:357
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Selezione il file che di chei si desidere impuartâ i spetacui."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:360
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Impuarte"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:369
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "File OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:386
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "No si è rivâts a analizâ il file impuartât"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:391
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Il file selezionât nol pues jessi doprât."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:26
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "_Espuarte spetacui su…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Espuarte"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Anule"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Sotscrizions di GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "No si è rivâts a espuartâ i podcast"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:51
|
||||
msgid "Podcast Client for the GNOME Desktop."
|
||||
msgstr "Client podcast pal scritori GNOME."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:33
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:58
|
||||
msgid "Learn more about GNOME Podcasts"
|
||||
msgstr "Plui informazions su GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:38
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
msgid "translator-credits"
|
||||
msgstr "Fabio Tomat <f.t.public@gmail.com>"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:129
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:301
|
||||
#: podcasts-gtk/src/widgets/player.rs:539
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Il riprodutôr multimediâl nol è stât bon di eseguî une azion."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:150
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Segnât ducj i episodis come scoltâts"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:155
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Sotscrizion anulade di {}"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
#~ msgid "_Preferences"
|
||||
#~ msgstr "_Preferencis"
|
||||
|
||||
#~ msgid "_About"
|
||||
#~ msgstr "_Informazions"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "Tu sês za sotscrit a chest feed!"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Preferencis"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Preferencis"
|
||||
|
||||
#~ msgid "Appearance"
|
||||
#~ msgstr "Aspiet"
|
||||
|
||||
#~ msgid "Dark Theme"
|
||||
#~ msgstr "Teme scûr"
|
||||
|
||||
#~ msgid "Delete played episodes"
|
||||
#~ msgstr "Elimine i episodis viodûts"
|
||||
|
||||
#~ msgid "After"
|
||||
#~ msgstr "Dopo"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "URL no valit"
|
||||
|
||||
#~ msgid "Seconds"
|
||||
#~ msgstr "Seconts"
|
||||
|
||||
#~ msgid "Minutes"
|
||||
#~ msgstr "Minûts"
|
||||
|
||||
#~ msgid "Hours"
|
||||
#~ msgstr "Oris"
|
||||
|
||||
#~ msgid "Days"
|
||||
#~ msgstr "Diis"
|
||||
|
||||
#~ msgid "Weeks"
|
||||
#~ msgstr "Setemanis"
|
||||
|
||||
@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-06-15 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-06-22 22:30+0200\n"
|
||||
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-03-15 15:53+0100\n"
|
||||
"Last-Translator: gogo <linux.hr@protonmail.com>\n"
|
||||
"Language-Team: Croatian <hr@li.org>\n"
|
||||
"Language: hr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Poedit 2.2.1\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -73,8 +73,8 @@ msgstr "Koliko vremensko razdoblje treba pričekati između automatskih čišće
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasti"
|
||||
|
||||
@ -92,7 +92,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Podcast aplikacija za GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -157,7 +157,7 @@ msgid "_About Podcasts"
|
||||
msgstr "_O Podcasti"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Dodaj novi kanal"
|
||||
|
||||
@ -169,11 +169,11 @@ msgstr "Upišite adresu kanala za dodavanje"
|
||||
msgid "Add"
|
||||
msgstr "Dodaj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Prikaži naslov"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Natrag"
|
||||
|
||||
@ -219,51 +219,55 @@ msgstr "Obavijesti radnja iz aplikacije"
|
||||
msgid "Undo"
|
||||
msgstr "Vrati"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Premotaj 10 sekundi"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Trenutna reprodukcija"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Reproduciraj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pauziraj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Brzo premotaj 10 sekundi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Promijeni brzinu reprodukcije"
|
||||
|
||||
#: 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 "1.5 brže"
|
||||
|
||||
#: 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 "1.25 brže"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normalna brzina"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Premotaj 10 sekundi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Reproduciraj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pauziraj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Brzo premotaj 10 sekundi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Označi se epizode kao odslušane"
|
||||
@ -288,18 +292,14 @@ msgstr "Označi sve kao odslušano"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Ukini pretplatu"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Pročitaj više"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Preuzimanje novi epizoda"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:127
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Već ste pretplaćeni na ovu emisiju"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:145
|
||||
msgid "Invalid URL"
|
||||
msgstr "Nevažeći URL"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Novo"
|
||||
@ -308,43 +308,43 @@ msgstr "Novo"
|
||||
msgid "Shows"
|
||||
msgstr "Emisije"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Odaberite datoteku iz koje želite uvesti emisije."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Uvoz"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "OPML datoteka"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Neuspjela obrada uvezene datoteke"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Nemoguć pristup dabranoj datoteci."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "_Izvezi emisije u…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Uvoz"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Odustani"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcast pretplate"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Neuspjeli uvoz podcasta"
|
||||
|
||||
@ -367,7 +367,7 @@ msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Medijski reproduktor nije uspio izvršiti radnju."
|
||||
|
||||
@ -379,6 +379,12 @@ msgstr "Označi sve epizodae kao odslušane"
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Ukini pretplatu za {}"
|
||||
|
||||
#~ msgid "You are already subscribed to this show"
|
||||
#~ msgstr "Već ste pretplaćeni na ovu emisiju"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "Nevažeći URL"
|
||||
|
||||
#~ msgid "_Preferences"
|
||||
#~ msgstr "_Osobitosti"
|
||||
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
# Hungarian translation for podcasts.
|
||||
# Copyright (C) 2018, 2019. Free Software Foundation, Inc.
|
||||
# Copyright (C) 2018, 2019, 2020 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
#
|
||||
# Meskó Balázs <mesko.balazs at fsf dot hu>, 2018.
|
||||
# Balázs Úr <ur.balazs at fsf dot hu>, 2019.
|
||||
# Balázs Úr <ur.balazs at fsf dot hu>, 2019, 2020.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-05-18 12:55+0000\n"
|
||||
"PO-Revision-Date: 2019-06-03 22:27+0200\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-17 23:31+0100\n"
|
||||
"Last-Translator: Balázs Úr <ur.balazs at fsf dot hu>\n"
|
||||
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
|
||||
"Language: hu\n"
|
||||
@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 18.12.3\n"
|
||||
"X-Generator: Lokalize 19.04.3\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -70,8 +70,8 @@ msgstr "Milyen időközöket várjon az automatikus tisztítások között"
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcastok"
|
||||
|
||||
@ -89,7 +89,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Podcast alkalmazás a GNOME-hoz"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -114,7 +114,6 @@ msgid "Import shows from another device"
|
||||
msgstr "Műsorok importálása egy másik eszközről"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
#| msgid "You are already subscribed to this show"
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Már meghallgatta ezt az epizódot."
|
||||
|
||||
@ -155,7 +154,7 @@ msgid "_About Podcasts"
|
||||
msgstr "A Podcastok _névjegye"
|
||||
|
||||
#: 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 "Új csatorna hozzáadása"
|
||||
|
||||
@ -167,15 +166,11 @@ msgstr "Adja meg a hozzáadandó csatorna címét"
|
||||
msgid "Add"
|
||||
msgstr "Hozzáadás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Már feliratkozott erre a csatornára."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Műsor címe"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Vissza"
|
||||
|
||||
@ -221,51 +216,55 @@ msgstr "Alkalmazáson belüli műveletértesítések"
|
||||
msgid "Undo"
|
||||
msgstr "Visszavonás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Visszatekerés 10 másodperccel"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Most játssza"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Lejátszás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Szünet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Előretekerés 10 másodperccel"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Lejátszási sebesség módosítása"
|
||||
|
||||
#: 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 "1,5-szeres sebesség"
|
||||
|
||||
#: 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 "1,25-szörös sebesség"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normál sebesség"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Visszatekerés 10 másodperccel"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Lejátszás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Szünet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Előretekerés 10 másodperccel"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "Összes epizód meg_jelölése lejátszottként"
|
||||
@ -290,18 +289,14 @@ msgstr "Összes megjelölése lejátszottként"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Leiratkozás"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Olvassa tovább"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Új epizódok lekérése"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Már feliratkozott erre a műsorra"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "Érvénytelen URL"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Új"
|
||||
@ -310,43 +305,43 @@ msgstr "Új"
|
||||
msgid "Shows"
|
||||
msgstr "Műsorok"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Válasszon egy fájlt, amelyből műsorokat akar importálni."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Importálás"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "OPML fájl"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Az importált fájl feldolgozása meghiúsult"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "A kiválasztott fájlok nem érhetőek el."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Műsorok exportálása ide…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Exportálás"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Mégse"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcastok feliratkozások"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "A podcastok exportálása meghiúsult"
|
||||
|
||||
@ -367,7 +362,7 @@ msgid "{} min"
|
||||
msgstr "{} perc"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "A médialejátszó nem tudott végrehajtani egy műveletet."
|
||||
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
# Indonesian translation for podcasts.
|
||||
# Copyright (C) 2018 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018, 2019.
|
||||
# Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018-2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-06-15 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-07-11 15:21+0700\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-13 19:33+0700\n"
|
||||
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
|
||||
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
|
||||
"Language: id\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -68,8 +68,8 @@ msgstr "Berapa lama waktu untuk menunggu di antara pembersihan otomatis"
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcast"
|
||||
|
||||
@ -87,7 +87,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Aplikasi Podcast untuk GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -154,7 +154,7 @@ msgid "_About Podcasts"
|
||||
msgstr "Tent_ang Podcast"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Tambahkan feed baru"
|
||||
|
||||
@ -166,11 +166,11 @@ msgstr "Masukkan alamat feed untuk ditambahkan"
|
||||
msgid "Add"
|
||||
msgstr "Tambah"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Tampilkan Judul"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
@ -216,51 +216,55 @@ msgstr "Notifikasi aksi dalam aplikasi"
|
||||
msgid "Undo"
|
||||
msgstr "Tak Jadi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Putar mundur 10 detik"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Sedang Diputar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Putar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Jeda"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Maju cepat 10 detik"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Ubah kecepatan pemutaran"
|
||||
|
||||
#: 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 "Ubah kecepatan pemutaran"
|
||||
|
||||
#: 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 "tingkat kecepatan 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 "tingkat kecepatan 1.25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Kecepatan normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Putar mundur 10 detik"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Putar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Jeda"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Maju cepat 10 detik"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "Tandai Se_mua Episode sebagai Sudah Diputar"
|
||||
@ -285,18 +289,14 @@ msgstr "Tandai Semua sebagai Sudah Diputar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Berhenti Berlangganan"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Baca Lebih Lanjut"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Mengambil episode baru"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:127
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Anda sudah berlangganan ke acara ini"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:145
|
||||
msgid "Invalid URL"
|
||||
msgstr "URL tak valid"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Baru"
|
||||
@ -305,43 +305,43 @@ msgstr "Baru"
|
||||
msgid "Shows"
|
||||
msgstr "Acara"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Pilih berkas dari mana Anda ingin mengimpor acara."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Impor"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "Berkas OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Gagal mengurai berkas yang diimpor"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Berkas yang dipilih tidak dapat diakses."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Ekspor acara ke…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Ekspor"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Batal"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Berlangganan GNOME Podcast"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Gagal mengekspor podcast"
|
||||
|
||||
@ -355,14 +355,14 @@ msgstr "Pelajari lebih lanjut tentang GNOME Podcast"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
msgid "translator-credits"
|
||||
msgstr "Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018, 2019."
|
||||
msgstr "Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018-2020."
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
msgid "{} min"
|
||||
msgstr "{} mnt"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Pemutar media tidak dapat melakukan aksi."
|
||||
|
||||
@ -374,6 +374,12 @@ msgstr "Tandai semua episode sebagai sudah didengarkan"
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Berhenti berlangganan dari {}"
|
||||
|
||||
#~ msgid "You are already subscribed to this show"
|
||||
#~ msgstr "Anda sudah berlangganan ke acara ini"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "URL tak valid"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
# Italian translation for podcasts.
|
||||
# Copyright (C) 2018, 2019 podcasts's Free Software Foundation, Inc.
|
||||
# Copyright (C) 2018, 2019, 2020 podcasts's Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Milo Casagrande <milo@milo.name>, 2018, 2019.
|
||||
# Milo Casagrande <milo@milo.name>, 2018, 2019, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-02-02 15:17+0000\n"
|
||||
"PO-Revision-Date: 2019-02-28 09:25+0100\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-03-06 09:41+0100\n"
|
||||
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
|
||||
"Language-Team: Italian <gnome-it-list@gnome.org>\n"
|
||||
"Language: it\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"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.2.1\n"
|
||||
"X-Generator: Poedit 2.2.4\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -69,8 +69,8 @@ msgstr "Che periodi di tempo aspettare tra la pulizia automatica"
|
||||
#. 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:124 podcasts-gtk/src/app.rs:455
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcast"
|
||||
|
||||
@ -79,11 +79,6 @@ msgstr "Podcast"
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "Ascoltare i propri podcast preferiti, direttamente proprio computer."
|
||||
|
||||
#. 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;"
|
||||
@ -93,7 +88,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Applicazione per podcast per GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -117,19 +112,23 @@ msgstr "Aggiungi nuovi show via URL"
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Importa show da un altro dispositivo"
|
||||
|
||||
#: 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 "Questo episodio è già stato ascoltato."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Calcolo dimensione episodio…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Riproduci questo episodio"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Annulla lo scaricamento"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
msgid "Download this episode"
|
||||
msgstr "Scarica questo episodio"
|
||||
|
||||
@ -146,19 +145,15 @@ msgid "_Export Shows"
|
||||
msgstr "_Esporta show"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "Preferen_ze"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:27
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Scorciatoie da tastiera"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "I_nformazioni su Podcast"
|
||||
|
||||
#: 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 "Aggiungi nuovo feed"
|
||||
|
||||
@ -170,15 +165,11 @@ msgstr "Inserire un indirizzo da aggiungere"
|
||||
msgid "Add"
|
||||
msgstr "Aggiungi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Si è già abbonati a questo feed."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Titolo show"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
@ -193,11 +184,6 @@ msgstr "Controlla presenza nuovi episodi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "Preferenze"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Esce dall'applicazione"
|
||||
|
||||
@ -229,71 +215,54 @@ msgstr "Una notifica"
|
||||
msgid "Undo"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Indietro 10 secondi"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "In riproduzione"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Riproduci"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Avanti veloce 10 secondi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Modifica la velocità di riproduzione"
|
||||
|
||||
#: 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 "1,5 volte la velocità"
|
||||
|
||||
#: 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 "1,25 volte la velocità"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocità normale"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Preferenze"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Indietro 10 secondi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Aspetto"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Riproduci"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Tema scuro"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "Eliminare episodi ascoltati"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "Dopo"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Avanti veloce 10 secondi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
@ -319,38 +288,14 @@ msgstr "Segna tutti ascoltati"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Annulla abbonamento"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:369
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Leggi altro"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Scaricamento nuovi episodi"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Si è già abbonati a questo show"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "URL non valido"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:78
|
||||
msgid "Seconds"
|
||||
msgstr "Secondi"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:79
|
||||
msgid "Minutes"
|
||||
msgstr "Minuti"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:80
|
||||
msgid "Hours"
|
||||
msgstr "Ore"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:81
|
||||
msgid "Days"
|
||||
msgstr "Giorni"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:82
|
||||
msgid "Weeks"
|
||||
msgstr "Settimane"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Nuovo"
|
||||
@ -359,43 +304,43 @@ msgstr "Nuovo"
|
||||
msgid "Shows"
|
||||
msgstr "Show"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:377
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Selezionare il file da cui importare gli show."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:380
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Importa"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:389 podcasts-gtk/src/utils.rs:435
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "File OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:406
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Analisi del file importato non riuscita"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:411 podcasts-gtk/src/utils.rs:453
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Impossibile accedere al file selezionato."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:423
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Esporta show su…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Esporta"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "A_nnulla"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Abbonamenti Podcast GNOME"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Esportazioni podcast non riuscita"
|
||||
|
||||
@ -411,22 +356,19 @@ msgstr "Maggiori informazioni su Podcast GNOME"
|
||||
msgid "translator-credits"
|
||||
msgstr "Milo Casagrande <milo@milo.name>"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:149
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:536
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Il riproduttore multimediale non può eseguire un'azione."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:169
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Episodi segnati come letti"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Abbonamento a {} annullato"
|
||||
|
||||
#~ msgid "_About"
|
||||
#~ msgstr "I_nformazioni"
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
# Dutch translation for podcasts.
|
||||
# Copyright (C) 2019 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Nathan Follens <nthn@unseen.is>, 2019.
|
||||
# Nathan Follens <nthn@unseen.is>, 2019-2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-02-02 15:17+0000\n"
|
||||
"PO-Revision-Date: 2019-02-26 12:47+0100\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-26 14:31+0100\n"
|
||||
"Last-Translator: Nathan Follens <nthn@unseen.is>\n"
|
||||
"Language-Team: Dutch <gnome-nl-list@gnome.org>\n"
|
||||
"Language: nl\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"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.2.1\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -69,8 +69,8 @@ msgstr "Hoe lang te wachten tussen automatische opruimbeurten"
|
||||
#. 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:124 podcasts-gtk/src/app.rs:455
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -79,11 +79,6 @@ msgstr "Podcasts"
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "Luister naar uw favoriete podcasts, rechtstreeks vanop uw bureaublad."
|
||||
|
||||
#. 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;"
|
||||
@ -93,7 +88,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Podcast-toepassing voor Gnome"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -117,19 +112,23 @@ msgstr "Nieuwe shows toevoegen via feed-URL"
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Shows importeren van een ander apparaat"
|
||||
|
||||
#: 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 "U heeft deze aflevering reeds beluisterd."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Grootte van aflevering berekenen…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Deze aflevering afspelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Downloadproces annuleren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
msgid "Download this episode"
|
||||
msgstr "Deze aflevering downloaden"
|
||||
|
||||
@ -146,19 +145,15 @@ msgid "_Export Shows"
|
||||
msgstr "Shows _exporteren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "_Voorkeuren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:27
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Sneltoetsen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "_Over 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 "Nieuwe feed toevoegen"
|
||||
|
||||
@ -170,15 +165,11 @@ msgstr "Voer het toe te voegen feedadres in"
|
||||
msgid "Add"
|
||||
msgstr "Toevoegen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "U bent reeds geabonneerd op die feed!"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Titel tonen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
@ -193,11 +184,6 @@ msgstr "Controleren op nieuwe afleveringen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "Voorkeuren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "De toepassing afsluiten"
|
||||
|
||||
@ -229,71 +215,54 @@ msgstr "Een in-app-actiemelding"
|
||||
msgid "Undo"
|
||||
msgstr "Ongedaan maken"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 seconden terugspoelen"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "U luistert naar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Afspelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pauzeren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "10 seconden doorspoelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "De afspeelsnelheid wijzigen"
|
||||
|
||||
#: 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 "1,5 snelheid"
|
||||
|
||||
#: 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 "1,25 snelheid"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normale snelheid"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Voorkeuren"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 seconden terugspoelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Uiterlijk"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Afspelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Donker thema"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pauzeren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "Afgespeelde afleveringen verwijderen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "Na"
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "10 seconden doorspoelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
@ -319,38 +288,14 @@ msgstr "Alles markeren als afgespeeld"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Opzeggen"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:369
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Lees meer"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Nieuwe afleveringen worden opgehaald"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "U bent reeds geabonneerd op deze show"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "Ongeldige URL"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:78
|
||||
msgid "Seconds"
|
||||
msgstr "Seconden"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:79
|
||||
msgid "Minutes"
|
||||
msgstr "Minuten"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:80
|
||||
msgid "Hours"
|
||||
msgstr "Uur"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:81
|
||||
msgid "Days"
|
||||
msgstr "Dagen"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:82
|
||||
msgid "Weeks"
|
||||
msgstr "Weken"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Nieuw"
|
||||
@ -359,43 +304,43 @@ msgstr "Nieuw"
|
||||
msgid "Shows"
|
||||
msgstr "Shows"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:377
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Selecteer het bestand waaruit u shows wilt importeren."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:380
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Importeren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:389 podcasts-gtk/src/utils.rs:435
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-bestand"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:406
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Verwerken van geïmporteerd bestand mislukt"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:411 podcasts-gtk/src/utils.rs:453
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Kon geen toegang verkrijgen tot geselecteerd bestand."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:423
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Shows exporteren naar…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Exporteren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Annuleren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Gnome Podcasts-abonnementen"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Exporteren van podcasts mislukt"
|
||||
|
||||
@ -414,19 +359,65 @@ msgstr ""
|
||||
"\n"
|
||||
"Meer info over Gnome-NL http://nl.gnome.org/"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:149
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:536
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "De mediaspeler kon een handeling niet uitvoeren."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:169
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Alle afleveringen markeren als beluisterd"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Abonnement op {} opgezegd"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
#~ msgid "_Preferences"
|
||||
#~ msgstr "_Voorkeuren"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "U bent reeds geabonneerd op die feed!"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Voorkeuren"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Voorkeuren"
|
||||
|
||||
#~ msgid "Appearance"
|
||||
#~ msgstr "Uiterlijk"
|
||||
|
||||
#~ msgid "Dark Theme"
|
||||
#~ msgstr "Donker thema"
|
||||
|
||||
#~ msgid "Delete played episodes"
|
||||
#~ msgstr "Afgespeelde afleveringen verwijderen"
|
||||
|
||||
#~ msgid "After"
|
||||
#~ msgstr "Na"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "Ongeldige URL"
|
||||
|
||||
#~ msgid "Seconds"
|
||||
#~ msgstr "Seconden"
|
||||
|
||||
#~ msgid "Minutes"
|
||||
#~ msgstr "Minuten"
|
||||
|
||||
#~ msgid "Hours"
|
||||
#~ msgstr "Uur"
|
||||
|
||||
#~ msgid "Days"
|
||||
#~ msgstr "Dagen"
|
||||
|
||||
#~ msgid "Weeks"
|
||||
#~ msgstr "Weken"
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
# Polish translation for podcasts.
|
||||
# Copyright © 2018-2019 the podcasts authors.
|
||||
# Copyright © 2018-2020 the podcasts authors.
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2018-2019.
|
||||
# Aviary.pl <community-poland@mozilla.org>, 2018-2019.
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2018-2020.
|
||||
# Aviary.pl <community-poland@mozilla.org>, 2018-2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-05-18 12:55+0000\n"
|
||||
"PO-Revision-Date: 2019-05-19 12:37+0200\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-09 12:19+0100\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <community-poland@mozilla.org>\n"
|
||||
"Language: pl\n"
|
||||
@ -70,8 +70,8 @@ msgstr "Jaki okres czekać między automatycznym czyszczeniem"
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasty"
|
||||
|
||||
@ -89,7 +89,7 @@ msgstr "Podcast;Podkasty;RSS;Atom;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Aplikacja do słuchania podcastów w GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -154,7 +154,7 @@ msgid "_About Podcasts"
|
||||
msgstr "_O programie"
|
||||
|
||||
#: 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 "Dodaje nowy kanał"
|
||||
|
||||
@ -166,15 +166,11 @@ msgstr "Adres kanału do dodania"
|
||||
msgid "Add"
|
||||
msgstr "Dodaj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Ten kanał jest już subskrybowany."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Tytuł programu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Wstecz"
|
||||
|
||||
@ -220,51 +216,55 @@ msgstr "Powiadomienie z działaniem w programie"
|
||||
msgid "Undo"
|
||||
msgstr "Cofnij"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Przewija wstecz o 10 sekund"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Odtwarzanie"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Odtwarza"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Wstrzymuje"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Przewija wprzód o 10 sekund"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Zmienia prędkość odtwarzania"
|
||||
|
||||
#: 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 "Prędkość 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 "Prędkość 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Zwykła prędkość"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Przewija wstecz o 10 sekund"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Odtwarza"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Wstrzymuje"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Przewija wprzód o 10 sekund"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Oznacz wszystkie odcinki jako odtworzone"
|
||||
@ -289,18 +289,14 @@ msgstr "Oznacz wszystkie jako odtworzone"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Zrezygnuj z subskrypcji"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Czytaj dalej"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Pobieranie nowych odcinków"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Ten program jest już subskrybowany"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "Nieprawidłowy adres"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Nowe"
|
||||
@ -309,43 +305,43 @@ msgstr "Nowe"
|
||||
msgid "Shows"
|
||||
msgstr "Programy"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Proszę wybrać plik, z którego zaimportować programy."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "Zai_mportuj"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "Plik OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Przetworzenie zaimportowanego pliku się nie powiodło"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Nie można uzyskać dostępu do wybranego pliku."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Eksport programów do…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "Wy_eksportuj"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Anuluj"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Subskrypcje Podcastów GNOME"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Wyeksportowanie podcastów się nie powiodło"
|
||||
|
||||
@ -360,15 +356,15 @@ msgstr "Więcej informacji o Podcastach GNOME"
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
msgid "translator-credits"
|
||||
msgstr ""
|
||||
"Piotr Drąg <piotrdrag@gmail.com>, 2018-2019\n"
|
||||
"Aviary.pl <community-poland@mozilla.org>, 2018-2019"
|
||||
"Piotr Drąg <piotrdrag@gmail.com>, 2018-2020\n"
|
||||
"Aviary.pl <community-poland@mozilla.org>, 2018-2020"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Odtwarzacz multimediów nie może wykonać działania."
|
||||
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
# Brazilian Portuguese translation for podcasts.
|
||||
# Copyright (C) 2019 podcasts's COPYRIGHT HOLDER
|
||||
# Copyright (C) 2020 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Yuri Otávio Lopes Gomes <yuriotavio@hotmail.com>, 2018.
|
||||
# Yuri Otávio Lopes Gomes <yuriotavio@hotmail.com>, 2018, 2020.
|
||||
# Rafael Fontenelle <rafaelff@gnome.org>, 2018-2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-06-09 02:38+0000\n"
|
||||
"PO-Revision-Date: 2019-06-13 15:32-0300\n"
|
||||
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
|
||||
"Language-Team: Portuguese - Brazil <gnome-pt_br-list@gnome.org>\n"
|
||||
"POT-Creation-Date: 2020-02-07 19:22+0000\n"
|
||||
"PO-Revision-Date: 2020-02-07 15:18-0300\n"
|
||||
"Last-Translator: Yuri Otávio Lopes Gomes <yuriotavio@hotmail.com>\n"
|
||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
||||
"Language: pt_BR\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.2.3\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -71,8 +71,8 @@ msgstr "Qual período de tempo deve esperar entre limpezas automáticas"
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:329
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -90,7 +90,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Aplicativo de podcast para o GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -157,7 +157,7 @@ msgid "_About Podcasts"
|
||||
msgstr "_Sobre Podcasts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Adiciona um novo feed"
|
||||
|
||||
@ -169,11 +169,11 @@ msgstr "Insira o endereço do feed para adicioná-lo"
|
||||
msgid "Add"
|
||||
msgstr "Adicionar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Mostrar título"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
|
||||
@ -219,51 +219,55 @@ msgstr "Uma notificação de ação no aplicativo"
|
||||
msgid "Undo"
|
||||
msgstr "Desfazer"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Retroceder 10 segundos"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Reproduzindo agora"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Reproduz"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Adianta 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Altera a velocidade de reprodução"
|
||||
|
||||
#: 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 "Taxa de velocidade de 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 "Taxa de velocidade de 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocidade normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Retroceder 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Reproduz"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Adianta 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Marcar todos os episódios como reproduzidos"
|
||||
@ -288,18 +292,14 @@ msgstr "Marcar todos como reproduzidos"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Desinscrever"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Leia mais"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:264
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Buscando novos episódios"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:120
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Você já está inscrito neste podcast"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:135
|
||||
msgid "Invalid URL"
|
||||
msgstr "URL inválida"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Novo"
|
||||
@ -308,43 +308,43 @@ msgstr "Novo"
|
||||
msgid "Shows"
|
||||
msgstr "Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Selecione o arquivo a partir do qual você deseja importar podcasts."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Importar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:455
|
||||
msgid "OPML file"
|
||||
msgstr "Arquivo OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Falha ao analisar o arquivo importado"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:473
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "O arquivo selecionado não pôde ser acessado."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:443
|
||||
msgid "Export shows to…"
|
||||
msgstr "Exportar podcasts para…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:446
|
||||
msgid "_Export"
|
||||
msgstr "_Exportar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Cancel"
|
||||
msgstr "_Cancelar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:467
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Inscrições do GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Falha ao exportar podcasts"
|
||||
|
||||
@ -367,7 +367,7 @@ msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:822
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "O reprodutor de mídia não conseguiu executar uma ação."
|
||||
|
||||
@ -379,6 +379,12 @@ msgstr "Marcados todos os episódios como ouvidos"
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Desinscrito de {}"
|
||||
|
||||
#~ msgid "You are already subscribed to this show"
|
||||
#~ msgstr "Você já está inscrito neste podcast"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "URL inválida"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
# Swedish translation for podcasts.
|
||||
# Copyright © 2018, 2019 podcasts's COPYRIGHT HOLDER
|
||||
# Copyright © 2018-2020 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2018, 2019.
|
||||
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2018, 2019, 2020.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-06-15 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-08-22 17:54+0200\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-13 22:38+0100\n"
|
||||
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
|
||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
|
||||
"Language: sv\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"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.2.3\n"
|
||||
"X-Generator: Poedit 2.2.4\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -69,8 +69,8 @@ msgstr "Vilken sorts tidsperiod att vänta mellan automatiska upprensningar"
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Poddsändningar"
|
||||
|
||||
@ -88,7 +88,7 @@ msgstr "Poddsändning;Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Poddsändningsprogram för GNOME"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -153,7 +153,7 @@ msgid "_About Podcasts"
|
||||
msgstr "_Om Poddsändningar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Lägg till ett nytt flöde"
|
||||
|
||||
@ -165,11 +165,11 @@ msgstr "Ange flödesadress att lägga till"
|
||||
msgid "Add"
|
||||
msgstr "Lägg till"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Visa titel"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Bakåt"
|
||||
|
||||
@ -215,51 +215,55 @@ msgstr "En åtgärdsavisering i programmet"
|
||||
msgid "Undo"
|
||||
msgstr "Ångra"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Spola tillbaka 10 sekunder"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Spelar nu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Spela"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Spola framåt 10 sekunder"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Ändra uppspelningshastigheten"
|
||||
|
||||
#: 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 "Hastighetsfaktor 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 "Hastighetsfaktor 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normal hastighet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Spola tillbaka 10 sekunder"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Spela"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Spola framåt 10 sekunder"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Markera alla avsnitt som spelade"
|
||||
@ -284,18 +288,14 @@ msgstr "Markera alla som spelade"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Säg upp prenumeration"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Läs mer"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Hämtar nya avsnitt"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:127
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Du prenumererar redan på denna show"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:145
|
||||
msgid "Invalid URL"
|
||||
msgstr "Ogiltig URL"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Nytt"
|
||||
@ -304,43 +304,43 @@ msgstr "Nytt"
|
||||
msgid "Shows"
|
||||
msgstr "Shower"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Välj filen från vilken du vill importera shower."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Importera"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Misslyckades med att tolka den importerade filen"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Den markerade filen kunde inte kommas åt."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Exportera shower till…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Exportera"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "A_vbryt"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Poddsändningar-prenumerationer"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Misslyckades med att exportera poddsändningar"
|
||||
|
||||
@ -365,7 +365,7 @@ msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Mediaspelaren kunde inte utföra en åtgärd."
|
||||
|
||||
@ -377,6 +377,12 @@ msgstr "Markerade alla avsnitt som lyssnade"
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Sade upp prenumeration från {}"
|
||||
|
||||
#~ msgid "You are already subscribed to this show"
|
||||
#~ msgstr "Du prenumererar redan på denna show"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "Ogiltig URL"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
|
||||
@ -2,16 +2,16 @@
|
||||
# Copyright (C) 2018-2019 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
#
|
||||
# Emin Tufan Çetin <etcetin@gmail.com>, 2018-2019.
|
||||
# Emin Tufan Çetin <etcetin@gmail.com>, 2018-2020.
|
||||
# Sabri Ünal <libreajans@gmail.com>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2019-06-15 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-09-04 15:16+0300\n"
|
||||
"Last-Translator: Sabri Ünal <libreajans@gmail.com>\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-19 10:52+0300\n"
|
||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
|
||||
"Language: tr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -71,8 +71,8 @@ msgstr "Kendiliğinden temizlemeler arasında beklenecek zaman aralığı"
|
||||
#. 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:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcastler"
|
||||
|
||||
@ -90,7 +90,7 @@ msgstr "Podcast;RSS;Pod Yayını;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "GNOME için Podcast uygulaması"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -155,7 +155,7 @@ msgid "_About Podcasts"
|
||||
msgstr "Podcastler _Hakkında"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Yeni besleme ekle"
|
||||
|
||||
@ -167,11 +167,11 @@ msgstr "Eklenecek besleme adresini gir"
|
||||
msgid "Add"
|
||||
msgstr "Ekle"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Gösteri Başlığı"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Geri"
|
||||
|
||||
@ -217,51 +217,55 @@ msgstr "Uygulama içi eylem bildirimi"
|
||||
msgid "Undo"
|
||||
msgstr "Geri al"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 saniye geri sar"
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Şimdi Oynatılıyor"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Oynat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Duraklat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "10 saniye ileri sar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Kayıttan yürütme hızını değiştir"
|
||||
|
||||
#: 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 "1.5 hız oranı"
|
||||
|
||||
#: 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 "1.25 hız oranı"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Olağan hız"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 saniye geri sar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Oynat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Duraklat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "10 saniye ileri sar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "Tüm Bölümleri Oynatıldı Olarak _İmle"
|
||||
@ -286,18 +290,14 @@ msgstr "Tümünü Oynatıldı Olarak İmle"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Abonelikten Çık"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Daha Çoğunu Oku"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Yeni bölümler alınıyor"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:127
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Bu gösteriye zaten abonesiniz"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:145
|
||||
msgid "Invalid URL"
|
||||
msgstr "Geçersiz URL"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Yeni"
|
||||
@ -306,43 +306,43 @@ msgstr "Yeni"
|
||||
msgid "Shows"
|
||||
msgstr "Gösteriler"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Gösterileri içe aktarmak istediğiniz dosyayı seçin."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_İçe Aktar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "OPML dosyası"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "İçe aktarılan dosya ayrıştırılamadı"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Seçilen dosyaya erişilemedi."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Gösterileri dışa aktar…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Dışa Aktar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_İptal"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcastler Abonelikleri"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Podcastler dışa aktarılamadı"
|
||||
|
||||
@ -365,7 +365,7 @@ msgid "{} min"
|
||||
msgstr "{} dak"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Ortam oynatıcı eylemi yürütemiyor."
|
||||
|
||||
@ -377,6 +377,12 @@ msgstr "Tüm bölümler dinlendi olarak imlendi"
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "{} aboneliğinden çıkıldı"
|
||||
|
||||
#~ msgid "You are already subscribed to this show"
|
||||
#~ msgstr "Bu gösteriye zaten abonesiniz"
|
||||
|
||||
#~ msgid "Invalid URL"
|
||||
#~ msgstr "Geçersiz URL"
|
||||
|
||||
#~ msgid "@icon@"
|
||||
#~ msgstr "@icon@"
|
||||
|
||||
|
||||
386
podcasts-gtk/po/uk.po
Normal file
386
podcasts-gtk/po/uk.po
Normal file
@ -0,0 +1,386 @@
|
||||
# Ukrainian translation for podcasts.
|
||||
# Copyright (C) 2020 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
#
|
||||
# Yuri Chornoivan <yurchor@ukr.net>, 2020.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2020-03-21 20:34+0000\n"
|
||||
"PO-Revision-Date: 2020-04-06 19:49+0300\n"
|
||||
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
|
||||
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
|
||||
"Language: uk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n"
|
||||
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Lokalize 20.07.70\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
msgstr ""
|
||||
"Розташування останнього відкритого головного вікна за вертикаллю (згори)"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:19
|
||||
msgid "Left position of the last open main window"
|
||||
msgstr ""
|
||||
"Розташування останнього відкритого головного вікна за горизонталлю (ліворуч)"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:23
|
||||
msgid "Height of the last open main window"
|
||||
msgstr "Висота останнього відкритого головного вікна"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:27
|
||||
msgid "Width of the last open main window"
|
||||
msgstr "Ширина останнього відкритого головного вікна"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:31
|
||||
msgid "Maximized state of the last open main window"
|
||||
msgstr "Стан максимізації останнього відкритого головного вікна"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:36
|
||||
msgid "Enable or disable dark theme"
|
||||
msgstr "Увімкнути або вимкнути темну тему"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:41
|
||||
msgid "Whether to periodically refresh content"
|
||||
msgstr "Чи слід періодично оновлювати дані"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:46
|
||||
msgid "How many periods of time to wait between automatic refreshes"
|
||||
msgstr ""
|
||||
"Скільки періодів часу слід очікувати між двома послідовними автоматичними"
|
||||
" оновленнями"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:50
|
||||
msgid "What period of time to wait between automatic refreshes"
|
||||
msgstr ""
|
||||
"Який період часу слід використовувати для очікування між двома послідовними"
|
||||
" автоматичними оновленнями"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:54
|
||||
msgid "Whether to refresh content after startup"
|
||||
msgstr "Чи слід оновлювати дані після запуску"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:60
|
||||
msgid "How many periods of time to wait between automatic cleanups"
|
||||
msgstr ""
|
||||
"Скільки періодів часу слід очікувати між двома послідовними автоматичними"
|
||||
" очищеннями"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:64
|
||||
msgid "What period of time to wait between automatic cleanups"
|
||||
msgstr ""
|
||||
"Який період часу слід використовувати для очікування між двома послідовними"
|
||||
" автоматичними очищеннями"
|
||||
|
||||
#. 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/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-gtk/resources/org.gnome.Podcasts.desktop.in.in:4
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:10
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "Слухайте ваші улюблені подкасти безпосередньо з вашої стільниці."
|
||||
|
||||
#. 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;"
|
||||
msgstr "Podcast;RSS;подкаст;рсс;"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:8
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Програма для прослуховування подкастів у GNOME"
|
||||
|
||||
#: 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 "У цьому шоу ще немає серій"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:62
|
||||
msgid "If you think this is an error, please consider writing a bug report."
|
||||
msgstr ""
|
||||
"Якщо ви вважаєте це помилкою, будь ласка, повідомте про неї розробникам."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:106
|
||||
msgid "Get some shows"
|
||||
msgstr "Отримати шоу"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:143
|
||||
msgid "Add new shows via feed URL"
|
||||
msgstr "Додайте нові шоу за допомогою адреси стрічки"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:172
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Імпортувати шоу з іншого пристрою"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Ви вже прослуховували цю серію."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Обчислюємо розмір серії…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Відтворити цю серію"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Скасувати процедуру отримання"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
msgid "Download this episode"
|
||||
msgstr "Отримати цю серію"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:7
|
||||
msgid "_Check for New Episodes"
|
||||
msgstr "_Шукати нові серії"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:12
|
||||
msgid "_Import Shows"
|
||||
msgstr "_Імпортувати шоу"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:16
|
||||
msgid "_Export Shows"
|
||||
msgstr "_Експортувати шоу"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Клавіатурні скорочення"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "_Про «Подкасти»"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
msgid "Add a new feed"
|
||||
msgstr "Додати нову подачу"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:53
|
||||
msgid "Enter feed address to add"
|
||||
msgstr "Введіть адресу подачі для додавання"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:89
|
||||
msgid "Add"
|
||||
msgstr "Додати"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
msgid "Show Title"
|
||||
msgstr "Показувати заголовок"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
msgid "Back"
|
||||
msgstr "Назад"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:12
|
||||
msgid "General"
|
||||
msgstr "Загальне"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:18
|
||||
msgctxt "shortcut window"
|
||||
msgid "Check for new episodes"
|
||||
msgstr "Шукати нові серії"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Вийти з програми"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:56
|
||||
msgid "Today"
|
||||
msgstr "Сьогодні"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:112
|
||||
msgid "Yesterday"
|
||||
msgstr "Вчора"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:168
|
||||
msgid "This Week"
|
||||
msgstr "Цього тижня"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:224
|
||||
msgid "This Month"
|
||||
msgstr "Цього місяця"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:281
|
||||
msgid "Older"
|
||||
msgstr "Старіше"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/inapp_notif.ui:101
|
||||
msgid "An in-app action notification"
|
||||
msgstr "Сповіщення про дію у програмі"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/inapp_notif.ui:112
|
||||
msgid "Undo"
|
||||
msgstr "Скасувати"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Зараз відтворюється"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Змінити швидкість відтворення"
|
||||
|
||||
#: 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_rate.ui:86
|
||||
msgid "1.50×"
|
||||
msgstr "1,50×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:90
|
||||
msgid "1.5 speed rate"
|
||||
msgstr "Швидкість відтворення 1,5"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:104
|
||||
msgid "1.25×"
|
||||
msgstr "1,25×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:108
|
||||
msgid "1.25 speed rate"
|
||||
msgstr "Швидкість відтворення 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Звичайна швидкість"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "На 10 назад"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
msgid "Play"
|
||||
msgstr "Відтворити"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
msgid "Pause"
|
||||
msgstr "Пауза"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "На 10 секунд вперед"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "П_означити усі серії як відтворені"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:11
|
||||
msgid "_Website"
|
||||
msgstr "_Сайт"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:15
|
||||
msgid "_Unsubscribe"
|
||||
msgstr "_Відписатись"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:51
|
||||
msgid "Open Website"
|
||||
msgstr "Відкрити сайт"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:64
|
||||
msgid "Mark All as Played"
|
||||
msgstr "Позначити усе як відтворене"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:89
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Відписатися"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Дізнатися більше"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:287
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Отримання нових серій"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Створити"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:55
|
||||
msgid "Shows"
|
||||
msgstr "Шоу"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:398
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Виберіть файл, з якого ви хочете імпортувати шоу."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:401
|
||||
msgid "_Import"
|
||||
msgstr "_Імпортувати"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:410 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "файл OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Не вдалося обробити імпортований файл"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:432 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Не вдалося отримати доступ до вибраного файла."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Експортувати шоу до…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Експортувати"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Скасувати"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Підписки на подкасти GNOME"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Не вдалося експортувати подкасти"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:51
|
||||
msgid "Podcast Client for the GNOME Desktop."
|
||||
msgstr "Клієнт подкастів для стільниці GNOME."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:58
|
||||
msgid "Learn more about GNOME Podcasts"
|
||||
msgstr "Дізнатися більше про «Подкасти» GNOME"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
msgid "translator-credits"
|
||||
msgstr "Юрій Чорноіван <yurchor@ukr.net>"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:149
|
||||
msgid "{} min"
|
||||
msgstr "{} хв."
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:828
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Програвачеві мультимедійних даних не вдалося виконати цю дію."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Усі серії позначено як прослухані"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Скасовано підписку на {}"
|
||||
405
podcasts-gtk/po/zh_CN.po
Normal file
405
podcasts-gtk/po/zh_CN.po
Normal file
@ -0,0 +1,405 @@
|
||||
# Chinese (China) translation for podcasts.
|
||||
# Copyright (C) 2018 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Dingzhong Chen <wsxy162@gmail.com>, 2018.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2018-09-06 18:29+0000\n"
|
||||
"PO-Revision-Date: 2018-09-07 12:07+0800\n"
|
||||
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
|
||||
"Language: zh_CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Last-Translator: Dingzhong Chen <wsxy162@gmail.com>\n"
|
||||
"X-Generator: Gtranslator 2.91.7\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
msgstr "最后打开的主窗口顶部位置"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:19
|
||||
msgid "Left position of the last open main window"
|
||||
msgstr "最后打开的主窗口左侧位置"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:23
|
||||
msgid "Height of the last open main window"
|
||||
msgstr "最后打开的主窗口高度"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:27
|
||||
msgid "Width of the last open main window"
|
||||
msgstr "最后打开的主窗口宽度"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:31
|
||||
msgid "Maximized state of the last open main window"
|
||||
msgstr "最后打开的主窗口最大化状态"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:36
|
||||
msgid "Enable or disable dark theme"
|
||||
msgstr "启用或禁用暗色主题"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:41
|
||||
msgid "Whether to periodically refresh content"
|
||||
msgstr "是否定期刷新内容"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:46
|
||||
msgid "How many periods of time to wait between automatic refreshes"
|
||||
msgstr "自动刷新之间要等待多久的时间"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:50
|
||||
msgid "What period of time to wait between automatic refreshes"
|
||||
msgstr "自动刷新之间要等待的时间段"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:54
|
||||
msgid "Whether to refresh content after startup"
|
||||
msgstr "启动后是否刷新内容"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:60
|
||||
msgid "How many periods of time to wait between automatic cleanups"
|
||||
msgstr "自动清理之间要等待多久的时间"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:64
|
||||
msgid "What period of time to wait between automatic cleanups"
|
||||
msgstr "自动清理之间要等待的时间段"
|
||||
|
||||
#. 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:91 podcasts-gtk/src/app.rs:414
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:31
|
||||
msgid "Podcasts"
|
||||
msgstr "播客"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.desktop.in.in:4
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:10
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "直接在您的桌面上收听喜欢的播客。"
|
||||
|
||||
#. 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;"
|
||||
msgstr "Podcast;RSS;播客;订阅;聚合;"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:8
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "GNOME 的播客应用"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:51
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:46
|
||||
msgid "This show does not have episodes yet"
|
||||
msgstr "这个节目还没有剧集"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:62
|
||||
msgid "If you think this is an error, please consider writing a bug report."
|
||||
msgstr "如果您认为这是个错误,请考虑编写个缺陷报告。"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:106
|
||||
msgid "Get some shows"
|
||||
msgstr "获取节目"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:143
|
||||
msgid "Add new shows via feed URL"
|
||||
msgstr "通过订阅源 URL 添加新节目"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:172
|
||||
msgid "Import shows from another device"
|
||||
msgstr "从另一设备导入节目"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:178
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "正在计算剧集大小……"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:214
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:232
|
||||
msgid "Download this episode"
|
||||
msgstr "下载此剧集"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:256
|
||||
msgid "Play this episode"
|
||||
msgstr "播放此剧集"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:7
|
||||
msgid "_Check for New Episodes"
|
||||
msgstr "检查新剧集(_C)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:12
|
||||
msgid "_Import Shows"
|
||||
msgstr "导入节目(_I)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "首选项(_P)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:29
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "键盘快捷键(_K)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:37
|
||||
msgid "_About"
|
||||
msgstr "关于(_A)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "添加新订阅源"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:53
|
||||
msgid "Enter feed address to add"
|
||||
msgstr "输入要添加的订阅源地址"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:89
|
||||
msgid "Add"
|
||||
msgstr "添加"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "您已经订阅了那条订阅源!"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
msgid "Show Title"
|
||||
msgstr "显示标题"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "后退"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:12
|
||||
msgid "General"
|
||||
msgstr "常规"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:18
|
||||
msgctxt "shortcut window"
|
||||
msgid "Check for new episodes"
|
||||
msgstr "检查新剧集"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "首选项"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "退出程序"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:56
|
||||
msgid "Today"
|
||||
msgstr "今天"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:112
|
||||
msgid "Yesterday"
|
||||
msgstr "昨天"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:168
|
||||
msgid "This Week"
|
||||
msgstr "本周"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:224
|
||||
msgid "This Month"
|
||||
msgstr "本月"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:281
|
||||
msgid "Older"
|
||||
msgstr "更早"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/inapp_notif.ui:101
|
||||
msgid "An in-app action notification"
|
||||
msgstr "应用内操作通知"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/inapp_notif.ui:112
|
||||
msgid "Undo"
|
||||
msgstr "撤消"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "后退 10 秒"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "播放"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "暂停"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "快进 10 秒"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
msgid "Change the playback speed"
|
||||
msgstr "更改播放速度"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:300
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:380
|
||||
msgid "1.00×"
|
||||
msgstr "1.00×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:344
|
||||
msgid "1.50×"
|
||||
msgstr "1.50×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:348
|
||||
msgid "1.5 speed rate"
|
||||
msgstr "1.5 倍速率"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:362
|
||||
msgid "1.25×"
|
||||
msgstr "1.25×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:366
|
||||
msgid "1.25 speed rate"
|
||||
msgstr "1.25 倍速率"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "正常速度"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "首选项"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "外观"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "暗色主题"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "删除播放过的剧集"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "经过"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "标记所有剧集为已播放(_M)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:11
|
||||
msgid "_Website"
|
||||
msgstr "网站(_W)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:15
|
||||
msgid "_Unsubscribe"
|
||||
msgstr "退订(_U)"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:51
|
||||
msgid "Open Website"
|
||||
msgstr "打开网站"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:64
|
||||
msgid "Mark All as Played"
|
||||
msgstr "全部标记为已播放"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:89
|
||||
msgid "Unsubscribe"
|
||||
msgstr "退订"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:332
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "正在提取新剧集"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:98
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "您已经订阅了此节目"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:106
|
||||
msgid "Invalid URL"
|
||||
msgstr "无效的 URL"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:59
|
||||
msgid "Seconds"
|
||||
msgstr "秒"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:60
|
||||
msgid "Minutes"
|
||||
msgstr "分"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:61
|
||||
msgid "Hours"
|
||||
msgstr "小时"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:62
|
||||
msgid "Days"
|
||||
msgstr "天"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:63
|
||||
msgid "Weeks"
|
||||
msgstr "周"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:35
|
||||
msgid "New"
|
||||
msgstr "更新"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:36
|
||||
msgid "Shows"
|
||||
msgstr "节目"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:357
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "选择您想要从中导入节目的文件。"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:360
|
||||
msgid "_Import"
|
||||
msgstr "导入(_I)"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:369
|
||||
msgid "OPML file"
|
||||
msgstr "OPML 文件"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:386
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "解析导入文件失败"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:391
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "所选文件无法访问。"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:26
|
||||
msgid "Podcast Client for the GNOME Desktop."
|
||||
msgstr "GNOME 桌面的播客客户端。"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:33
|
||||
msgid "Learn more about GNOME Podcasts"
|
||||
msgstr "了解关于 GNOME 播客的更多信息"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:38
|
||||
msgid "translator-credits"
|
||||
msgstr "Dingzhong Chen <wsxy162@gmail.com>, 2018."
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:129
|
||||
msgid "{} min"
|
||||
msgstr "{} 分钟"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:301
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "媒体播放器无法执行此操作。"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:150
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "标记所有剧集为已听过"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:155
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "已退订 {}"
|
||||
@ -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>
|
||||
|
||||
@ -129,43 +129,52 @@ Tobias Bernard
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkHeaderBar" id="headerbar">
|
||||
<object class="HdyHeaderBar" id="headerbar">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_close_button">True</property>
|
||||
<property name="centering-policy">strict</property>
|
||||
<child type="title">
|
||||
<object class="GtkBox">
|
||||
<object class="GtkStack" id="title_stack">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="transition_type">crossfade</property>
|
||||
<child>
|
||||
<object class="GtkStackSwitcher" id="switch">
|
||||
<object class="HdySqueezer" id="switch_squeezer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="transition_type">crossfade</property>
|
||||
<child>
|
||||
<object class="HdyViewSwitcher" id="switch">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="policy">wide</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Podcasts</property>
|
||||
<style>
|
||||
<class name="title"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="show_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="label" translatable="yes">Show Title</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="track_visited_links">False</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
<style>
|
||||
<class name="title" />
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
306
podcasts-gtk/resources/gtk/player_dialog.ui
Normal file
306
podcasts-gtk/resources/gtk/player_dialog.ui
Normal file
@ -0,0 +1,306 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.22.1 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<requires lib="libhandy" version="0.0"/>
|
||||
<object class="HdyDialog" id="dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="modal">True</property>
|
||||
<child type="titlebar">
|
||||
<object class="HdyHeaderBar" id="headerbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Now Playing</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="close">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">go-previous-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">2</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_left">6</property>
|
||||
<property name="margin_right">6</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="margin_bottom">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">18</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="cover">
|
||||
<property name="width_request">256</property>
|
||||
<property name="height_request">256</property>
|
||||
<property name="margin">18</property>
|
||||
<property name="margin-top">36</property>
|
||||
<property name="margin-bottom">6</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="margin-start">6</property>
|
||||
<property name="margin-end">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="episode_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="label">Episode Title</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="justify">center</property>
|
||||
<style>
|
||||
<class name="bold-label" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="show_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="label">Show Title</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin-start">12</property>
|
||||
<property name="margin-end">12</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="progressed">
|
||||
<property name="visible">True</property>
|
||||
<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"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="slider">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="draw_value">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="duration">
|
||||
<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"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="rewind">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_request">60</property>
|
||||
<property name="height_request">60</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="margin-end">12</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">skip-back-large-symbolic</property>
|
||||
<property name="icon_size">5</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="circular"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStack" id="play_pause">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="play">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="width_request">80</property>
|
||||
<property name="height_request">80</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">media-playback-start-symbolic</property>
|
||||
<property name="icon_size">6</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="circular"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="pause">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_request">80</property>
|
||||
<property name="height_request">80</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">media-playback-pause-symbolic</property>
|
||||
<property name="icon_size">6</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="circular"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="forward">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="width_request">60</property>
|
||||
<property name="height_request">60</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="margin-start">12</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">skip-forward-large-symbolic</property>
|
||||
<property name="icon_size">5</property>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="circular"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="bottom">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
269
podcasts-gtk/resources/gtk/player_rate.ui
Normal file
269
podcasts-gtk/resources/gtk/player_rate.ui
Normal file
@ -0,0 +1,269 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.22.0
|
||||
|
||||
Copyright (C) 2017 - 2018
|
||||
|
||||
This file is part of GNOME Podcast.
|
||||
|
||||
GNOME Podcast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
GNOME Podcast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNOME Podcast. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Authors:
|
||||
Jordan Petridis
|
||||
Tobias Bernard
|
||||
|
||||
-->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.22"/>
|
||||
<object class="GtkMenuButton" id="rate_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Change the playback speed</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="margin_start">6</property>
|
||||
<property name="direction">up</property>
|
||||
<property name="popover">rate_popover</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="rate_label">
|
||||
<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>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">pan-down-symbolic</property>
|
||||
<property name="icon_size">1</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkPopover" id="rate_popover">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="relative_to">rate_button</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin">6</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">4.0 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">3.75 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">3.5 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">3.25 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">3.0 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">2.75 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">2.5 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">2.25 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<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="tooltip_text" translatable="yes">2.0 speed rate</property>
|
||||
<property name="role">radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<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>
|
||||
</interface>
|
||||
@ -54,344 +54,371 @@ Tobias Bernard
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">skip-back-symbolic</property>
|
||||
</object>
|
||||
<object class="GtkActionBar" id="action_bar">
|
||||
<object class="GtkBox" id="container">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">0</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="buttons">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">center</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="rewind_button">
|
||||
<property name="width_request">42</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Rewind 10 seconds</property>
|
||||
<property name="image">rewind</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="play_button">
|
||||
<property name="width_request">60</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Play</property>
|
||||
<property name="image">play_image</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="pause_button">
|
||||
<property name="width_request">60</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Pause</property>
|
||||
<property name="image">pause_image</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="ff_button">
|
||||
<property name="width_request">42</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Fast forward 10 seconds</property>
|
||||
<property name="image">fast_forward</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<object class="GtkProgressBar" id="progress_bar">
|
||||
<property name="no_show_all">True</property>
|
||||
<style>
|
||||
<class name="linked"/>
|
||||
<class name="playback-progress"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="info">
|
||||
<object class="GtkEventBox" id="evbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="show_cover">
|
||||
<property name="visible">True</property>
|
||||
<object class="GtkActionBar" id="action_bar">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="pixel_size">34</property>
|
||||
<property name="icon_name">image-x-generic-symbolic</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="show_label">
|
||||
<object class="HdySqueezer" id="squeezer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label">Show Title</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="max_width_chars">20</property>
|
||||
<style>
|
||||
<class name="player-show-label"/>
|
||||
</style>
|
||||
<property name="transition_type">crossfade</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="full">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="buttons">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">center</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="rewind_button">
|
||||
<property name="width_request">42</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Rewind 10 seconds</property>
|
||||
<property name="image">rewind</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="play_button">
|
||||
<property name="width_request">60</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Play</property>
|
||||
<property name="image">play_image</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="pause_button">
|
||||
<property name="width_request">60</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Pause</property>
|
||||
<property name="image">pause_image</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="ff_button">
|
||||
<property name="width_request">42</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Fast forward 10 seconds</property>
|
||||
<property name="image">fast_forward</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="linked"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="info">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="width_request">150</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="show_cover">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="pixel_size">34</property>
|
||||
<property name="icon_name">image-x-generic-symbolic</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="show_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label">Show Title</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="max_width_chars">20</property>
|
||||
<property name="xalign">0</property>
|
||||
<style>
|
||||
<class name="player-show-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="episode_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label">Episode Title</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="max_width_chars">20</property>
|
||||
<property name="xalign">0</property>
|
||||
<style>
|
||||
<class name="player-episode-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="seek">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="round_digits">1</property>
|
||||
<property name="draw_value">False</property>
|
||||
<property name="width_request">150</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="timer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="progress_time_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<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>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="separator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">/</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="total_duration_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<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>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="small">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="show_cover_small">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="pixel_size">34</property>
|
||||
<property name="icon_name">image-x-generic-symbolic</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="show_label_small">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label">Show Title</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<style>
|
||||
<class name="player-show-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="episode_label_small">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label">Episode Title</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<style>
|
||||
<class name="player-episode-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStack" id="play_pause_small">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="play_button_small">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">media-playback-start-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="pause_button_small">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="icon_name">media-playback-pause-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="episode_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="label">Episode Title</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="max_width_chars">20</property>
|
||||
<style>
|
||||
<class name="player-episode-label"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="player-actionbar"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="seek">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="round_digits">1</property>
|
||||
<property name="draw_value">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="timer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="progress_time_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">0:00</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="separator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">/</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="total_duration_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">0:00</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuButton" id="rate_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Change the playback speed</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="margin_start">6</property>
|
||||
<property name="direction">up</property>
|
||||
<property name="popover">rate_popover</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="rate_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">1.00×</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">go-down-symbolic</property>
|
||||
<property name="icon_size">1</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkPopover" id="rate_popover">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="relative_to">rate_button</property>
|
||||
<child>
|
||||
<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="orientation">vertical</property>
|
||||
<property name="spacing">3</property>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_1_50">
|
||||
<property name="label" translatable="yes">1.50×</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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="rate_1_25">
|
||||
<property name="label" translatable="yes">1.25×</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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="normal_rate">
|
||||
<property name="label" translatable="yes">1.00×</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>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@ -58,38 +58,78 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<object class="HdyColumn">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">never</property>
|
||||
<property name="min_content_height">80</property>
|
||||
<property name="maximum_width">600</property>
|
||||
<child>
|
||||
<object class="GtkViewport">
|
||||
<object class="GtkStack" id="description_stack">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="vhomogeneous">False</property>
|
||||
<property name="transition_type">none</property>
|
||||
<property name="interpolate_size">True</property>
|
||||
<property name="margin">12</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">fill</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="description_short">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="wrap_mode">word-char</property>
|
||||
<property name="ellipsize">end</property>
|
||||
<property name="lines">4</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="description_button_revealer">
|
||||
<property name="visible">True</property>
|
||||
<property name="reveal_child">False</property>
|
||||
<property name="transition_duration">1</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="description_button">
|
||||
<property name="label" translatable="yes">Read More</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="margin_top">12</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="name">short</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="description">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">This is embarrasing!
|
||||
Sorry, we could not find a description for this Show.</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">center</property>
|
||||
<property name="wrap">True</property>
|
||||
<property name="wrap_mode">word-char</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="name">full</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
|
||||
@ -18,3 +18,24 @@ list, border {
|
||||
.player-show-label {
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
.small-label {
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
.bold-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
progressbar.playback-progress trough {
|
||||
border-radius: 0;
|
||||
}
|
||||
progressbar.playback-progress trough progress {
|
||||
border-radius: 0;
|
||||
border-right: none;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
actionbar.player-small revealer box {
|
||||
border-top: none
|
||||
}
|
||||
|
||||
71
podcasts-gtk/resources/icons/skip-back-large-symbolic.svg
Normal file
71
podcasts-gtk/resources/icons/skip-back-large-symbolic.svg
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666665 8.4666669"
|
||||
version="1.1"
|
||||
id="svg2916"
|
||||
sodipodi:docname="skip-back-large-symbolic.svg"
|
||||
inkscape:version="0.92.4 (unknown)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="731"
|
||||
id="namedview11"
|
||||
showgrid="false"
|
||||
inkscape:zoom="7.375"
|
||||
inkscape:cx="16"
|
||||
inkscape:cy="16"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2916" />
|
||||
<defs
|
||||
id="defs2910" />
|
||||
<metadata
|
||||
id="metadata2913">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 4.2324219,1.3222656 a 0.26464845,0.26464845 0 1 0 0,0.5292969 C 5.3033196,1.8515612 6.2679165,2.4969489 6.6777344,3.4863281 7.0875525,4.4757119 6.8607584,5.6118992 6.1035156,6.3691406 5.3462755,7.1263812 4.2100855,7.3531746 3.2207031,6.9433594 2.2313192,6.5335432 1.5878886,5.5689483 1.5878906,4.4980469 a 0.2646484,0.2646484 0 1 0 -0.5292968,0 c -2.5e-6,1.28341 0.7732681,2.442454 1.9589843,2.9335937 1.1857144,0.4911386 2.5534315,0.2200067 3.4609375,-0.6875 C 7.3860249,5.836633 7.6571577,4.4689192 7.1660156,3.2832031 6.6748739,2.0974925 5.5158274,1.3222641 4.2324219,1.3222656 Z"
|
||||
id="path7994"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7996"
|
||||
d="M 4.2332975,0.794 V 1.05858 2.11691 2.3815 H 3.9687142 C 3.9164802,2.38149 3.8654129,2.366 3.8219524,2.3371 l -0.79375,-0.52916 c -0.157054,-0.10475 -0.157054,-0.33554 0,-0.44028 l 0.79375,-0.52917 c 0.043461,-0.029 0.094528,-0.0444 0.1467618,-0.0444 h 0.0031 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 2.6458333,5.8208334 h 1.400175 v -0.4699 h -0.42545 V 3.6173835 h -0.327025 l -0.758825,0.4381499 0.206375,0.3937 0.3302,-0.17145 v 1.07315 h -0.42545 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:3.17499995px;line-height:1.25;font-family:Cantarell;-inkscape-font-specification:'Cantarell Ultra-Bold';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.26458335"
|
||||
id="path5132" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 5.0778791,5.8525834 c 0.5588,0 0.936625,-0.4572 0.936625,-1.146175 0,-0.6731 -0.371475,-1.1207749 -0.92075,-1.1207749 -0.561975,0 -0.9398,0.4571999 -0.9398,1.1429999 0,0.6731 0.371475,1.12395 0.923925,1.12395 z m 0.0127,-0.4699 c -0.225425,0 -0.371475,-0.269875 -0.371475,-0.6731 0,-0.3937 0.14605,-0.65405 0.36195,-0.65405 0.219075,0 0.3683,0.269875 0.3683,0.676275 0,0.390525 -0.14605,0.650875 -0.358775,0.650875 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:3.17499995px;line-height:1.25;font-family:Cantarell;-inkscape-font-specification:'Cantarell Ultra-Bold';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.26458335"
|
||||
id="path5134" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
71
podcasts-gtk/resources/icons/skip-forward-large-symbolic.svg
Normal file
71
podcasts-gtk/resources/icons/skip-forward-large-symbolic.svg
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 8.4666665 8.4666669"
|
||||
version="1.1"
|
||||
id="svg2916"
|
||||
sodipodi:docname="skip-forward-large-symbolic.svg"
|
||||
inkscape:version="0.92.4 (unknown)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="731"
|
||||
id="namedview11"
|
||||
showgrid="false"
|
||||
inkscape:zoom="7.375"
|
||||
inkscape:cx="16"
|
||||
inkscape:cy="16"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2916" />
|
||||
<defs
|
||||
id="defs2910" />
|
||||
<metadata
|
||||
id="metadata2913">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 2.6458333,5.8208334 h 1.400175 v -0.4699 h -0.42545 V 3.6173835 h -0.327025 l -0.758825,0.4381499 0.206375,0.3937 0.3302,-0.17145 v 1.07315 h -0.42545 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:3.17499995px;line-height:1.25;font-family:Cantarell;-inkscape-font-specification:'Cantarell Ultra-Bold';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.26458335"
|
||||
id="path5132" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 5.0778791,5.8525834 c 0.5588,0 0.936625,-0.4572 0.936625,-1.146175 0,-0.6731 -0.371475,-1.1207749 -0.92075,-1.1207749 -0.561975,0 -0.9398,0.4571999 -0.9398,1.1429999 0,0.6731 0.371475,1.12395 0.923925,1.12395 z m 0.0127,-0.4699 c -0.225425,0 -0.371475,-0.269875 -0.371475,-0.6731 0,-0.3937 0.14605,-0.65405 0.36195,-0.65405 0.219075,0 0.3683,0.269875 0.3683,0.676275 0,0.390525 -0.14605,0.650875 -0.358775,0.650875 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:800;font-stretch:normal;font-size:3.17499995px;line-height:1.25;font-family:Cantarell;-inkscape-font-specification:'Cantarell Ultra-Bold';text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.26458335"
|
||||
id="path5134" />
|
||||
<path
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.52916664;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="M 4.2324219,1.3222656 C 2.9490163,1.3222641 1.7899699,2.0974925 1.2988281,3.2832031 0.80768607,4.4689192 1.080772,5.836633 1.9882812,6.7441406 c 0.9075061,0.9075067 2.2732701,1.1786386 3.4589844,0.6875 1.1857163,-0.4911397 1.96094,-1.6501837 1.9609375,-2.9335937 a 0.26464845,0.26464845 0 1 0 -0.5292969,0 C 6.8789083,5.5689483 6.2354777,6.5335432 5.2460938,6.9433594 4.2567114,7.3531746 3.1185682,7.1263812 2.3613281,6.3691406 1.6040853,5.6118992 1.3792443,4.4757119 1.7890625,3.4863281 2.1988804,2.4969489 3.1615242,1.8515612 4.2324219,1.8515625 a 0.26464845,0.26464845 0 1 0 0,-0.5292969 z"
|
||||
id="path5156"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="M 4.2327462,0.794 V 1.05858 2.11691 2.3815 h 0.2645833 c 0.052234,-1e-5 0.1033013,-0.0155 0.1467618,-0.0444 l 0.79375,-0.52916 c 0.157054,-0.10475 0.157054,-0.33554 0,-0.44028 l -0.79375,-0.52917 c -0.043461,-0.029 -0.094528,-0.0444 -0.1467618,-0.0444 h -0.0031 z"
|
||||
id="path5158" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
@ -24,6 +24,13 @@
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release version="0.4.7" date="2019-10-23">
|
||||
<description>
|
||||
<p>
|
||||
Small release including OPML export functionality, partial support for premium feeds, a couple of bugfixes and overall life improvements.
|
||||
</p>
|
||||
</description>
|
||||
</release>
|
||||
<release version="0.4.6" date="2018-10-07">
|
||||
<description>
|
||||
<p>
|
||||
@ -44,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>
|
||||
|
||||
@ -11,8 +11,12 @@
|
||||
<file compressed="true" preprocess="xml-stripblanks">gtk/hamburger.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">gtk/show_menu.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">gtk/help-overlay.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">gtk/player_dialog.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">gtk/player_rate.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">gtk/player_toolbar.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">icons/skip-back-large-symbolic.svg</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">icons/skip-back-symbolic.svg</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">icons/skip-forward-large-symbolic.svg</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">icons/skip-forward-symbolic.svg</file>
|
||||
<file compressed="true">gtk/style.css</file>
|
||||
</gresource>
|
||||
|
||||
@ -17,11 +17,11 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#![allow(clippy::new_without_default)]
|
||||
|
||||
#![allow(new_without_default)]
|
||||
|
||||
use glib::subclass;
|
||||
use glib::clone;
|
||||
use glib::subclass::prelude::*;
|
||||
use glib::subclass::simple::{ClassStruct, InstanceStruct};
|
||||
use glib::translate::*;
|
||||
use glib::{glib_object_impl, glib_object_subclass, glib_object_wrapper, glib_wrapper};
|
||||
|
||||
@ -35,7 +35,7 @@ use gettextrs::{bindtextdomain, setlocale, textdomain, LocaleCategory};
|
||||
|
||||
use crossbeam_channel::Receiver;
|
||||
use fragile::Fragile;
|
||||
use podcasts_data::Show;
|
||||
use podcasts_data::{Show, Source};
|
||||
|
||||
use crate::settings;
|
||||
use crate::stacks::PopulatedState;
|
||||
@ -59,8 +59,8 @@ pub struct PdApplicationPrivate {
|
||||
impl ObjectSubclass for PdApplicationPrivate {
|
||||
const NAME: &'static str = "PdApplication";
|
||||
type ParentType = gtk::Application;
|
||||
type Instance = subclass::simple::InstanceStruct<Self>;
|
||||
type Class = subclass::simple::ClassStruct<Self>;
|
||||
type Instance = InstanceStruct<Self>;
|
||||
type Class = ClassStruct<Self>;
|
||||
|
||||
glib_object_subclass!();
|
||||
|
||||
@ -95,7 +95,10 @@ impl gio::subclass::prelude::ApplicationImpl for PdApplicationPrivate {
|
||||
window.present();
|
||||
self.window.replace(Some(window));
|
||||
// Setup the Action channel
|
||||
gtk::timeout_add(25, clone!(app => move || app.setup_action_channel()));
|
||||
gtk::timeout_add(
|
||||
25,
|
||||
clone!(@strong app => move || app.setup_action_channel()),
|
||||
);
|
||||
}
|
||||
|
||||
fn startup(&self, app: &gio::Application) {
|
||||
@ -119,7 +122,7 @@ impl gio::subclass::prelude::ApplicationImpl for PdApplicationPrivate {
|
||||
impl gtk::subclass::application::GtkApplicationImpl for PdApplicationPrivate {}
|
||||
|
||||
glib_wrapper! {
|
||||
pub struct PdApplication(Object<subclass::simple::InstanceStruct<PdApplicationPrivate>, subclass::simple::ClassStruct<PdApplicationPrivate>, PdApplicationClass>) @extends gio::Application, gtk::Application;
|
||||
pub struct PdApplication(Object<InstanceStruct<PdApplicationPrivate>, ClassStruct<PdApplicationPrivate>, PdApplicationClass>) @extends gio::Application, gtk::Application;
|
||||
|
||||
match fn {
|
||||
get_type => || PdApplicationPrivate::get_type().to_glib(),
|
||||
@ -139,7 +142,9 @@ pub(crate) enum Action {
|
||||
HeaderBarShowTile(String),
|
||||
HeaderBarNormal,
|
||||
MarkAllPlayerNotification(Arc<Show>),
|
||||
UpdateFeed(Option<Vec<Source>>),
|
||||
ShowUpdateNotif(Receiver<bool>),
|
||||
StopUpdating,
|
||||
RemoveShow(Arc<Show>),
|
||||
ErrorNotification(String),
|
||||
InitEpisode(i32),
|
||||
@ -249,6 +254,17 @@ impl PdApplication {
|
||||
let notif = InAppNotification::new(&err, 6000, callback, undo_cb);
|
||||
notif.show(&window.overlay);
|
||||
}
|
||||
Action::UpdateFeed(source) => {
|
||||
if window.updating.get() {
|
||||
info!("Ignoring feed update request (another one is already running)")
|
||||
} else {
|
||||
window.updating.set(true);
|
||||
utils::refresh_feed(source, window.sender.clone())
|
||||
}
|
||||
}
|
||||
Action::StopUpdating => {
|
||||
window.updating.set(false);
|
||||
}
|
||||
Action::ShowUpdateNotif(receiver) => {
|
||||
let sender = window.sender.clone();
|
||||
let callback = move |revealer: gtk::Revealer| match receiver.try_recv() {
|
||||
@ -256,9 +272,15 @@ impl PdApplication {
|
||||
Err(TryRecvError::Disconnected) => glib::Continue(false),
|
||||
Ok(_) => {
|
||||
revealer.set_reveal_child(false);
|
||||
|
||||
sender
|
||||
.send(Action::StopUpdating)
|
||||
.expect("Action channel blew up somehow");
|
||||
|
||||
sender
|
||||
.send(Action::RefreshAllViews)
|
||||
.expect("Action channel blew up somehow");
|
||||
|
||||
glib::Continue(false)
|
||||
}
|
||||
};
|
||||
@ -270,6 +292,7 @@ impl PdApplication {
|
||||
|
||||
let old = window.updater.replace(Some(updater));
|
||||
old.map(|i| i.destroy());
|
||||
|
||||
window
|
||||
.updater
|
||||
.borrow()
|
||||
|
||||
@ -18,8 +18,11 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use gio;
|
||||
use glib::clone;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
use libhandy;
|
||||
use libhandy::prelude::*;
|
||||
|
||||
use crossbeam_channel::Sender;
|
||||
use failure::Error;
|
||||
@ -30,7 +33,7 @@ use podcasts_data::{dbqueries, Source};
|
||||
|
||||
use crate::app::Action;
|
||||
use crate::stacks::Content;
|
||||
use crate::utils::{itunes_to_rss, refresh};
|
||||
use crate::utils::{itunes_to_rss, schedule_refresh};
|
||||
|
||||
use std::rc::Rc;
|
||||
|
||||
@ -39,9 +42,12 @@ use crate::i18n::i18n;
|
||||
#[derive(Debug, Clone)]
|
||||
// TODO: Make a proper state machine for the headerbar states
|
||||
pub(crate) struct Header {
|
||||
pub(crate) container: gtk::HeaderBar,
|
||||
pub(crate) switch: gtk::StackSwitcher,
|
||||
pub(crate) container: libhandy::HeaderBar,
|
||||
pub(crate) switch: libhandy::ViewSwitcher,
|
||||
pub(crate) bottom_switcher: libhandy::ViewSwitcherBar,
|
||||
switch_squeezer: libhandy::Squeezer,
|
||||
back: gtk::Button,
|
||||
title_stack: gtk::Stack,
|
||||
show_title: gtk::Label,
|
||||
hamburger: gtk::MenuButton,
|
||||
add: AddPopover,
|
||||
@ -78,9 +84,9 @@ impl AddPopover {
|
||||
url.to_owned()
|
||||
};
|
||||
|
||||
rayon::spawn(clone!(sender => move || {
|
||||
rayon::spawn(clone!(@strong sender => move || {
|
||||
if let Ok(source) = Source::from_url(&url) {
|
||||
refresh(Some(vec![source]), sender.clone());
|
||||
schedule_refresh(Some(vec![source]), sender.clone());
|
||||
} else {
|
||||
error!("Failed to convert, url: {}, to a source entry", url);
|
||||
}
|
||||
@ -169,8 +175,10 @@ impl Default for Header {
|
||||
let menus = gtk::Builder::new_from_resource("/org/gnome/Podcasts/gtk/hamburger.ui");
|
||||
|
||||
let header = builder.get_object("headerbar").unwrap();
|
||||
let switch = builder.get_object("switch").unwrap();
|
||||
let switch: libhandy::ViewSwitcher = builder.get_object("switch").unwrap();
|
||||
let back = builder.get_object("back").unwrap();
|
||||
let title_stack = builder.get_object("title_stack").unwrap();
|
||||
let switch_squeezer: libhandy::Squeezer = builder.get_object("switch_squeezer").unwrap();
|
||||
let show_title = builder.get_object("show_title").unwrap();
|
||||
|
||||
// The hamburger menu
|
||||
@ -192,10 +200,17 @@ impl Default for Header {
|
||||
add: add_button,
|
||||
};
|
||||
|
||||
// View switcher bar that goes at the bottom of the window
|
||||
let switcher = libhandy::ViewSwitcherBar::new();
|
||||
switcher.set_reveal(false);
|
||||
|
||||
Header {
|
||||
container: header,
|
||||
switch,
|
||||
back,
|
||||
title_stack,
|
||||
switch_squeezer,
|
||||
bottom_switcher: switcher,
|
||||
show_title,
|
||||
hamburger,
|
||||
add,
|
||||
@ -213,43 +228,57 @@ impl Header {
|
||||
}
|
||||
|
||||
pub(crate) fn init(s: &Rc<Self>, content: &Content, sender: &Sender<Action>) {
|
||||
let weak = Rc::downgrade(s);
|
||||
|
||||
s.bottom_switcher.set_stack(Some(&content.get_stack()));
|
||||
s.switch.set_stack(Some(&content.get_stack()));
|
||||
|
||||
s.add.entry.connect_changed(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|h| {
|
||||
h.add.on_entry_changed()
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
.ok();
|
||||
});
|
||||
s.add.entry.connect_changed(clone!(@weak s => move |_| {
|
||||
s.add.on_entry_changed()
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
.ok();
|
||||
}));
|
||||
|
||||
s.add.add.connect_clicked(clone!(weak, sender => move |_| {
|
||||
weak.upgrade().map(|h| h.add.on_add_clicked(&sender));
|
||||
}));
|
||||
s.add
|
||||
.add
|
||||
.connect_clicked(clone!(@weak s, @strong sender => move |_| {
|
||||
s.add.on_add_clicked(&sender).unwrap();
|
||||
}));
|
||||
|
||||
s.back.connect_clicked(clone!(weak, sender => move |_| {
|
||||
weak.upgrade().map(|h| h.switch_to_normal());
|
||||
sender.send(Action::ShowShowsAnimated).expect("Action channel blew up somehow");
|
||||
}));
|
||||
s.add
|
||||
.entry
|
||||
.connect_activate(clone!(@weak s, @strong sender => move |_| {
|
||||
if s.add.add.get_sensitive() {
|
||||
s.add.on_add_clicked(&sender).unwrap();
|
||||
}
|
||||
}));
|
||||
|
||||
s.back
|
||||
.connect_clicked(clone!(@weak s, @strong sender => move |_| {
|
||||
s.switch_to_normal();
|
||||
sender.send(Action::ShowShowsAnimated).expect("Action channel blew up somehow");
|
||||
}));
|
||||
|
||||
s.switch_squeezer
|
||||
.connect_property_visible_child_notify(clone!(@weak s => move |_| {
|
||||
s.update_bottom_switcher();
|
||||
}));
|
||||
s.update_bottom_switcher();
|
||||
}
|
||||
|
||||
pub(crate) fn switch_to_back(&self, title: &str) {
|
||||
self.switch.hide();
|
||||
self.add.toggle.hide();
|
||||
self.back.show();
|
||||
self.set_show_title(title);
|
||||
self.show_title.show();
|
||||
self.title_stack.set_visible_child(&self.show_title);
|
||||
self.bottom_switcher.set_reveal(false);
|
||||
self.hamburger.hide();
|
||||
self.dots.show();
|
||||
}
|
||||
|
||||
pub(crate) fn switch_to_normal(&self) {
|
||||
self.switch.show();
|
||||
self.add.toggle.show();
|
||||
self.back.hide();
|
||||
self.show_title.hide();
|
||||
self.title_stack.set_visible_child(&self.switch_squeezer);
|
||||
self.update_bottom_switcher();
|
||||
self.hamburger.show();
|
||||
self.dots.hide();
|
||||
}
|
||||
@ -265,4 +294,10 @@ impl Header {
|
||||
pub(crate) fn set_secondary_menu(&self, pop: >k::PopoverMenu) {
|
||||
self.dots.set_popover(Some(pop));
|
||||
}
|
||||
|
||||
fn update_bottom_switcher(&self) {
|
||||
if let Some(child) = self.switch_squeezer.get_visible_child() {
|
||||
self.bottom_switcher.set_reveal(child != self.switch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,11 +17,12 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#![cfg_attr(
|
||||
feature = "cargo-clippy",
|
||||
allow(clone_on_ref_ptr, blacklisted_name, match_same_arms,)
|
||||
#![allow(
|
||||
clippy::clone_on_ref_ptr,
|
||||
clippy::blacklisted_name,
|
||||
clippy::match_same_arms,
|
||||
unknown_lints
|
||||
)]
|
||||
#![allow(unknown_lints)]
|
||||
// Enable lint group collections
|
||||
#![warn(nonstandard_style, edition_2018, rust_2018_idioms, bad_style, unused)]
|
||||
// standalone lints
|
||||
@ -59,25 +60,6 @@ use log::Level;
|
||||
|
||||
use gtk::prelude::*;
|
||||
|
||||
// https://gtk-rs.org/docs-src/tutorial/closures
|
||||
#[macro_export]
|
||||
macro_rules! clone {
|
||||
(@param _) => ( _ );
|
||||
(@param $x:ident) => ( $x );
|
||||
($($n:ident),+ => move || $body:expr) => (
|
||||
{
|
||||
$( let $n = $n.clone(); )+
|
||||
move || $body
|
||||
}
|
||||
);
|
||||
($($n:ident),+ => move |$($p:tt),+| $body:expr) => (
|
||||
{
|
||||
$( let $n = $n.clone(); )+
|
||||
move |$(clone!(@param $p),)+| $body
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
mod stacks;
|
||||
mod widgets;
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -81,11 +81,21 @@ impl WindowGeometry {
|
||||
}
|
||||
|
||||
pub(crate) fn write(&self, settings: &gio::Settings) {
|
||||
settings.set_int("persist-window-geometry-left", self.left);
|
||||
settings.set_int("persist-window-geometry-top", self.top);
|
||||
settings.set_int("persist-window-geometry-width", self.width);
|
||||
settings.set_int("persist-window-geometry-height", self.height);
|
||||
settings.set_boolean("persist-window-geometry-maximized", self.is_maximized);
|
||||
settings
|
||||
.set_int("persist-window-geometry-left", self.left)
|
||||
.unwrap();
|
||||
settings
|
||||
.set_int("persist-window-geometry-top", self.top)
|
||||
.unwrap();
|
||||
settings
|
||||
.set_int("persist-window-geometry-width", self.width)
|
||||
.unwrap();
|
||||
settings
|
||||
.set_int("persist-window-geometry-height", self.height)
|
||||
.unwrap();
|
||||
settings
|
||||
.set_boolean("persist-window-geometry-maximized", self.is_maximized)
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -54,6 +54,15 @@ impl Content {
|
||||
stack.add_titled(&home.borrow().get_stack(), "home", &i18n("New"));
|
||||
stack.add_titled(&shows.borrow().get_stack(), "shows", &i18n("Shows"));
|
||||
|
||||
stack.set_child_icon_name(
|
||||
&home.borrow().get_stack(),
|
||||
Some("document-open-recent-symbolic"),
|
||||
);
|
||||
stack.set_child_icon_name(
|
||||
&shows.borrow().get_stack(),
|
||||
Some("audio-input-microphone-symbolic"),
|
||||
);
|
||||
|
||||
let con = Content {
|
||||
stack,
|
||||
shows,
|
||||
|
||||
@ -90,7 +90,7 @@ impl PopulatedStack {
|
||||
|
||||
pub(crate) fn replace_shows(&mut self) -> Result<(), Error> {
|
||||
let old = &self.populated.view.container().clone();
|
||||
debug!("Name: {:?}", WidgetExt::get_name(old));
|
||||
debug!("Name: {:?}", old.get_widget_name());
|
||||
|
||||
let vadj = self.populated.view.get_vadjustment();
|
||||
let pop = ShowsView::new(self.sender.clone(), vadj);
|
||||
|
||||
@ -17,8 +17,8 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use gio::{resources_register, Error, Resource};
|
||||
use glib::Bytes;
|
||||
use gio::{resources_register, Resource};
|
||||
use glib::{Error, Bytes};
|
||||
|
||||
pub(crate) fn init() -> Result<(), Error> {
|
||||
// load the gresource binary at build time and include/link it into the final
|
||||
|
||||
@ -17,13 +17,15 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#![cfg_attr(feature = "cargo-clippy", allow(type_complexity))]
|
||||
#![allow(clippy::type_complexity)]
|
||||
|
||||
use gdk_pixbuf::{Object, Pixbuf};
|
||||
use gdk_pixbuf::Pixbuf;
|
||||
use glib::clone;
|
||||
use glib::{self, object::WeakRef};
|
||||
use glib::{IsA, Object};
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
use gtk::{IsA, Widget};
|
||||
use gtk::Widget;
|
||||
|
||||
use chrono::prelude::*;
|
||||
use crossbeam_channel::{bounded, unbounded, Sender};
|
||||
@ -86,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,
|
||||
@ -102,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();
|
||||
};
|
||||
@ -115,7 +117,7 @@ pub(crate) fn lazy_load<T, C, F, W, U>(
|
||||
/// This is a more flexible version of `lazy_load` with less constrains.
|
||||
/// If you just want to lazy add `widgets` to a `container` check if
|
||||
/// `lazy_load` fits your needs first.
|
||||
#[cfg_attr(feature = "cargo-clippy", allow(redundant_closure))]
|
||||
#[allow(clippy::redundant_closure)]
|
||||
pub(crate) fn lazy_load_full<T, F, U>(data: T, mut func: F, finish_callback: U)
|
||||
where
|
||||
T: IntoIterator + 'static,
|
||||
@ -137,7 +139,7 @@ where
|
||||
|
||||
// Kudos to Julian Sparber
|
||||
// https://blogs.gnome.org/jsparber/2018/04/29/animate-a-scrolledwindow/
|
||||
#[cfg_attr(feature = "cargo-clippy", allow(float_cmp))]
|
||||
#[allow(clippy::float_cmp)]
|
||||
pub(crate) fn smooth_scroll_to(view: >k::ScrolledWindow, target: >k::Adjustment) {
|
||||
if let Some(adj) = view.get_vadjustment() {
|
||||
if let Some(clock) = view.get_frame_clock() {
|
||||
@ -182,7 +184,7 @@ pub(crate) fn ignore_show(id: i32) -> Result<bool, Error> {
|
||||
.map_err(|err| format_err!("{}", err))
|
||||
}
|
||||
|
||||
pub(crate) fn uningore_show(id: i32) -> Result<bool, Error> {
|
||||
pub(crate) fn unignore_show(id: i32) -> Result<bool, Error> {
|
||||
IGNORESHOWS
|
||||
.lock()
|
||||
.map(|mut guard| guard.remove(&id))
|
||||
@ -202,10 +204,10 @@ pub(crate) fn cleanup(cleanup_date: DateTime<Utc>) {
|
||||
.ok();
|
||||
}
|
||||
|
||||
pub(crate) fn refresh<S>(source: Option<S>, sender: Sender<Action>)
|
||||
where
|
||||
S: IntoIterator<Item = Source> + Send + 'static,
|
||||
{
|
||||
/// Schedule feed refresh
|
||||
/// If `source` is None, Refreshes all sources in the database.
|
||||
/// Current implementation ignores update request if another update is already running
|
||||
pub(crate) fn schedule_refresh(source: Option<Vec<Source>>, sender: Sender<Action>) {
|
||||
// If we try to update the whole db,
|
||||
// Exit early if `source` table is empty
|
||||
if source.is_none() {
|
||||
@ -219,15 +221,16 @@ where
|
||||
};
|
||||
}
|
||||
|
||||
refresh_feed(source, sender)
|
||||
sender
|
||||
.send(Action::UpdateFeed(source))
|
||||
.expect("Action channel blew up somehow")
|
||||
}
|
||||
|
||||
/// Update the rss feed(s) originating from `source`.
|
||||
/// If `source` is None, Fetches all the `Source` entries in the database and updates them.
|
||||
fn refresh_feed<S>(source: Option<S>, sender: Sender<Action>)
|
||||
where
|
||||
S: IntoIterator<Item = Source> + Send + 'static,
|
||||
{
|
||||
/// Do not call this function directly unless you are sure no other updates are running.
|
||||
/// Use `schedule_refresh()` instead
|
||||
pub(crate) fn refresh_feed(source: Option<Vec<Source>>, sender: Sender<Action>) {
|
||||
rayon::spawn(move || {
|
||||
let (up_sender, up_receiver) = bounded(1);
|
||||
sender
|
||||
@ -298,7 +301,7 @@ pub(crate) fn set_image_from_path(
|
||||
// If it fails another download will be scheduled.
|
||||
if let Ok(guard) = COVER_DL_REGISTRY.read() {
|
||||
if guard.contains(&show_id) {
|
||||
let callback = clone!(image => move || {
|
||||
let callback = clone!(@weak image => @default-return glib::Continue(false), move || {
|
||||
let _ = set_image_from_path(&image, show_id, size);
|
||||
glib::Continue(false)
|
||||
});
|
||||
@ -388,7 +391,6 @@ fn lookup_id(id: u32) -> Result<String, Error> {
|
||||
}
|
||||
|
||||
pub(crate) fn on_import_clicked(window: >k::ApplicationWindow, sender: &Sender<Action>) {
|
||||
use glib::translate::ToGlib;
|
||||
use gtk::{FileChooserAction, FileChooserNative, FileFilter, ResponseType};
|
||||
|
||||
// Create the FileChooser Dialog
|
||||
@ -412,18 +414,18 @@ pub(crate) fn on_import_clicked(window: >k::ApplicationWindow, sender: &Sender
|
||||
|
||||
let resp = dialog.run();
|
||||
debug!("Dialog Response {}", resp);
|
||||
if resp == ResponseType::Accept.to_glib() {
|
||||
if resp == ResponseType::Accept {
|
||||
if let Some(filename) = dialog.get_filename() {
|
||||
debug!("File selected: {:?}", filename);
|
||||
|
||||
rayon::spawn(clone!(sender => move || {
|
||||
rayon::spawn(clone!(@strong sender => move || {
|
||||
// Parse the file and import the feeds
|
||||
if let Ok(sources) = opml::import_from_file(filename) {
|
||||
// Refresh the successfully parsed feeds to index them
|
||||
refresh(Some(sources), sender)
|
||||
schedule_refresh(Some(sources), sender)
|
||||
} else {
|
||||
let text = i18n("Failed to parse the imported file");
|
||||
sender.send(Action::ErrorNotification(text)).expect("Action channel blew up somehow");;
|
||||
sender.send(Action::ErrorNotification(text)).expect("Action channel blew up somehow");
|
||||
}
|
||||
}))
|
||||
} else {
|
||||
@ -436,7 +438,6 @@ pub(crate) fn on_import_clicked(window: >k::ApplicationWindow, sender: &Sender
|
||||
}
|
||||
|
||||
pub(crate) fn on_export_clicked(window: >k::ApplicationWindow, sender: &Sender<Action>) {
|
||||
use glib::translate::ToGlib;
|
||||
use gtk::{FileChooserAction, FileChooserNative, FileFilter, ResponseType};
|
||||
|
||||
// Create the FileChooser Dialog
|
||||
@ -460,11 +461,11 @@ pub(crate) fn on_export_clicked(window: >k::ApplicationWindow, sender: &Sender
|
||||
|
||||
let resp = dialog.run();
|
||||
debug!("Dialog Response {}", resp);
|
||||
if resp == ResponseType::Accept.to_glib() {
|
||||
if resp == ResponseType::Accept {
|
||||
if let Some(filename) = dialog.get_filename() {
|
||||
debug!("File selected: {:?}", filename);
|
||||
|
||||
rayon::spawn(clone!(sender => move || {
|
||||
rayon::spawn(clone!(@strong sender => move || {
|
||||
if opml::export_from_db(filename, i18n("GNOME Podcasts Subscriptions").as_str()).is_err() {
|
||||
let text = i18n("Failed to export podcasts");
|
||||
sender.send(Action::ErrorNotification(text)).expect("Action channel blew up somehow");
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -67,7 +67,7 @@ impl BaseView {
|
||||
self.scrolled_window.add(widget);
|
||||
}
|
||||
|
||||
pub(crate) fn set_adjutments<'a, 'b>(
|
||||
pub(crate) fn set_adjustments<'a, 'b>(
|
||||
&self,
|
||||
hadjustment: Option<&'a Adjustment>,
|
||||
vadjustment: Option<&'b Adjustment>,
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
@ -235,16 +236,18 @@ impl EpisodeWidget {
|
||||
let widget = Rc::new(Self::default());
|
||||
let episode = RefCell::new(Some(episode));
|
||||
let weak = Rc::downgrade(&widget);
|
||||
widget.container.connect_draw(clone!(sender => move |_, _| {
|
||||
episode.borrow_mut().take().map(|ep| {
|
||||
weak.upgrade().map(|w| w.info.init(&ep));
|
||||
Self::determine_buttons_state(&weak, &ep, &sender)
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
.ok();
|
||||
});
|
||||
widget
|
||||
.container
|
||||
.connect_draw(clone!(@strong sender => move |_, _| {
|
||||
episode.borrow_mut().take().map(|ep| {
|
||||
weak.upgrade().map(|w| w.info.init(&ep));
|
||||
Self::determine_buttons_state(&weak, &ep, &sender)
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
.ok();
|
||||
});
|
||||
|
||||
gtk::Inhibit(false)
|
||||
}));
|
||||
gtk::Inhibit(false)
|
||||
}));
|
||||
|
||||
// When the widget is attached to a parent,
|
||||
// since it's a rust struct and not a widget the
|
||||
@ -372,7 +375,7 @@ impl EpisodeWidget {
|
||||
// State: InProgress
|
||||
if let Some(prog) = active_dl()? {
|
||||
// set a callback that will update the state when the download finishes
|
||||
let callback = clone!(weak, sender => move || {
|
||||
let callback = clone!(@strong weak, @strong sender => move || {
|
||||
if let Ok(guard) = manager::ACTIVE_DOWNLOADS.read() {
|
||||
if !guard.contains_key(&id) {
|
||||
if let Ok(ep) = dbqueries::get_episode_widget_from_rowid(id) {
|
||||
@ -393,14 +396,14 @@ impl EpisodeWidget {
|
||||
widget
|
||||
.buttons
|
||||
.cancel
|
||||
.connect_clicked(clone!(prog, weak, sender => move |_| {
|
||||
.connect_clicked(clone!(@strong prog, @strong weak, @strong sender => move |_| {
|
||||
// Cancel the download
|
||||
if let Ok(mut m) = prog.lock() {
|
||||
m.cancel();
|
||||
}
|
||||
|
||||
// Cancel is not instant so we have to wait a bit
|
||||
timeout_add(50, clone!(weak, sender => move || {
|
||||
timeout_add(50, clone!(@strong weak, @strong sender => move || {
|
||||
if let Ok(thing) = active_dl() {
|
||||
if thing.is_none() {
|
||||
// Recalculate the widget state
|
||||
@ -441,7 +444,7 @@ impl EpisodeWidget {
|
||||
widget
|
||||
.buttons
|
||||
.play
|
||||
.connect_clicked(clone!(weak, sender => move |_| {
|
||||
.connect_clicked(clone!(@strong weak, @strong sender => move |_| {
|
||||
if let Ok(mut ep) = dbqueries::get_episode_widget_from_rowid(id) {
|
||||
on_play_bttn_clicked(&weak, &mut ep, &sender)
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
@ -457,7 +460,7 @@ impl EpisodeWidget {
|
||||
widget
|
||||
.buttons
|
||||
.download
|
||||
.connect_clicked(clone!(weak, sender => move |dl| {
|
||||
.connect_clicked(clone!(@strong weak, @strong sender => move |dl| {
|
||||
// Make the button insensitive so it won't be pressed twice
|
||||
dl.set_sensitive(false);
|
||||
if let Ok(ep) = dbqueries::get_episode_widget_from_rowid(id) {
|
||||
@ -491,7 +494,7 @@ fn on_download_clicked(ep: &EpisodeWidgetModel, sender: &Sender<Action>) -> Resu
|
||||
// Update Views
|
||||
sender
|
||||
.send(Action::RefreshEpisodesViewBGR)
|
||||
.expect("Action channel blew up somehow");;
|
||||
.expect("Action channel blew up somehow");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -512,30 +515,30 @@ fn on_play_bttn_clicked(
|
||||
// Play the episode
|
||||
sender
|
||||
.send(Action::InitEpisode(episode.rowid()))
|
||||
.expect("Action channel blew up somehow");;
|
||||
.expect("Action channel blew up somehow");
|
||||
// Refresh background views to match the normal/greyout title state
|
||||
sender
|
||||
.send(Action::RefreshEpisodesViewBGR)
|
||||
.expect("Action channel blew up somehow");;
|
||||
.expect("Action channel blew up somehow");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Setup a callback that will update the progress bar.
|
||||
#[inline]
|
||||
#[cfg_attr(feature = "cargo-clippy", allow(if_same_then_else))]
|
||||
#[allow(clippy::if_same_then_else)]
|
||||
fn update_progressbar_callback(
|
||||
widget: &Weak<EpisodeWidget>,
|
||||
prog: &Arc<Mutex<manager::Progress>>,
|
||||
episode_rowid: i32,
|
||||
) {
|
||||
let callback = clone!(widget, prog => move || {
|
||||
let callback = clone!(@strong widget,@strong prog => move || {
|
||||
progress_bar_helper(&widget, &prog, episode_rowid)
|
||||
.unwrap_or(glib::Continue(false))
|
||||
});
|
||||
timeout_add(100, callback);
|
||||
}
|
||||
|
||||
#[allow(if_same_then_else)]
|
||||
#[allow(clippy::if_same_then_else)]
|
||||
fn progress_bar_helper(
|
||||
widget: &Weak<EpisodeWidget>,
|
||||
prog: &Arc<Mutex<manager::Progress>>,
|
||||
@ -602,7 +605,7 @@ fn progress_bar_helper(
|
||||
// relying to the RSS feed.
|
||||
#[inline]
|
||||
fn update_total_size_callback(widget: &Weak<EpisodeWidget>, prog: &Arc<Mutex<manager::Progress>>) {
|
||||
let callback = clone!(prog, widget => move || {
|
||||
let callback = clone!(@strong prog, @strong widget => move || {
|
||||
total_size_helper(&widget, &prog).unwrap_or(glib::Continue(true))
|
||||
});
|
||||
timeout_add(100, callback);
|
||||
|
||||
@ -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_adjutments(None, Some(v))
|
||||
home.view.set_adjustments(None, Some(v))
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
lazy_load_full(episodes, func, callback);
|
||||
home.view.container().show_all();
|
||||
|
||||
@ -22,7 +22,11 @@ use gst::ClockTime;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
use libhandy as hdy;
|
||||
use libhandy::prelude::*;
|
||||
|
||||
use gio::{File, FileExt};
|
||||
use glib::clone;
|
||||
use glib::{SignalHandlerId, WeakRef};
|
||||
|
||||
use chrono::{prelude::*, NaiveTime};
|
||||
@ -70,11 +74,29 @@ struct PlayerInfo {
|
||||
show: gtk::Label,
|
||||
episode: gtk::Label,
|
||||
cover: gtk::Image,
|
||||
show_small: gtk::Label,
|
||||
episode_small: gtk::Label,
|
||||
cover_small: gtk::Image,
|
||||
mpris: Arc<MprisPlayer>,
|
||||
episode_id: RefCell<Option<i32>>,
|
||||
}
|
||||
|
||||
impl PlayerInfo {
|
||||
fn create_bindings(&self) {
|
||||
self.show
|
||||
.bind_property("label", &self.show_small, "label")
|
||||
.flags(glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
self.episode
|
||||
.bind_property("label", &self.episode_small, "label")
|
||||
.flags(glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
self.cover
|
||||
.bind_property("pixbuf", &self.cover_small, "pixbuf")
|
||||
.flags(glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
}
|
||||
|
||||
// FIXME: create a Diesel Model of the joined episode and podcast query instead
|
||||
fn init(&self, episode: &EpisodeWidgetModel, podcast: &ShowCoverModel) {
|
||||
self.episode_id.replace(Some(episode.rowid()));
|
||||
@ -118,6 +140,7 @@ struct PlayerTimes {
|
||||
separator: gtk::Label,
|
||||
slider: gtk::Scale,
|
||||
slider_update: Rc<SignalHandlerId>,
|
||||
progress_bar: gtk::ProgressBar,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
@ -150,6 +173,8 @@ impl PlayerTimes {
|
||||
self.slider.unblock_signal(&self.slider_update);
|
||||
|
||||
self.duration.set_text(&format_duration(seconds as u32));
|
||||
|
||||
self.update_progress_bar();
|
||||
}
|
||||
|
||||
/// Update the `gtk::Scale` bar when the pipeline position is changed.
|
||||
@ -161,6 +186,13 @@ impl PlayerTimes {
|
||||
self.slider.unblock_signal(&self.slider_update);
|
||||
|
||||
self.progressed.set_text(&format_duration(seconds as u32));
|
||||
|
||||
self.update_progress_bar();
|
||||
}
|
||||
|
||||
fn update_progress_bar(&self) {
|
||||
let fraction = self.slider.get_value() / self.slider.get_adjustment().get_upper();
|
||||
self.progress_bar.set_fraction(fraction);
|
||||
}
|
||||
}
|
||||
|
||||
@ -176,29 +208,231 @@ fn format_duration(seconds: u32) -> String {
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct PlayerRate {
|
||||
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,
|
||||
}
|
||||
|
||||
impl PlayerRate {
|
||||
fn new() -> Self {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/Podcasts/gtk/player_rate.ui");
|
||||
|
||||
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,
|
||||
radio225,
|
||||
radio200,
|
||||
radio175,
|
||||
radio150,
|
||||
radio125,
|
||||
radio_normal,
|
||||
popover,
|
||||
label,
|
||||
btn,
|
||||
}
|
||||
}
|
||||
|
||||
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_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.00);
|
||||
}));
|
||||
self.radio125
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.25);
|
||||
}));
|
||||
self.radio150
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.50);
|
||||
}));
|
||||
self.radio175
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(1.75);
|
||||
}));
|
||||
self.radio200
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.00);
|
||||
}));
|
||||
self.radio225
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.25);
|
||||
}));
|
||||
self.radio250
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.50);
|
||||
}));
|
||||
self.radio275
|
||||
.connect_clicked(clone!(@weak widget => move |_| {
|
||||
widget.on_rate_changed(2.75);
|
||||
}));
|
||||
self.radio300
|
||||
.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);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct PlayerControls {
|
||||
container: gtk::Box,
|
||||
play: gtk::Button,
|
||||
pause: gtk::Button,
|
||||
play_small: gtk::Button,
|
||||
pause_small: gtk::Button,
|
||||
play_pause_small: gtk::Stack,
|
||||
forward: gtk::Button,
|
||||
rewind: gtk::Button,
|
||||
last_pause: RefCell<Option<DateTime<Local>>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct PlayerDialog {
|
||||
dialog: hdy::Dialog,
|
||||
close: gtk::Button,
|
||||
headerbar: hdy::HeaderBar,
|
||||
cover: gtk::Image,
|
||||
play_pause: gtk::Stack,
|
||||
play: gtk::Button,
|
||||
pause: gtk::Button,
|
||||
duration: gtk::Label,
|
||||
progressed: gtk::Label,
|
||||
slider: gtk::Scale,
|
||||
forward: gtk::Button,
|
||||
rewind: gtk::Button,
|
||||
rate: PlayerRate,
|
||||
show: gtk::Label,
|
||||
episode: gtk::Label,
|
||||
}
|
||||
|
||||
impl PlayerDialog {
|
||||
fn new(rate: PlayerRate) -> Self {
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/Podcasts/gtk/player_dialog.ui");
|
||||
let dialog = builder.get_object("dialog").unwrap();
|
||||
|
||||
let close = builder.get_object("close").unwrap();
|
||||
let headerbar = builder.get_object("headerbar").unwrap();
|
||||
let cover = builder.get_object("cover").unwrap();
|
||||
let play_pause = builder.get_object("play_pause").unwrap();
|
||||
let play = builder.get_object("play").unwrap();
|
||||
let pause = builder.get_object("pause").unwrap();
|
||||
let duration = builder.get_object("duration").unwrap();
|
||||
let progressed = builder.get_object("progressed").unwrap();
|
||||
let slider = builder.get_object("slider").unwrap();
|
||||
let rewind = builder.get_object("rewind").unwrap();
|
||||
let forward = builder.get_object("forward").unwrap();
|
||||
let bottom: gtk::Box = builder.get_object("bottom").unwrap();
|
||||
let show = builder.get_object("show_label").unwrap();
|
||||
let episode = builder.get_object("episode_label").unwrap();
|
||||
|
||||
bottom.pack_start(&rate.btn, false, true, 0);
|
||||
|
||||
PlayerDialog {
|
||||
dialog,
|
||||
close,
|
||||
headerbar,
|
||||
cover,
|
||||
play_pause,
|
||||
play,
|
||||
pause,
|
||||
duration,
|
||||
progressed,
|
||||
slider,
|
||||
forward,
|
||||
rewind,
|
||||
rate,
|
||||
show,
|
||||
episode,
|
||||
}
|
||||
}
|
||||
|
||||
fn initialize_episode(&self, episode: &EpisodeWidgetModel, show: &ShowCoverModel) {
|
||||
self.episode.set_text(episode.title());
|
||||
self.show.set_text(show.title());
|
||||
|
||||
set_image_from_path(&self.cover, show.id(), 256)
|
||||
.map_err(|err| error!("Player Cover: {}", err))
|
||||
.ok();
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub(crate) struct PlayerWidget {
|
||||
pub(crate) action_bar: gtk::ActionBar,
|
||||
pub(crate) container: gtk::Box,
|
||||
action_bar: gtk::ActionBar,
|
||||
evbox: gtk::EventBox,
|
||||
player: gst_player::Player,
|
||||
controls: PlayerControls,
|
||||
dialog: PlayerDialog,
|
||||
full: gtk::Box,
|
||||
squeezer: hdy::Squeezer,
|
||||
timer: PlayerTimes,
|
||||
info: PlayerInfo,
|
||||
rate: PlayerRate,
|
||||
@ -213,6 +447,10 @@ impl Default for PlayerWidget {
|
||||
Some(&dispatcher.upcast::<gst_player::PlayerSignalDispatcher>()),
|
||||
);
|
||||
|
||||
// A few podcasts have a video track of the thumbnail, which GStreamer displays in a new
|
||||
// window. Make sure it doesn't do that.
|
||||
player.set_video_track_enabled(false);
|
||||
|
||||
let mpris = MprisPlayer::new(
|
||||
APP_ID.to_string(),
|
||||
"GNOME Podcasts".to_string(),
|
||||
@ -229,18 +467,23 @@ impl Default for PlayerWidget {
|
||||
player.set_config(config).unwrap();
|
||||
|
||||
let builder = gtk::Builder::new_from_resource("/org/gnome/Podcasts/gtk/player_toolbar.ui");
|
||||
let action_bar = builder.get_object("action_bar").unwrap();
|
||||
|
||||
let buttons = builder.get_object("buttons").unwrap();
|
||||
let play = builder.get_object("play_button").unwrap();
|
||||
let pause = builder.get_object("pause_button").unwrap();
|
||||
let play_small = builder.get_object("play_button_small").unwrap();
|
||||
let pause_small = builder.get_object("pause_button_small").unwrap();
|
||||
let forward: gtk::Button = builder.get_object("ff_button").unwrap();
|
||||
let rewind: gtk::Button = builder.get_object("rewind_button").unwrap();
|
||||
let play_pause_small = builder.get_object("play_pause_small").unwrap();
|
||||
|
||||
let controls = PlayerControls {
|
||||
container: buttons,
|
||||
play,
|
||||
pause,
|
||||
play_small,
|
||||
pause_small,
|
||||
play_pause_small,
|
||||
forward,
|
||||
rewind,
|
||||
last_pause: RefCell::new(None),
|
||||
@ -254,6 +497,7 @@ impl Default for PlayerWidget {
|
||||
slider.set_range(0.0, 1.0);
|
||||
let player_weak = player.downgrade();
|
||||
let slider_update = Rc::new(Self::connect_update_slider(&slider, player_weak));
|
||||
let progress_bar = builder.get_object("progress_bar").unwrap();
|
||||
let timer = PlayerTimes {
|
||||
container: timer_container,
|
||||
progressed,
|
||||
@ -261,40 +505,50 @@ impl Default for PlayerWidget {
|
||||
separator,
|
||||
slider,
|
||||
slider_update,
|
||||
progress_bar,
|
||||
};
|
||||
|
||||
let labels = builder.get_object("info").unwrap();
|
||||
let show = builder.get_object("show_label").unwrap();
|
||||
let episode = builder.get_object("episode_label").unwrap();
|
||||
let cover = builder.get_object("show_cover").unwrap();
|
||||
let show_small = builder.get_object("show_label_small").unwrap();
|
||||
let episode_small = builder.get_object("episode_label_small").unwrap();
|
||||
let cover_small = builder.get_object("show_cover_small").unwrap();
|
||||
let info = PlayerInfo {
|
||||
mpris,
|
||||
container: labels,
|
||||
show,
|
||||
episode,
|
||||
cover,
|
||||
show_small,
|
||||
episode_small,
|
||||
cover_small,
|
||||
episode_id: RefCell::new(None),
|
||||
};
|
||||
info.create_bindings();
|
||||
|
||||
let radio150 = builder.get_object("rate_1_50").unwrap();
|
||||
let radio125 = builder.get_object("rate_1_25").unwrap();
|
||||
let radio_normal = 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();
|
||||
let rate = PlayerRate {
|
||||
radio150,
|
||||
radio125,
|
||||
radio_normal,
|
||||
popover,
|
||||
label,
|
||||
btn,
|
||||
};
|
||||
let dialog_rate = PlayerRate::new();
|
||||
let dialog = PlayerDialog::new(dialog_rate);
|
||||
|
||||
let container = builder.get_object("container").unwrap();
|
||||
let action_bar: gtk::ActionBar = builder.get_object("action_bar").unwrap();
|
||||
let evbox = builder.get_object("evbox").unwrap();
|
||||
let full: gtk::Box = builder.get_object("full").unwrap();
|
||||
let squeezer = builder.get_object("squeezer").unwrap();
|
||||
|
||||
let rate = PlayerRate::new();
|
||||
full.pack_end(&rate.btn, false, true, 0);
|
||||
|
||||
PlayerWidget {
|
||||
player,
|
||||
container,
|
||||
action_bar,
|
||||
evbox,
|
||||
controls,
|
||||
dialog,
|
||||
full,
|
||||
squeezer,
|
||||
timer,
|
||||
info,
|
||||
rate,
|
||||
@ -305,7 +559,8 @@ impl Default for PlayerWidget {
|
||||
impl PlayerWidget {
|
||||
fn on_rate_changed(&self, rate: f64) {
|
||||
self.set_playback_rate(rate);
|
||||
self.rate.label.set_text(&format!("{:.2}×", rate));
|
||||
self.rate.set_rate(rate);
|
||||
self.dialog.rate.set_rate(rate);
|
||||
}
|
||||
|
||||
fn reveal(&self) {
|
||||
@ -316,6 +571,8 @@ impl PlayerWidget {
|
||||
let ep = dbqueries::get_episode_widget_from_rowid(rowid)?;
|
||||
let pd = dbqueries::get_podcast_cover_from_id(ep.show_id())?;
|
||||
|
||||
self.dialog.initialize_episode(&ep, &pd);
|
||||
|
||||
self.info.init(&ep, &pd);
|
||||
// Currently that will always be the case since the play button is
|
||||
// only shown if the file is downloaded
|
||||
@ -327,8 +584,10 @@ impl PlayerWidget {
|
||||
let uri = File::new_for_path(path).get_uri();
|
||||
// play the file
|
||||
self.player.set_uri(uri.as_str());
|
||||
self.rate.radio_normal.set_active(true);
|
||||
self.rate.set_rate(1.0);
|
||||
self.dialog.rate.set_rate(1.0);
|
||||
self.play();
|
||||
|
||||
return Ok(());
|
||||
}
|
||||
// TODO: log an error
|
||||
@ -387,10 +646,15 @@ impl PlayerWidget {
|
||||
|
||||
impl PlayerExt for PlayerWidget {
|
||||
fn play(&self) {
|
||||
self.dialog.play_pause.set_visible_child(&self.dialog.pause);
|
||||
|
||||
self.reveal();
|
||||
|
||||
self.controls.pause.show();
|
||||
self.controls.play.hide();
|
||||
self.controls
|
||||
.play_pause_small
|
||||
.set_visible_child(&self.controls.pause_small);
|
||||
|
||||
self.smart_rewind();
|
||||
self.player.play();
|
||||
@ -398,8 +662,13 @@ impl PlayerExt for PlayerWidget {
|
||||
}
|
||||
|
||||
fn pause(&self) {
|
||||
self.dialog.play_pause.set_visible_child(&self.dialog.play);
|
||||
|
||||
self.controls.pause.hide();
|
||||
self.controls.play.show();
|
||||
self.controls
|
||||
.play_pause_small
|
||||
.set_visible_child(&self.controls.play_small);
|
||||
|
||||
self.player.pause();
|
||||
self.info.mpris.set_playback_status(PlaybackStatus::Paused);
|
||||
@ -409,6 +678,7 @@ impl PlayerExt for PlayerWidget {
|
||||
|
||||
#[cfg_attr(rustfmt, rustfmt_skip)]
|
||||
fn stop(&self) {
|
||||
|
||||
self.controls.pause.hide();
|
||||
self.controls.play.show();
|
||||
|
||||
@ -491,36 +761,142 @@ impl PlayerWrapper {
|
||||
self.connect_rate_buttons();
|
||||
self.connect_mpris_buttons(sender);
|
||||
self.connect_gst_signals(sender);
|
||||
self.connect_dialog();
|
||||
}
|
||||
|
||||
fn connect_dialog(&self) {
|
||||
let this = self.deref();
|
||||
self.squeezer
|
||||
.connect_property_visible_child_notify(clone!(@weak this => move |_| {
|
||||
if let Some(child) = this.squeezer.get_visible_child() {
|
||||
let full = child == this.full;
|
||||
this.timer.progress_bar.set_visible(!full);
|
||||
if full {
|
||||
this.action_bar.get_style_context().remove_class("player-small");
|
||||
} else {
|
||||
this.action_bar.get_style_context().add_class("player-small");
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
self.timer
|
||||
.duration
|
||||
.bind_property("label", &self.dialog.duration, "label")
|
||||
.flags(glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
self.timer
|
||||
.progressed
|
||||
.bind_property("label", &self.dialog.progressed, "label")
|
||||
.flags(glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
self.dialog
|
||||
.slider
|
||||
.set_adjustment(&self.timer.slider.get_adjustment());
|
||||
|
||||
self.evbox.connect_button_press_event(
|
||||
clone!(@weak this => @default-return Inhibit(false), move |_, event| {
|
||||
if event.get_button() != 1 {
|
||||
return Inhibit(false);
|
||||
}
|
||||
// only open the dialog when the small toolbar is visible
|
||||
if let Some(child) = this.squeezer.get_visible_child() {
|
||||
if child == this.full {
|
||||
return Inhibit(false);
|
||||
}
|
||||
}
|
||||
|
||||
let parent = this.container.get_toplevel().and_then(|toplevel| {
|
||||
toplevel
|
||||
.downcast::<gtk::Window>()
|
||||
.ok()
|
||||
}).unwrap();
|
||||
|
||||
info!("showing dialog");
|
||||
this.dialog.dialog.set_transient_for(Some(&parent));
|
||||
this.dialog.dialog.show();
|
||||
|
||||
Inhibit(false)
|
||||
}),
|
||||
);
|
||||
|
||||
self.dialog
|
||||
.close
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.dialog.dialog.hide();
|
||||
}));
|
||||
}
|
||||
|
||||
/// Connect the `PlayerControls` buttons to the `PlayerExt` methods.
|
||||
fn connect_control_buttons(&self) {
|
||||
let weak = Rc::downgrade(self);
|
||||
|
||||
let this = self.deref();
|
||||
// Connect the play button to the gst Player.
|
||||
self.controls.play.connect_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.play());
|
||||
}));
|
||||
self.controls
|
||||
.play
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.play();
|
||||
}));
|
||||
|
||||
// Connect the pause button to the gst Player.
|
||||
self.controls
|
||||
.pause
|
||||
.connect_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.pause());
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.pause();
|
||||
}));
|
||||
|
||||
// Connect the play button to the gst Player.
|
||||
self.controls
|
||||
.play_small
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.play();
|
||||
}));
|
||||
|
||||
// Connect the pause button to the gst Player.
|
||||
self.controls
|
||||
.pause_small
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.pause();
|
||||
}));
|
||||
|
||||
// Connect the rewind button to the gst Player.
|
||||
self.controls
|
||||
.rewind
|
||||
.connect_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.rewind());
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.rewind();
|
||||
}));
|
||||
|
||||
// Connect the fast-forward button to the gst Player.
|
||||
self.controls
|
||||
.forward
|
||||
.connect_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.fast_forward());
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.fast_forward();
|
||||
}));
|
||||
|
||||
// Connect the play button to the gst Player.
|
||||
self.dialog
|
||||
.play
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.play();
|
||||
}));
|
||||
|
||||
// Connect the pause button to the gst Player.
|
||||
self.dialog
|
||||
.pause
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.pause();
|
||||
}));
|
||||
|
||||
// Connect the rewind button to the gst Player.
|
||||
self.dialog
|
||||
.rewind
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.rewind();
|
||||
}));
|
||||
|
||||
// Connect the fast-forward button to the gst Player.
|
||||
self.dialog
|
||||
.forward
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.fast_forward();
|
||||
}));
|
||||
}
|
||||
|
||||
@ -530,7 +906,7 @@ impl PlayerWrapper {
|
||||
self.player.connect_warning(move |_, warn| warn!("gst warning: {}", warn));
|
||||
|
||||
// Log gst errors.
|
||||
self.player.connect_error(clone!(sender => move |_, _error| {
|
||||
self.player.connect_error(clone!(@strong sender => move |_, _error| {
|
||||
// sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
let s = i18n("The media player was unable to execute an action.");
|
||||
sender.send(Action::ErrorNotification(s)).expect("Action channel blew up somehow");
|
||||
@ -540,21 +916,21 @@ impl PlayerWrapper {
|
||||
let weak = Fragile::new(Rc::downgrade(self));
|
||||
|
||||
// Update the duration label and the slider
|
||||
self.player.connect_duration_changed(clone!(weak => move |_, clock| {
|
||||
self.player.connect_duration_changed(clone!(@strong weak => move |_, clock| {
|
||||
weak.get()
|
||||
.upgrade()
|
||||
.map(|p| p.timer.on_duration_changed(Duration(clock)));
|
||||
}));
|
||||
|
||||
// Update the position label and the slider
|
||||
self.player.connect_position_updated(clone!(weak => move |_, clock| {
|
||||
self.player.connect_position_updated(clone!(@strong weak => move |_, clock| {
|
||||
weak.get()
|
||||
.upgrade()
|
||||
.map(|p| p.timer.on_position_updated(Position(clock)));
|
||||
}));
|
||||
|
||||
// Reset the slider to 0 and show a play button
|
||||
self.player.connect_end_of_stream(clone!(weak => move |_| {
|
||||
self.player.connect_end_of_stream(clone!(@strong weak => move |_| {
|
||||
weak.get()
|
||||
.upgrade()
|
||||
.map(|p| p.stop());
|
||||
@ -563,25 +939,8 @@ impl PlayerWrapper {
|
||||
|
||||
#[cfg_attr(rustfmt, rustfmt_skip)]
|
||||
fn connect_rate_buttons(&self) {
|
||||
let weak = Rc::downgrade(self);
|
||||
|
||||
self.rate
|
||||
.radio_normal
|
||||
.connect_toggled(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.on_rate_changed(1.00));
|
||||
}));
|
||||
|
||||
self.rate
|
||||
.radio125
|
||||
.connect_toggled(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.on_rate_changed(1.25));
|
||||
}));
|
||||
|
||||
self.rate
|
||||
.radio150
|
||||
.connect_toggled(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.on_rate_changed(1.50));
|
||||
}));
|
||||
self.rate.connect_signals(self);
|
||||
self.dialog.rate.connect_signals(self);
|
||||
}
|
||||
|
||||
fn connect_mpris_buttons(&self, sender: &Sender<Action>) {
|
||||
@ -589,49 +948,60 @@ impl PlayerWrapper {
|
||||
|
||||
// FIXME: Reference cycle with mpris
|
||||
let mpris = self.info.mpris.clone();
|
||||
self.info.mpris.connect_play_pause(clone!(weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
};
|
||||
|
||||
if let Ok(status) = mpris.get_playback_status() {
|
||||
match status.as_ref() {
|
||||
"Paused" => player.play(),
|
||||
"Stopped" => player.play(),
|
||||
_ => player.pause(),
|
||||
self.info
|
||||
.mpris
|
||||
.connect_play_pause(clone!(@strong weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
};
|
||||
}
|
||||
}));
|
||||
|
||||
self.info.mpris.connect_play(clone!(weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
};
|
||||
if let Ok(status) = mpris.get_playback_status() {
|
||||
match status.as_ref() {
|
||||
"Paused" => player.play(),
|
||||
"Stopped" => player.play(),
|
||||
_ => player.pause(),
|
||||
};
|
||||
}
|
||||
}));
|
||||
self.info
|
||||
.mpris
|
||||
.connect_play(clone!(@strong weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
};
|
||||
|
||||
player.play();
|
||||
}));
|
||||
player.play();
|
||||
}));
|
||||
|
||||
self.info.mpris.connect_pause(clone!(weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
};
|
||||
self.info
|
||||
.mpris
|
||||
.connect_pause(clone!(@strong weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
};
|
||||
|
||||
player.pause();
|
||||
}));
|
||||
player.pause();
|
||||
}));
|
||||
|
||||
self.info.mpris.connect_next(clone!(weak => move || {
|
||||
weak.upgrade().map(|p| p.fast_forward());
|
||||
}));
|
||||
self.info
|
||||
.mpris
|
||||
.connect_next(clone!(@strong weak => move || {
|
||||
weak.upgrade().map(|p| p.fast_forward());
|
||||
}));
|
||||
|
||||
self.info.mpris.connect_previous(clone!(weak => move || {
|
||||
weak.upgrade().map(|p| p.rewind());
|
||||
}));
|
||||
self.info
|
||||
.mpris
|
||||
.connect_previous(clone!(@strong weak => move || {
|
||||
weak.upgrade().map(|p| p.rewind());
|
||||
}));
|
||||
|
||||
self.info.mpris.connect_raise(clone!(sender => move || {
|
||||
sender.send(Action::RaiseWindow).expect("Action channel blew up somehow");
|
||||
}));
|
||||
self.info
|
||||
.mpris
|
||||
.connect_raise(clone!(@strong sender => move || {
|
||||
sender.send(Action::RaiseWindow).expect("Action channel blew up somehow");
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk::{self, prelude::*, Adjustment};
|
||||
|
||||
use crossbeam_channel::{bounded, Sender};
|
||||
@ -43,6 +44,10 @@ pub(crate) struct ShowWidget {
|
||||
pub(crate) view: BaseView,
|
||||
cover: gtk::Image,
|
||||
description: gtk::Label,
|
||||
description_short: gtk::Label,
|
||||
description_stack: gtk::Stack,
|
||||
description_button: gtk::Button,
|
||||
description_button_revealer: gtk::Revealer,
|
||||
episodes: gtk::ListBox,
|
||||
show_id: Option<i32>,
|
||||
}
|
||||
@ -53,6 +58,11 @@ impl Default for ShowWidget {
|
||||
let sub_cont: gtk::Box = builder.get_object("sub_container").unwrap();
|
||||
let cover: gtk::Image = builder.get_object("cover").unwrap();
|
||||
let description: gtk::Label = builder.get_object("description").unwrap();
|
||||
let description_short: gtk::Label = builder.get_object("description_short").unwrap();
|
||||
let description_stack: gtk::Stack = builder.get_object("description_stack").unwrap();
|
||||
let description_button: gtk::Button = builder.get_object("description_button").unwrap();
|
||||
let description_button_revealer =
|
||||
builder.get_object("description_button_revealer").unwrap();
|
||||
let episodes = builder.get_object("episodes").unwrap();
|
||||
let view = BaseView::default();
|
||||
|
||||
@ -71,6 +81,10 @@ impl Default for ShowWidget {
|
||||
view,
|
||||
cover,
|
||||
description,
|
||||
description_short,
|
||||
description_stack,
|
||||
description_button,
|
||||
description_button_revealer,
|
||||
episodes,
|
||||
show_id: None,
|
||||
}
|
||||
@ -95,6 +109,16 @@ impl ShowWidget {
|
||||
let res = populate_listbox(&pdw, pd.clone(), sender, vadj);
|
||||
debug_assert!(res.is_ok());
|
||||
|
||||
pdw.description_short
|
||||
.connect_size_allocate(clone!(@weak pdw => move |_, _2| {
|
||||
pdw.update_read_more();
|
||||
}));
|
||||
|
||||
pdw.description_button
|
||||
.connect_clicked(clone!(@weak pdw => move |_| {
|
||||
pdw.description_stack.set_visible_child_name("full");
|
||||
}));
|
||||
|
||||
pdw
|
||||
}
|
||||
|
||||
@ -111,10 +135,31 @@ impl ShowWidget {
|
||||
utils::set_image_from_path(&self.cover, pd.id(), 256)
|
||||
}
|
||||
|
||||
fn update_read_more(&self) {
|
||||
if let Some(layout) = self.description_short.get_layout() {
|
||||
let more = layout.is_ellipsized()
|
||||
|| self.description.get_label() != self.description_short.get_label();
|
||||
self.description_button_revealer.set_reveal_child(more);
|
||||
}
|
||||
}
|
||||
|
||||
/// Set the description text.
|
||||
fn set_description(&self, text: &str) {
|
||||
self.description
|
||||
.set_markup(html2text::from_read(text.as_bytes(), 80).trim());
|
||||
let markup = html2text::from_read(text.as_bytes(), text.as_bytes().len());
|
||||
let markup = markup.trim();
|
||||
let lines: Vec<&str> = markup.lines().collect();
|
||||
|
||||
if markup.is_empty() {
|
||||
self.description_stack.set_visible(false);
|
||||
} else {
|
||||
self.description_stack.set_visible(true);
|
||||
|
||||
self.description.set_markup(markup);
|
||||
debug_assert!(lines.len() > 0);
|
||||
if lines.len() > 0 {
|
||||
self.description_short.set_markup(lines[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn show_id(&self) -> Option<i32> {
|
||||
@ -134,7 +179,7 @@ fn populate_listbox(
|
||||
let count = dbqueries::get_pd_episodes_count(&pd)?;
|
||||
|
||||
let (sender_, receiver) = bounded(1);
|
||||
rayon::spawn(clone!(pd => move || {
|
||||
rayon::spawn(clone!(@strong pd => move || {
|
||||
if let Ok(episodes) = dbqueries::get_pd_episodeswidgets(&pd) {
|
||||
// The receiver can be dropped if there's an early return
|
||||
// like on show without episodes for example.
|
||||
@ -159,13 +204,13 @@ fn populate_listbox(
|
||||
|
||||
debug_assert!(episodes.len() as i64 == count);
|
||||
|
||||
let constructor = clone!(sender => move |ep| {
|
||||
let constructor = clone!(@strong sender => move |ep| {
|
||||
EpisodeWidget::new(ep, &sender).container.clone()
|
||||
});
|
||||
|
||||
let callback = clone!(show_weak, vadj => move || {
|
||||
let callback = clone!(@strong show_weak, @strong vadj => move || {
|
||||
match (show_weak.upgrade(), &vadj) {
|
||||
(Some(ref shows), Some(ref v)) => shows.view.set_adjutments(None, Some(v)),
|
||||
(Some(ref shows), Some(ref v)) => shows.view.set_adjustments(None, Some(v)),
|
||||
_ => (),
|
||||
};
|
||||
});
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
@ -78,7 +79,7 @@ impl ShowMenu {
|
||||
|
||||
fn connect_website(&self, pd: &Arc<Show>) {
|
||||
self.website.set_tooltip_text(Some(pd.link()));
|
||||
self.website.connect_clicked(clone!(pd => move |_| {
|
||||
self.website.connect_clicked(clone!(@strong pd => move |_| {
|
||||
let link = pd.link();
|
||||
info!("Opening link: {}", link);
|
||||
let res = open::that(link);
|
||||
@ -87,13 +88,7 @@ impl ShowMenu {
|
||||
}
|
||||
|
||||
fn connect_played(&self, pd: &Arc<Show>, episodes: >k::ListBox, sender: &Sender<Action>) {
|
||||
let episodes_weak = episodes.downgrade();
|
||||
self.played.connect_clicked(clone!(pd, sender => move |_| {
|
||||
let episodes = match episodes_weak.upgrade() {
|
||||
Some(e) => e,
|
||||
None => return,
|
||||
};
|
||||
|
||||
self.played.connect_clicked(clone!(@strong pd, @strong sender, @weak episodes => move |_| {
|
||||
let res = dim_titles(&episodes);
|
||||
debug_assert!(res.is_some());
|
||||
|
||||
@ -103,7 +98,7 @@ impl ShowMenu {
|
||||
|
||||
fn connect_unsub(&self, pd: &Arc<Show>, sender: &Sender<Action>) {
|
||||
self.unsub
|
||||
.connect_clicked(clone!(pd, sender => move |unsub| {
|
||||
.connect_clicked(clone!(@strong pd, @strong sender => move |unsub| {
|
||||
// hack to get away without properly checking for none.
|
||||
// if pressed twice would panic.
|
||||
unsub.set_sensitive(false);
|
||||
@ -173,7 +168,7 @@ pub(crate) fn mark_all_notif(pd: Arc<Show>, sender: &Sender<Action>) -> InAppNot
|
||||
glib::Continue(false)
|
||||
};
|
||||
|
||||
let undo_callback = clone!(sender => move || {
|
||||
let undo_callback = clone!(@strong sender => move || {
|
||||
sender.send(Action::RefreshWidgetIfSame(id)).expect("Action channel blew up somehow")
|
||||
});
|
||||
let text = i18n("Marked all episodes as listened");
|
||||
@ -189,11 +184,11 @@ pub(crate) fn remove_show_notif(pd: Arc<Show>, sender: Sender<Action>) -> InAppN
|
||||
let sender_ = sender.clone();
|
||||
let pd_ = pd.clone();
|
||||
let callback = move |revealer: gtk::Revealer| {
|
||||
let res = utils::uningore_show(pd_.id());
|
||||
let res = utils::unignore_show(pd_.id());
|
||||
debug_assert!(res.is_ok());
|
||||
|
||||
// Spawn a thread so it won't block the ui.
|
||||
rayon::spawn(clone!(pd_, sender_ => move || {
|
||||
rayon::spawn(clone!(@strong pd_, @strong sender_ => move || {
|
||||
delete_show(&pd_)
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
.map_err(|_| error!("Failed to delete {}", pd_.title()))
|
||||
@ -207,7 +202,7 @@ pub(crate) fn remove_show_notif(pd: Arc<Show>, sender: Sender<Action>) -> InAppN
|
||||
};
|
||||
|
||||
let undo_callback = move || {
|
||||
let res = utils::uningore_show(pd.id());
|
||||
let res = utils::unignore_show(pd.id());
|
||||
debug_assert!(res.is_ok());
|
||||
sender
|
||||
.send(Action::RefreshShowsView)
|
||||
|
||||
@ -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_adjutments(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(())
|
||||
@ -100,7 +99,8 @@ fn populate_flowbox(shows: &Rc<ShowsView>, vadj: Option<Adjustment>) -> Result<(
|
||||
|
||||
fn on_child_activate(child: >k::FlowBoxChild, sender: &Sender<Action>) -> Result<(), Error> {
|
||||
// This is such an ugly hack...
|
||||
let id = WidgetExt::get_name(child)
|
||||
let id = child
|
||||
.get_widget_name()
|
||||
.ok_or_else(|| format_err!("Failed to get \"episodes\" child from the stack."))?
|
||||
.parse::<i32>()?;
|
||||
let pd = Arc::new(dbqueries::get_podcast_from_id(id)?);
|
||||
@ -148,7 +148,7 @@ impl ShowsChild {
|
||||
|
||||
fn init(&self, pd: &Show) {
|
||||
self.child.set_tooltip_text(Some(pd.title()));
|
||||
WidgetExt::set_name(&self.child, &pd.id().to_string());
|
||||
self.child.set_widget_name(&pd.id().to_string());
|
||||
|
||||
self.set_cover(pd.id())
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use glib::Variant;
|
||||
|
||||
use gio::{self, prelude::*, ActionMapExt, SettingsExt};
|
||||
@ -36,7 +37,7 @@ use crate::widgets::about_dialog;
|
||||
use crate::widgets::appnotif::InAppNotification;
|
||||
use crate::widgets::player;
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::ops::Deref;
|
||||
use std::rc::Rc;
|
||||
|
||||
@ -47,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);
|
||||
@ -65,6 +66,7 @@ pub struct MainWindow {
|
||||
pub(crate) content: Rc<Content>,
|
||||
pub(crate) headerbar: Rc<Header>,
|
||||
pub(crate) player: player::PlayerWrapper,
|
||||
pub(crate) updating: Cell<bool>,
|
||||
pub(crate) updater: RefCell<Option<InAppNotification>>,
|
||||
pub(crate) sender: Sender<Action>,
|
||||
pub(crate) receiver: Receiver<Action>,
|
||||
@ -82,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.");
|
||||
@ -122,9 +114,9 @@ impl MainWindow {
|
||||
|
||||
let player = player::PlayerWrapper::new(&sender);
|
||||
// Add the player to the main Box
|
||||
wrap.add(&player.action_bar);
|
||||
wrap.add(&player.container);
|
||||
|
||||
let updater = RefCell::new(None);
|
||||
wrap.add(&header.bottom_switcher);
|
||||
|
||||
window.add(&wrap);
|
||||
|
||||
@ -134,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::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::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(),
|
||||
@ -156,7 +147,8 @@ impl MainWindow {
|
||||
headerbar: header,
|
||||
content,
|
||||
player,
|
||||
updater,
|
||||
updating: Cell::new(false),
|
||||
updater: RefCell::new(None),
|
||||
sender,
|
||||
receiver,
|
||||
}
|
||||
@ -168,46 +160,48 @@ impl MainWindow {
|
||||
#[cfg_attr(rustfmt, rustfmt_skip)]
|
||||
pub fn setup_gactions(&self) {
|
||||
let sender = &self.sender;
|
||||
let weak_win = self.window.downgrade();
|
||||
|
||||
// Create the `refresh` action.
|
||||
//
|
||||
// This will trigger a refresh of all the shows in the database.
|
||||
action(&self.window, "refresh", clone!(sender => move |_, _| {
|
||||
gtk::idle_add(clone!(sender => move || {
|
||||
let s: Option<Vec<_>> = None;
|
||||
utils::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!(sender, weak_win => move |_, _| {
|
||||
weak_win.upgrade().map(|win| 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!(sender, weak_win => move |_, _| {
|
||||
weak_win.upgrade().map(|win| 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_win => move |_, _| {
|
||||
weak_win.upgrade().map(|win| 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"]);
|
||||
}
|
||||
|
||||
0
scripts/compile-gschema.py
Normal file → Executable file
0
scripts/compile-gschema.py
Normal file → Executable file
@ -2,17 +2,18 @@
|
||||
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
set -x
|
||||
|
||||
# $1 Passed by meson and should be the builddir
|
||||
export CARGO_TARGET_DIR="$1/target/"
|
||||
export CARGO_HOME="$CARGO_TARGET_DIR/cargo-home"
|
||||
|
||||
# If this is run inside a flatpak envrironment, append the export the rustc
|
||||
# sdk-extension binaries to the path
|
||||
if [ -n "/.flatpak-info" ]
|
||||
if [ -f "/.flatpak-info" ]
|
||||
then
|
||||
export PATH="$PATH:/usr/lib/sdk/rust-stable/bin"
|
||||
export CARGO_TARGET_DIR="$BUILDDIR/target/"
|
||||
fi
|
||||
|
||||
export CARGO_HOME="$CARGO_TARGET_DIR/cargo-home"
|
||||
|
||||
cargo test -j 1 -- --test-threads=1 --nocapture
|
||||
cargo fetch --locked
|
||||
cargo test --all-features --offline -- --test-threads=1 --nocapture
|
||||
|
||||
Loading…
Reference in New Issue
Block a user