Compare commits
1 Commits
master
...
zbrown/pla
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e50ba6cb3 |
@ -1,24 +1,89 @@
|
||||
include:
|
||||
- project: 'gnome/citemplates'
|
||||
file: 'flatpak/flatpak-ci-initiative-sdk-extensions.yml'
|
||||
# ref: ''
|
||||
stages:
|
||||
- lint
|
||||
- test
|
||||
- review
|
||||
|
||||
variables:
|
||||
BUNDLE: "org.gnome.Podcasts.Devel.flatpak"
|
||||
|
||||
flatpak:
|
||||
image: 'registry.gitlab.gnome.org/gnome/gnome-runtime-images/rust_bundle:3.36'
|
||||
image: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/rust_bundle:3.32"
|
||||
stage: "test"
|
||||
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_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
|
||||
|
||||
# Configure and run rustfmt
|
||||
# Exits and builds fails if on bad format
|
||||
rustfmt:
|
||||
image: "rust:slim"
|
||||
stage: ".pre"
|
||||
stage: "lint"
|
||||
script:
|
||||
- rustup component add rustfmt
|
||||
# Create blank versions of our configured files
|
||||
|
||||
32
CHANGELOG.md
32
CHANGELOG.md
@ -14,38 +14,6 @@ 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:
|
||||
|
||||
@ -96,7 +96,7 @@ Steps to reproduce:
|
||||
|
||||
## Merge Request Process
|
||||
|
||||
1. Ensure your code compiles. Run `meson` & `ninja` before creating the merge request.
|
||||
1. Ensure your code compiles. Run `make` before creating the merge request.
|
||||
2. Ensure the test suit passes. Run `cargo test -- --test-threads=1`.
|
||||
3. Ensure your code is properly formatted. Run `cargo fmt --all`.
|
||||
4. If you're adding new API, it must be properly documented.
|
||||
@ -114,4 +114,4 @@ Steps to reproduce:
|
||||
do not have permission to do that, you may request the second reviewer to merge it for you.
|
||||
|
||||
## Code of Conduct
|
||||
We follow the [GNOME Foundation Code of Conduct](/code-of-conduct.md).
|
||||
We follow the [Contributor Covenant](/code-of-conduct.md).
|
||||
|
||||
3088
Cargo.lock
generated
3088
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
18
README.md
18
README.md
@ -36,15 +36,11 @@ Flatpak is the recommended way of building and installing GNOME Podcasts.
|
||||
Here are the dependencies you will need.
|
||||
|
||||
```sh
|
||||
# Add flathub and the gnome-nightly repo
|
||||
# Add flathub repo
|
||||
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak remote-add --user --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
|
||||
|
||||
# Install the gnome-nightly Sdk and Platform runtime
|
||||
flatpak install --user gnome-nightly org.gnome.Sdk org.gnome.Platform
|
||||
|
||||
# Install the required rust-stable extension from flathub
|
||||
flatpak install --user flathub org.freedesktop.Sdk.Extension.rust-stable//19.08
|
||||
# Install the Nightly Sdk and Platform GNOME runtime and the rust Sdk extension
|
||||
flatpak install --user org.gnome.Sdk//3.32 org.gnome.Platform//3.32 org.freedesktop.Sdk.Extension.rust-stable//18.08
|
||||
```
|
||||
|
||||
To install the resulting flatpak you can do:
|
||||
@ -65,10 +61,10 @@ sudo ninja -C build install
|
||||
|
||||
#### Dependencies
|
||||
|
||||
* Rust stable 1.34 or later along with cargo.
|
||||
* Gtk+ 3.24.11 or later
|
||||
* Gstreamer 1.16 or later
|
||||
* libhandy 0.0.11 or later
|
||||
* Rust stable 1.27 or later along with cargo.
|
||||
* Gtk+ 3.22 or later
|
||||
* Gstreamer 1.12 or later
|
||||
* libhandy
|
||||
* Meson
|
||||
* A network connection
|
||||
|
||||
|
||||
@ -1,126 +1,77 @@
|
||||
# GNOME Code of Conduct
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
Thank you for being a part of the GNOME project. We value your participation and want everyone to have an enjoyable and fulfilling experience. Accordingly, all participants are expected to follow this Code of Conduct, and to show respect, understanding, and consideration to one another. Thank you for helping make this a welcoming, friendly community for everyone.
|
||||
## Our Pledge
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies to all online GNOME community spaces, including, but not limited to:
|
||||
|
||||
* Issue tracking systems - bugzilla.gnome.org
|
||||
* Documentation and tutorials - developer.gnome.org
|
||||
* Code repositories - git.gnome.org and gitlab.gnome.org
|
||||
* Mailing lists - mail.gnome.org
|
||||
* Wikis - wiki.gnome.org
|
||||
* Chat and forums - irc.gnome.org, discourse.gnome.org, GNOME Telegram channels, and GNOME groups and channels on Matrix.org (including bridges to GNOME IRC channels)
|
||||
* Community spaces hosted on gnome.org infrastructure
|
||||
* Any other channels or groups which exist in order to discuss GNOME project activities
|
||||
|
||||
Communication channels and private conversations that are normally out of scope may be considered in scope if a GNOME participant is being stalked or harassed. Social media conversations may be considered in-scope if the incident occurred under a GNOME event hashtag, or when an official GNOME account on social media is tagged, or within any other discussion about GNOME. The GNOME Foundation reserves the right to take actions against behaviors that happen in any context, if they are deemed to be relevant to the GNOME project and its participants.
|
||||
|
||||
All participants in GNOME online community spaces are subject to the Code of Conduct. This includes GNOME Foundation board members, corporate sponsors, and paid employees. This also includes volunteers, maintainers, leaders, contributors, contribution reviewers, issue reporters, GNOME users, and anyone participating in discussion in GNOME online spaces.
|
||||
|
||||
## Reporting an Incident
|
||||
|
||||
If you believe that someone is violating the Code of Conduct, or have
|
||||
any other concerns, please [contact the Code of Conduct committee](https://wiki.gnome.org/Foundation/CodeOfConduct/ReporterGuide).
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
The GNOME online community is dedicated to providing a positive experience for everyone, regardless of:
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* age
|
||||
* body size
|
||||
* caste
|
||||
* citizenship
|
||||
* disability
|
||||
* education
|
||||
* ethnicity
|
||||
* familial status
|
||||
* gender expression
|
||||
* gender identity
|
||||
* genetic information
|
||||
* immigration status
|
||||
* level of experience
|
||||
* nationality
|
||||
* personal appearance
|
||||
* pregnancy
|
||||
* race
|
||||
* religion
|
||||
* sex characteristics
|
||||
* sexual orientation
|
||||
* sexual identity
|
||||
* socio-economic status
|
||||
* tribe
|
||||
* veteran status
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
### Community Guidelines
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
* **Be friendly.** Use welcoming and inclusive language.
|
||||
* **Be empathetic.** Be respectful of differing viewpoints and experiences.
|
||||
* **Be respectful.** When we disagree, we do so in a polite and constructive manner.
|
||||
* **Be considerate.** Remember that decisions are often a difficult choice between competing priorities. Focus on what is best for the community. Keep discussions around technology choices constructive and respectful.
|
||||
* **Be patient and generous.** If someone asks for help it is because they need it. When documentation is available that answers the question, politely point them to it. If the question is off-topic, suggest a more appropriate online space to seek help.
|
||||
* **Try to be concise.** Read the discussion before commenting in order to not repeat a point that has been made.
|
||||
## Our Responsibilities
|
||||
|
||||
### Inappropriate Behavior
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Community members asked to stop any inappropriate behavior are expected to comply immediately.
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
We want all participants in the GNOME community have the best possible experience they can. In order to be clear what that means, we've provided a list of examples of behaviors that are inappropriate for GNOME community spaces:
|
||||
## Scope
|
||||
|
||||
* **Deliberate intimidation, stalking, or following.**
|
||||
* **Sustained disruption of online discussion, talks, or other events.** Sustained disruption of events, online discussions, or meetings, including talks and presentations, will not be tolerated. This includes 'Talking over' or 'heckling' event speakers or influencing crowd actions that cause hostility in event sessions. Sustained disruption also includes drinking alcohol to excess or using recreational drugs to excess, or pushing others to do so.
|
||||
* **Harassment of people who don't drink alcohol.** We do not tolerate derogatory comments about those who abstain from alcohol or other substances. We do not tolerate pushing people to drink, talking about their abstinence or preferences to others, or pressuring them to drink - physically or through jeering.
|
||||
* **Sexist, racist, homophobic, transphobic, ableist language or otherwise exclusionary language.** This includes deliberately referring to someone by a gender that they do not identify with, and/or questioning the legitimacy of an individual's gender identity. If you're unsure if a word is derogatory, don't use it. This also includes repeated subtle and/or indirect discrimination.
|
||||
* **Unwelcome sexual attention or behavior that contributes to a sexualized environment.** This includes sexualized comments, jokes or imagery in interactions, communications or presentation materials, as well as inappropriate touching, groping, or sexual advances. Sponsors should not use sexualized images, activities, or other material. Meetup organizing staff and other volunteer organizers should not use sexualized clothing/uniforms/costumes, or otherwise create a sexualized environment.
|
||||
* **Unwelcome physical contact.** This includes touching a person without permission, including sensitive areas such as their hair, pregnant stomach, mobility device (wheelchair, scooter, etc) or tattoos. This also includes physically blocking or intimidating another person. Physical contact or simulated physical contact (such as emojis like "kiss") without affirmative consent is not acceptable. This includes sharing or distribution of sexualized images or text.
|
||||
* **Violence or threats of violence.** Violence and threats of violence are not acceptable - online or offline. This includes incitement of violence toward any individual, including encouraging a person to commit self-harm. This also includes posting or threatening to post other people's personally identifying information ("doxxing") online.
|
||||
* **Influencing or encouraging inappropriate behavior.** If you influence or encourage another person to violate the Code of Conduct, you may face the same consequences as if you had violated the Code of Conduct.
|
||||
* **Possession of an offensive weapon at a GNOME event.** This includes anything deemed to be a weapon by the event organizers.
|
||||
This Code of Conduct applies within all project spaces, and it also applies when
|
||||
an individual is representing the project or its community in public spaces.
|
||||
Examples of representing a project or community include using an official
|
||||
project e-mail address, posting via an official social media account, or acting
|
||||
as an appointed representative at an online or offline event. Representation of
|
||||
a project may be further defined and clarified by project maintainers.
|
||||
|
||||
The GNOME community prioritizes marginalized people's safety over privileged people's comfort. The committee will not act on complaints regarding:
|
||||
## Enforcement
|
||||
|
||||
* "Reverse"-isms, including "reverse racism," "reverse sexism," and "cisphobia"
|
||||
* Reasonable communication of boundaries, such as "leave me alone," "go away," or "I'm not discussing this with you."
|
||||
* Criticizing racist, sexist, cissexist, or otherwise oppressive behavior or assumptions
|
||||
* Communicating boundaries or criticizing oppressive behavior in a "tone" you don't find congenial
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project maintainer at jpetridis@gnome.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
The examples listed above are not against the Code of Conduct. If you have questions about the above statements, please [read this document](https://github.com/sagesharp/code-of-conduct-template/blob/master/code-of-conduct/example-reversisms.md#supporting-diversity).
|
||||
|
||||
If a participant engages in behavior that violates this code of conduct, the GNOME Code of Conduct committee may take any action they deem appropriate. Examples of consequences are outlined in the [Committee Procedures Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/CommitteeProcedures).
|
||||
|
||||
## Procedure for Handling Incidents
|
||||
|
||||
* [Reporter Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/ReporterGuide)
|
||||
|
||||
* [Moderator Procedures](https://wiki.gnome.org/Foundation/CodeOfConduct/ModeratorProcedures)
|
||||
|
||||
* [Committee Procedures Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/CommitteeProcedures)
|
||||
|
||||
## License
|
||||
|
||||
The GNOME Online Code of Conduct is licensed under a [Creative Commons Attribution Share-Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||

|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
The GNOME Online Code of Conduct was forked from the example policy from the [Geek Feminism wiki, created by the Ada Initiative and other volunteers](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy), which is under a Creative Commons Zero license.
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
Additional language was incorporated and modified from the following Codes of Conduct:
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
* [Citizen Code of Conduct](http://citizencodeofconduct.org/) is licensed [Creative Commons Attribution Share-Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/).
|
||||
* [Code of Conduct template](https://github.com/sagesharp/code-of-conduct-template/) is licensed [Creative Commons Attribution Share-Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/) by [Otter Tech](https://otter.technology/code-of-conduct-training)
|
||||
* [Contributor Covenant version 1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct) (licensed [CC BY 4.0](https://github.com/ContributorCovenant/contributor_covenant/blob/master/LICENSE.md))
|
||||
* [Data Carpentry Code of Conduct](https://docs.carpentries.org/topic_folders/policies/index_coc.html) is licensed [Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/)
|
||||
* [Django Project Code of Conduct](https://www.djangoproject.com/conduct/) is licensed under a [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/)
|
||||
* [Fedora Code of Conduct](http://fedoraproject.org/code-of-conduct)
|
||||
* [Geek Feminism Anti-harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy) which is under a [Creative Commons Zero license](https://creativecommons.org/publicdomain/zero/1.0/)
|
||||
* [Previous GNOME Foundation Code of Conduct](https://wiki.gnome.org/action/recall/Foundation/CodeOfConduct/Old)
|
||||
* [LGBTQ in Technology Slack Code of Conduct](https://lgbtq.technology/coc.html) licensed [Creative Commons Zero](https://creativecommons.org/publicdomain/zero/1.0/)
|
||||
* [Mozilla Community Participation Guidelines](https://www.mozilla.org/en-US/about/governance/policies/participation/) is licensed [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/).
|
||||
* [Python Mentors Code of Conduct](http://pythonmentors.com/)
|
||||
* [Speak Up! Community Code of Conduct](http://web.archive.org/web/20141109123859/http://speakup.io/coc.html), licensed under a [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/)
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
||||
|
||||
|
||||
31
meson.build
31
meson.build
@ -1,6 +1,6 @@
|
||||
project(
|
||||
'gnome-podcasts', 'rust',
|
||||
version: '0.4.7',
|
||||
version: '0.4.6',
|
||||
license: 'GPLv3',
|
||||
)
|
||||
|
||||
@ -11,21 +11,22 @@ dependency('dbus-1')
|
||||
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.13')
|
||||
dependency('gtk+-3.0', version: '>= 3.24.7')
|
||||
dependency('libhandy-0.0', version: '>= 0.0.9')
|
||||
|
||||
dependency('gstreamer-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-base-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-audio-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-video-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-player-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-plugins-base-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-plugins-bad-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-bad-audio-1.0', version: '>= 1.16')
|
||||
dependency('gstreamer-1.0', version: '>= 1.12')
|
||||
dependency('gstreamer-base-1.0', version: '>= 1.12')
|
||||
dependency('gstreamer-audio-1.0', version: '>= 1.12')
|
||||
dependency('gstreamer-video-1.0', version: '>= 1.12')
|
||||
dependency('gstreamer-player-1.0', version: '>= 1.12')
|
||||
dependency('gstreamer-plugins-base-1.0', version: '>= 1.12')
|
||||
dependency('gstreamer-plugins-bad-1.0', version: '>= 1.12')
|
||||
dependency('gstreamer-bad-audio-1.0', version: '>= 1.12')
|
||||
|
||||
cargo = find_program('cargo', required: true)
|
||||
gresource = find_program('glib-compile-resources', required: true)
|
||||
gschemas = find_program('glib-compile-schemas', required: true)
|
||||
cargo_vendor = find_program('cargo-vendor', required: false)
|
||||
|
||||
if get_option('profile') == 'development'
|
||||
profile = '.Devel'
|
||||
@ -40,14 +41,6 @@ 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" : "3.36",
|
||||
"runtime-version" : "3.32",
|
||||
"sdk" : "org.gnome.Sdk",
|
||||
"sdk-extensions" : [
|
||||
"org.freedesktop.Sdk.Extension.rust-stable"
|
||||
@ -10,13 +10,19 @@
|
||||
"tags" : [
|
||||
"nightly"
|
||||
],
|
||||
"desktop-file-name-suffix" : " ☢️",
|
||||
"finish-args" : [
|
||||
"--filesystem=xdg-run/dconf",
|
||||
"--filesystem=~/.config/dconf:ro",
|
||||
"--talk-name=ca.desrt.dconf",
|
||||
"--env=DCONF_USER_CONFIG_DIR=.config/dconf",
|
||||
"--share=network",
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=fallback-x11",
|
||||
"--socket=wayland",
|
||||
"--socket=pulseaudio",
|
||||
"--device=dri",
|
||||
"--own-name=org.mpris.MediaPlayer2.Podcasts",
|
||||
"--env=USE_PLAYBING3=1"
|
||||
],
|
||||
"build-options" : {
|
||||
@ -25,8 +31,8 @@
|
||||
"--share=network"
|
||||
],
|
||||
"env" : {
|
||||
"RUSTFLAGS" : "--error-format=short --remap-path-prefix =../",
|
||||
"CARGO_HOME" : "/run/build/Podcasts/cargo",
|
||||
"RUSTFLAGS" : "",
|
||||
"RUST_BACKTRACE" : "1"
|
||||
}
|
||||
},
|
||||
@ -35,7 +41,7 @@
|
||||
"name" : "libhandy",
|
||||
"buildsystem" : "meson",
|
||||
"config-opts" : [
|
||||
"-Dintrospection=disabled",
|
||||
"-Dintrospection=enabled",
|
||||
"-Dgtk_doc=false",
|
||||
"-Dtests=false",
|
||||
"-Dexamples=false",
|
||||
@ -50,14 +56,13 @@
|
||||
{
|
||||
"type" : "git",
|
||||
"url" : "https://source.puri.sm/Librem5/libhandy.git",
|
||||
"tag" : "v0.0.13"
|
||||
"commit" : "56b0aa62f6251ee19a88fc208b7ca8dcf9c9633c"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name" : "gnome-podcasts",
|
||||
"buildsystem" : "meson",
|
||||
"builddir" : "true",
|
||||
"config-opts" : [
|
||||
"-Dprofile=development"
|
||||
],
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"app-id" : "org.gnome.Podcasts",
|
||||
"runtime" : "org.gnome.Platform",
|
||||
"runtime-version" : "3.36",
|
||||
"runtime-version" : "3.32",
|
||||
"sdk" : "org.gnome.Sdk",
|
||||
"sdk-extensions" : [
|
||||
"org.freedesktop.Sdk.Extension.rust-stable"
|
||||
@ -12,12 +12,17 @@
|
||||
],
|
||||
"desktop-file-name-suffix" : " ☢️",
|
||||
"finish-args" : [
|
||||
"--filesystem=xdg-run/dconf",
|
||||
"--filesystem=~/.config/dconf:ro",
|
||||
"--talk-name=ca.desrt.dconf",
|
||||
"--env=DCONF_USER_CONFIG_DIR=.config/dconf",
|
||||
"--share=network",
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=fallback-x11",
|
||||
"--socket=wayland",
|
||||
"--socket=pulseaudio",
|
||||
"--device=dri",
|
||||
"--own-name=org.mpris.MediaPlayer2.Podcasts",
|
||||
"--env=USE_PLAYBING3=1"
|
||||
],
|
||||
"build-options" : {
|
||||
@ -27,6 +32,7 @@
|
||||
],
|
||||
"env" : {
|
||||
"CARGO_HOME" : "/run/build/Podcasts/cargo",
|
||||
"RUSTFLAGS" : "--error-format=short --remap-path-prefix =../",
|
||||
"RUST_BACKTRACE" : "1"
|
||||
}
|
||||
},
|
||||
@ -50,7 +56,7 @@
|
||||
{
|
||||
"type" : "git",
|
||||
"url" : "https://source.puri.sm/Librem5/libhandy.git",
|
||||
"tag" : "v0.0.13"
|
||||
"commit" : "56b0aa62f6251ee19a88fc208b7ca8dcf9c9633c"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@ -5,38 +5,37 @@ version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
ammonia = "3.1.0"
|
||||
chrono = "0.4.11"
|
||||
derive_builder = "0.9.0"
|
||||
lazy_static = "1.4.0"
|
||||
log = "0.4.8"
|
||||
rayon = "1.3.1"
|
||||
ammonia = "2.0.0"
|
||||
chrono = "0.4.6"
|
||||
derive_builder = "0.7.1"
|
||||
lazy_static = "1.3.0"
|
||||
log = "0.4.6"
|
||||
rayon = "1.0.3"
|
||||
rfc822_sanitizer = "0.3.3"
|
||||
rss = "1.9.0"
|
||||
url = "2.1.1"
|
||||
rss = "1.7.0"
|
||||
url = "1.7.2"
|
||||
xdg = "2.2.0"
|
||||
xml-rs = "0.8.3"
|
||||
futures = "0.1.29"
|
||||
hyper = "0.12.35"
|
||||
http = "0.1.19"
|
||||
tokio = "0.1.22"
|
||||
xml-rs = "0.8.0"
|
||||
futures = "0.1.25"
|
||||
hyper = "0.12.25"
|
||||
http = "0.1.16"
|
||||
tokio = "0.1.18"
|
||||
hyper-tls = "0.3.2"
|
||||
native-tls = "0.2.3"
|
||||
num_cpus = "1.13.0"
|
||||
failure = "0.1.8"
|
||||
failure_derive = "0.1.8"
|
||||
base64 = "0.12.2"
|
||||
native-tls = "0.2.2"
|
||||
num_cpus = "1.10.0"
|
||||
failure = "0.1.5"
|
||||
failure_derive = "0.1.5"
|
||||
|
||||
[dependencies.diesel]
|
||||
features = ["sqlite", "r2d2"]
|
||||
version = "1.4.5"
|
||||
version = "=1.3.0"
|
||||
|
||||
[dependencies.diesel_migrations]
|
||||
features = ["sqlite"]
|
||||
version = "1.4.0"
|
||||
version = "=1.3.0"
|
||||
|
||||
[dev-dependencies]
|
||||
rand = "0.7.2"
|
||||
rand = "0.6.5"
|
||||
tempdir = "0.3.7"
|
||||
pretty_assertions = "0.6.1"
|
||||
maplit = "1.0.2"
|
||||
maplit = "1.0.1"
|
||||
|
||||
@ -84,10 +84,7 @@ pub enum DataError {
|
||||
FeedRedirect(Source),
|
||||
#[fail(display = "Feed is up to date")]
|
||||
FeedNotModified(Source),
|
||||
#[fail(
|
||||
display = "Error occurred while Parsing an Episode. Reason: {}",
|
||||
reason
|
||||
)]
|
||||
#[fail(display = "Error occured 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
|
||||
|
||||
|
||||
#![allow(clippy::unit_arg)]
|
||||
#![cfg_attr(feature = "cargo-clippy", allow(unit_arg))]
|
||||
//! Index Feeds.
|
||||
|
||||
use futures::future::*;
|
||||
@ -198,7 +198,7 @@ mod tests {
|
||||
})
|
||||
.collect();
|
||||
|
||||
// Index the channels
|
||||
// Index the channes
|
||||
let stream_ = stream::iter_ok(feeds).for_each(|x| x.index());
|
||||
tokio::run(stream_.map_err(|_| ()));
|
||||
|
||||
|
||||
@ -62,6 +62,7 @@
|
||||
missing_copy_implementations
|
||||
)]
|
||||
#![allow(proc_macro_derive_resolution_fallback)]
|
||||
// #![deny(warnings)]
|
||||
|
||||
//! FIXME: Docs
|
||||
|
||||
@ -109,9 +110,9 @@ pub use crate::models::{Episode, EpisodeWidgetModel, Show, ShowCoverModel, Sourc
|
||||
// Keep this in sync with Tor-browser releases
|
||||
/// The user-agent to be used for all the requests.
|
||||
/// 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";
|
||||
pub const USER_AGENT: &str = "Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0";
|
||||
|
||||
/// [XDG Base Directory](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) Paths.
|
||||
/// [XDG Base Direcotory](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 +138,7 @@ pub mod xdg_dirs {
|
||||
PODCASTS_XDG.create_cache_directory(PODCASTS_XDG.get_cache_home()).unwrap()
|
||||
};
|
||||
|
||||
/// GNOME Podcasts Download Directory `PathBuf`.
|
||||
/// GNOME Podcasts Download Direcotry `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 representation of epoch 0.
|
||||
// Default to rfc2822 represantation 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 *interesting* generated feed.
|
||||
// Especially if you find an *intresting* generated feed.
|
||||
|
||||
// Known prebuilt expected objects.
|
||||
lazy_static! {
|
||||
|
||||
@ -27,7 +27,7 @@ use hyper::{Body, Client};
|
||||
use hyper_tls::HttpsConnector;
|
||||
|
||||
use http::header::{
|
||||
HeaderValue, AUTHORIZATION, ETAG, IF_MODIFIED_SINCE, IF_NONE_MATCH, LAST_MODIFIED, LOCATION,
|
||||
HeaderValue, ETAG, IF_MODIFIED_SINCE, IF_NONE_MATCH, LAST_MODIFIED, LOCATION,
|
||||
USER_AGENT as USER_AGENT_HEADER,
|
||||
};
|
||||
use http::{Request, Response, StatusCode, Uri};
|
||||
@ -35,8 +35,6 @@ use http::{Request, Response, StatusCode, Uri};
|
||||
use futures::future::{loop_fn, Future, Loop};
|
||||
use futures::prelude::*;
|
||||
|
||||
use base64::{encode_config, URL_SAFE};
|
||||
|
||||
use crate::database::connection;
|
||||
use crate::errors::*;
|
||||
use crate::feed::{Feed, FeedBuilder};
|
||||
@ -67,7 +65,7 @@ impl Save<Source> for Source {
|
||||
let db = connection();
|
||||
let con = db.get()?;
|
||||
|
||||
self.save_changes::<Source>(&*con).map_err(From::from)
|
||||
self.save_changes::<Source>(&con).map_err(From::from)
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,10 +214,7 @@ impl Source {
|
||||
self = self.save()?;
|
||||
|
||||
debug!("Updated Source: {:#?}", &self);
|
||||
info!(
|
||||
"Feed url of Source {}, was updated successfully.",
|
||||
self.id()
|
||||
);
|
||||
info!("Feed url of Source {}, was updated succesfully.", self.id());
|
||||
}
|
||||
|
||||
Ok(self)
|
||||
@ -281,18 +276,6 @@ impl Source {
|
||||
let uri = Uri::from_str(self.uri()).unwrap();
|
||||
let mut req = Request::get(uri).body(Body::empty()).unwrap();
|
||||
|
||||
if let Ok(url) = Url::parse(self.uri()) {
|
||||
if let Some(password) = url.password() {
|
||||
let mut auth = "Basic ".to_owned();
|
||||
auth.push_str(&encode_config(
|
||||
&format!("{}:{}", url.username(), password),
|
||||
URL_SAFE,
|
||||
));
|
||||
req.headers_mut()
|
||||
.insert(AUTHORIZATION, HeaderValue::from_str(&auth).unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
// Set the UserAgent cause ppl still seem to check it for some reason...
|
||||
req.headers_mut()
|
||||
.insert(USER_AGENT_HEADER, HeaderValue::from_static(USER_AGENT));
|
||||
|
||||
@ -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 omitted.
|
||||
/// not `RSS` related sub-elements are ommited.
|
||||
///
|
||||
/// [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 outputting
|
||||
/// Export a file to `P`, taking the feeds from the database and outputing
|
||||
/// 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` elements from a reader `R` and returns a `HashSet` of `Opml` structs.
|
||||
/// Extracts the `outline` elemnts 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);
|
||||
|
||||
@ -96,4 +96,5 @@ mod tests {
|
||||
let item = Some(&extension);
|
||||
assert_eq!(parse_itunes_duration(item), Some(6970));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ fn download_checker() -> Result<(), DataError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Delete watched `episodes` that have exceeded their lifetime after played.
|
||||
/// Delete watched `episodes` that have exceded their liftime 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 successfully.", ep.local_uri()))
|
||||
.map(|_| info!("Episode {:?} was deleted succesfully.", 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 successfully.", pd.title());
|
||||
info!("{} was removed succesfully.", pd.title());
|
||||
|
||||
let fold = get_download_folder(pd.title())?;
|
||||
fs::remove_dir_all(&fold)?;
|
||||
info!("All the content at, {} was removed successfully", &fold);
|
||||
info!("All the content at, {} was removed succesfully", &fold);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -161,6 +161,7 @@ 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,13 +5,14 @@ version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
log = "0.4.8"
|
||||
mime_guess = "2.0.3"
|
||||
reqwest = "0.9.22"
|
||||
error-chain = "0.12.0"
|
||||
log = "0.4.6"
|
||||
mime_guess = "1.8.6"
|
||||
reqwest = "0.9.12"
|
||||
tempdir = "0.3.7"
|
||||
glob = "0.3.0"
|
||||
failure = "0.1.8"
|
||||
failure_derive = "0.1.8"
|
||||
failure = "0.1.5"
|
||||
failure_derive = "0.1.5"
|
||||
|
||||
[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 can't seem to find one.
|
||||
// But cant 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 trigger it as
|
||||
// Steal the Stars would tigger 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 Length: {}", x));
|
||||
ct_len.map(|x| info!("File Lenght: {}", 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 successfully.", &target);
|
||||
info!("Downloading of {} completed succesfully.", &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(clippy::needless_pass_by_value)]
|
||||
#[allow(needless_pass_by_value)]
|
||||
fn save_io(
|
||||
file: &str,
|
||||
resp: &mut reqwest::Response,
|
||||
@ -219,10 +219,10 @@ pub fn get_episode(
|
||||
progress,
|
||||
)?;
|
||||
|
||||
// If download succeeds set episode local_uri to dlpath.
|
||||
// If download succedes set episode local_uri to dlpath.
|
||||
ep.set_local_uri(Some(&path));
|
||||
|
||||
// Over-write episode length
|
||||
// Over-write episode lenght
|
||||
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)]
|
||||
#![allow(clippy::blacklisted_name)]
|
||||
#![cfg_attr(feature = "cargo-clippy", allow(blacklisted_name))]
|
||||
// Enable lint group collections
|
||||
#![warn(nonstandard_style, edition_2018, rust_2018_idioms, bad_style, unused)]
|
||||
// standalone lints
|
||||
@ -39,6 +39,7 @@
|
||||
elided_lifetime_in_paths,
|
||||
missing_copy_implementations
|
||||
)]
|
||||
// #![deny(warnings)]
|
||||
|
||||
#[macro_use]
|
||||
extern crate failure_derive;
|
||||
|
||||
@ -5,51 +5,48 @@ version = "0.1.0"
|
||||
edition = "2018"
|
||||
|
||||
[dependencies]
|
||||
chrono = "0.4.11"
|
||||
crossbeam-channel = "0.3.9"
|
||||
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" }
|
||||
chrono = "0.4.6"
|
||||
crossbeam-channel = "0.3.8"
|
||||
gdk = "0.10.0"
|
||||
gdk-pixbuf = "0.6.0"
|
||||
glib = "0.7.1"
|
||||
gst = { version = "0.13.0", package = "gstreamer" }
|
||||
gst-player = { version = "0.13.0", package = "gstreamer-player" }
|
||||
humansize = "1.1.0"
|
||||
lazy_static = "1.4.0"
|
||||
log = "0.4.8"
|
||||
loggerv = "0.7.2"
|
||||
open = "1.4.0"
|
||||
rayon = "1.3.1"
|
||||
url = "2.1.0"
|
||||
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.55"
|
||||
html2text = "0.1.12"
|
||||
mpris-player = "0.5.0"
|
||||
pango = "0.8.0"
|
||||
glib = "0.9.3"
|
||||
lazy_static = "1.3.0"
|
||||
log = "0.4.6"
|
||||
loggerv = "0.7.1"
|
||||
open = "1.2.2"
|
||||
rayon = "1.0.3"
|
||||
url = "1.7.2"
|
||||
failure = "0.1.5"
|
||||
failure_derive = "0.1.5"
|
||||
fragile = "0.3.0"
|
||||
regex = "1.1.3"
|
||||
reqwest = "0.9.12"
|
||||
serde_json = "1.0.39"
|
||||
# html2text = "0.1.8"
|
||||
html2text = { git = "https://github.com/jugglerchris/rust-html2text" }
|
||||
|
||||
[dependencies.gettext-rs]
|
||||
git = "https://github.com/danigm/gettext-rs"
|
||||
branch = "no-gettext"
|
||||
features = ["gettext-system"]
|
||||
|
||||
[dependencies.gio]
|
||||
features = ["v2_50"]
|
||||
version = "0.8.1"
|
||||
|
||||
[dependencies.gtk]
|
||||
features = ["v3_24"]
|
||||
version = "0.8.1"
|
||||
version = "0.6.0"
|
||||
|
||||
[dependencies.gio]
|
||||
features = ["v2_50"]
|
||||
version = "0.6.0"
|
||||
|
||||
[dependencies.libhandy]
|
||||
version = "0.5.0"
|
||||
features = [ "v0_0_10"]
|
||||
version = "0.3.0"
|
||||
features = [ "v0_0_7"]
|
||||
|
||||
# [dependencies.mpris-player]
|
||||
# version = "0.4.0"
|
||||
[dependencies.mpris-player]
|
||||
version = "0.3.0"
|
||||
# git = "https://gitlab.gnome.org/World/Rust/mpris-player"
|
||||
|
||||
[dependencies.podcasts-data]
|
||||
|
||||
@ -6,7 +6,6 @@ da
|
||||
de
|
||||
en_GB
|
||||
es
|
||||
eu
|
||||
fi
|
||||
fr
|
||||
fur
|
||||
@ -23,5 +22,3 @@ pt_BR
|
||||
sk
|
||||
sv
|
||||
tr
|
||||
uk
|
||||
zh_CN
|
||||
|
||||
@ -13,8 +13,6 @@ 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
|
||||
@ -44,4 +42,3 @@ 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'última finestra principal oberta"
|
||||
msgstr "Estat de maximització de l'ultima 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: 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"
|
||||
"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"
|
||||
"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.3\n"
|
||||
"X-Generator: Poedit 2.2.1\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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:353
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:82
|
||||
#: podcasts-gtk/src/app.rs:124 podcasts-gtk/src/app.rs:455
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -81,6 +81,11 @@ 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;"
|
||||
@ -90,7 +95,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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -116,23 +121,19 @@ 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: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
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:180
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Größe der Folge wird ermittelt …"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
msgid "Play this episode"
|
||||
msgstr "Diese Folge abspielen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Herunterladen abbrechen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
msgid "Download this episode"
|
||||
msgstr "Diese Folge herunterladen"
|
||||
|
||||
@ -149,15 +150,19 @@ 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:30
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
msgid "_About Podcasts"
|
||||
msgstr "Info zu _Podcasts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Neue Quelle hinzufügen"
|
||||
|
||||
@ -169,11 +174,15 @@ msgstr "Hinzuzufügende Quellen-Adresse eingeben"
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Titel anzeigen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
@ -188,6 +197,11 @@ 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"
|
||||
|
||||
@ -219,55 +233,72 @@ msgstr "Eine anwendungsinterne Aktionsmeldung"
|
||||
msgid "Undo"
|
||||
msgstr "Rückgängig"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Läuft gerade"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Die Wiedergabegeschwindigkeit ändern"
|
||||
|
||||
#: 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-fache Geschwindigkeit"
|
||||
|
||||
#: 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-fache Geschwindigkeit"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normale Geschwindigkeit"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 Sekunden zurückspulen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Wiedergeben"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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-fache Geschwindigkeit"
|
||||
|
||||
#: 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-fache Geschwindigkeit"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Normale Geschwidigkeit"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Erscheinungsbild"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Dunkles Thema"
|
||||
|
||||
#: 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/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "Alle Folgen als angehört _markieren"
|
||||
@ -292,14 +323,38 @@ msgstr "Alle als angehört markieren"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Abbestellen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Weiterlesen"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:287
|
||||
#: podcasts-gtk/src/app.rs:369
|
||||
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"
|
||||
@ -308,43 +363,43 @@ msgstr "Neu"
|
||||
msgid "Shows"
|
||||
msgstr "Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:398
|
||||
#: podcasts-gtk/src/utils.rs:377
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Wählen Sie die Datei aus, aus der Sie Podcasts importieren wollen."
|
||||
msgstr "Wählen Sie die Datei aus, aus der Sie Shows importieren wollen."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:401
|
||||
#: podcasts-gtk/src/utils.rs:380
|
||||
msgid "_Import"
|
||||
msgstr "_Importieren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:410 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:389 podcasts-gtk/src/utils.rs:435
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-Datei"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
#: podcasts-gtk/src/utils.rs:406
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Die importierte Datei konnte nicht ausgewertet werden"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:432 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:411 podcasts-gtk/src/utils.rs:453
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Auf die gewählte Datei konnte nicht zugegriffen werden."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
#: podcasts-gtk/src/utils.rs:423
|
||||
msgid "Export shows to…"
|
||||
msgstr "Podcasts exportieren nach …"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "_Export"
|
||||
msgstr "E_xportieren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
msgid "_Cancel"
|
||||
msgstr "A_bbrechen"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcasts Abonnements"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Export der Podcasts ist fehlgeschlagen"
|
||||
|
||||
@ -360,71 +415,24 @@ msgstr "Erfahren Sie mehr über GNOME Podcasts"
|
||||
msgid "translator-credits"
|
||||
msgstr ""
|
||||
"Mario Blättermann <mario.blaettermann@gmail.com>\n"
|
||||
"Tim Sabsch <tim@sabsch.com>\n"
|
||||
"Onno Giesmann <nutzer3105@gmail.com>"
|
||||
"Tim Sabsch <tim@sabsch.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:828
|
||||
#: podcasts-gtk/src/widgets/player.rs:536
|
||||
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:174
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:169
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Alle Folgen als angehört markieren"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
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-2020.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2018-2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-podcasts\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-07 13:18+0100\n"
|
||||
"POT-Creation-Date: 2019-06-15 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-06-19 12:19+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
|
||||
"Language: es_ES\n"
|
||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
||||
"Language: 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.34.0\n"
|
||||
"X-Generator: Gtranslator 3.32.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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -119,6 +119,7 @@ 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."
|
||||
|
||||
@ -159,7 +160,7 @@ msgid "_About Podcasts"
|
||||
msgstr "_Acerca de Podcasts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
msgid "Add a new feed"
|
||||
msgstr "Añadir un canal nuevo"
|
||||
|
||||
@ -171,11 +172,11 @@ msgstr "Introduzca la dirección del canal que añadir"
|
||||
msgid "Add"
|
||||
msgstr "Añadir"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
msgid "Show Title"
|
||||
msgstr "Título del programa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
|
||||
@ -221,55 +222,51 @@ msgstr "Una notificación de acción dentro de la aplicación"
|
||||
msgid "Undo"
|
||||
msgstr "Deshacer"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Reproduciendo ahora"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Cambiar velocidad de reproducción"
|
||||
|
||||
#: 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 "velocidad 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 "velocidad 1.25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocidad normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Retroceder 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Reproducir"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 "velocidad 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 "velocidad 1.25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocidad normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Marcar todos los episodios como reproducidos"
|
||||
@ -294,14 +291,18 @@ msgstr "Marcar todo como reproducido"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar suscripción"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Leer más"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
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"
|
||||
@ -310,43 +311,43 @@ msgstr "Nuevo"
|
||||
msgid "Shows"
|
||||
msgstr "Programas"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
msgid "_Import"
|
||||
msgstr "_Importar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "fichero OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Fallo al analizar el fichero importado"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "No se ha podido acceder al archivo seleccionado."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Exportar programas a…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Exportar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Cancelar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Suscripciones a podcasts de GNOME"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Falló al exportar podcasts"
|
||||
|
||||
@ -369,7 +370,7 @@ msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "El reproductor no ha podido reproducir una acción."
|
||||
|
||||
@ -381,12 +382,6 @@ 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!"
|
||||
|
||||
|
||||
@ -1,362 +0,0 @@
|
||||
# Basque translation for podcasts.
|
||||
# Copyright (C) 2019 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Asier Sarasua Garmendia <asier.sarasua@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-10-10 13:08+0000\n"
|
||||
"PO-Revision-Date: 2019-10-18 10:00+0100\n"
|
||||
"Last-Translator: Asier Sarasua Garmendia <asier.sarasua@gmail.com>\n"
|
||||
"Language-Team: Basque <librezale@librezale.eus>\n"
|
||||
"Language: eu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
msgstr "Irekitako azken leiho nagusiaren goiko posizioa"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:19
|
||||
msgid "Left position of the last open main window"
|
||||
msgstr "Irekitako azken leiho nagusiaren ezkerreko posizioa"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:23
|
||||
msgid "Height of the last open main window"
|
||||
msgstr "Irekitako azken leiho nagusiaren altuera"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:27
|
||||
msgid "Width of the last open main window"
|
||||
msgstr "Irekitako azken leiho nagusiaren zabalera"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:31
|
||||
msgid "Maximized state of the last open main window"
|
||||
msgstr "Irekitako azken leiho nagusiaren egoera maximizatua"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:36
|
||||
msgid "Enable or disable dark theme"
|
||||
msgstr "Gaitu edo desgaitu gai iluna"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:41
|
||||
msgid "Whether to periodically refresh content"
|
||||
msgstr "Edukia aldizka freskatuko den ala ez"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:46
|
||||
msgid "How many periods of time to wait between automatic refreshes"
|
||||
msgstr "Zenbat denbora-tarte itxarongo den freskatze automatikoen artean"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:50
|
||||
msgid "What period of time to wait between automatic refreshes"
|
||||
msgstr "Zenbat denbora itxarongo den freskatze automatikoen artean"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:54
|
||||
msgid "Whether to refresh content after startup"
|
||||
msgstr "Abioaren ondoren edukia freskatuko den ala ez"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:60
|
||||
msgid "How many periods of time to wait between automatic cleanups"
|
||||
msgstr "Zenbat denbora-tarte itxarongo den garbitze automatikoen artean"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:64
|
||||
msgid "What period of time to wait between automatic cleanups"
|
||||
msgstr "Zenbat denbora itxarongo den garbitze automatikoen artean"
|
||||
|
||||
#. 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:327 podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcast-ak"
|
||||
|
||||
#: 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 "Entzun zure podcast gogokoenak zuzenean zure mahaigainetik."
|
||||
|
||||
#. 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 "Podcast-en aplikazioa GNOMErako"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:46
|
||||
msgid "This show does not have episodes yet"
|
||||
msgstr "Saio honek ez du pasarterik oraindik"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:62
|
||||
msgid "If you think this is an error, please consider writing a bug report."
|
||||
msgstr "Errorea dela uste baduzu, idatzi akatsaren jakinarazpen bat."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:106
|
||||
msgid "Get some shows"
|
||||
msgstr "Eskuratu zenbait saio"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:143
|
||||
msgid "Add new shows via feed URL"
|
||||
msgstr "Gehitu saio berriak jarioen URL baten bidez"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:172
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Inportatu saioak beste gailu batetik"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Dagoeneko entzun duzu pasarte hau"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Pasartearen tamaina kalkulatzen…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Erreproduzitu pasarte hau"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Utzi deskarga-prozesua"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
msgid "Download this episode"
|
||||
msgstr "Deskargatu pasarte hau"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:7
|
||||
msgid "_Check for New Episodes"
|
||||
msgstr "_Begiratu pasarte berriak dauden"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:12
|
||||
msgid "_Import Shows"
|
||||
msgstr "_Inportatu saioak"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:16
|
||||
msgid "_Export Shows"
|
||||
msgstr "_Esportatu saioak"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "Las_ter-teklak"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "Podcasts aplikazioari _buruz"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
msgid "Add a new feed"
|
||||
msgstr "Gehitu jario berria"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:53
|
||||
msgid "Enter feed address to add"
|
||||
msgstr "Sartu gehituko den jarioaren helbidea"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:89
|
||||
msgid "Add"
|
||||
msgstr "Gehitu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
msgid "Show Title"
|
||||
msgstr "Erakutsi titulua"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
msgid "Back"
|
||||
msgstr "Atzera"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:12
|
||||
msgid "General"
|
||||
msgstr "Orokorra"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:18
|
||||
msgctxt "shortcut window"
|
||||
msgid "Check for new episodes"
|
||||
msgstr "Begiratu pasarte berriak dauden"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Irten aplikaziotik"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:56
|
||||
msgid "Today"
|
||||
msgstr "Gaur"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:112
|
||||
msgid "Yesterday"
|
||||
msgstr "Atzo"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:168
|
||||
msgid "This Week"
|
||||
msgstr "Aste honetan"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:224
|
||||
msgid "This Month"
|
||||
msgstr "Hilabete honetan"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/home_view.ui:281
|
||||
msgid "Older"
|
||||
msgstr "Zaharragoa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/inapp_notif.ui:101
|
||||
msgid "An in-app action notification"
|
||||
msgstr "Aplikazioaren jakinarazpen bat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/inapp_notif.ui:112
|
||||
msgid "Undo"
|
||||
msgstr "Desegin"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Joan 10 segundo atzera"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Erreproduzitu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausatu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:119
|
||||
msgid "Fast forward 10 seconds"
|
||||
msgstr "Joan 10 segundo aurrera"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:285
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Aldatu erreprodukzioaren abiadura"
|
||||
|
||||
#: 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 abiadura-tasa"
|
||||
|
||||
#: 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 abiadura-tasa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Abiadura normala"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Markatu pasarte guztiak erreproduzitu gisa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:11
|
||||
msgid "_Website"
|
||||
msgstr "_Webgunea"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:15
|
||||
msgid "_Unsubscribe"
|
||||
msgstr "Harpidetza _kendu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:51
|
||||
msgid "Open Website"
|
||||
msgstr "Ireki webgunea"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:64
|
||||
msgid "Mark All as Played"
|
||||
msgstr "Markatu dena erreproduzitu gisa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_menu.ui:89
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Harpidetza kendu"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Pasarte berriak eskuratzen"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Berria"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:55
|
||||
msgid "Shows"
|
||||
msgstr "Saioak"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Hautatu saioak inportatzeko erabiliko duzun fitxategia."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
msgid "_Import"
|
||||
msgstr "_Inportatu"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
msgid "OPML file"
|
||||
msgstr "OPML fitxategia"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Huts egin du inportatuko fitxategia analizatzeak"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Hautatutako fitxategia ezin da eskuratu."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
msgid "Export shows to…"
|
||||
msgstr "Esportatu saioak hona…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "_Export"
|
||||
msgstr "_Esportatu"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Cancel"
|
||||
msgstr "_Utzi"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcasts harpidetzak"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Huts egin du podcast-ak esportatzeak"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:51
|
||||
msgid "Podcast Client for the GNOME Desktop."
|
||||
msgstr "Podcast-en bezeroa GNOME mahaigainerako."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:58
|
||||
msgid "Learn more about GNOME Podcasts"
|
||||
msgstr "Ikasi gehiago GNOME Podcasts aplikazioari buruz"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
msgid "translator-credits"
|
||||
msgstr "Asier Sarasua Garmendia <asier.sarasua@gmail.com>"
|
||||
|
||||
#: 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:535
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Multimedia-erreproduzigailuak ezin izan da ekintza bat exekutatu."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Markatu pasarte guztiak entzundako gisa"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
msgid "Unsubscribed from {}"
|
||||
msgstr "Kendu {} podcast-eko harpidetza"
|
||||
@ -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: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-23 13:44+0200\n"
|
||||
"POT-Creation-Date: 2019-05-18 12:55+0000\n"
|
||||
"PO-Revision-Date: 2019-06-01 20:20+0300\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.3\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"
|
||||
@ -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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
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:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Lisää uusi syöte"
|
||||
|
||||
@ -165,11 +165,15 @@ msgstr "Anna lisättävän syötteen osoite"
|
||||
msgid "Add"
|
||||
msgstr "Lisää"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Ohjelman nimi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
|
||||
@ -215,55 +219,51 @@ msgstr "Sovelluksen sisäinen ilmoitus"
|
||||
msgid "Undo"
|
||||
msgstr "Kumoa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Nyt toistetaan"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Vaihda toistonopeutta"
|
||||
|
||||
#: 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-kertainen nopeus"
|
||||
|
||||
#: 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-kertainen nopeus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Tavallinen nopeus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Siirry taakse 10 sekuntia"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Toista"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Keskeytä"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Vaihda toistonopeutta"
|
||||
|
||||
#: 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-kertainen nopeus"
|
||||
|
||||
#: 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-kertainen nopeus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Tavallinen nopeus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Merkitse kaikki jaksot toistetuiksi"
|
||||
@ -288,14 +288,18 @@ msgstr "Merkitse kaikki toistetuiksi"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Lopeta tilaus"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Lue lisää"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
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"
|
||||
@ -304,43 +308,43 @@ msgstr "Uudet"
|
||||
msgid "Shows"
|
||||
msgstr "Ohjelmat"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
msgid "Select the file from which to you want to import shows."
|
||||
msgstr "Valitse tiedosto, josta haluat tuoda ohjelmia."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:399
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
msgid "_Import"
|
||||
msgstr "_Tuo"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-tiedosto"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Tuotua tiedostoa ei voitu jäsentää"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Valittua tiedostoa ei voitu käyttää."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Vie jaksot…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Vie"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Peru"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Gnomen podcastsovelluksen tilaukset"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Podcastien vienti epäonnistui"
|
||||
|
||||
@ -361,7 +365,7 @@ msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Mediasoitin ei kyennyt suorittamaan toimintoa."
|
||||
|
||||
@ -373,15 +377,6 @@ 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,23 +2,22 @@
|
||||
# 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, 2020
|
||||
# Thibault Martin <mail@thibaultmart.in>, 2020.
|
||||
# Alexandre Franke <alexandre.franke@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: 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"
|
||||
"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"
|
||||
"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: Gtranslator 3.36.0\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 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"
|
||||
@ -50,7 +49,8 @@ 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 délais à attendre entre les actualisations automatiques"
|
||||
msgstr ""
|
||||
"Nombre de périodes 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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:353
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:82
|
||||
#: podcasts-gtk/src/app.rs:92 podcasts-gtk/src/app.rs:416
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:37
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -81,6 +81,11 @@ 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;"
|
||||
@ -90,13 +95,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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:68
|
||||
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’épisode"
|
||||
msgstr "Cette émission n’a pas encore d’épisodes"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/empty_view.ui:62
|
||||
msgid "If you think this is an error, please consider writing a bug report."
|
||||
@ -114,23 +119,19 @@ 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: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
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:180
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Calcul de la taille de l’épisode…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
msgid "Play this episode"
|
||||
msgstr "Lire cet épisode"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Annuler le téléchargement"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
msgid "Download this episode"
|
||||
msgstr "Télécharger cet épisode"
|
||||
|
||||
@ -142,20 +143,20 @@ msgstr "_Chercher de nouveaux épisodes"
|
||||
msgid "_Import Shows"
|
||||
msgstr "_Importer les émissions"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:16
|
||||
msgid "_Export Shows"
|
||||
msgstr "_Exporter les émissions"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "_Préférences"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:27
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Raccourcis clavier"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
msgid "_About Podcasts"
|
||||
msgstr "À _propos de Podcasts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Ajouter un nouveau flux"
|
||||
|
||||
@ -167,11 +168,15 @@ msgstr "Entrer l’adresse du flux à ajouter"
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Titre de l’émission"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
@ -186,6 +191,11 @@ 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"
|
||||
|
||||
@ -217,55 +227,72 @@ msgstr "Une notification d’action intégrée à l’application"
|
||||
msgid "Undo"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Lecture en cours"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Changer la vitesse de lecture"
|
||||
|
||||
#: 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 "Débit × 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 "Débit × 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Vitesse normale"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Reculer de 10 secondes"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Lire"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 "Débit × 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 "Débit × 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
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/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Apparence"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Thème sombre"
|
||||
|
||||
#: 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/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Marquer tous les épisodes comme lus"
|
||||
@ -290,135 +317,91 @@ msgstr "Marquer tout comme lu"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Se désabonner"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "En savoir plus"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:287
|
||||
#: podcasts-gtk/src/app.rs:333
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Récupérer les nouveaux épisodes"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
#: 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
|
||||
msgid "New"
|
||||
msgstr "Nouveau"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:55
|
||||
#: podcasts-gtk/src/stacks/content.rs:36
|
||||
msgid "Shows"
|
||||
msgstr "Émissions"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:398
|
||||
#: podcasts-gtk/src/utils.rs:357
|
||||
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:401
|
||||
#: podcasts-gtk/src/utils.rs:360
|
||||
msgid "_Import"
|
||||
msgstr "_Importer"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:410 podcasts-gtk/src/utils.rs:457
|
||||
#: podcasts-gtk/src/utils.rs:369
|
||||
msgid "OPML file"
|
||||
msgstr "Fichier OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
#: podcasts-gtk/src/utils.rs:386
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Échec de l’analyse du fichier importé"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:432 podcasts-gtk/src/utils.rs:475
|
||||
#: podcasts-gtk/src/utils.rs:391
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Le fichier sélectionné n’est pas accessible."
|
||||
|
||||
#: 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
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:32
|
||||
msgid "Podcast Client for the GNOME Desktop."
|
||||
msgstr "Client de podcast pour le bureau GNOME."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:58
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:39
|
||||
msgid "Learn more about GNOME Podcasts"
|
||||
msgstr "En apprendre plus sur GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:44
|
||||
msgid "translator-credits"
|
||||
msgstr ""
|
||||
"Alexandre Franke\n"
|
||||
"Thibault Martin"
|
||||
msgstr "Alexandre Franke"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:149
|
||||
#: podcasts-gtk/src/widgets/episode.rs:130
|
||||
msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:828
|
||||
#: podcasts-gtk/src/widgets/player.rs:365
|
||||
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:174
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:150
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Marquer tous les épisodes comme écoutés"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:155
|
||||
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: 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"
|
||||
"POT-Creation-Date: 2018-09-03 13:42+0000\n"
|
||||
"PO-Revision-Date: 2018-09-04 20:17+0200\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"
|
||||
"X-Generator: Poedit 2.2.4\n"
|
||||
"Last-Translator: \n"
|
||||
"X-Generator: Poedit 2.0.7\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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
#: podcasts-gtk/src/app.rs:91 podcasts-gtk/src/app.rs:414
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:31
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -78,6 +78,11 @@ 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;"
|
||||
@ -87,7 +92,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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:51
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -97,9 +102,7 @@ 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"
|
||||
@ -113,26 +116,22 @@ 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: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
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:178
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Calcul de dimension dal episodi…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
msgid "Play this episode"
|
||||
msgstr "Viôt chest episodi"
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:214
|
||||
msgid "Cancel"
|
||||
msgstr "Anule"
|
||||
|
||||
#: 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
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:232
|
||||
msgid "Download this episode"
|
||||
msgstr "Discjarie chest episodi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:256
|
||||
msgid "Play this episode"
|
||||
msgstr "Viôt chest episodi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:7
|
||||
msgid "_Check for New Episodes"
|
||||
msgstr "_Controle par gnûfs episodis"
|
||||
@ -141,20 +140,20 @@ msgstr "_Controle par gnûfs episodis"
|
||||
msgid "_Import Shows"
|
||||
msgstr "_Impuarte spetacui"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:16
|
||||
msgid "_Export Shows"
|
||||
msgstr "_Espuarte spetacui"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "_Preferencis"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:29
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Scurtis tastiere"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
msgid "_About Podcasts"
|
||||
msgstr "_Informazions su Podcasts"
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:37
|
||||
msgid "_About"
|
||||
msgstr "_Informazions"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Zonte un gnûf feed"
|
||||
|
||||
@ -166,11 +165,15 @@ msgstr "Inserìs la direzion dal feed di zontâ"
|
||||
msgid "Add"
|
||||
msgstr "Zonte"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Titul dal spetacul"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Indaûr"
|
||||
|
||||
@ -185,6 +188,11 @@ 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"
|
||||
|
||||
@ -261,6 +269,27 @@ 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"
|
||||
@ -285,136 +314,91 @@ msgstr "Segne dut come viodût"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Anule sotscrizion"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Lei di plui"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:332
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Daûr a recuperâ i gnûfs episodis"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
#: 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
|
||||
msgid "New"
|
||||
msgstr "Gnûf"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:55
|
||||
#: podcasts-gtk/src/stacks/content.rs:36
|
||||
msgid "Shows"
|
||||
msgstr "Spetacui"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:357
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:360
|
||||
msgid "_Import"
|
||||
msgstr "_Impuarte"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:369
|
||||
msgid "OPML file"
|
||||
msgstr "File OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:386
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "No si è rivâts a analizâ il file impuartât"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:391
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Il file selezionât nol pues jessi doprât."
|
||||
|
||||
#: 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
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:26
|
||||
msgid "Podcast Client for the GNOME Desktop."
|
||||
msgstr "Client podcast pal scritori GNOME."
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:58
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:33
|
||||
msgid "Learn more about GNOME Podcasts"
|
||||
msgstr "Plui informazions su GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:38
|
||||
msgid "translator-credits"
|
||||
msgstr "Fabio Tomat <f.t.public@gmail.com>"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
#: podcasts-gtk/src/widgets/episode.rs:129
|
||||
msgid "{} min"
|
||||
msgstr "{} min"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:539
|
||||
#: podcasts-gtk/src/widgets/player.rs:301
|
||||
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:179
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:150
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Segnât ducj i episodis come scoltâts"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:155
|
||||
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: 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"
|
||||
"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"
|
||||
"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.0.6\n"
|
||||
"X-Generator: Poedit 2.2.1\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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
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:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
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:171
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
msgid "Show Title"
|
||||
msgstr "Prikaži naslov"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
msgid "Back"
|
||||
msgstr "Natrag"
|
||||
|
||||
@ -219,55 +219,51 @@ msgstr "Obavijesti radnja iz aplikacije"
|
||||
msgid "Undo"
|
||||
msgstr "Vrati"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Trenutna reprodukcija"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Promijeni brzinu reprodukcije"
|
||||
|
||||
#: 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 brže"
|
||||
|
||||
#: 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 brže"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normalna brzina"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Premotaj 10 sekundi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Reproduciraj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pauziraj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 brže"
|
||||
|
||||
#: 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 brže"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Normalna brzina"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Označi se epizode kao odslušane"
|
||||
@ -292,14 +288,18 @@ msgstr "Označi sve kao odslušano"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Ukini pretplatu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Pročitaj više"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
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:396
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
msgid "_Import"
|
||||
msgstr "_Uvoz"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "OPML datoteka"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Neuspjela obrada uvezene datoteke"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Nemoguć pristup dabranoj datoteci."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "_Izvezi emisije u…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Uvoz"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Odustani"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcast pretplate"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
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:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Medijski reproduktor nije uspio izvršiti radnju."
|
||||
|
||||
@ -379,12 +379,6 @@ 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, 2020 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2018, 2019. 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, 2020.
|
||||
# Balázs Úr <ur.balazs at fsf dot hu>, 2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-17 23:31+0100\n"
|
||||
"POT-Creation-Date: 2019-05-18 12:55+0000\n"
|
||||
"PO-Revision-Date: 2019-06-03 22:27+0200\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 19.04.3\n"
|
||||
"X-Generator: Lokalize 18.12.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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -114,6 +114,7 @@ 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."
|
||||
|
||||
@ -154,7 +155,7 @@ msgid "_About Podcasts"
|
||||
msgstr "A Podcastok _névjegye"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Új csatorna hozzáadása"
|
||||
|
||||
@ -166,11 +167,15 @@ msgstr "Adja meg a hozzáadandó csatorna címét"
|
||||
msgid "Add"
|
||||
msgstr "Hozzáadás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Műsor címe"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Vissza"
|
||||
|
||||
@ -216,55 +221,51 @@ msgstr "Alkalmazáson belüli műveletértesítések"
|
||||
msgid "Undo"
|
||||
msgstr "Visszavonás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Most játssza"
|
||||
|
||||
#: 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_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-szeres sebesség"
|
||||
|
||||
#: 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-szörös sebesség"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normál sebesség"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Visszatekerés 10 másodperccel"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Lejátszás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Szünet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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-szeres sebesség"
|
||||
|
||||
#: 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-szörös sebesség"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Normál sebesség"
|
||||
|
||||
#: 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"
|
||||
@ -289,14 +290,18 @@ msgstr "Összes megjelölése lejátszottként"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Leiratkozás"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Olvassa tovább"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
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"
|
||||
@ -305,43 +310,43 @@ msgstr "Új"
|
||||
msgid "Shows"
|
||||
msgstr "Műsorok"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
msgid "_Import"
|
||||
msgstr "_Importálás"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "OPML fájl"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Az importált fájl feldolgozása meghiúsult"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "A kiválasztott fájlok nem érhetőek el."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Műsorok exportálása ide…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Exportálás"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Mégse"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcastok feliratkozások"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "A podcastok exportálása meghiúsult"
|
||||
|
||||
@ -362,7 +367,7 @@ msgid "{} min"
|
||||
msgstr "{} perc"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
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-2020.
|
||||
# Kukuh Syafaat <kukuhsyafaat@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: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-13 19:33+0700\n"
|
||||
"POT-Creation-Date: 2019-06-15 10:55+0000\n"
|
||||
"PO-Revision-Date: 2019-07-11 15:21+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.3\n"
|
||||
"X-Generator: Poedit 2.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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
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:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
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:171
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
msgid "Show Title"
|
||||
msgstr "Tampilkan Judul"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
@ -216,55 +216,51 @@ msgstr "Notifikasi aksi dalam aplikasi"
|
||||
msgid "Undo"
|
||||
msgstr "Tak Jadi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Sedang Diputar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Ubah kecepatan pemutaran"
|
||||
|
||||
#: 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_rate.ui:86
|
||||
msgid "1.50×"
|
||||
msgstr "1.50×"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:90
|
||||
msgid "1.5 speed rate"
|
||||
msgstr "tingkat kecepatan 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 "tingkat kecepatan 1.25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Kecepatan normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Putar mundur 10 detik"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Putar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Jeda"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
msgid "1.00×"
|
||||
msgstr "Ubah kecepatan pemutaran"
|
||||
|
||||
#: 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 "tingkat kecepatan 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 "tingkat kecepatan 1.25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Kecepatan normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "Tandai Se_mua Episode sebagai Sudah Diputar"
|
||||
@ -289,14 +285,18 @@ msgstr "Tandai Semua sebagai Sudah Diputar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Berhenti Berlangganan"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Baca Lebih Lanjut"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
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:396
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
msgid "_Import"
|
||||
msgstr "_Impor"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "Berkas OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Gagal mengurai berkas yang diimpor"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Berkas yang dipilih tidak dapat diakses."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Ekspor acara ke…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Ekspor"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Batal"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Berlangganan GNOME Podcast"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
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-2020."
|
||||
msgstr "Kukuh Syafaat <kukuhsyafaat@gnome.org>, 2018, 2019."
|
||||
|
||||
#: 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:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Pemutar media tidak dapat melakukan aksi."
|
||||
|
||||
@ -374,12 +374,6 @@ 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, 2020 podcasts's Free Software Foundation, Inc.
|
||||
# Copyright (C) 2018, 2019 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, 2020.
|
||||
# Milo Casagrande <milo@milo.name>, 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: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-03-06 09:41+0100\n"
|
||||
"POT-Creation-Date: 2019-02-02 15:17+0000\n"
|
||||
"PO-Revision-Date: 2019-02-28 09:25+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.4\n"
|
||||
"X-Generator: Poedit 2.2.1\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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:124 podcasts-gtk/src/app.rs:455
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcast"
|
||||
|
||||
@ -79,6 +79,11 @@ 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;"
|
||||
@ -88,7 +93,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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -112,23 +117,19 @@ 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:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Questo episodio è già stato ascoltato."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:180
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Calcolo dimensione episodio…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
msgid "Play this episode"
|
||||
msgstr "Riproduci questo episodio"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Annulla lo scaricamento"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
msgid "Download this episode"
|
||||
msgstr "Scarica questo episodio"
|
||||
|
||||
@ -145,15 +146,19 @@ 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:30
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
msgid "_About Podcasts"
|
||||
msgstr "I_nformazioni su Podcast"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Aggiungi nuovo feed"
|
||||
|
||||
@ -165,11 +170,15 @@ msgstr "Inserire un indirizzo da aggiungere"
|
||||
msgid "Add"
|
||||
msgstr "Aggiungi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Titolo show"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
@ -184,6 +193,11 @@ 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"
|
||||
|
||||
@ -215,55 +229,72 @@ msgstr "Una notifica"
|
||||
msgid "Undo"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "In riproduzione"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Modifica la velocità di riproduzione"
|
||||
|
||||
#: 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 volte la velocità"
|
||||
|
||||
#: 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 volte la velocità"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocità normale"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Indietro 10 secondi"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Riproduci"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 volte la velocità"
|
||||
|
||||
#: 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 volte la velocità"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
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/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Aspetto"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Tema scuro"
|
||||
|
||||
#: 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/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Segna tutti gli episodi come ascoltati"
|
||||
@ -288,14 +319,38 @@ msgstr "Segna tutti ascoltati"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Annulla abbonamento"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Leggi altro"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:369
|
||||
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"
|
||||
@ -304,43 +359,43 @@ msgstr "Nuovo"
|
||||
msgid "Shows"
|
||||
msgstr "Show"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:377
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:380
|
||||
msgid "_Import"
|
||||
msgstr "_Importa"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:389 podcasts-gtk/src/utils.rs:435
|
||||
msgid "OPML file"
|
||||
msgstr "File OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:406
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Analisi del file importato non riuscita"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:411 podcasts-gtk/src/utils.rs:453
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Impossibile accedere al file selezionato."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:423
|
||||
msgid "Export shows to…"
|
||||
msgstr "Esporta show su…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "_Export"
|
||||
msgstr "_Esporta"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
msgid "_Cancel"
|
||||
msgstr "A_nnulla"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Abbonamenti Podcast GNOME"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Esportazioni podcast non riuscita"
|
||||
|
||||
@ -356,19 +411,22 @@ msgstr "Maggiori informazioni su Podcast GNOME"
|
||||
msgid "translator-credits"
|
||||
msgstr "Milo Casagrande <milo@milo.name>"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
#: 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:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:536
|
||||
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:179
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:169
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Episodi segnati come letti"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
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-2020.
|
||||
# Nathan Follens <nthn@unseen.is>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-26 14:31+0100\n"
|
||||
"POT-Creation-Date: 2019-02-02 15:17+0000\n"
|
||||
"PO-Revision-Date: 2019-02-26 12:47+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.3\n"
|
||||
"X-Generator: Poedit 2.2.1\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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:124 podcasts-gtk/src/app.rs:455
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcasts"
|
||||
|
||||
@ -79,6 +79,11 @@ 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;"
|
||||
@ -88,7 +93,7 @@ msgstr "Podcast;RSS;"
|
||||
msgid "Podcast app for GNOME"
|
||||
msgstr "Podcast-toepassing voor Gnome"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -112,23 +117,19 @@ 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:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "U heeft deze aflevering reeds beluisterd."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:180
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Grootte van aflevering berekenen…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
msgid "Play this episode"
|
||||
msgstr "Deze aflevering afspelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Downloadproces annuleren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
msgid "Download this episode"
|
||||
msgstr "Deze aflevering downloaden"
|
||||
|
||||
@ -145,15 +146,19 @@ 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:30
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
msgid "_About Podcasts"
|
||||
msgstr "_Over Podcasts"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Nieuwe feed toevoegen"
|
||||
|
||||
@ -165,11 +170,15 @@ msgstr "Voer het toe te voegen feedadres in"
|
||||
msgid "Add"
|
||||
msgstr "Toevoegen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Titel tonen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
@ -184,6 +193,11 @@ 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"
|
||||
|
||||
@ -215,55 +229,72 @@ msgstr "Een in-app-actiemelding"
|
||||
msgid "Undo"
|
||||
msgstr "Ongedaan maken"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "U luistert naar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "De afspeelsnelheid wijzigen"
|
||||
|
||||
#: 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 snelheid"
|
||||
|
||||
#: 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 snelheid"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normale snelheid"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 seconden terugspoelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Afspelen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pauzeren"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 snelheid"
|
||||
|
||||
#: 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 snelheid"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
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/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Uiterlijk"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Donker thema"
|
||||
|
||||
#: 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/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "Alle afleveringen _markeren als afgespeeld"
|
||||
@ -288,14 +319,38 @@ msgstr "Alles markeren als afgespeeld"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Opzeggen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Lees meer"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:369
|
||||
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"
|
||||
@ -304,43 +359,43 @@ msgstr "Nieuw"
|
||||
msgid "Shows"
|
||||
msgstr "Shows"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:377
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:380
|
||||
msgid "_Import"
|
||||
msgstr "_Importeren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:389 podcasts-gtk/src/utils.rs:435
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-bestand"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:406
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Verwerken van geïmporteerd bestand mislukt"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:411 podcasts-gtk/src/utils.rs:453
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Kon geen toegang verkrijgen tot geselecteerd bestand."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:423
|
||||
msgid "Export shows to…"
|
||||
msgstr "Shows exporteren naar…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "_Export"
|
||||
msgstr "_Exporteren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
msgid "_Cancel"
|
||||
msgstr "_Annuleren"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Gnome Podcasts-abonnementen"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Exporteren van podcasts mislukt"
|
||||
|
||||
@ -359,65 +414,19 @@ msgstr ""
|
||||
"\n"
|
||||
"Meer info over Gnome-NL http://nl.gnome.org/"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
#: 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:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:536
|
||||
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:179
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:169
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Alle afleveringen markeren als beluisterd"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
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-2020 the podcasts authors.
|
||||
# Copyright © 2018-2019 the podcasts authors.
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2018-2020.
|
||||
# Aviary.pl <community-poland@mozilla.org>, 2018-2020.
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2018-2019.
|
||||
# Aviary.pl <community-poland@mozilla.org>, 2018-2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: podcasts\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/World/podcasts/issues\n"
|
||||
"POT-Creation-Date: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-09 12:19+0100\n"
|
||||
"POT-Creation-Date: 2019-05-18 12:55+0000\n"
|
||||
"PO-Revision-Date: 2019-05-19 12:37+0200\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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
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:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Dodaje nowy kanał"
|
||||
|
||||
@ -166,11 +166,15 @@ msgstr "Adres kanału do dodania"
|
||||
msgid "Add"
|
||||
msgstr "Dodaj"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: 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
|
||||
msgid "Show Title"
|
||||
msgstr "Tytuł programu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Wstecz"
|
||||
|
||||
@ -216,55 +220,51 @@ msgstr "Powiadomienie z działaniem w programie"
|
||||
msgid "Undo"
|
||||
msgstr "Cofnij"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Odtwarzanie"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Zmienia prędkość odtwarzania"
|
||||
|
||||
#: 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 "Prędkość 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 "Prędkość 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Zwykła prędkość"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Przewija wstecz o 10 sekund"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Odtwarza"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Wstrzymuje"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 "Prędkość 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 "Prędkość 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Zwykła prędkość"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Oznacz wszystkie odcinki jako odtworzone"
|
||||
@ -289,14 +289,18 @@ msgstr "Oznacz wszystkie jako odtworzone"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Zrezygnuj z subskrypcji"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Czytaj dalej"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
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"
|
||||
@ -305,43 +309,43 @@ msgstr "Nowe"
|
||||
msgid "Shows"
|
||||
msgstr "Programy"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
msgid "_Import"
|
||||
msgstr "Zai_mportuj"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "Plik OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Przetworzenie zaimportowanego pliku się nie powiodło"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Nie można uzyskać dostępu do wybranego pliku."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Eksport programów do…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "Wy_eksportuj"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Anuluj"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Subskrypcje Podcastów GNOME"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Wyeksportowanie podcastów się nie powiodło"
|
||||
|
||||
@ -356,15 +360,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-2020\n"
|
||||
"Aviary.pl <community-poland@mozilla.org>, 2018-2020"
|
||||
"Piotr Drąg <piotrdrag@gmail.com>, 2018-2019\n"
|
||||
"Aviary.pl <community-poland@mozilla.org>, 2018-2019"
|
||||
|
||||
#: 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:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
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) 2020 podcasts's COPYRIGHT HOLDER
|
||||
# Copyright (C) 2019 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, 2020.
|
||||
# Yuri Otávio Lopes Gomes <yuriotavio@hotmail.com>, 2018.
|
||||
# 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: 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"
|
||||
"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"
|
||||
"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.3\n"
|
||||
"X-Generator: Poedit 2.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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:329
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:109 podcasts-gtk/src/app.rs:433
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
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:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:177
|
||||
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:171
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:157
|
||||
msgid "Show Title"
|
||||
msgstr "Mostrar título"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:198
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
|
||||
@ -219,55 +219,51 @@ msgstr "Uma notificação de ação no aplicativo"
|
||||
msgid "Undo"
|
||||
msgstr "Desfazer"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Reproduzindo agora"
|
||||
|
||||
#: 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_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 "Taxa de velocidade de 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 "Taxa de velocidade de 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocidade normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Retroceder 10 segundos"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Reproduz"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 "Taxa de velocidade de 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 "Taxa de velocidade de 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Velocidade normal"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Marcar todos os episódios como reproduzidos"
|
||||
@ -292,14 +288,18 @@ msgstr "Marcar todos como reproduzidos"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Desinscrever"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Leia mais"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:264
|
||||
#: podcasts-gtk/src/app.rs:351
|
||||
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:396
|
||||
#: podcasts-gtk/src/utils.rs:397
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:400
|
||||
msgid "_Import"
|
||||
msgstr "_Importar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:455
|
||||
#: podcasts-gtk/src/utils.rs:409 podcasts-gtk/src/utils.rs:457
|
||||
msgid "OPML file"
|
||||
msgstr "Arquivo OPML"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Falha ao analisar o arquivo importado"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:473
|
||||
#: podcasts-gtk/src/utils.rs:431 podcasts-gtk/src/utils.rs:475
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "O arquivo selecionado não pôde ser acessado."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:443
|
||||
#: podcasts-gtk/src/utils.rs:445
|
||||
msgid "Export shows to…"
|
||||
msgstr "Exportar podcasts para…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:446
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "_Export"
|
||||
msgstr "_Exportar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:449
|
||||
msgid "_Cancel"
|
||||
msgstr "_Cancelar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:467
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "Inscrições do GNOME Podcasts"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:470
|
||||
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:822
|
||||
#: podcasts-gtk/src/widgets/player.rs:534
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "O reprodutor de mídia não conseguiu executar uma ação."
|
||||
|
||||
@ -379,12 +379,6 @@ 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-2020 podcasts's COPYRIGHT HOLDER
|
||||
# Copyright © 2018, 2019 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2018, 2019, 2020.
|
||||
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 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: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-13 22:38+0100\n"
|
||||
"POT-Creation-Date: 2019-02-02 15:17+0000\n"
|
||||
"PO-Revision-Date: 2019-03-13 23:00+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.4\n"
|
||||
"X-Generator: Poedit 2.2.1\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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:124 podcasts-gtk/src/app.rs:455
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
msgid "Podcasts"
|
||||
msgstr "Poddsändningar"
|
||||
|
||||
@ -79,6 +79,11 @@ msgstr "Poddsändningar"
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "Lyssna på dina favoritpoddsändningar, direkt från ditt skrivbord."
|
||||
|
||||
#. 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;"
|
||||
@ -88,7 +93,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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -112,23 +117,19 @@ msgstr "Lägg till nya shower via flödes-URL"
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Importera shower från en annan enhet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Du har redan lyssnat på detta avsnitt."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:180
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Beräknar avsnittsstorlek…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
msgid "Play this episode"
|
||||
msgstr "Spela detta avsnitt"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
msgid "Cancel the download process"
|
||||
msgstr "Avbryt hämtningsprocessen"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
msgid "Download this episode"
|
||||
msgstr "Hämta detta avsnitt"
|
||||
|
||||
@ -145,15 +146,19 @@ msgid "_Export Shows"
|
||||
msgstr "_Exportera shower"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "I_nställningar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:27
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Tangentbordsgenvägar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
msgid "_About Podcasts"
|
||||
msgstr "_Om Poddsändningar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Lägg till ett nytt flöde"
|
||||
|
||||
@ -165,11 +170,15 @@ msgstr "Ange flödesadress att lägga till"
|
||||
msgid "Add"
|
||||
msgstr "Lägg till"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Du prenumererar redan på det flödet!"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
msgid "Show Title"
|
||||
msgstr "Visa titel"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Bakåt"
|
||||
|
||||
@ -184,6 +193,11 @@ msgstr "Sök efter nya avsnitt"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "Inställningar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Avsluta programmet"
|
||||
|
||||
@ -215,55 +229,72 @@ msgstr "En åtgärdsavisering i programmet"
|
||||
msgid "Undo"
|
||||
msgstr "Ångra"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Spelar nu"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:32
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Ändra uppspelningshastigheten"
|
||||
|
||||
#: 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 "Hastighetsfaktor 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 "Hastighetsfaktor 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Normal hastighet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "Spola tillbaka 10 sekunder"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Spela"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
msgid "Change the playback speed"
|
||||
msgstr "Ändra uppspelningshastigheten"
|
||||
|
||||
#: 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 "Hastighetsfaktor 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 "Hastighetsfaktor 1,25"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Normal hastighet"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Inställningar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Utseende"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Mörkt tema"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "Ta bort spelade avsnitt"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "Efter"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "_Markera alla avsnitt som spelade"
|
||||
@ -288,14 +319,38 @@ msgstr "Markera alla som spelade"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Säg upp prenumeration"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Läs mer"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:369
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Hämtar nya avsnitt"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Du prenumererar redan på denna show"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "Ogiltig URL"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:78
|
||||
msgid "Seconds"
|
||||
msgstr "Sekunder"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:79
|
||||
msgid "Minutes"
|
||||
msgstr "Minuter"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:80
|
||||
msgid "Hours"
|
||||
msgstr "Timmar"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:81
|
||||
msgid "Days"
|
||||
msgstr "Dagar"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:82
|
||||
msgid "Weeks"
|
||||
msgstr "Veckor"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Nytt"
|
||||
@ -304,43 +359,43 @@ msgstr "Nytt"
|
||||
msgid "Shows"
|
||||
msgstr "Shower"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:377
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:380
|
||||
msgid "_Import"
|
||||
msgstr "_Importera"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:389 podcasts-gtk/src/utils.rs:435
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:406
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "Misslyckades med att tolka den importerade filen"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:411 podcasts-gtk/src/utils.rs:453
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Den markerade filen kunde inte kommas åt."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:423
|
||||
msgid "Export shows to…"
|
||||
msgstr "Exportera shower till…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:426
|
||||
msgid "_Export"
|
||||
msgstr "_Exportera"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:427
|
||||
msgid "_Cancel"
|
||||
msgstr "A_vbryt"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Poddsändningar-prenumerationer"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Misslyckades med att exportera poddsändningar"
|
||||
|
||||
@ -360,71 +415,22 @@ msgstr ""
|
||||
"Skicka synpunkter på översättningen till\n"
|
||||
"<tp-sv@listor.tp-sv.se>."
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
#: 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:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:536
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Mediaspelaren kunde inte utföra en åtgärd."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:169
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Markerade alla avsnitt som lyssnade"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:174
|
||||
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@"
|
||||
|
||||
#~ msgid "_Preferences"
|
||||
#~ msgstr "I_nställningar"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "Du prenumererar redan på det flödet!"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Inställningar"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Inställningar"
|
||||
|
||||
#~ msgid "Appearance"
|
||||
#~ msgstr "Utseende"
|
||||
|
||||
#~ msgid "Dark Theme"
|
||||
#~ msgstr "Mörkt tema"
|
||||
|
||||
#~ msgid "Delete played episodes"
|
||||
#~ msgstr "Ta bort spelade avsnitt"
|
||||
|
||||
#~ msgid "After"
|
||||
#~ msgstr "Efter"
|
||||
|
||||
#~ msgid "Seconds"
|
||||
#~ msgstr "Sekunder"
|
||||
|
||||
#~ msgid "Minutes"
|
||||
#~ msgstr "Minuter"
|
||||
|
||||
#~ msgid "Hours"
|
||||
#~ msgstr "Timmar"
|
||||
|
||||
#~ msgid "Days"
|
||||
#~ msgstr "Dagar"
|
||||
|
||||
#~ msgid "Weeks"
|
||||
#~ msgstr "Veckor"
|
||||
|
||||
#~ msgid "_About"
|
||||
#~ msgstr "_Om"
|
||||
|
||||
@ -1,16 +1,14 @@
|
||||
# Turkish translation for podcasts.
|
||||
# Copyright (C) 2018-2019 podcasts's COPYRIGHT HOLDER
|
||||
# Copyright (C) 2018 podcasts's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the podcasts package.
|
||||
#
|
||||
# Emin Tufan Çetin <etcetin@gmail.com>, 2018-2020.
|
||||
# Sabri Ünal <libreajans@gmail.com>, 2019.
|
||||
# Emin Tufan Çetin <etcetin@gmail.com>, 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: 2020-02-07 11:33+0000\n"
|
||||
"PO-Revision-Date: 2020-02-19 10:52+0300\n"
|
||||
"POT-Creation-Date: 2019-03-03 16:03+0000\n"
|
||||
"PO-Revision-Date: 2019-03-06 13:46+0300\n"
|
||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
|
||||
"Language: tr\n"
|
||||
@ -18,7 +16,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"X-Generator: Gtranslator 3.30.1\n"
|
||||
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.gschema.xml:15
|
||||
msgid "Top position of the last open main window"
|
||||
@ -71,8 +69,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/resources/gtk/headerbar.ui:158 podcasts-gtk/src/app.rs:330
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56 podcasts-gtk/src/window.rs:80
|
||||
#: podcasts-gtk/src/app.rs:124 podcasts-gtk/src/app.rs:463
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:56
|
||||
msgid "Podcasts"
|
||||
msgstr "Podcastler"
|
||||
|
||||
@ -81,6 +79,11 @@ msgstr "Podcastler"
|
||||
msgid "Listen to your favorite podcasts, right from your desktop."
|
||||
msgstr "Gözde podcastlerinizi masaüstünüzden dinleyin."
|
||||
|
||||
#. 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;"
|
||||
@ -90,7 +93,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:84
|
||||
#: podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in:77
|
||||
msgid "Jordan Petridis"
|
||||
msgstr "Jordan Petridis"
|
||||
|
||||
@ -114,23 +117,19 @@ msgstr "Besleme URLʼsi ile yeni gösteriler ekle"
|
||||
msgid "Import shows from another device"
|
||||
msgstr "Gösterileri başka aygıttan içe aktar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:79
|
||||
msgid "You’ve already listened to this episode."
|
||||
msgstr "Bu bölümü zaten dinlediniz."
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:208
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:180
|
||||
msgid "Calculating episode size…"
|
||||
msgstr "Bölüm boyutu hesaplanıyor…"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:248
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:220
|
||||
msgid "Play this episode"
|
||||
msgstr "Bu bölümü oynat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:269
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:241
|
||||
msgid "Cancel the download process"
|
||||
msgstr "İndirme sürecini iptal et"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:292
|
||||
#: podcasts-gtk/resources/gtk/episode_widget.ui:264
|
||||
msgid "Download this episode"
|
||||
msgstr "Bu bölümü indir"
|
||||
|
||||
@ -147,15 +146,19 @@ msgid "_Export Shows"
|
||||
msgstr "_Gösterileri Dışa Aktar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:22
|
||||
msgid "_Preferences"
|
||||
msgstr "_Tercihler"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:27
|
||||
msgid "_Keyboard Shortcuts"
|
||||
msgstr "_Klavye Kısayolları"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:30
|
||||
#: podcasts-gtk/resources/gtk/hamburger.ui:35
|
||||
msgid "_About Podcasts"
|
||||
msgstr "Podcastler _Hakkında"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:35
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:186
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:189
|
||||
msgid "Add a new feed"
|
||||
msgstr "Yeni besleme ekle"
|
||||
|
||||
@ -167,11 +170,15 @@ msgstr "Eklenecek besleme adresini gir"
|
||||
msgid "Add"
|
||||
msgstr "Ekle"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:171
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:133
|
||||
msgid "You are already subscribed to that feed!"
|
||||
msgstr "Bu beslemeye zaten abonesiniz!"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:169
|
||||
msgid "Show Title"
|
||||
msgstr "Gösteri Başlığı"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:207
|
||||
#: podcasts-gtk/resources/gtk/headerbar.ui:210
|
||||
msgid "Back"
|
||||
msgstr "Geri"
|
||||
|
||||
@ -186,6 +193,11 @@ msgstr "Yeni bölümleri denetle"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:25
|
||||
msgctxt "shortcut window"
|
||||
msgid "Preferences"
|
||||
msgstr "Tercihler"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/help-overlay.ui:32
|
||||
msgctxt "shortcut window"
|
||||
msgid "Quit the application"
|
||||
msgstr "Uygulamadan çık"
|
||||
|
||||
@ -217,55 +229,72 @@ msgstr "Uygulama içi eylem bildirimi"
|
||||
msgid "Undo"
|
||||
msgstr "Geri al"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_dialog.ui:14
|
||||
msgid "Now Playing"
|
||||
msgstr "Şimdi Oynatılıyor"
|
||||
|
||||
#: 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_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 hız oranı"
|
||||
|
||||
#: 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 hız oranı"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_rate.ui:126
|
||||
msgid "Normal speed"
|
||||
msgstr "Olağan hız"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:97
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:72
|
||||
msgid "Rewind 10 seconds"
|
||||
msgstr "10 saniye geri sar"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:112
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:87
|
||||
msgid "Play"
|
||||
msgstr "Oynat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:128
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:103
|
||||
msgid "Pause"
|
||||
msgstr "Duraklat"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:144
|
||||
#: 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
|
||||
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
|
||||
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 hız oranı"
|
||||
|
||||
#: 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 hız oranı"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/player_toolbar.ui:384
|
||||
msgid "Normal speed"
|
||||
msgstr "Olağan hız"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:42
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:295
|
||||
msgid "Preferences"
|
||||
msgstr "Tercihler"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:76
|
||||
msgid "Appearance"
|
||||
msgstr "Görünüm"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:120
|
||||
msgid "Dark Theme"
|
||||
msgstr "Karanlık Gövde"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:166
|
||||
msgid "Delete played episodes"
|
||||
msgstr "Oynatılan bölümleri sil"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/prefs.ui:211
|
||||
msgid "After"
|
||||
msgstr "Şundan Sonra"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/secondary_menu.ui:7
|
||||
msgid "_Mark All Episodes as Played"
|
||||
msgstr "Tüm Bölümleri Oynatıldı Olarak _İmle"
|
||||
@ -290,14 +319,38 @@ msgstr "Tümünü Oynatıldı Olarak İmle"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Abonelikten Çık"
|
||||
|
||||
#: podcasts-gtk/resources/gtk/show_widget.ui:99
|
||||
msgid "Read More"
|
||||
msgstr "Daha Çoğunu Oku"
|
||||
|
||||
#: podcasts-gtk/src/app.rs:265
|
||||
#: podcasts-gtk/src/app.rs:378
|
||||
msgid "Fetching new episodes"
|
||||
msgstr "Yeni bölümler alınıyor"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:117
|
||||
msgid "You are already subscribed to this show"
|
||||
msgstr "Bu gösteriye zaten abonesiniz"
|
||||
|
||||
#: podcasts-gtk/src/headerbar.rs:125
|
||||
msgid "Invalid URL"
|
||||
msgstr "Geçersiz URL"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:78
|
||||
msgid "Seconds"
|
||||
msgstr "Saniye"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:79
|
||||
msgid "Minutes"
|
||||
msgstr "Dakika"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:80
|
||||
msgid "Hours"
|
||||
msgstr "Saat"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:81
|
||||
msgid "Days"
|
||||
msgstr "Gün"
|
||||
|
||||
#: podcasts-gtk/src/prefs.rs:82
|
||||
msgid "Weeks"
|
||||
msgstr "Hafta"
|
||||
|
||||
#: podcasts-gtk/src/stacks/content.rs:54
|
||||
msgid "New"
|
||||
msgstr "Yeni"
|
||||
@ -306,43 +359,43 @@ msgstr "Yeni"
|
||||
msgid "Shows"
|
||||
msgstr "Gösteriler"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:396
|
||||
#: podcasts-gtk/src/utils.rs:387
|
||||
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:399
|
||||
#: podcasts-gtk/src/utils.rs:390
|
||||
msgid "_Import"
|
||||
msgstr "_İçe Aktar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:408 podcasts-gtk/src/utils.rs:456
|
||||
#: podcasts-gtk/src/utils.rs:399 podcasts-gtk/src/utils.rs:447
|
||||
msgid "OPML file"
|
||||
msgstr "OPML dosyası"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:425
|
||||
#: podcasts-gtk/src/utils.rs:416
|
||||
msgid "Failed to parse the imported file"
|
||||
msgstr "İçe aktarılan dosya ayrıştırılamadı"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:430 podcasts-gtk/src/utils.rs:474
|
||||
#: podcasts-gtk/src/utils.rs:421 podcasts-gtk/src/utils.rs:465
|
||||
msgid "Selected file could not be accessed."
|
||||
msgstr "Seçilen dosyaya erişilemedi."
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:444
|
||||
#: podcasts-gtk/src/utils.rs:435
|
||||
msgid "Export shows to…"
|
||||
msgstr "Gösterileri dışa aktar…"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:447
|
||||
#: podcasts-gtk/src/utils.rs:438
|
||||
msgid "_Export"
|
||||
msgstr "_Dışa Aktar"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:448
|
||||
#: podcasts-gtk/src/utils.rs:439
|
||||
msgid "_Cancel"
|
||||
msgstr "_İptal"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:468
|
||||
#: podcasts-gtk/src/utils.rs:459
|
||||
msgid "GNOME Podcasts Subscriptions"
|
||||
msgstr "GNOME Podcastler Abonelikleri"
|
||||
|
||||
#: podcasts-gtk/src/utils.rs:469
|
||||
#: podcasts-gtk/src/utils.rs:460
|
||||
msgid "Failed to export podcasts"
|
||||
msgstr "Podcastler dışa aktarılamadı"
|
||||
|
||||
@ -356,76 +409,25 @@ msgstr "GNOME Podcastler hakkında daha çoğunu öğrenin"
|
||||
|
||||
#: podcasts-gtk/src/widgets/aboutdialog.rs:63
|
||||
msgid "translator-credits"
|
||||
msgstr ""
|
||||
"Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||
"Sabri Ünal <libreajans@gmail.com>"
|
||||
msgstr "Emin Tufan Çetin <etcetin@gmail.com>"
|
||||
|
||||
#: podcasts-gtk/src/widgets/episode.rs:148
|
||||
#: podcasts-gtk/src/widgets/episode.rs:145
|
||||
msgid "{} min"
|
||||
msgstr "{} dak"
|
||||
|
||||
#. sender.send(Action::ErrorNotification(format!("Player Error: {}", error)));
|
||||
#: podcasts-gtk/src/widgets/player.rs:824
|
||||
#: podcasts-gtk/src/widgets/player.rs:536
|
||||
msgid "The media player was unable to execute an action."
|
||||
msgstr "Ortam oynatıcı eylemi yürütemiyor."
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:179
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:175
|
||||
msgid "Marked all episodes as listened"
|
||||
msgstr "Tüm bölümler dinlendi olarak imlendi"
|
||||
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:184
|
||||
#: podcasts-gtk/src/widgets/show_menu.rs:180
|
||||
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@"
|
||||
|
||||
#~ msgid "_Preferences"
|
||||
#~ msgstr "_Tercihler"
|
||||
|
||||
#~ msgid "You are already subscribed to that feed!"
|
||||
#~ msgstr "Bu beslemeye zaten abonesiniz!"
|
||||
|
||||
#~ msgctxt "shortcut window"
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Tercihler"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Tercihler"
|
||||
|
||||
#~ msgid "Appearance"
|
||||
#~ msgstr "Görünüm"
|
||||
|
||||
#~ msgid "Dark Theme"
|
||||
#~ msgstr "Karanlık Gövde"
|
||||
|
||||
#~ msgid "Delete played episodes"
|
||||
#~ msgstr "Oynatılan bölümleri sil"
|
||||
|
||||
#~ msgid "After"
|
||||
#~ msgstr "Şundan Sonra"
|
||||
|
||||
#~ msgid "Seconds"
|
||||
#~ msgstr "Saniye"
|
||||
|
||||
#~ msgid "Minutes"
|
||||
#~ msgstr "Dakika"
|
||||
|
||||
#~ msgid "Hours"
|
||||
#~ msgstr "Saat"
|
||||
|
||||
#~ msgid "Days"
|
||||
#~ msgstr "Gün"
|
||||
|
||||
#~ msgid "Weeks"
|
||||
#~ msgstr "Hafta"
|
||||
|
||||
#~ msgid "_About"
|
||||
#~ msgstr "_Hakkında"
|
||||
|
||||
|
||||
@ -1,386 +0,0 @@
|
||||
# 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 "Скасовано підписку на {}"
|
||||
@ -1,405 +0,0 @@
|
||||
# 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 "已退订 {}"
|
||||
@ -44,7 +44,7 @@ Tobias Bernard
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="info_container">
|
||||
<property name="width_request">200</property>
|
||||
<property name="width_request">230</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">start</property>
|
||||
@ -110,9 +110,6 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@ -146,9 +143,6 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@ -183,9 +177,6 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@ -221,9 +212,6 @@ Tobias Bernard
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
||||
@ -70,7 +70,7 @@ Tobias Bernard
|
||||
<object class="GtkEntry" id="new_url">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="width_chars">26</property>
|
||||
<property name="width_chars">30</property>
|
||||
<property name="input_purpose">url</property>
|
||||
</object>
|
||||
<packing>
|
||||
@ -129,52 +129,43 @@ Tobias Bernard
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="HdyHeaderBar" id="headerbar">
|
||||
<object class="GtkHeaderBar" 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="GtkStack" id="title_stack">
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="transition_type">crossfade</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="HdySqueezer" id="switch_squeezer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="transition_type">crossfade</property>
|
||||
<child>
|
||||
<object class="HdyViewSwitcher" id="switch">
|
||||
<object class="GtkStackSwitcher" 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>
|
||||
<property name="valign">center</property>
|
||||
</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>
|
||||
<style>
|
||||
<class name="title" />
|
||||
</style>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@ -1,306 +0,0 @@
|
||||
<?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>
|
||||
@ -1,269 +0,0 @@
|
||||
<?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,35 +54,10 @@ Tobias Bernard
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">skip-back-symbolic</property>
|
||||
</object>
|
||||
<object class="GtkBox" id="container">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">0</property>
|
||||
<child>
|
||||
<object class="GtkProgressBar" id="progress_bar">
|
||||
<property name="no_show_all">True</property>
|
||||
<style>
|
||||
<class name="playback-progress"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="evbox">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkActionBar" id="action_bar">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="valign">center</property>
|
||||
<child>
|
||||
<object class="HdySqueezer" id="squeezer">
|
||||
<property name="visible">True</property>
|
||||
<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>
|
||||
@ -164,7 +139,6 @@ Tobias Bernard
|
||||
<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>
|
||||
@ -196,7 +170,6 @@ Tobias Bernard
|
||||
<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>
|
||||
@ -216,7 +189,6 @@ Tobias Bernard
|
||||
<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>
|
||||
@ -235,6 +207,9 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="seek">
|
||||
@ -243,7 +218,6 @@ Tobias Bernard
|
||||
<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>
|
||||
@ -263,9 +237,6 @@ Tobias Bernard
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">0:00</property>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@ -294,9 +265,6 @@ Tobias Bernard
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="label">0:00</property>
|
||||
<attributes>
|
||||
<attribute name="font-features" value="tnum=1"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@ -309,46 +277,27 @@ Tobias Bernard
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="small">
|
||||
<object class="GtkMenuButton" id="rate_button">
|
||||
<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="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="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>
|
||||
<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="receives_default">True</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="show_label_small">
|
||||
<object class="GtkLabel" id="rate_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="ellipsize">end</property>
|
||||
<property name="xalign">0</property>
|
||||
<style>
|
||||
<class name="player-show-label"/>
|
||||
</style>
|
||||
<property name="label" translatable="yes">1.00×</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@ -357,16 +306,11 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="episode_label_small">
|
||||
<object class="GtkImage">
|
||||
<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>
|
||||
<property name="icon_name">go-down-symbolic</property>
|
||||
<property name="icon_size">1</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@ -375,50 +319,115 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<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_2_00">
|
||||
<property name="label" translatable="yes">2.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">2 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_75">
|
||||
<property name="label" translatable="yes">1.75×</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="tooltip_text" translatable="yes">1.75 speed rate</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">normal_rate</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStack" id="play_pause_small">
|
||||
<object class="GtkRadioButton" id="rate_1_50">
|
||||
<property name="label" translatable="yes">1.50×</property>
|
||||
<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>
|
||||
<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="pack_type">end</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</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">3</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>
|
||||
</child>
|
||||
<style>
|
||||
<class name="player-actionbar"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@ -58,80 +58,40 @@ Tobias Bernard
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="HdyColumn">
|
||||
<property name="visible">True</property>
|
||||
<property name="maximum_width">600</property>
|
||||
<child>
|
||||
<object class="GtkStack" id="description_stack">
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</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>
|
||||
<property name="hscrollbar_policy">never</property>
|
||||
<property name="min_content_height">80</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<object class="GtkViewport">
|
||||
<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>
|
||||
<property name="shadow_type">none</property>
|
||||
<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>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="name">full</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
|
||||
@ -18,24 +18,3 @@ 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
|
||||
}
|
||||
|
||||
@ -1,115 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128px" height="128px" viewBox="0 0 128 128" version="1.1">
|
||||
<defs>
|
||||
<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="8" y1="264" x2="120" y2="264" gradientTransform="matrix(1,0,0,1,0,-160.000006)">
|
||||
<stop offset="0" style="stop-color:rgb(64.705884%,11.372549%,17.647059%);stop-opacity:1;"/>
|
||||
<stop offset="0.0343218" style="stop-color:rgb(92.941177%,20%,23.137255%);stop-opacity:1;"/>
|
||||
<stop offset="0.0706241" style="stop-color:rgb(75.294119%,10.980392%,15.686275%);stop-opacity:1;"/>
|
||||
<stop offset="0.927675" style="stop-color:rgb(75.294119%,10.980392%,15.686275%);stop-opacity:1;"/>
|
||||
<stop offset="0.964286" style="stop-color:rgb(92.941177%,20%,23.137255%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(75.294119%,10.980392%,15.686275%);stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip1">
|
||||
<path d="M 52 62 L 76 62 L 76 74 L 52 74 Z M 52 62 "/>
|
||||
</clipPath>
|
||||
<filter id="alpha" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%">
|
||||
<feColorMatrix type="matrix" in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
|
||||
</filter>
|
||||
<mask id="mask0">
|
||||
<g filter="url(#alpha)">
|
||||
<rect x="0" y="0" width="128" height="128" style="fill:rgb(0%,0%,0%);fill-opacity:0.5;stroke:none;"/>
|
||||
</g>
|
||||
</mask>
|
||||
<clipPath id="clip2">
|
||||
<rect x="0" y="0" width="192" height="152"/>
|
||||
</clipPath>
|
||||
<g id="surface29618" clip-path="url(#clip2)">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(25.882354%,25.098041%,28.235295%);fill-opacity:1;" d="M 76 84 C 76 99.464844 63.464844 112 48 112 C 32.535156 112 20 99.464844 20 84 C 20 68.535156 32.535156 56 48 56 C 63.464844 56 76 68.535156 76 84 Z M 76 84 "/>
|
||||
</g>
|
||||
<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="8" y1="264" x2="120" y2="264" gradientTransform="matrix(1,0,0,1,0,-160.000006)">
|
||||
<stop offset="0" style="stop-color:rgb(64.705884%,11.372549%,17.647059%);stop-opacity:1;"/>
|
||||
<stop offset="0.0343218" style="stop-color:rgb(92.941177%,20%,23.137255%);stop-opacity:1;"/>
|
||||
<stop offset="0.0706241" style="stop-color:rgb(75.294119%,10.980392%,15.686275%);stop-opacity:1;"/>
|
||||
<stop offset="0.927675" style="stop-color:rgb(75.294119%,10.980392%,15.686275%);stop-opacity:1;"/>
|
||||
<stop offset="0.964286" style="stop-color:rgb(92.941177%,20%,23.137255%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(75.294119%,10.980392%,15.686275%);stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip5">
|
||||
<path d="M 52 62 L 76 62 L 76 74 L 52 74 Z M 52 62 "/>
|
||||
</clipPath>
|
||||
<mask id="mask2">
|
||||
<g filter="url(#alpha)">
|
||||
<rect x="0" y="0" width="128" height="128" style="fill:rgb(0%,0%,0%);fill-opacity:0.5;stroke:none;"/>
|
||||
</g>
|
||||
</mask>
|
||||
<clipPath id="clip6">
|
||||
<rect x="0" y="0" width="192" height="152"/>
|
||||
</clipPath>
|
||||
<g id="surface29618" clip-path="url(#clip6)">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(25.882354%,25.098041%,28.235295%);fill-opacity:1;" d="M 76 84 C 76 99.464844 63.464844 112 48 112 C 32.535156 112 20 99.464844 20 84 C 20 68.535156 32.535156 56 48 56 C 63.464844 56 76 68.535156 76 84 Z M 76 84 "/>
|
||||
</g>
|
||||
<clipPath id="clip4">
|
||||
<rect x="0" y="0" width="128" height="128"/>
|
||||
</clipPath>
|
||||
<g id="surface29630" clip-path="url(#clip4)">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 16 92 L 112 92 C 116.417969 92 120 95.582031 120 100 L 120 108 C 120 112.417969 116.417969 116 112 116 L 16 116 C 11.582031 116 8 112.417969 8 108 L 8 100 C 8 95.582031 11.582031 92 16 92 Z M 16 92 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(92.941177%,20%,23.137255%);fill-opacity:1;" d="M 16 28 L 112 28 C 116.417969 28 120 31.957031 120 36.84375 L 120 103.15625 C 120 108.042969 116.417969 112 112 112 L 16 112 C 11.582031 112 8 108.042969 8 103.15625 L 8 36.84375 C 8 31.957031 11.582031 28 16 28 Z M 16 28 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(36.862746%,36.078432%,39.215687%);fill-opacity:1;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(36.862746%,36.078432%,39.215687%);stroke-opacity:1;stroke-miterlimit:4;" d="M 36 281.999994 L 92 281.999994 L 88 271.999994 L 40 271.999994 Z M 36 281.999994 " transform="matrix(1,0,0,1,0,-171.999994)"/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(25.882354%,25.098041%,28.235295%);fill-opacity:1;" d="M 32 110 L 96 110 L 96 116 L 32 116 Z M 32 110 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.470588%,96.078432%,95.686275%);fill-opacity:1;" d="M 24 36 L 104 36 L 112 44 L 112 96 L 16 96 L 16 44 Z M 24 36 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(25.882354%,25.098041%,28.235295%);fill-opacity:1;" d="M 16 52 L 112 52 L 112 84 L 16 84 Z M 16 52 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.470588%,96.078432%,95.686275%);fill-opacity:1;" d="M 46 68 C 46 71.3125 43.3125 74 40 74 C 36.6875 74 34 71.3125 34 68 C 34 64.6875 36.6875 62 40 62 C 43.3125 62 46 64.6875 46 68 Z M 46 68 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.470588%,96.078432%,95.686275%);fill-opacity:1;" d="M 94 68 C 94 71.3125 91.3125 74 88 74 C 84.6875 74 82 71.3125 82 68 C 82 64.6875 84.6875 62 88 62 C 91.3125 62 94 64.6875 94 68 Z M 94 68 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(58.039218%,57.647061%,56.470591%);fill-opacity:1;" d="M 52 62 L 76 62 L 76 74 L 52 74 Z M 52 62 "/>
|
||||
<g clip-path="url(#clip5)" clip-rule="nonzero">
|
||||
<use xlink:href="#surface29618" transform="matrix(1,0,0,1,-8,-16)" mask="url(#mask2)"/>
|
||||
</g>
|
||||
</g>
|
||||
<clipPath id="clip3">
|
||||
<rect x="0" y="0" width="128" height="128"/>
|
||||
</clipPath>
|
||||
<g id="surface29633" clip-path="url(#clip3)" filter="url(#alpha)">
|
||||
<use xlink:href="#surface29630"/>
|
||||
</g>
|
||||
<mask id="mask1">
|
||||
<use xlink:href="#surface29633"/>
|
||||
</mask>
|
||||
<mask id="mask3">
|
||||
<g filter="url(#alpha)">
|
||||
<rect x="0" y="0" width="128" height="128" style="fill:rgb(0%,0%,0%);fill-opacity:0.8;stroke:none;"/>
|
||||
</g>
|
||||
</mask>
|
||||
<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="300" y1="235" x2="428" y2="235" gradientTransform="matrix(0.000000000000000023,0.37,-0.98462,0.00000000000000006,295.38501,-30.360001)">
|
||||
<stop offset="0" style="stop-color:rgb(97.647059%,94.117647%,41.960785%);stop-opacity:1;"/>
|
||||
<stop offset="1" style="stop-color:rgb(96.078432%,76.078433%,6.666667%);stop-opacity:1;"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip8">
|
||||
<rect x="0" y="0" width="128" height="128"/>
|
||||
</clipPath>
|
||||
<g id="surface29627" clip-path="url(#clip8)">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear2);" d="M 128 80.640625 L 128 128 L 0 128 L 0 80.640625 Z M 128 80.640625 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 13.308594 80.640625 L 60.664062 128 L 81.878906 128 L 34.519531 80.640625 Z M 55.730469 80.640625 L 103.09375 128 L 124.308594 128 L 76.945312 80.640625 Z M 98.160156 80.640625 L 128 110.480469 L 128 89.269531 L 119.371094 80.640625 Z M 0 88.546875 L 0 109.761719 L 18.238281 128 L 39.453125 128 Z M 0 88.546875 "/>
|
||||
</g>
|
||||
<clipPath id="clip7">
|
||||
<rect x="0" y="0" width="128" height="128"/>
|
||||
</clipPath>
|
||||
<g id="surface29632" clip-path="url(#clip7)">
|
||||
<use xlink:href="#surface29627" mask="url(#mask3)"/>
|
||||
</g>
|
||||
</defs>
|
||||
<g id="surface29613">
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 16 92 L 112 92 C 116.417969 92 120 95.582031 120 100 L 120 108 C 120 112.417969 116.417969 116 112 116 L 16 116 C 11.582031 116 8 112.417969 8 108 L 8 100 C 8 95.582031 11.582031 92 16 92 Z M 16 92 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(92.941177%,20%,23.137255%);fill-opacity:1;" d="M 16 28 L 112 28 C 116.417969 28 120 31.957031 120 36.84375 L 120 103.15625 C 120 108.042969 116.417969 112 112 112 L 16 112 C 11.582031 112 8 108.042969 8 103.15625 L 8 36.84375 C 8 31.957031 11.582031 28 16 28 Z M 16 28 "/>
|
||||
<path style="fill-rule:nonzero;fill:rgb(36.862746%,36.078432%,39.215687%);fill-opacity:1;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(36.862746%,36.078432%,39.215687%);stroke-opacity:1;stroke-miterlimit:4;" d="M 36 281.999994 L 92 281.999994 L 88 271.999994 L 40 271.999994 Z M 36 281.999994 " transform="matrix(1,0,0,1,0,-171.999994)"/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(25.882354%,25.098041%,28.235295%);fill-opacity:1;" d="M 32 110 L 96 110 L 96 116 L 32 116 Z M 32 110 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.470588%,96.078432%,95.686275%);fill-opacity:1;" d="M 24 36 L 104 36 L 112 44 L 112 96 L 16 96 L 16 44 Z M 24 36 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(25.882354%,25.098041%,28.235295%);fill-opacity:1;" d="M 16 52 L 112 52 L 112 84 L 16 84 Z M 16 52 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.470588%,96.078432%,95.686275%);fill-opacity:1;" d="M 46 68 C 46 71.3125 43.3125 74 40 74 C 36.6875 74 34 71.3125 34 68 C 34 64.6875 36.6875 62 40 62 C 43.3125 62 46 64.6875 46 68 Z M 46 68 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.470588%,96.078432%,95.686275%);fill-opacity:1;" d="M 94 68 C 94 71.3125 91.3125 74 88 74 C 84.6875 74 82 71.3125 82 68 C 82 64.6875 84.6875 62 88 62 C 91.3125 62 94 64.6875 94 68 Z M 94 68 "/>
|
||||
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(58.039218%,57.647061%,56.470591%);fill-opacity:1;" d="M 52 62 L 76 62 L 76 74 L 52 74 Z M 52 62 "/>
|
||||
<g clip-path="url(#clip1)" clip-rule="nonzero">
|
||||
<use xlink:href="#surface29618" transform="matrix(1,0,0,1,-8,-16)" mask="url(#mask0)"/>
|
||||
</g>
|
||||
<use xlink:href="#surface29632" mask="url(#mask1)"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 9.3 KiB |
@ -3,11 +3,7 @@ scalable_dir = join_paths('hicolor', 'scalable', 'apps')
|
||||
install_data(
|
||||
join_paths(scalable_dir, 'org.gnome.Podcasts.svg'),
|
||||
install_dir: join_paths(datadir, 'icons', scalable_dir),
|
||||
)
|
||||
|
||||
install_data(
|
||||
join_paths(scalable_dir, 'org.gnome.Podcasts.Devel.svg'),
|
||||
install_dir: join_paths(datadir, 'icons', scalable_dir),
|
||||
rename: '@0@.svg'.format(application_id)
|
||||
)
|
||||
|
||||
symbolic_dir = join_paths('hicolor', 'symbolic', 'apps')
|
||||
|
||||
@ -1,71 +0,0 @@
|
||||
<?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>
|
||||
|
Before Width: | Height: | Size: 6.2 KiB |
@ -1,71 +0,0 @@
|
||||
<?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>
|
||||
|
Before Width: | Height: | Size: 6.2 KiB |
@ -24,13 +24,6 @@
|
||||
</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>
|
||||
@ -51,13 +44,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 translations support.
|
||||
Podcasts 0.4.5 brings a month of bug fixes, performance improvements and initial tranlations 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 improvements when loading Show Cover images.</li>
|
||||
<li>Performance improvments when loading Show Cover images.</li>
|
||||
<li>Improved handling of HTTP Redirects</li>
|
||||
</ul>
|
||||
</description>
|
||||
|
||||
@ -11,12 +11,8 @@
|
||||
<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,116 +17,49 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#![allow(clippy::new_without_default)]
|
||||
|
||||
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};
|
||||
|
||||
use gio::subclass::application::ApplicationImplExt;
|
||||
use gio::{self, prelude::*, ActionMapExt, ApplicationFlags, SettingsExt};
|
||||
#![allow(new_without_default)]
|
||||
|
||||
use gio::{self, prelude::*, ActionMapExt, SettingsExt};
|
||||
use glib::{self, Variant};
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
use gettextrs::{bindtextdomain, setlocale, textdomain, LocaleCategory};
|
||||
|
||||
use crossbeam_channel::Receiver;
|
||||
use crossbeam_channel::{unbounded, Receiver, Sender};
|
||||
use fragile::Fragile;
|
||||
use podcasts_data::{Show, Source};
|
||||
use podcasts_data::Show;
|
||||
|
||||
use crate::settings;
|
||||
use crate::stacks::PopulatedState;
|
||||
use crate::headerbar::Header;
|
||||
use crate::settings::{self, WindowGeometry};
|
||||
use crate::stacks::{Content, PopulatedState};
|
||||
use crate::utils;
|
||||
use crate::widgets::about_dialog;
|
||||
use crate::widgets::appnotif::{InAppNotification, SpinnerState, State};
|
||||
use crate::widgets::player;
|
||||
use crate::widgets::show_menu::{mark_all_notif, remove_show_notif, ShowMenu};
|
||||
use crate::window::MainWindow;
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::env;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::config::{APP_ID, LOCALEDIR};
|
||||
use crate::i18n::i18n;
|
||||
|
||||
pub struct PdApplicationPrivate {
|
||||
window: RefCell<Option<MainWindow>>,
|
||||
settings: RefCell<Option<gio::Settings>>,
|
||||
}
|
||||
|
||||
impl ObjectSubclass for PdApplicationPrivate {
|
||||
const NAME: &'static str = "PdApplication";
|
||||
type ParentType = gtk::Application;
|
||||
type Instance = InstanceStruct<Self>;
|
||||
type Class = ClassStruct<Self>;
|
||||
|
||||
glib_object_subclass!();
|
||||
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
window: RefCell::new(None),
|
||||
settings: RefCell::new(None),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for PdApplicationPrivate {
|
||||
glib_object_impl!();
|
||||
}
|
||||
|
||||
impl gio::subclass::prelude::ApplicationImpl for PdApplicationPrivate {
|
||||
fn activate(&self, app: &gio::Application) {
|
||||
debug!("GtkApplication<PdApplication>::activate");
|
||||
|
||||
if let Some(ref window) = *self.window.borrow() {
|
||||
// Ideally Gtk4/GtkBuilder make this irrelvent
|
||||
window.show_all();
|
||||
window.present();
|
||||
info!("Window presented");
|
||||
return;
|
||||
}
|
||||
|
||||
let app = app.clone().downcast::<PdApplication>().expect("How?");
|
||||
let window = MainWindow::new(&app);
|
||||
window.setup_gactions();
|
||||
window.show_all();
|
||||
window.present();
|
||||
self.window.replace(Some(window));
|
||||
// Setup the Action channel
|
||||
gtk::timeout_add(
|
||||
25,
|
||||
clone!(@strong app => move || app.setup_action_channel()),
|
||||
);
|
||||
}
|
||||
|
||||
fn startup(&self, app: &gio::Application) {
|
||||
debug!("GtkApplication<PdApplication>::startup");
|
||||
|
||||
self.parent_startup(app);
|
||||
|
||||
let settings = gio::Settings::new("org.gnome.Podcasts");
|
||||
|
||||
let cleanup_date = settings::get_cleanup_date(&settings);
|
||||
// Garbage collect watched episodes from the disk
|
||||
utils::cleanup(cleanup_date);
|
||||
|
||||
self.settings.replace(Some(settings));
|
||||
|
||||
let app = app.clone().downcast::<PdApplication>().expect("How?");
|
||||
app.setup_timed_callbacks();
|
||||
}
|
||||
}
|
||||
|
||||
impl gtk::subclass::application::GtkApplicationImpl for PdApplicationPrivate {}
|
||||
|
||||
glib_wrapper! {
|
||||
pub struct PdApplication(Object<InstanceStruct<PdApplicationPrivate>, ClassStruct<PdApplicationPrivate>, PdApplicationClass>) @extends gio::Application, gtk::Application;
|
||||
|
||||
match fn {
|
||||
get_type => || PdApplicationPrivate::get_type().to_glib(),
|
||||
}
|
||||
/// Creates an action named `name` in the action map `T with the handler `F`
|
||||
fn action<T, F>(thing: &T, name: &str, action: F)
|
||||
where
|
||||
T: ActionMapExt,
|
||||
for<'r, 's> F: Fn(&'r gio::SimpleAction, &'s Option<Variant>) + 'static,
|
||||
{
|
||||
// Create a stateless, parameterless action
|
||||
let act = gio::SimpleAction::new(name, None);
|
||||
// Connect the handler
|
||||
act.connect_activate(action);
|
||||
// Add it to the map
|
||||
thing.add_action(&act);
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@ -142,9 +75,7 @@ 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),
|
||||
@ -154,49 +85,201 @@ pub(crate) enum Action {
|
||||
RaiseWindow,
|
||||
}
|
||||
|
||||
impl PdApplication {
|
||||
pub(crate) fn new() -> Self {
|
||||
let application = glib::Object::new(
|
||||
PdApplication::static_type(),
|
||||
&[
|
||||
("application-id", &Some(APP_ID)),
|
||||
("flags", &ApplicationFlags::empty()),
|
||||
],
|
||||
)
|
||||
.expect("Application initialization failed...")
|
||||
.downcast::<PdApplication>()
|
||||
.expect("Congrats, you have won a prize for triggering an impossible outcome");
|
||||
#[derive(Debug, Clone)]
|
||||
pub(crate) struct App {
|
||||
instance: gtk::Application,
|
||||
window: gtk::ApplicationWindow,
|
||||
overlay: gtk::Overlay,
|
||||
settings: gio::Settings,
|
||||
content: Rc<Content>,
|
||||
headerbar: Rc<Header>,
|
||||
player: player::PlayerWrapper,
|
||||
updater: RefCell<Option<InAppNotification>>,
|
||||
sender: Sender<Action>,
|
||||
receiver: Receiver<Action>,
|
||||
}
|
||||
|
||||
application.set_resource_base_path(Some("/org/gnome/Podcasts"));
|
||||
impl App {
|
||||
pub(crate) fn new(application: >k::Application) -> Rc<Self> {
|
||||
let settings = gio::Settings::new("org.gnome.Podcasts");
|
||||
|
||||
application
|
||||
let (sender, receiver) = unbounded();
|
||||
|
||||
let window = gtk::ApplicationWindow::new(application);
|
||||
window.set_title(&i18n("Podcasts"));
|
||||
if APP_ID.ends_with("Devel") {
|
||||
window.get_style_context().add_class("devel");
|
||||
}
|
||||
|
||||
let weak_s = settings.downgrade();
|
||||
let weak_app = application.downgrade();
|
||||
window.connect_delete_event(move |window, _| {
|
||||
let app = match weak_app.upgrade() {
|
||||
Some(a) => a,
|
||||
None => return Inhibit(false),
|
||||
};
|
||||
|
||||
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");
|
||||
app.quit();
|
||||
Inhibit(false)
|
||||
});
|
||||
|
||||
// Create a content instance
|
||||
let content = Content::new(&sender).expect("Content initialization failed.");
|
||||
|
||||
// Create the headerbar
|
||||
let header = Header::new(&content, &sender);
|
||||
// Add the Headerbar to the window.
|
||||
window.set_titlebar(&header.container);
|
||||
|
||||
// Add the content main stack to the overlay.
|
||||
let overlay = gtk::Overlay::new();
|
||||
overlay.add(&content.get_stack());
|
||||
|
||||
let wrap = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
||||
// Add the overlay to the main Box
|
||||
wrap.add(&overlay);
|
||||
|
||||
let player = player::PlayerWrapper::new(&sender);
|
||||
// Add the player to the main Box
|
||||
wrap.add(&player.action_bar);
|
||||
|
||||
let updater = RefCell::new(None);
|
||||
|
||||
window.add(&wrap);
|
||||
|
||||
let app = App {
|
||||
instance: application.clone(),
|
||||
window,
|
||||
settings,
|
||||
overlay,
|
||||
headerbar: header,
|
||||
content,
|
||||
player,
|
||||
updater,
|
||||
sender,
|
||||
receiver,
|
||||
};
|
||||
|
||||
Rc::new(app)
|
||||
}
|
||||
|
||||
fn init(app: &Rc<Self>) {
|
||||
let cleanup_date = settings::get_cleanup_date(&app.settings);
|
||||
// Garbage collect watched episodes from the disk
|
||||
utils::cleanup(cleanup_date);
|
||||
|
||||
app.setup_gactions();
|
||||
app.setup_timed_callbacks();
|
||||
|
||||
// Retrieve the previous window position and size.
|
||||
WindowGeometry::from_settings(&app.settings).apply(&app.window);
|
||||
|
||||
// Setup the Action channel
|
||||
gtk::timeout_add(25, clone!(app => move || app.setup_action_channel()));
|
||||
}
|
||||
|
||||
fn setup_timed_callbacks(&self) {
|
||||
self.setup_dark_theme();
|
||||
self.setup_refresh_on_startup();
|
||||
self.setup_auto_refresh();
|
||||
}
|
||||
|
||||
fn setup_dark_theme(&self) {
|
||||
let data = PdApplicationPrivate::from_instance(self);
|
||||
if let Some(ref settings) = *data.settings.borrow() {
|
||||
let gtk_settings = gtk::Settings::get_default().unwrap();
|
||||
settings.bind(
|
||||
self.settings.bind(
|
||||
"dark-theme",
|
||||
>k_settings,
|
||||
"gtk-application-prefer-dark-theme",
|
||||
gio::SettingsBindFlags::DEFAULT,
|
||||
);
|
||||
} else {
|
||||
debug_assert!(false, "Well how'd you manage that?");
|
||||
}
|
||||
|
||||
fn setup_refresh_on_startup(&self) {
|
||||
// Update the feeds right after the Application is initialized.
|
||||
let sender = self.sender.clone();
|
||||
if self.settings.get_boolean("refresh-on-startup") {
|
||||
info!("Refresh on startup.");
|
||||
let s: Option<Vec<_>> = None;
|
||||
utils::refresh(s, sender.clone());
|
||||
}
|
||||
}
|
||||
|
||||
fn setup_auto_refresh(&self) {
|
||||
let refresh_interval = settings::get_refresh_interval(&self.settings).num_seconds() as u32;
|
||||
info!("Auto-refresh every {:?} seconds.", refresh_interval);
|
||||
|
||||
let sender = self.sender.clone();
|
||||
gtk::timeout_add_seconds(refresh_interval, move || {
|
||||
let s: Option<Vec<_>> = None;
|
||||
utils::refresh(s, sender.clone());
|
||||
|
||||
glib::Continue(true)
|
||||
});
|
||||
}
|
||||
|
||||
/// Define the `GAction`s.
|
||||
///
|
||||
/// Used in menus and the keyboard shortcuts dialog.
|
||||
#[cfg_attr(rustfmt, rustfmt_skip)]
|
||||
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)
|
||||
}));
|
||||
}));
|
||||
self.instance.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, "export", clone!(sender, weak_win => move |_, _| {
|
||||
weak_win.upgrade().map(|win| utils::on_export_clicked(&win, &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));
|
||||
}));
|
||||
|
||||
// Create the quit action
|
||||
let weak_instance = self.instance.downgrade();
|
||||
action(&self.window, "quit", move |_, _| {
|
||||
weak_instance.upgrade().map(|app| app.quit());
|
||||
});
|
||||
self.instance.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());
|
||||
});
|
||||
// Bind the hamburger menu button to `F10`
|
||||
self.instance.set_accels_for_action("win.menu", &["F10"]);
|
||||
}
|
||||
|
||||
fn setup_action_channel(&self) -> glib::Continue {
|
||||
use crossbeam_channel::TryRecvError;
|
||||
let data = PdApplicationPrivate::from_instance(self);
|
||||
|
||||
if let Some(ref window) = *data.window.borrow() {
|
||||
let action = match window.receiver.try_recv() {
|
||||
let action = match self.receiver.try_recv() {
|
||||
Ok(a) => a,
|
||||
Err(TryRecvError::Empty) => return glib::Continue(true),
|
||||
Err(TryRecvError::Disconnected) => {
|
||||
@ -206,13 +289,13 @@ impl PdApplication {
|
||||
|
||||
trace!("Incoming channel action: {:?}", action);
|
||||
match action {
|
||||
Action::RefreshAllViews => window.content.update(),
|
||||
Action::RefreshShowsView => window.content.update_shows_view(),
|
||||
Action::RefreshWidgetIfSame(id) => window.content.update_widget_if_same(id),
|
||||
Action::RefreshEpisodesView => window.content.update_home(),
|
||||
Action::RefreshEpisodesViewBGR => window.content.update_home_if_background(),
|
||||
Action::RefreshAllViews => self.content.update(),
|
||||
Action::RefreshShowsView => self.content.update_shows_view(),
|
||||
Action::RefreshWidgetIfSame(id) => self.content.update_widget_if_same(id),
|
||||
Action::RefreshEpisodesView => self.content.update_home(),
|
||||
Action::RefreshEpisodesViewBGR => self.content.update_home_if_background(),
|
||||
Action::ReplaceWidget(pd) => {
|
||||
let shows = window.content.get_shows();
|
||||
let shows = self.content.get_shows();
|
||||
let pop = shows.borrow().populated();
|
||||
pop.borrow_mut()
|
||||
.replace_widget(pd.clone())
|
||||
@ -221,28 +304,26 @@ impl PdApplication {
|
||||
.ok();
|
||||
}
|
||||
Action::ShowWidgetAnimated => {
|
||||
let shows = window.content.get_shows();
|
||||
let shows = self.content.get_shows();
|
||||
let pop = shows.borrow().populated();
|
||||
pop.borrow_mut().switch_visible(
|
||||
PopulatedState::Widget,
|
||||
gtk::StackTransitionType::SlideLeft,
|
||||
);
|
||||
pop.borrow_mut()
|
||||
.switch_visible(PopulatedState::Widget, gtk::StackTransitionType::SlideLeft);
|
||||
}
|
||||
Action::ShowShowsAnimated => {
|
||||
let shows = window.content.get_shows();
|
||||
let shows = self.content.get_shows();
|
||||
let pop = shows.borrow().populated();
|
||||
pop.borrow_mut()
|
||||
.switch_visible(PopulatedState::View, gtk::StackTransitionType::SlideRight);
|
||||
}
|
||||
Action::HeaderBarShowTile(title) => window.headerbar.switch_to_back(&title),
|
||||
Action::HeaderBarNormal => window.headerbar.switch_to_normal(),
|
||||
Action::HeaderBarShowTile(title) => self.headerbar.switch_to_back(&title),
|
||||
Action::HeaderBarNormal => self.headerbar.switch_to_normal(),
|
||||
Action::MarkAllPlayerNotification(pd) => {
|
||||
let notif = mark_all_notif(pd, &window.sender);
|
||||
notif.show(&window.overlay);
|
||||
let notif = mark_all_notif(pd, &self.sender);
|
||||
notif.show(&self.overlay);
|
||||
}
|
||||
Action::RemoveShow(pd) => {
|
||||
let notif = remove_show_notif(pd, window.sender.clone());
|
||||
notif.show(&window.overlay);
|
||||
let notif = remove_show_notif(pd, self.sender.clone());
|
||||
notif.show(&self.overlay);
|
||||
}
|
||||
Action::ErrorNotification(err) => {
|
||||
error!("An error notification was triggered: {}", err);
|
||||
@ -252,35 +333,18 @@ impl PdApplication {
|
||||
};
|
||||
let undo_cb: Option<fn()> = None;
|
||||
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);
|
||||
notif.show(&self.overlay);
|
||||
}
|
||||
Action::ShowUpdateNotif(receiver) => {
|
||||
let sender = window.sender.clone();
|
||||
let sender = self.sender.clone();
|
||||
let callback = move |revealer: gtk::Revealer| match receiver.try_recv() {
|
||||
Err(TryRecvError::Empty) => glib::Continue(true),
|
||||
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)
|
||||
}
|
||||
};
|
||||
@ -290,50 +354,43 @@ impl PdApplication {
|
||||
updater.set_close_state(State::Hidden);
|
||||
updater.set_spinner_state(SpinnerState::Active);
|
||||
|
||||
let old = window.updater.replace(Some(updater));
|
||||
let old = self.updater.replace(Some(updater));
|
||||
old.map(|i| i.destroy());
|
||||
|
||||
window
|
||||
.updater
|
||||
self.updater
|
||||
.borrow()
|
||||
.as_ref()
|
||||
.map(|i| i.show(&window.overlay));
|
||||
.map(|i| i.show(&self.overlay));
|
||||
}
|
||||
Action::InitEpisode(rowid) => {
|
||||
let res = window.player.initialize_episode(rowid);
|
||||
let res = self.player.initialize_episode(rowid);
|
||||
debug_assert!(res.is_ok());
|
||||
}
|
||||
Action::InitShowMenu(s) => {
|
||||
let menu = &s.get().container;
|
||||
window.headerbar.set_secondary_menu(menu);
|
||||
self.headerbar.set_secondary_menu(menu);
|
||||
}
|
||||
Action::EmptyState => {
|
||||
window
|
||||
.window
|
||||
self.window
|
||||
.lookup_action("refresh")
|
||||
.and_then(|action| action.downcast::<gio::SimpleAction>().ok())
|
||||
// Disable refresh action
|
||||
.map(|action| action.set_enabled(false));
|
||||
|
||||
window.headerbar.switch.set_sensitive(false);
|
||||
window.content.switch_to_empty_views();
|
||||
self.headerbar.switch.set_sensitive(false);
|
||||
self.content.switch_to_empty_views();
|
||||
}
|
||||
Action::PopulatedState => {
|
||||
window
|
||||
.window
|
||||
self.window
|
||||
.lookup_action("refresh")
|
||||
.and_then(|action| action.downcast::<gio::SimpleAction>().ok())
|
||||
// Enable refresh action
|
||||
.map(|action| action.set_enabled(true));
|
||||
|
||||
window.headerbar.switch.set_sensitive(true);
|
||||
window.content.switch_to_populated();
|
||||
self.headerbar.switch.set_sensitive(true);
|
||||
self.content.switch_to_populated();
|
||||
}
|
||||
Action::RaiseWindow => window.window.present(),
|
||||
Action::RaiseWindow => self.window.present(),
|
||||
};
|
||||
} else {
|
||||
debug_assert!(false, "Huh that's odd then");
|
||||
}
|
||||
|
||||
glib::Continue(true)
|
||||
}
|
||||
@ -344,10 +401,33 @@ impl PdApplication {
|
||||
bindtextdomain("gnome-podcasts", LOCALEDIR);
|
||||
textdomain("gnome-podcasts");
|
||||
|
||||
// Make sure the app icon shows up in PulseAudio settings
|
||||
env::set_var("PULSE_PROP_application.icon_name", APP_ID);
|
||||
let application = gtk::Application::new(APP_ID, gio::ApplicationFlags::empty())
|
||||
.expect("Application initialization failed...");
|
||||
application.set_resource_base_path("/org/gnome/Podcasts");
|
||||
|
||||
let application = Self::new();
|
||||
let weak_app = application.downgrade();
|
||||
application.connect_startup(move |_| {
|
||||
info!("GApplication::startup");
|
||||
weak_app.upgrade().map(|application| {
|
||||
let app = Self::new(&application);
|
||||
Self::init(&app);
|
||||
|
||||
let weak = Rc::downgrade(&app);
|
||||
application.connect_activate(move |_| {
|
||||
info!("GApplication::activate");
|
||||
if let Some(app) = weak.upgrade() {
|
||||
// Ideally Gtk4/GtkBuilder make this irrelvent
|
||||
app.window.show_all();
|
||||
app.window.present();
|
||||
info!("Window presented");
|
||||
} else {
|
||||
debug_assert!(false, "I hate computers");
|
||||
}
|
||||
});
|
||||
|
||||
info!("Init complete");
|
||||
});
|
||||
});
|
||||
|
||||
// Weird magic I copy-pasted that sets the Application Name in the Shell.
|
||||
glib::set_application_name(&i18n("Podcasts"));
|
||||
|
||||
@ -18,11 +18,8 @@
|
||||
// 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;
|
||||
@ -33,7 +30,7 @@ use podcasts_data::{dbqueries, Source};
|
||||
|
||||
use crate::app::Action;
|
||||
use crate::stacks::Content;
|
||||
use crate::utils::{itunes_to_rss, schedule_refresh};
|
||||
use crate::utils::{itunes_to_rss, refresh};
|
||||
|
||||
use std::rc::Rc;
|
||||
|
||||
@ -42,12 +39,9 @@ use crate::i18n::i18n;
|
||||
#[derive(Debug, Clone)]
|
||||
// TODO: Make a proper state machine for the headerbar states
|
||||
pub(crate) struct Header {
|
||||
pub(crate) container: libhandy::HeaderBar,
|
||||
pub(crate) switch: libhandy::ViewSwitcher,
|
||||
pub(crate) bottom_switcher: libhandy::ViewSwitcherBar,
|
||||
switch_squeezer: libhandy::Squeezer,
|
||||
pub(crate) container: gtk::HeaderBar,
|
||||
pub(crate) switch: gtk::StackSwitcher,
|
||||
back: gtk::Button,
|
||||
title_stack: gtk::Stack,
|
||||
show_title: gtk::Label,
|
||||
hamburger: gtk::MenuButton,
|
||||
add: AddPopover,
|
||||
@ -84,9 +78,9 @@ impl AddPopover {
|
||||
url.to_owned()
|
||||
};
|
||||
|
||||
rayon::spawn(clone!(@strong sender => move || {
|
||||
rayon::spawn(clone!(sender => move || {
|
||||
if let Ok(source) = Source::from_url(&url) {
|
||||
schedule_refresh(Some(vec![source]), sender.clone());
|
||||
refresh(Some(vec![source]), sender.clone());
|
||||
} else {
|
||||
error!("Failed to convert, url: {}, to a source entry", url);
|
||||
}
|
||||
@ -110,63 +104,58 @@ impl AddPopover {
|
||||
};
|
||||
|
||||
debug!("Url: {}", url);
|
||||
// TODO: refactor to avoid duplication
|
||||
match Url::parse(&url) {
|
||||
Ok(u) => {
|
||||
if !dbqueries::source_exists(u.as_str())? {
|
||||
self.style_neutral(true);
|
||||
self.entry
|
||||
.get_style_context()
|
||||
.remove_class(>k::STYLE_CLASS_ERROR);
|
||||
self.entry
|
||||
.set_icon_from_icon_name(gtk::EntryIconPosition::Secondary, None);
|
||||
self.add.set_sensitive(true);
|
||||
} else {
|
||||
self.style_error("You are already subscribed to this show");
|
||||
self.entry
|
||||
.get_style_context()
|
||||
.add_class(>k::STYLE_CLASS_ERROR);
|
||||
self.entry.set_icon_from_icon_name(
|
||||
gtk::EntryIconPosition::Secondary,
|
||||
"dialog-error-symbolic",
|
||||
);
|
||||
self.entry.set_icon_tooltip_text(
|
||||
gtk::EntryIconPosition::Secondary,
|
||||
i18n("You are already subscribed to this show").as_str(),
|
||||
);
|
||||
self.add.set_sensitive(false);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
Err(err) => {
|
||||
self.add.set_sensitive(false);
|
||||
if !is_input_url_empty {
|
||||
self.style_error("Invalid URL");
|
||||
self.entry
|
||||
.get_style_context()
|
||||
.add_class(>k::STYLE_CLASS_ERROR);
|
||||
self.entry.set_icon_from_icon_name(
|
||||
gtk::EntryIconPosition::Secondary,
|
||||
"dialog-error-symbolic",
|
||||
);
|
||||
self.entry.set_icon_tooltip_text(
|
||||
gtk::EntryIconPosition::Secondary,
|
||||
i18n("Invalid URL").as_str(),
|
||||
);
|
||||
error!("Error: {}", err);
|
||||
} else {
|
||||
self.style_neutral(false);
|
||||
self.entry
|
||||
.get_style_context()
|
||||
.remove_class(>k::STYLE_CLASS_ERROR);
|
||||
self.entry
|
||||
.set_icon_from_icon_name(gtk::EntryIconPosition::Secondary, None);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn style_error(&self, icon_tooltip: &str) {
|
||||
self.style(
|
||||
true,
|
||||
false,
|
||||
Some("dialog-error-symbolic"),
|
||||
Some(icon_tooltip),
|
||||
);
|
||||
}
|
||||
|
||||
fn style_neutral(&self, sensitive: bool) {
|
||||
self.style(false, sensitive, None, None);
|
||||
}
|
||||
|
||||
fn style(
|
||||
&self,
|
||||
error: bool,
|
||||
sensitive: bool,
|
||||
icon_name: Option<&str>,
|
||||
icon_tooltip: Option<&str>,
|
||||
) {
|
||||
let entry = &self.entry;
|
||||
let icon_position = gtk::EntryIconPosition::Secondary;
|
||||
entry.set_icon_from_icon_name(icon_position, icon_name);
|
||||
if let Some(icon_tooltip_text) = icon_tooltip {
|
||||
entry.set_icon_tooltip_text(icon_position, Some(i18n(icon_tooltip_text).as_str()));
|
||||
}
|
||||
self.add.set_sensitive(sensitive);
|
||||
|
||||
let error_style_class = >k::STYLE_CLASS_ERROR;
|
||||
let style_context = entry.get_style_context();
|
||||
if error {
|
||||
style_context.add_class(error_style_class);
|
||||
} else {
|
||||
style_context.remove_class(error_style_class);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Header {
|
||||
@ -175,10 +164,8 @@ 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: libhandy::ViewSwitcher = builder.get_object("switch").unwrap();
|
||||
let switch = 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
|
||||
@ -200,17 +187,10 @@ 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,
|
||||
@ -228,57 +208,43 @@ impl Header {
|
||||
}
|
||||
|
||||
pub(crate) fn init(s: &Rc<Self>, content: &Content, sender: &Sender<Action>) {
|
||||
s.bottom_switcher.set_stack(Some(&content.get_stack()));
|
||||
s.switch.set_stack(Some(&content.get_stack()));
|
||||
let weak = Rc::downgrade(s);
|
||||
|
||||
s.add.entry.connect_changed(clone!(@weak s => move |_| {
|
||||
s.add.on_entry_changed()
|
||||
s.switch.set_stack(&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
|
||||
.add
|
||||
.connect_clicked(clone!(@weak s, @strong sender => move |_| {
|
||||
s.add.on_add_clicked(&sender).unwrap();
|
||||
s.add.add.connect_clicked(clone!(weak, sender => move |_| {
|
||||
weak.upgrade().map(|h| h.add.on_add_clicked(&sender));
|
||||
}));
|
||||
|
||||
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();
|
||||
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.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.title_stack.set_visible_child(&self.show_title);
|
||||
self.bottom_switcher.set_reveal(false);
|
||||
self.show_title.show();
|
||||
self.hamburger.hide();
|
||||
self.dots.show();
|
||||
}
|
||||
|
||||
pub(crate) fn switch_to_normal(&self) {
|
||||
self.switch.show();
|
||||
self.add.toggle.show();
|
||||
self.back.hide();
|
||||
self.title_stack.set_visible_child(&self.switch_squeezer);
|
||||
self.update_bottom_switcher();
|
||||
self.show_title.hide();
|
||||
self.hamburger.show();
|
||||
self.dots.hide();
|
||||
}
|
||||
@ -294,10 +260,4 @@ 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,12 +17,11 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#![allow(
|
||||
clippy::clone_on_ref_ptr,
|
||||
clippy::blacklisted_name,
|
||||
clippy::match_same_arms,
|
||||
unknown_lints
|
||||
#![cfg_attr(
|
||||
feature = "cargo-clippy",
|
||||
allow(clone_on_ref_ptr, blacklisted_name, match_same_arms,)
|
||||
)]
|
||||
#![allow(unknown_lints)]
|
||||
// Enable lint group collections
|
||||
#![warn(nonstandard_style, edition_2018, rust_2018_idioms, bad_style, unused)]
|
||||
// standalone lints
|
||||
@ -42,6 +41,7 @@
|
||||
elided_lifetime_in_paths,
|
||||
missing_copy_implementations
|
||||
)]
|
||||
// #![deny(warnings)]
|
||||
|
||||
#[macro_use]
|
||||
extern crate failure;
|
||||
@ -60,13 +60,31 @@ use log::Level;
|
||||
|
||||
use gtk::prelude::*;
|
||||
|
||||
// http://gtk-rs.org/tuto/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;
|
||||
|
||||
mod app;
|
||||
mod config;
|
||||
mod headerbar;
|
||||
mod window;
|
||||
|
||||
mod manager;
|
||||
mod settings;
|
||||
@ -75,7 +93,7 @@ mod utils;
|
||||
|
||||
mod i18n;
|
||||
|
||||
use crate::app::PdApplication;
|
||||
use crate::app::App;
|
||||
|
||||
#[cfg(test)]
|
||||
fn init_gtk_tests() -> Result<(), failure::Error> {
|
||||
@ -93,7 +111,7 @@ fn init_gtk_tests() -> Result<(), failure::Error> {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// TODO: make the logger a cli -vv option
|
||||
// TODO: make the the logger a cli -vv option
|
||||
loggerv::init_with_level(Level::Info).expect("Error initializing loggerv.");
|
||||
gtk::init().expect("Error initializing gtk.");
|
||||
gst::init().expect("Error initializing gstreamer");
|
||||
@ -108,7 +126,7 @@ fn main() {
|
||||
600,
|
||||
);
|
||||
|
||||
PdApplication::run();
|
||||
App::run();
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@ -54,14 +54,12 @@ podcasts_sources = files(
|
||||
'main.rs',
|
||||
'manager.rs',
|
||||
'settings.rs',
|
||||
'utils.rs',
|
||||
'window.rs',
|
||||
'utils.rs'
|
||||
)
|
||||
|
||||
cargo_release = custom_target('cargo-build',
|
||||
build_by_default: true,
|
||||
input: [
|
||||
podcast_toml,
|
||||
data_sources,
|
||||
downloader_sources,
|
||||
podcasts_sources,
|
||||
|
||||
@ -81,21 +81,11 @@ impl WindowGeometry {
|
||||
}
|
||||
|
||||
pub(crate) fn write(&self, settings: &gio::Settings) {
|
||||
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();
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -54,15 +54,6 @@ 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: {:?}", old.get_widget_name());
|
||||
debug!("Name: {:?}", WidgetExt::get_name(old));
|
||||
|
||||
let vadj = self.populated.view.get_vadjustment();
|
||||
let pop = ShowsView::new(self.sender.clone(), vadj);
|
||||
|
||||
@ -100,11 +100,11 @@ impl ShowStack {
|
||||
if is_episodes_populated(&ign)? {
|
||||
self.sender
|
||||
.send(Action::PopulatedState)
|
||||
.expect("Action channel blew up somehow");
|
||||
.expect("Action channel blew up somehow");;
|
||||
} else {
|
||||
self.sender
|
||||
.send(Action::EmptyState)
|
||||
.expect("Action channel blew up somehow");
|
||||
.expect("Action channel blew up somehow");;
|
||||
};
|
||||
|
||||
Ok(())
|
||||
|
||||
@ -17,8 +17,8 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use gio::{resources_register, Resource};
|
||||
use glib::{Error, Bytes};
|
||||
use gio::{resources_register, Error, Resource};
|
||||
use glib::Bytes;
|
||||
|
||||
pub(crate) fn init() -> Result<(), Error> {
|
||||
// load the gresource binary at build time and include/link it into the final
|
||||
|
||||
@ -17,15 +17,14 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#![allow(clippy::type_complexity)]
|
||||
#![cfg_attr(feature = "cargo-clippy", allow(type_complexity))]
|
||||
|
||||
use gdk_pixbuf::Pixbuf;
|
||||
use glib::clone;
|
||||
use gdk::FrameClockExt;
|
||||
use gdk_pixbuf::{Object, Pixbuf};
|
||||
use glib::{self, object::WeakRef};
|
||||
use glib::{IsA, Object};
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
use gtk::Widget;
|
||||
use gtk::{IsA, Widget};
|
||||
|
||||
use chrono::prelude::*;
|
||||
use crossbeam_channel::{bounded, unbounded, Sender};
|
||||
@ -88,7 +87,7 @@ use crate::i18n::i18n;
|
||||
pub(crate) fn lazy_load<T, C, F, W, U>(
|
||||
data: T,
|
||||
container: WeakRef<C>,
|
||||
mut constructor: F,
|
||||
mut contructor: F,
|
||||
callback: U,
|
||||
) where
|
||||
T: IntoIterator + 'static,
|
||||
@ -104,7 +103,7 @@ pub(crate) fn lazy_load<T, C, F, W, U>(
|
||||
None => return,
|
||||
};
|
||||
|
||||
let widget = constructor(x);
|
||||
let widget = contructor(x);
|
||||
container.add(&widget);
|
||||
widget.show();
|
||||
};
|
||||
@ -117,7 +116,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.
|
||||
#[allow(clippy::redundant_closure)]
|
||||
#[cfg_attr(feature = "cargo-clippy", allow(redundant_closure))]
|
||||
pub(crate) fn lazy_load_full<T, F, U>(data: T, mut func: F, finish_callback: U)
|
||||
where
|
||||
T: IntoIterator + 'static,
|
||||
@ -139,7 +138,7 @@ where
|
||||
|
||||
// Kudos to Julian Sparber
|
||||
// https://blogs.gnome.org/jsparber/2018/04/29/animate-a-scrolledwindow/
|
||||
#[allow(clippy::float_cmp)]
|
||||
#[cfg_attr(feature = "cargo-clippy", allow(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() {
|
||||
@ -156,10 +155,10 @@ pub(crate) fn smooth_scroll_to(view: >k::ScrolledWindow, target: >k::Adjustm
|
||||
let mut t = (now - start_time) as f64 / (end_time - start_time) as f64;
|
||||
t = ease_out_cubic(t);
|
||||
adj.set_value(start + t * (end - start));
|
||||
Continue(true)
|
||||
true
|
||||
} else {
|
||||
adj.set_value(end);
|
||||
Continue(false)
|
||||
false
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -184,7 +183,7 @@ pub(crate) fn ignore_show(id: i32) -> Result<bool, Error> {
|
||||
.map_err(|err| format_err!("{}", err))
|
||||
}
|
||||
|
||||
pub(crate) fn unignore_show(id: i32) -> Result<bool, Error> {
|
||||
pub(crate) fn uningore_show(id: i32) -> Result<bool, Error> {
|
||||
IGNORESHOWS
|
||||
.lock()
|
||||
.map(|mut guard| guard.remove(&id))
|
||||
@ -204,10 +203,10 @@ pub(crate) fn cleanup(cleanup_date: DateTime<Utc>) {
|
||||
.ok();
|
||||
}
|
||||
|
||||
/// 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>) {
|
||||
pub(crate) fn refresh<S>(source: Option<S>, sender: Sender<Action>)
|
||||
where
|
||||
S: IntoIterator<Item = Source> + Send + 'static,
|
||||
{
|
||||
// If we try to update the whole db,
|
||||
// Exit early if `source` table is empty
|
||||
if source.is_none() {
|
||||
@ -221,16 +220,15 @@ pub(crate) fn schedule_refresh(source: Option<Vec<Source>>, sender: Sender<Actio
|
||||
};
|
||||
}
|
||||
|
||||
sender
|
||||
.send(Action::UpdateFeed(source))
|
||||
.expect("Action channel blew up somehow")
|
||||
refresh_feed(source, sender)
|
||||
}
|
||||
|
||||
/// Update the rss feed(s) originating from `source`.
|
||||
/// If `source` is None, Fetches all the `Source` entries in the database and updates them.
|
||||
/// 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>) {
|
||||
fn refresh_feed<S>(source: Option<S>, sender: Sender<Action>)
|
||||
where
|
||||
S: IntoIterator<Item = Source> + Send + 'static,
|
||||
{
|
||||
rayon::spawn(move || {
|
||||
let (up_sender, up_receiver) = bounded(1);
|
||||
sender
|
||||
@ -254,7 +252,7 @@ pub(crate) fn refresh_feed(source: Option<Vec<Source>>, sender: Sender<Action>)
|
||||
|
||||
up_sender
|
||||
.send(true)
|
||||
.expect("Channel was dropped unexpectedly");
|
||||
.expect("Channel was dropped unexpectedly");;
|
||||
});
|
||||
}
|
||||
|
||||
@ -287,7 +285,7 @@ pub(crate) fn set_image_from_path(
|
||||
.and_then(|fragile| {
|
||||
fragile
|
||||
.try_get()
|
||||
.map(|px| image.set_from_pixbuf(Some(px)))
|
||||
.map(|px| image.set_from_pixbuf(px))
|
||||
.map_err(From::from)
|
||||
})?;
|
||||
|
||||
@ -301,7 +299,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!(@weak image => @default-return glib::Continue(false), move || {
|
||||
let callback = clone!(image => move || {
|
||||
let _ = set_image_from_path(&image, show_id, size);
|
||||
glib::Continue(false)
|
||||
});
|
||||
@ -345,13 +343,13 @@ pub(crate) fn set_image_from_path(
|
||||
if let Ok(mut hashmap) = CACHED_PIXBUFS.write() {
|
||||
hashmap
|
||||
.insert((show_id, size), Mutex::new(Fragile::new(px.clone())));
|
||||
image.set_from_pixbuf(Some(&px));
|
||||
image.set_from_pixbuf(&px);
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(DownloadError::NoImageLocation) => {
|
||||
image.set_from_icon_name(
|
||||
Some("image-x-generic-symbolic"),
|
||||
"image-x-generic-symbolic",
|
||||
gtk::IconSize::__Unknown(s),
|
||||
);
|
||||
}
|
||||
@ -391,6 +389,7 @@ 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
|
||||
@ -414,30 +413,31 @@ pub(crate) fn on_import_clicked(window: >k::ApplicationWindow, sender: &Sender
|
||||
|
||||
let resp = dialog.run();
|
||||
debug!("Dialog Response {}", resp);
|
||||
if resp == ResponseType::Accept {
|
||||
if resp == ResponseType::Accept.to_glib() {
|
||||
if let Some(filename) = dialog.get_filename() {
|
||||
debug!("File selected: {:?}", filename);
|
||||
|
||||
rayon::spawn(clone!(@strong sender => move || {
|
||||
rayon::spawn(clone!(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
|
||||
schedule_refresh(Some(sources), sender)
|
||||
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 {
|
||||
let text = i18n("Selected file could not be accessed.");
|
||||
sender
|
||||
.send(Action::ErrorNotification(text))
|
||||
.expect("Action channel blew up somehow");
|
||||
.expect("Action channel blew up somehow");;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
@ -461,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 {
|
||||
if resp == ResponseType::Accept.to_glib() {
|
||||
if let Some(filename) = dialog.get_filename() {
|
||||
debug!("File selected: {:?}", filename);
|
||||
|
||||
rayon::spawn(clone!(@strong sender => move || {
|
||||
rayon::spawn(clone!(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");
|
||||
@ -475,7 +475,7 @@ pub(crate) fn on_export_clicked(window: >k::ApplicationWindow, sender: &Sender
|
||||
let text = i18n("Selected file could not be accessed.");
|
||||
sender
|
||||
.send(Action::ErrorNotification(text))
|
||||
.expect("Action channel blew up somehow");
|
||||
.expect("Action channel blew up somehow");;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,20 +47,20 @@ pub(crate) fn about_dialog(window: >k::ApplicationWindow) {
|
||||
];
|
||||
|
||||
let dialog = gtk::AboutDialog::new();
|
||||
dialog.set_logo_icon_name(Some(APP_ID));
|
||||
dialog.set_comments(Some(i18n("Podcast Client for the GNOME Desktop.").as_str()));
|
||||
dialog.set_copyright(Some("© 2017, 2018 Jordan Petridis"));
|
||||
dialog.set_logo_icon_name(APP_ID);
|
||||
dialog.set_comments(i18n("Podcast Client for the GNOME Desktop.").as_str());
|
||||
dialog.set_copyright("© 2017, 2018 Jordan Petridis");
|
||||
dialog.set_license_type(gtk::License::Gpl30);
|
||||
dialog.set_modal(true);
|
||||
dialog.set_version(Some(VERSION));
|
||||
dialog.set_version(VERSION);
|
||||
dialog.set_program_name(&i18n("Podcasts"));
|
||||
dialog.set_website(Some("https://wiki.gnome.org/Apps/Podcasts"));
|
||||
dialog.set_website_label(Some(i18n("Learn more about GNOME Podcasts").as_str()));
|
||||
dialog.set_transient_for(Some(window));
|
||||
dialog.set_website("https://wiki.gnome.org/Apps/Podcasts");
|
||||
dialog.set_website_label(i18n("Learn more about GNOME Podcasts").as_str());
|
||||
dialog.set_transient_for(window);
|
||||
|
||||
dialog.set_artists(&["Tobias Bernard", "Sam Hewitt"]);
|
||||
dialog.set_authors(authors);
|
||||
dialog.set_translator_credits(Some(i18n("translator-credits").as_str()));
|
||||
dialog.set_translator_credits(i18n("translator-credits").as_str());
|
||||
|
||||
dialog.connect_response(|dlg, _| dlg.destroy());
|
||||
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
@ -83,17 +82,21 @@ 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,
|
||||
clone!(@weak notif.revealer as revealer => @default-return glib::Continue(false), move || {
|
||||
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 = 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_adjustments<'a, 'b>(
|
||||
pub(crate) fn set_adjutments<'a, 'b>(
|
||||
&self,
|
||||
hadjustment: Option<&'a Adjustment>,
|
||||
vadjustment: Option<&'b Adjustment>,
|
||||
|
||||
@ -37,7 +37,7 @@ impl Default for EmptyView {
|
||||
let view: gtk::Box = builder.get_object("empty_view").unwrap();
|
||||
let image: gtk::Image = builder.get_object("image").unwrap();
|
||||
image.set_from_icon_name(
|
||||
Some(format!("{}-symbolic", APP_ID).as_str()),
|
||||
format!("{}-symbolic", APP_ID).as_str(),
|
||||
gtk::IconSize::__Unknown(256),
|
||||
);
|
||||
EmptyView(view)
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
@ -236,9 +235,7 @@ impl EpisodeWidget {
|
||||
let widget = Rc::new(Self::default());
|
||||
let episode = RefCell::new(Some(episode));
|
||||
let weak = Rc::downgrade(&widget);
|
||||
widget
|
||||
.container
|
||||
.connect_draw(clone!(@strong sender => move |_, _| {
|
||||
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)
|
||||
@ -375,7 +372,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!(@strong weak, @strong sender => move || {
|
||||
let callback = clone!(weak, 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) {
|
||||
@ -396,14 +393,14 @@ impl EpisodeWidget {
|
||||
widget
|
||||
.buttons
|
||||
.cancel
|
||||
.connect_clicked(clone!(@strong prog, @strong weak, @strong sender => move |_| {
|
||||
.connect_clicked(clone!(prog, weak, 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!(@strong weak, @strong sender => move || {
|
||||
timeout_add(50, clone!(weak, sender => move || {
|
||||
if let Ok(thing) = active_dl() {
|
||||
if thing.is_none() {
|
||||
// Recalculate the widget state
|
||||
@ -444,7 +441,7 @@ impl EpisodeWidget {
|
||||
widget
|
||||
.buttons
|
||||
.play
|
||||
.connect_clicked(clone!(@strong weak, @strong sender => move |_| {
|
||||
.connect_clicked(clone!(weak, 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))
|
||||
@ -460,7 +457,7 @@ impl EpisodeWidget {
|
||||
widget
|
||||
.buttons
|
||||
.download
|
||||
.connect_clicked(clone!(@strong weak, @strong sender => move |dl| {
|
||||
.connect_clicked(clone!(weak, 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) {
|
||||
@ -494,7 +491,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(())
|
||||
}
|
||||
|
||||
@ -515,30 +512,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]
|
||||
#[allow(clippy::if_same_then_else)]
|
||||
#[cfg_attr(feature = "cargo-clippy", allow(if_same_then_else))]
|
||||
fn update_progressbar_callback(
|
||||
widget: &Weak<EpisodeWidget>,
|
||||
prog: &Arc<Mutex<manager::Progress>>,
|
||||
episode_rowid: i32,
|
||||
) {
|
||||
let callback = clone!(@strong widget,@strong prog => move || {
|
||||
let callback = clone!(widget, prog => move || {
|
||||
progress_bar_helper(&widget, &prog, episode_rowid)
|
||||
.unwrap_or(glib::Continue(false))
|
||||
});
|
||||
timeout_add(100, callback);
|
||||
}
|
||||
|
||||
#[allow(clippy::if_same_then_else)]
|
||||
#[allow(if_same_then_else)]
|
||||
fn progress_bar_helper(
|
||||
widget: &Weak<EpisodeWidget>,
|
||||
prog: &Arc<Mutex<manager::Progress>>,
|
||||
@ -605,7 +602,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!(@strong prog, @strong widget => move || {
|
||||
let callback = clone!(prog, widget => move || {
|
||||
total_size_helper(&widget, &prog).unwrap_or(glib::Continue(true))
|
||||
});
|
||||
timeout_add(100, callback);
|
||||
|
||||
@ -22,8 +22,6 @@ use failure::Error;
|
||||
|
||||
use gtk::{self, prelude::*, Adjustment};
|
||||
|
||||
use glib::clone;
|
||||
|
||||
use crossbeam_channel::Sender;
|
||||
use libhandy::{Column, ColumnExt};
|
||||
use podcasts_data::dbqueries;
|
||||
@ -137,11 +135,17 @@ impl HomeView {
|
||||
}
|
||||
};
|
||||
|
||||
let callback = clone!(@weak home => move || {
|
||||
if let Some(ref v) = vadj {
|
||||
home.view.set_adjustments(None, Some(v))
|
||||
let home_weak = Rc::downgrade(&home);
|
||||
let callback = move || {
|
||||
let home = match home_weak.upgrade() {
|
||||
Some(h) => h,
|
||||
None => return,
|
||||
};
|
||||
|
||||
if let Some(ref v) = vadj {
|
||||
home.view.set_adjutments(None, Some(v))
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
lazy_load_full(episodes, func, callback);
|
||||
home.view.container().show_all();
|
||||
|
||||
@ -22,11 +22,7 @@ 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};
|
||||
@ -38,7 +34,6 @@ use podcasts_data::{dbqueries, USER_AGENT};
|
||||
use podcasts_data::{EpisodeWidgetModel, ShowCoverModel};
|
||||
|
||||
use crate::app::Action;
|
||||
use crate::config::APP_ID;
|
||||
use crate::utils::set_image_from_path;
|
||||
|
||||
use std::cell::RefCell;
|
||||
@ -74,29 +69,11 @@ 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()));
|
||||
@ -117,12 +94,12 @@ impl PlayerInfo {
|
||||
|
||||
fn set_episode_title(&self, episode: &EpisodeWidgetModel) {
|
||||
self.episode.set_text(episode.title());
|
||||
self.episode.set_tooltip_text(Some(episode.title()));
|
||||
self.episode.set_tooltip_text(episode.title());
|
||||
}
|
||||
|
||||
fn set_show_title(&self, show: &ShowCoverModel) {
|
||||
self.show.set_text(show.title());
|
||||
self.show.set_tooltip_text(Some(show.title()));
|
||||
self.show.set_tooltip_text(show.title());
|
||||
}
|
||||
|
||||
fn set_cover_image(&self, show: &ShowCoverModel) {
|
||||
@ -140,7 +117,6 @@ struct PlayerTimes {
|
||||
separator: gtk::Label,
|
||||
slider: gtk::Scale,
|
||||
slider_update: Rc<SignalHandlerId>,
|
||||
progress_bar: gtk::ProgressBar,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
@ -173,8 +149,6 @@ 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.
|
||||
@ -186,13 +160,6 @@ 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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,231 +175,31 @@ fn format_duration(seconds: u32) -> String {
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct PlayerRate {
|
||||
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,
|
||||
radio200: gtk::RadioButton,
|
||||
radio175: gtk::RadioButton,
|
||||
radio150: gtk::RadioButton,
|
||||
radio125: gtk::RadioButton,
|
||||
radio_normal: gtk::RadioButton,
|
||||
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) container: gtk::Box,
|
||||
action_bar: gtk::ActionBar,
|
||||
evbox: gtk::EventBox,
|
||||
pub(crate) action_bar: gtk::ActionBar,
|
||||
player: gst_player::Player,
|
||||
controls: PlayerControls,
|
||||
dialog: PlayerDialog,
|
||||
full: gtk::Box,
|
||||
squeezer: hdy::Squeezer,
|
||||
timer: PlayerTimes,
|
||||
info: PlayerInfo,
|
||||
rate: PlayerRate,
|
||||
@ -447,14 +214,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(),
|
||||
"Podcasts".to_string(),
|
||||
"GNOME Podcasts".to_string(),
|
||||
format!("{}.desktop", APP_ID).to_string(),
|
||||
"org.gnome.Podcasts.desktop".to_string(),
|
||||
);
|
||||
mpris.set_can_raise(true);
|
||||
mpris.set_can_play(false);
|
||||
@ -467,23 +230,18 @@ 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),
|
||||
@ -497,7 +255,6 @@ 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,
|
||||
@ -505,50 +262,44 @@ 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 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);
|
||||
let radio200 = builder.get_object("rate_2_00").unwrap();
|
||||
let radio175 = builder.get_object("rate_1_75").unwrap();
|
||||
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 {
|
||||
radio200,
|
||||
radio175,
|
||||
radio150,
|
||||
radio125,
|
||||
radio_normal,
|
||||
popover,
|
||||
label,
|
||||
btn,
|
||||
};
|
||||
|
||||
PlayerWidget {
|
||||
player,
|
||||
container,
|
||||
action_bar,
|
||||
evbox,
|
||||
controls,
|
||||
dialog,
|
||||
full,
|
||||
squeezer,
|
||||
timer,
|
||||
info,
|
||||
rate,
|
||||
@ -559,8 +310,7 @@ impl Default for PlayerWidget {
|
||||
impl PlayerWidget {
|
||||
fn on_rate_changed(&self, rate: f64) {
|
||||
self.set_playback_rate(rate);
|
||||
self.rate.set_rate(rate);
|
||||
self.dialog.rate.set_rate(rate);
|
||||
self.rate.label.set_text(&format!("{:.2}×", rate));
|
||||
}
|
||||
|
||||
fn reveal(&self) {
|
||||
@ -571,8 +321,6 @@ 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
|
||||
@ -581,15 +329,13 @@ impl PlayerWidget {
|
||||
// path is an absolute fs path ex. "foo/bar/baz".
|
||||
// Convert it so it will have a "file:///"
|
||||
// FIXME: convert it properly
|
||||
let uri = File::new_for_path(path).get_uri();
|
||||
if let Some(uri) = File::new_for_path(path).get_uri() {
|
||||
// play the file
|
||||
self.player.set_uri(uri.as_str());
|
||||
self.rate.set_rate(1.0);
|
||||
self.dialog.rate.set_rate(1.0);
|
||||
self.player.set_uri(&uri);
|
||||
self.play();
|
||||
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
// TODO: log an error
|
||||
}
|
||||
|
||||
@ -646,15 +392,10 @@ 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();
|
||||
@ -662,13 +403,8 @@ 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);
|
||||
@ -678,7 +414,6 @@ impl PlayerExt for PlayerWidget {
|
||||
|
||||
#[cfg_attr(rustfmt, rustfmt_skip)]
|
||||
fn stop(&self) {
|
||||
|
||||
self.controls.pause.hide();
|
||||
self.controls.play.show();
|
||||
|
||||
@ -761,142 +496,36 @@ 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 this = self.deref();
|
||||
let weak = Rc::downgrade(self);
|
||||
|
||||
// Connect the play button to the gst Player.
|
||||
self.controls
|
||||
.play
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.play();
|
||||
self.controls.play.connect_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.play());
|
||||
}));
|
||||
|
||||
// Connect the pause button to the gst Player.
|
||||
self.controls
|
||||
.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_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.pause());
|
||||
}));
|
||||
|
||||
// Connect the rewind button to the gst Player.
|
||||
self.controls
|
||||
.rewind
|
||||
.connect_clicked(clone!(@weak this => move |_| {
|
||||
this.rewind();
|
||||
.connect_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.rewind());
|
||||
}));
|
||||
|
||||
// Connect the fast-forward button to the gst Player.
|
||||
self.controls
|
||||
.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();
|
||||
.connect_clicked(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.fast_forward());
|
||||
}));
|
||||
}
|
||||
|
||||
@ -906,7 +535,7 @@ impl PlayerWrapper {
|
||||
self.player.connect_warning(move |_, warn| warn!("gst warning: {}", warn));
|
||||
|
||||
// Log gst errors.
|
||||
self.player.connect_error(clone!(@strong sender => move |_, _error| {
|
||||
self.player.connect_error(clone!(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");
|
||||
@ -916,21 +545,21 @@ impl PlayerWrapper {
|
||||
let weak = Fragile::new(Rc::downgrade(self));
|
||||
|
||||
// Update the duration label and the slider
|
||||
self.player.connect_duration_changed(clone!(@strong weak => move |_, clock| {
|
||||
self.player.connect_duration_changed(clone!(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!(@strong weak => move |_, clock| {
|
||||
self.player.connect_position_updated(clone!(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!(@strong weak => move |_| {
|
||||
self.player.connect_end_of_stream(clone!(weak => move |_| {
|
||||
weak.get()
|
||||
.upgrade()
|
||||
.map(|p| p.stop());
|
||||
@ -939,8 +568,37 @@ impl PlayerWrapper {
|
||||
|
||||
#[cfg_attr(rustfmt, rustfmt_skip)]
|
||||
fn connect_rate_buttons(&self) {
|
||||
self.rate.connect_signals(self);
|
||||
self.dialog.rate.connect_signals(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
|
||||
.radio175
|
||||
.connect_toggled(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.on_rate_changed(1.75));
|
||||
}));
|
||||
|
||||
self.rate
|
||||
.radio200
|
||||
.connect_toggled(clone!(weak => move |_| {
|
||||
weak.upgrade().map(|p| p.on_rate_changed(2.00));
|
||||
}));
|
||||
}
|
||||
|
||||
fn connect_mpris_buttons(&self, sender: &Sender<Action>) {
|
||||
@ -948,9 +606,7 @@ impl PlayerWrapper {
|
||||
|
||||
// FIXME: Reference cycle with mpris
|
||||
let mpris = self.info.mpris.clone();
|
||||
self.info
|
||||
.mpris
|
||||
.connect_play_pause(clone!(@strong weak => move || {
|
||||
self.info.mpris.connect_play_pause(clone!(weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
@ -964,9 +620,8 @@ impl PlayerWrapper {
|
||||
};
|
||||
}
|
||||
}));
|
||||
self.info
|
||||
.mpris
|
||||
.connect_play(clone!(@strong weak => move || {
|
||||
|
||||
self.info.mpris.connect_play(clone!(weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
@ -975,9 +630,7 @@ impl PlayerWrapper {
|
||||
player.play();
|
||||
}));
|
||||
|
||||
self.info
|
||||
.mpris
|
||||
.connect_pause(clone!(@strong weak => move || {
|
||||
self.info.mpris.connect_pause(clone!(weak => move || {
|
||||
let player = match weak.upgrade() {
|
||||
Some(s) => s,
|
||||
None => return
|
||||
@ -986,21 +639,15 @@ impl PlayerWrapper {
|
||||
player.pause();
|
||||
}));
|
||||
|
||||
self.info
|
||||
.mpris
|
||||
.connect_next(clone!(@strong weak => move || {
|
||||
self.info.mpris.connect_next(clone!(weak => move || {
|
||||
weak.upgrade().map(|p| p.fast_forward());
|
||||
}));
|
||||
|
||||
self.info
|
||||
.mpris
|
||||
.connect_previous(clone!(@strong weak => move || {
|
||||
self.info.mpris.connect_previous(clone!(weak => move || {
|
||||
weak.upgrade().map(|p| p.rewind());
|
||||
}));
|
||||
|
||||
self.info
|
||||
.mpris
|
||||
.connect_raise(clone!(@strong sender => move || {
|
||||
self.info.mpris.connect_raise(clone!(sender => move || {
|
||||
sender.send(Action::RaiseWindow).expect("Action channel blew up somehow");
|
||||
}));
|
||||
}
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk::{self, prelude::*, Adjustment};
|
||||
|
||||
use crossbeam_channel::{bounded, Sender};
|
||||
@ -44,10 +43,6 @@ 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>,
|
||||
}
|
||||
@ -58,11 +53,6 @@ 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();
|
||||
|
||||
@ -81,10 +71,6 @@ impl Default for ShowWidget {
|
||||
view,
|
||||
cover,
|
||||
description,
|
||||
description_short,
|
||||
description_stack,
|
||||
description_button,
|
||||
description_button_revealer,
|
||||
episodes,
|
||||
show_id: None,
|
||||
}
|
||||
@ -109,16 +95,6 @@ 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
|
||||
}
|
||||
|
||||
@ -135,31 +111,10 @@ 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) {
|
||||
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]);
|
||||
}
|
||||
}
|
||||
self.description
|
||||
.set_markup(html2text::from_read(text.as_bytes(), 80).trim());
|
||||
}
|
||||
|
||||
pub(crate) fn show_id(&self) -> Option<i32> {
|
||||
@ -179,7 +134,7 @@ fn populate_listbox(
|
||||
let count = dbqueries::get_pd_episodes_count(&pd)?;
|
||||
|
||||
let (sender_, receiver) = bounded(1);
|
||||
rayon::spawn(clone!(@strong pd => move || {
|
||||
rayon::spawn(clone!(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.
|
||||
@ -204,13 +159,13 @@ fn populate_listbox(
|
||||
|
||||
debug_assert!(episodes.len() as i64 == count);
|
||||
|
||||
let constructor = clone!(@strong sender => move |ep| {
|
||||
let constructor = clone!(sender => move |ep| {
|
||||
EpisodeWidget::new(ep, &sender).container.clone()
|
||||
});
|
||||
|
||||
let callback = clone!(@strong show_weak, @strong vadj => move || {
|
||||
let callback = clone!(show_weak, vadj => move || {
|
||||
match (show_weak.upgrade(), &vadj) {
|
||||
(Some(ref shows), Some(ref v)) => shows.view.set_adjustments(None, Some(v)),
|
||||
(Some(ref shows), Some(ref v)) => shows.view.set_adjutments(None, Some(v)),
|
||||
_ => (),
|
||||
};
|
||||
});
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
@ -79,7 +78,7 @@ impl ShowMenu {
|
||||
|
||||
fn connect_website(&self, pd: &Arc<Show>) {
|
||||
self.website.set_tooltip_text(Some(pd.link()));
|
||||
self.website.connect_clicked(clone!(@strong pd => move |_| {
|
||||
self.website.connect_clicked(clone!(pd => move |_| {
|
||||
let link = pd.link();
|
||||
info!("Opening link: {}", link);
|
||||
let res = open::that(link);
|
||||
@ -88,7 +87,13 @@ impl ShowMenu {
|
||||
}
|
||||
|
||||
fn connect_played(&self, pd: &Arc<Show>, episodes: >k::ListBox, sender: &Sender<Action>) {
|
||||
self.played.connect_clicked(clone!(@strong pd, @strong sender, @weak episodes => move |_| {
|
||||
let episodes_weak = episodes.downgrade();
|
||||
self.played.connect_clicked(clone!(pd, sender => move |_| {
|
||||
let episodes = match episodes_weak.upgrade() {
|
||||
Some(e) => e,
|
||||
None => return,
|
||||
};
|
||||
|
||||
let res = dim_titles(&episodes);
|
||||
debug_assert!(res.is_some());
|
||||
|
||||
@ -98,7 +103,7 @@ impl ShowMenu {
|
||||
|
||||
fn connect_unsub(&self, pd: &Arc<Show>, sender: &Sender<Action>) {
|
||||
self.unsub
|
||||
.connect_clicked(clone!(@strong pd, @strong sender => move |unsub| {
|
||||
.connect_clicked(clone!(pd, sender => move |unsub| {
|
||||
// hack to get away without properly checking for none.
|
||||
// if pressed twice would panic.
|
||||
unsub.set_sensitive(false);
|
||||
@ -168,7 +173,7 @@ pub(crate) fn mark_all_notif(pd: Arc<Show>, sender: &Sender<Action>) -> InAppNot
|
||||
glib::Continue(false)
|
||||
};
|
||||
|
||||
let undo_callback = clone!(@strong sender => move || {
|
||||
let undo_callback = clone!(sender => move || {
|
||||
sender.send(Action::RefreshWidgetIfSame(id)).expect("Action channel blew up somehow")
|
||||
});
|
||||
let text = i18n("Marked all episodes as listened");
|
||||
@ -184,11 +189,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::unignore_show(pd_.id());
|
||||
let res = utils::uningore_show(pd_.id());
|
||||
debug_assert!(res.is_ok());
|
||||
|
||||
// Spawn a thread so it won't block the ui.
|
||||
rayon::spawn(clone!(@strong pd_, @strong sender_ => move || {
|
||||
rayon::spawn(clone!(pd_, sender_ => move || {
|
||||
delete_show(&pd_)
|
||||
.map_err(|err| error!("Error: {}", err))
|
||||
.map_err(|_| error!("Failed to delete {}", pd_.title()))
|
||||
@ -202,7 +207,7 @@ pub(crate) fn remove_show_notif(pd: Arc<Show>, sender: Sender<Action>) -> InAppN
|
||||
};
|
||||
|
||||
let undo_callback = move || {
|
||||
let res = utils::unignore_show(pd.id());
|
||||
let res = utils::uningore_show(pd.id());
|
||||
debug_assert!(res.is_ok());
|
||||
sender
|
||||
.send(Action::RefreshShowsView)
|
||||
|
||||
@ -17,7 +17,6 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib::clone;
|
||||
use gtk::{self, prelude::*, Adjustment, Align, SelectionMode};
|
||||
|
||||
use crossbeam_channel::Sender;
|
||||
@ -84,23 +83,26 @@ 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 = clone!(@weak shows => move || {
|
||||
if vadj.is_some() {
|
||||
shows.view.set_adjustments(None, vadj.as_ref())
|
||||
}
|
||||
});
|
||||
let callback = move || {
|
||||
match (show_weak.upgrade(), &vadj) {
|
||||
(Some(ref shows), Some(ref v)) => shows.view.set_adjutments(None, Some(v)),
|
||||
_ => (),
|
||||
};
|
||||
};
|
||||
|
||||
lazy_load(podcasts, flowbox_weak, constructor, callback);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn on_child_activate(child: >k::FlowBoxChild, sender: &Sender<Action>) -> Result<(), Error> {
|
||||
use gtk::WidgetExt;
|
||||
|
||||
// This is such an ugly hack...
|
||||
let id = child
|
||||
.get_widget_name()
|
||||
let id = WidgetExt::get_name(child)
|
||||
.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)?);
|
||||
@ -126,7 +128,7 @@ struct ShowsChild {
|
||||
impl Default for ShowsChild {
|
||||
fn default() -> Self {
|
||||
let cover = gtk::Image::new_from_icon_name(
|
||||
Some("image-x-generic-symbolic"),
|
||||
"image-x-generic-symbolic",
|
||||
gtk::IconSize::__Unknown(-1),
|
||||
);
|
||||
let child = gtk::FlowBoxChild::new();
|
||||
@ -147,8 +149,8 @@ impl ShowsChild {
|
||||
}
|
||||
|
||||
fn init(&self, pd: &Show) {
|
||||
self.child.set_tooltip_text(Some(pd.title()));
|
||||
self.child.set_widget_name(&pd.id().to_string());
|
||||
self.child.set_tooltip_text(pd.title());
|
||||
WidgetExt::set_name(&self.child, &pd.id().to_string());
|
||||
|
||||
self.set_cover(pd.id())
|
||||
}
|
||||
|
||||
@ -1,216 +0,0 @@
|
||||
// window.rs
|
||||
//
|
||||
// Copyright 2019 Jordan Petridis <jpetridis@gnome.org>
|
||||
//
|
||||
// This program 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.
|
||||
//
|
||||
// This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
use glib;
|
||||
use glib::clone;
|
||||
use glib::Variant;
|
||||
|
||||
use gio::{self, prelude::*, ActionMapExt, SettingsExt};
|
||||
|
||||
use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
use crossbeam_channel::{unbounded, Receiver, Sender};
|
||||
|
||||
use crate::app::{Action, PdApplication};
|
||||
use crate::headerbar::Header;
|
||||
use crate::settings::{self, WindowGeometry};
|
||||
use crate::stacks::Content;
|
||||
use crate::utils;
|
||||
use crate::widgets::about_dialog;
|
||||
use crate::widgets::appnotif::InAppNotification;
|
||||
use crate::widgets::player;
|
||||
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::ops::Deref;
|
||||
use std::rc::Rc;
|
||||
|
||||
use crate::config::APP_ID;
|
||||
use crate::i18n::i18n;
|
||||
|
||||
/// Creates an action named `name` in the action map `T with the handler `F`
|
||||
fn action<T, F>(thing: &T, name: &str, action: F)
|
||||
where
|
||||
T: ActionMapExt,
|
||||
F: Fn(&gio::SimpleAction, Option<&Variant>) + 'static,
|
||||
{
|
||||
// Create a stateless, parameterless action
|
||||
let act = gio::SimpleAction::new(name, None);
|
||||
// Connect the handler
|
||||
act.connect_activate(action);
|
||||
// Add it to the map
|
||||
thing.add_action(&act);
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct MainWindow {
|
||||
app: PdApplication,
|
||||
pub(crate) window: gtk::ApplicationWindow,
|
||||
pub(crate) overlay: gtk::Overlay,
|
||||
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>,
|
||||
}
|
||||
|
||||
impl MainWindow {
|
||||
pub fn new(app: &PdApplication) -> Self {
|
||||
let settings = gio::Settings::new("org.gnome.Podcasts");
|
||||
|
||||
let (sender, receiver) = unbounded();
|
||||
|
||||
let window = gtk::ApplicationWindow::new(app);
|
||||
window.set_title(&i18n("Podcasts"));
|
||||
if APP_ID.ends_with("Devel") {
|
||||
window.get_style_context().add_class("devel");
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
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.");
|
||||
|
||||
// Create the headerbar
|
||||
let header = Header::new(&content, &sender);
|
||||
// Add the Headerbar to the window.
|
||||
window.set_titlebar(Some(&header.container));
|
||||
|
||||
// Add the content main stack to the overlay.
|
||||
let overlay = gtk::Overlay::new();
|
||||
overlay.add(&content.get_stack());
|
||||
|
||||
let wrap = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
||||
// Add the overlay to the main Box
|
||||
wrap.add(&overlay);
|
||||
|
||||
let player = player::PlayerWrapper::new(&sender);
|
||||
// Add the player to the main Box
|
||||
wrap.add(&player.container);
|
||||
|
||||
wrap.add(&header.bottom_switcher);
|
||||
|
||||
window.add(&wrap);
|
||||
|
||||
// Retrieve the previous window position and size.
|
||||
WindowGeometry::from_settings(&settings).apply(&window);
|
||||
|
||||
// Update the feeds right after the Window is initialized.
|
||||
if settings.get_boolean("refresh-on-startup") {
|
||||
info!("Refresh on startup.");
|
||||
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);
|
||||
|
||||
gtk::timeout_add_seconds(
|
||||
refresh_interval,
|
||||
clone!(@strong sender => move || {
|
||||
utils::schedule_refresh(None, sender.clone());
|
||||
glib::Continue(true)
|
||||
}),
|
||||
);
|
||||
|
||||
Self {
|
||||
app: app.clone(),
|
||||
window,
|
||||
overlay,
|
||||
headerbar: header,
|
||||
content,
|
||||
player,
|
||||
updating: Cell::new(false),
|
||||
updater: RefCell::new(None),
|
||||
sender,
|
||||
receiver,
|
||||
}
|
||||
}
|
||||
|
||||
/// Define the `GAction`s.
|
||||
///
|
||||
/// Used in menus and the keyboard shortcuts dialog.
|
||||
#[cfg_attr(rustfmt, rustfmt_skip)]
|
||||
pub fn setup_gactions(&self) {
|
||||
let sender = &self.sender;
|
||||
// Create the `refresh` action.
|
||||
//
|
||||
// This will trigger a refresh of all the shows in the database.
|
||||
action(&self.window, "refresh",
|
||||
clone!(@strong sender => move |_, _| {
|
||||
gtk::idle_add(
|
||||
clone!(@strong sender => move || {
|
||||
utils::schedule_refresh(None, sender.clone());
|
||||
glib::Continue(false)
|
||||
}));
|
||||
}));
|
||||
self.app.set_accels_for_action("win.refresh", &["<primary>r"]);
|
||||
|
||||
// Create the `OPML` import action
|
||||
action(&self.window, "import",
|
||||
clone!(@strong sender, @weak self.window as window => move |_, _| {
|
||||
utils::on_import_clicked(&window, &sender);
|
||||
}));
|
||||
|
||||
action(&self.window, "export",
|
||||
clone!(@strong sender, @weak self.window as window => move |_, _| {
|
||||
utils::on_export_clicked(&window, &sender);
|
||||
}));
|
||||
|
||||
// Create the action that shows a `gtk::AboutDialog`
|
||||
action(&self.window, "about",
|
||||
clone!(@weak self.window as win => move |_, _| {
|
||||
about_dialog(&win);
|
||||
}));
|
||||
|
||||
// Create the quit action
|
||||
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 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"]);
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for MainWindow {
|
||||
type Target = gtk::ApplicationWindow;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.window
|
||||
}
|
||||
}
|
||||
0
scripts/compile-gschema.py
Executable file → Normal file
0
scripts/compile-gschema.py
Executable file → Normal file
@ -2,18 +2,17 @@
|
||||
|
||||
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 [ -f "/.flatpak-info" ]
|
||||
if [ -n "/.flatpak-info" ]
|
||||
then
|
||||
export PATH="$PATH:/usr/lib/sdk/rust-stable/bin"
|
||||
export CARGO_TARGET_DIR="$BUILDDIR/target/"
|
||||
fi
|
||||
|
||||
cargo fetch --locked
|
||||
cargo test --all-features --offline -- --test-threads=1 --nocapture
|
||||
export CARGO_HOME="$CARGO_TARGET_DIR/cargo-home"
|
||||
|
||||
cargo test -j 1 -- --test-threads=1 --nocapture
|
||||
|
||||
Loading…
Reference in New Issue
Block a user