210 Commits
0.3.0 ... 0.4.1

Author SHA1 Message Date
Rafał Dzięgiel
7a508fef39 0.4.1 2021-12-20 11:33:19 +01:00
Rafał Dzięgiel
d465d9f150 Make floating window update its title earlier
Instead of waiting till animation finishes, update the window title right away when changing modes
2021-12-15 16:58:54 +01:00
Rafał Dzięgiel
5e4dfb322c Append "PiP" suffix to window title when in floating mode
We are gonna take advantage of this simple change elsewhere
2021-12-15 12:44:23 +01:00
Rafał Dzięgiel
0c561ab4b3 Also allow enabling gtuber code path via env
Having to use "gtuber" URI scheme might be inconvenient, so also allow to
whitelist it with "GST_PLUGIN_FEATURE_RANK=gtubersrc:300" env
2021-12-10 11:05:00 +01:00
Rafał Dzięgiel
46ce261524 widget: Make sure we have caps before logging them 2021-12-10 11:03:06 +01:00
Rafał Dzięgiel
50aac8cdd8 gstclapper: Merge global tags instead replacing them
There is no guarantee that received later tags also contain values from
earlier ones, as they might come from different element.
Combine them instead while replacing old values with newer ones.
2021-12-02 08:52:35 +01:00
Rafał Dzięgiel
810aea476f Use gtuber lib for URIs with "gtuber" scheme
Take a different code path when URI uses "gtuber" scheme.
This allows testing new WIP lib as an opt-in.
2021-11-29 22:33:53 +01:00
Rafał Dzięgiel
24905f1d60 flatpak: Build gtuber 2021-11-29 22:30:21 +01:00
Rafał Dzięgiel
82e3c9a52f prefs: Add can-swipe-back compat with latest libadwaita
Recent libadwaita has renamed "can-swipe-back" into "can-navigate-back".
Set both in JS code instead of UI file in order to support all libadwaita versions.

Fixes #185
2021-11-29 10:13:06 +01:00
Rafał Dzięgiel
654b8aaf60 prefs: Fix expander rows compat with latest libadwaita 2021-11-19 18:43:01 +01:00
Rafał Dzięgiel
3c0e33e4a4 css: Few override fixes for latest libadwaita 2021-11-19 18:40:34 +01:00
Rafał Dzięgiel
d2df1c3bd8 app: Use Adw.StyleManager to enable dark-theme
Latest libadwaita (for reasons unknown to me) totally ignores/breaks dark theme usage with gtk_application_prefer_dark_theme property. Lets just try using the new Adw.StyleManager without asking questions why.
2021-11-18 22:42:05 +01:00
Rafał Dzięgiel
af24073590 Update LINGUAS file 2021-11-18 15:37:48 +01:00
Rafał Dzięgiel
44cee14eb2 New translations com.github.rafostar.Clapper.pot (Portuguese) (#175) 2021-11-18 15:34:16 +01:00
Rafał Dzięgiel
b853685dd4 gstclapper: Fix decoder stream ID string leak 2021-10-22 13:11:42 +02:00
Rafał Dzięgiel
15461dd38a gstclapper: Fix video/audio decoder change detection
The video/audio decoder changed signal was not working correctly in case of
multiple streams with multiple decoders in single file.

We need to listen to the current-(video/audio) signal, when it changes find
corresponding "input-selector", get stream ID from its active pad and then
find the decoder in the pipeline that handles this stream ID. Similarly for
playbin3, but use stream ID from the "streams-selected" signal.
2021-10-22 11:05:08 +02:00
Rafał Dzięgiel
1c1989bc32 gstclapper: Fix GST_PLUGIN_FEATURE_RANK env usage
We change few default plugin ranks during init to whitelist them, but we do not update
their values from GST_PLUGIN_FEATURE_RANK env afterwards, so do that.
The ENV should be preferred over default config.
2021-10-21 11:21:07 +02:00
Rafał Dzięgiel
e9c9ae073f flatpak-nightly: Enable GPL gstreamer plugins 2021-10-19 10:23:41 +02:00
Rafał Dzięgiel
22d2c40b0f flatpak-nightly: Build from gstreamer mono repo 2021-10-18 11:13:44 +02:00
Rafał Dzięgiel
5301c8b368 flatpak: Sync with Flathub 2021-10-14 20:35:53 +02:00
Rafał Dzięgiel
e910978590 Update LINGUAS file
Install Portuguese-Brazilian translation
2021-10-14 20:30:18 +02:00
Rafał Dzięgiel
3b99f0ee0c New Crowdin updates (#172)
* New translations com.github.rafostar.Clapper.pot (Portuguese, Brazilian)
2021-10-12 08:44:14 +02:00
Rafał Dzięgiel
f93a0fed98 Update LINGUAS file 2021-10-04 16:06:45 +02:00
Rafał Dzięgiel
6b8c35b16e Merge pull request #166 from GNUuser/patch-1
Update es.po
2021-10-04 15:59:21 +02:00
Rafał Dzięgiel
5fdb6e64be New Crowdin updates (#164)
* New translations com.github.rafostar.Clapper.pot (Chinese Simplified)

* New translations com.github.rafostar.Clapper.pot (Italian)
2021-10-04 15:14:51 +02:00
Rafał Dzięgiel
60d4b5aec1 widget: Do gestures in capture phase
Capture phase runs from the toplevel down to the event widget and is meant to be used
in containers that might possibly handle events before their children, like our OSD layer.

This avoids an issue where pressing an OSD button does not emit cancelled signal,
accidentally triggering long press gesture signal handler.

Fixes #170
2021-10-04 10:11:53 +02:00
carlosgonz
f5258889cf Update es.po 2021-10-02 10:08:14 -04:00
carlosgonz
31eddf5dd2 Update es.po 2021-10-02 10:07:15 -04:00
carlosgonz
89f7304e0e Update es.po
initial Spanish file
2021-10-01 18:59:03 -04:00
Rafał Dzięgiel
3c918bda73 New Crowdin updates (#163)
* New translations com.github.rafostar.Clapper.pot (Hungarian)
2021-09-22 10:15:35 +02:00
Rafał Dzięgiel
2a8ef2559f New Crowdin updates (#162)
* New translations com.github.rafostar.Clapper.pot (Czech)
2021-09-20 08:34:28 +02:00
Rafał Dzięgiel
7676e18eee New translations com.github.rafostar.Clapper.pot (Russian) (#161) 2021-09-17 11:03:54 +02:00
Rafał Dzięgiel
00b05b460d Merge pull request #158 from igor-dyatlov/master
Added Russian translate
2021-09-17 10:58:05 +02:00
Igor Dyatlov
62f02cf2a3 Added Russian translate 2021-09-16 12:31:19 +03:00
Rafał Dzięgiel
9fc1d9b8c4 sink: Do not leak pool when set config fails 2021-09-15 16:28:23 +02:00
Rafał Dzięgiel
45a5ebb4b6 New Crowdin updates (#157)
* New translations com.github.rafostar.Clapper.pot (Romanian)

* New translations com.github.rafostar.Clapper.pot (Korean)

* New translations com.github.rafostar.Clapper.pot (Vietnamese)

* New translations com.github.rafostar.Clapper.pot (Chinese Traditional)

* New translations com.github.rafostar.Clapper.pot (Chinese Simplified)

* New translations com.github.rafostar.Clapper.pot (Ukrainian)

* New translations com.github.rafostar.Clapper.pot (Turkish)

* New translations com.github.rafostar.Clapper.pot (Swedish)

* New translations com.github.rafostar.Clapper.pot (Serbian (Cyrillic))

* New translations com.github.rafostar.Clapper.pot (Russian)

* New translations com.github.rafostar.Clapper.pot (Portuguese)

* New translations com.github.rafostar.Clapper.pot (Polish)

* New translations com.github.rafostar.Clapper.pot (Norwegian)

* New translations com.github.rafostar.Clapper.pot (Dutch)

* New translations com.github.rafostar.Clapper.pot (Japanese)

* New translations com.github.rafostar.Clapper.pot (French)

* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Hungarian)

* New translations com.github.rafostar.Clapper.pot (Hebrew)

* New translations com.github.rafostar.Clapper.pot (Finnish)

* New translations com.github.rafostar.Clapper.pot (Greek)

* New translations com.github.rafostar.Clapper.pot (German)

* New translations com.github.rafostar.Clapper.pot (Danish)

* New translations com.github.rafostar.Clapper.pot (Czech)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Arabic)

* New translations com.github.rafostar.Clapper.pot (Afrikaans)

* New translations com.github.rafostar.Clapper.pot (Spanish)

* New translations com.github.rafostar.Clapper.pot (Portuguese, Brazilian)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Dutch)

* New translations com.github.rafostar.Clapper.pot (Polish)
2021-09-15 10:54:52 +02:00
Rafał Dzięgiel
2500a42286 Fix missing gio-unix-2.0 dep
Our autogenerated MPRIS code needs it. On some packaging systems this might be included outside of glib, so depend on it explicitly.
2021-09-14 17:54:03 +02:00
Rafał Dzięgiel
bafffa59b9 Fix missing translator-credits 2021-09-14 16:40:09 +02:00
Rafał Dzięgiel
201cb6f64c actions: Also allow mute with "M" key alone
For faster access
2021-09-14 13:09:23 +02:00
Rafał Dzięgiel
636098182b actions: Keep consistent letters case 2021-09-14 13:06:44 +02:00
Rafał Dzięgiel
5442b0b70a uri-dialog: Catch errors when reading from clipboard
The clipboard.read_text_finish method might throw an error when something goes wrong. Catch it and print in debug message. There is no alternative clipboard reading, so simply ignore.
2021-09-14 13:00:14 +02:00
Rafał Dzięgiel
67d1b9f5bc flatpak: Sync with Flathub 2021-09-13 14:06:48 +02:00
Rafostar
a62483fda9 0.4.0 2021-09-12 12:14:05 +02:00
Rafał Dzięgiel
c825385a8f New Crowdin updates (#154)
* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Italian)
2021-09-11 12:19:01 +02:00
Rafał Dzięgiel
02a7419d66 Merge pull request #155 from Rafostar/scaling
Scale fullscreen differently depending on monitor res
2021-09-11 12:18:13 +02:00
Rafał Dzięgiel
e727b8fb50 Scale fullscreen differently depending on monitor res 2021-09-11 11:22:15 +02:00
Rafostar
3cbfd1a57c Fix chapter popover parenting 2021-09-10 19:28:27 +02:00
Rafał Dzięgiel
75b728457c New Crowdin updates (#150)
* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Polish)

* New translations com.github.rafostar.Clapper.pot (Romanian)

* New translations com.github.rafostar.Clapper.pot (Korean)

* New translations com.github.rafostar.Clapper.pot (Vietnamese)

* New translations com.github.rafostar.Clapper.pot (Chinese Traditional)

* New translations com.github.rafostar.Clapper.pot (Chinese Simplified)

* New translations com.github.rafostar.Clapper.pot (Ukrainian)

* New translations com.github.rafostar.Clapper.pot (Turkish)

* New translations com.github.rafostar.Clapper.pot (Swedish)

* New translations com.github.rafostar.Clapper.pot (Serbian (Cyrillic))

* New translations com.github.rafostar.Clapper.pot (Russian)

* New translations com.github.rafostar.Clapper.pot (Portuguese)

* New translations com.github.rafostar.Clapper.pot (Polish)

* New translations com.github.rafostar.Clapper.pot (Norwegian)

* New translations com.github.rafostar.Clapper.pot (Dutch)

* New translations com.github.rafostar.Clapper.pot (Japanese)

* New translations com.github.rafostar.Clapper.pot (French)

* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Hungarian)

* New translations com.github.rafostar.Clapper.pot (Hebrew)

* New translations com.github.rafostar.Clapper.pot (Finnish)

* New translations com.github.rafostar.Clapper.pot (Greek)

* New translations com.github.rafostar.Clapper.pot (German)

* New translations com.github.rafostar.Clapper.pot (Danish)

* New translations com.github.rafostar.Clapper.pot (Czech)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Arabic)

* New translations com.github.rafostar.Clapper.pot (Afrikaans)

* New translations com.github.rafostar.Clapper.pot (Spanish)

* New translations com.github.rafostar.Clapper.pot (Portuguese, Brazilian)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Dutch)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (German)

* New translations com.github.rafostar.Clapper.pot (German)

* New translations com.github.rafostar.Clapper.pot (Polish)

* New translations com.github.rafostar.Clapper.pot (Polish)
2021-09-10 15:46:56 +02:00
Rafał Dzięgiel
b293a84df6 Skip hiding already hidden tracks radio buttons
Does not change much, but removes some useless logging
2021-09-09 22:08:20 +02:00
Rafał Dzięgiel
928244dc32 prefs: Show icon in plugins with modified feature ranks 2021-09-09 12:10:54 +02:00
Rafał Dzięgiel
11caafe847 css: Remove higher l/r negative margins
This ensures that scale does not overlap with corresponding buttons
2021-09-09 09:13:18 +02:00
Rafał Dzięgiel
dbeb4cb0b7 misc: Cleanup imports resolve code
It does not look like we will be able to provide gresources in near future (ever?). Remove those checks for less logic at startup.
2021-09-08 21:32:42 +02:00
Rafał Dzięgiel
3e04139288 meson: Fix variable name 2021-09-08 21:09:48 +02:00
Rafał Dzięgiel
c41b77a14b meson: Do not set datadir in bin template
GJS does this automatically for us using prefix and even if set it will be overwritten
2021-09-08 20:50:23 +02:00
Rafał Dzięgiel
3c500e0be9 meson: Rename some options 2021-09-08 20:46:43 +02:00
Rafał Dzięgiel
6cddb1a16d meson: Cleanup build files
Remove some twice declared variables and keep code style
2021-09-08 20:44:12 +02:00
Rafał Dzięgiel
b5007d12a1 remote: Use system play/pause icons
Those were taken from gresource, but since Remote is a different app, it does not use original clapper gresource. Use system icons for now.
2021-09-08 20:22:32 +02:00
Rafał Dzięgiel
0d7274fb03 Optimize TV mode controls size 2021-09-08 11:31:13 +02:00
Rafał Dzięgiel
94be4c08c5 Optimize pause icon height 2021-09-08 11:30:35 +02:00
Rafał Dzięgiel
bfcc468528 meson: Add optional validate appstream file test 2021-09-07 20:54:48 +02:00
Rafał Dzięgiel
98d2b80103 Add PiP and play icons as gresource
Add missing PiP icons from web devel kit. Also add play/pause
icons at the right size and remove all workarounds/scaling
implemented or these two.

Playback icons are always two bars for pause and triangle for play,
so hopefully this will not be problematic, as this guaranties the
right size for them that Adwaita unfortunately cannot provide.
2021-09-07 19:34:59 +02:00
Rafał Dzięgiel
fa39c45773 Remove useless signal connection in about dialog 2021-09-06 20:33:11 +02:00
Rafał Dzięgiel
b2a6e19fe1 Update POT file 2021-09-06 20:22:55 +02:00
Rafał Dzięgiel
e8c44dc400 Make end time label translatable 2021-09-06 20:21:18 +02:00
Rafał Dzięgiel
5cc9c17632 Update POT file 2021-09-06 19:47:29 +02:00
Rafał Dzięgiel
35d359daf9 Mark popovers text as translatable 2021-09-06 19:45:04 +02:00
Rafał Dzięgiel
637fa75484 Merge pull request #151 from Rafostar/comply-gjs
Comply with GJS packaging
2021-09-06 17:56:53 +02:00
Rafał Dzięgiel
8733610a9b Move revealers access away from base classes
Those should not appear in base classes, as they are available in main app only
2021-09-06 17:23:36 +02:00
Rafał Dzięgiel
873e724bf2 Comply with GJS packaging spec
According to spec, package name should always be set to main package name in DBus name format
2021-09-06 17:22:34 +02:00
Rafał Dzięgiel
7aa03f3e72 prefs: PipeWire is only used for audio output here
We only use PipeWire for audio output. Make that more obvious in prefs setting description.
2021-09-06 13:42:09 +02:00
Rafał Dzięgiel
99acd36cc0 api: Always start unmuted 2021-09-06 13:18:57 +02:00
Rafał Dzięgiel
cd7d99606d Improve mute shortcut description
This does both mute and unmute, describe it as a toggle
2021-09-06 13:07:07 +02:00
Rafał Dzięgiel
574e084383 Toggle mute with Ctrl+M
Closes #117
2021-09-06 12:34:11 +02:00
Rafał Dzięgiel
d49df86397 api: Replace mute-changed signal with mute notify
Notify is enough, we do not need a separate signal for mute property. This also allows binding this property to some other GObject props.
2021-09-06 12:18:32 +02:00
Rafał Dzięgiel
3483c94913 Completely disable audio track when set to disabled
Instead of just muting audio when disabled, tell GStreamer to diable it completely. This is slower, but makes this option do what it was supposed to.
2021-09-06 10:29:44 +02:00
Rafał Dzięgiel
a99abc652a Do not store subtitle-offset as gsetting
This is not something we should remember
2021-09-06 10:12:33 +02:00
Rafał Dzięgiel
a9173bb481 css: Put small L/R margins on speed scale
GTK does weird glitches when scale slider inside popover is dragged to the very end. Avoid that by putting small margins on both sides. It also looks better when its shorter a little bit.
2021-09-06 09:09:05 +02:00
Rafostar
a16444cefb Do not set subtitle-offset at startup
We should always start without any offset for subtitles
2021-09-05 20:44:12 +02:00
Rafostar
65673dbf4f Add window mapped debug message 2021-09-05 17:55:16 +02:00
Rafostar
dea67e4712 Prepare for resource loading
Cleanup the Clapper install path detection code in a way to make gresources loading eventually possible for compiled builds
2021-09-05 17:55:11 +02:00
Rafostar
3c765e9f17 Add some init debug messages
To get an overall idea how long initialization takes
2021-09-05 17:54:55 +02:00
Rafostar
a77eb5352e cleanup: Remove unused clapperVersion variable 2021-09-05 11:47:24 +02:00
Rafostar
ca168f34ed controls: Use isFullscreen and isMobile from main widget
The "controls.isMobile" was used incorrectly here as it holds value if
controls are in mobile mode, not if running on mobile screen.
Use those values from clapper main widget instead. This fixes incorrect
chapter popover placement on mobile screens.

Also handle fine-tune in CSS as this code path is hit multiple times
when starting/stopping slider drag.
2021-09-05 11:30:46 +02:00
Rafostar
d0304d4ded mpris: Allow reading properties 2021-09-04 18:57:08 +02:00
Rafał Dzięgiel
cd479f3bb4 api: Set fakesink to be sync
Otherwise seeking will not be possible when this sink is used
2021-09-03 20:32:17 +02:00
Rafał Dzięgiel
70942ba419 prefs: Mark experimental options
Options not fully reliable with possibility to break playback. Better mark them as experimental then listen to users complaining on daily basis.
2021-09-03 20:08:07 +02:00
Rafał Dzięgiel
ad0c6151a9 Merge pull request #149 from Rafostar/experimental-options
Add playbin3 and PipeWire options to prefs
2021-09-03 12:24:00 +02:00
Rafał Dzięgiel
cccc584961 api: Use fakesink when PipeWire enabled but unavailable
Instead of misleading users that they are using PipeWire after enabling it, use fakesink in order to not output any sound at all
2021-09-03 11:50:40 +02:00
Rafał Dzięgiel
38e721be03 prefs: Add playbin3 and pipewire options 2021-09-03 11:35:23 +02:00
Rafał Dzięgiel
cf6d41b725 api: Add property to control PipeWire enablement 2021-09-03 11:12:48 +02:00
Rafał Dzięgiel
b68c1a62b2 api: Add property to control playbin3 enablement 2021-09-03 10:59:44 +02:00
Rafał Dzięgiel
dc25ec976a Name our classes
In order to not end up with random names prefixed with Gjs_, give each class a proper name, so its easier to inspect and allows usage with UI files
2021-09-02 20:12:39 +02:00
Rafał Dzięgiel
914292612b Show libadwaita version in about system 2021-09-02 19:27:00 +02:00
Rafał Dzięgiel
e34b164f5a Auto fill open URI entry with clipboard content
If clipboard contains a valid URI, prefill the entry with it. Also select all of it to make it easier to remove this text.
2021-09-02 18:58:51 +02:00
Rafał Dzięgiel
2e0a455f92 dialogs: Use response virtual function instead of signal 2021-09-02 17:29:56 +02:00
Rafał Dzięgiel
3aab01d35c Improved open URI dialog 2021-09-02 17:22:09 +02:00
Rafał Dzięgiel
e264304c9d Mark text in remaining dialogs as translatable 2021-09-02 13:26:06 +02:00
Rafał Dzięgiel
a145890f9d Fix disabling plugin feature with zero rank 2021-09-01 17:53:23 +02:00
Rafał Dzięgiel
0323c816ad api: Use GstElementFactoryListType to detect decoders
Using simply GST_IS_VIDEO_DECODER is not enough as some special cases like vaapidecodebin are not using decoder base class
2021-09-01 17:41:31 +02:00
Rafał Dzięgiel
4f1d9be423 Fix case with missing subtitle tracks
In case when first video has a lot of subtitles, second video has only a few and third one more then second one, we forgot to make the recycled toggle buttons visible again, causing some tracks to be missing
2021-09-01 17:26:10 +02:00
Rafał Dzięgiel
82557df7c4 Merge pull request #148 from Rafostar/popovers-rework
Popovers rework
2021-09-01 17:18:03 +02:00
Rafał Dzięgiel
c457158541 css: Remove elapsed popover bottom padding
Scale already does a bottom padding, we do not need this much of it
2021-09-01 15:44:45 +02:00
Rafał Dzięgiel
451711b9c6 Show current video/audio decoder in popover 2021-09-01 14:28:15 +02:00
Rafał Dzięgiel
bbada8fb4e Redo controls popovers into GtkMenuButtons 2021-09-01 14:25:42 +02:00
Rafał Dzięgiel
04122d46a7 Move popover separator into .ui
Allows reusing a custom separator in multiple popovers
2021-08-31 10:55:25 +02:00
Rafał Dzięgiel
347d90b1ad actions: Fetch gnome-nightly repo for build 2021-08-29 09:34:28 +02:00
Rafał Dzięgiel
27ffb65d8f api: Remove unused declaration 2021-08-28 10:29:12 +02:00
Rafał Dzięgiel
9328a7af75 meson: Warn about unused variables 2021-08-28 10:27:44 +02:00
Rafał Dzięgiel
1f6e439632 New Crowdin updates (#146)
* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (German)

* New translations com.github.rafostar.Clapper.pot (Catalan)
2021-08-28 10:26:15 +02:00
Rafał Dzięgiel
97c1207b40 readme: Update flatpak-nightly badge 2021-08-28 08:43:06 +02:00
Rafał Dzięgiel
833559a208 flatpak: Rename from testing to nightly and use master runtime 2021-08-28 08:42:18 +02:00
Rafał Dzięgiel
9a8655b0a2 meson: Use correct SPDX identifier 2021-08-28 08:28:40 +02:00
Rafał Dzięgiel
d2a03d40a3 Merge pull request #145 from Rafostar/actions-aarch64
Add aarch64 builds to git actions
2021-08-27 21:42:31 +02:00
Rafał Dzięgiel
66998ff6c6 actions: Install docker with arm64 quemu
Flatpak builder needs this to compile aarch64 package
2021-08-27 17:02:40 +02:00
Rafał Dzięgiel
7cdd905d73 actions: Do not fail both runs when one fails 2021-08-27 16:25:02 +02:00
Rafał Dzięgiel
10eb5102c1 actions: Also build for aarch64 in nightly flatpak 2021-08-27 16:24:55 +02:00
Rafał Dzięgiel
9e8854c5e2 actions: Use GNOME nightly repo and rename to nightly
Rename flatpak-testing into flatpak-nightly so it reflects that it uses GNOME nightly sources now and builds itself every night (with nightly gstreamer too).
2021-08-27 16:21:57 +02:00
Rafał Dzięgiel
16a9546c97 actions: Build aarch64 flatpak 2021-08-27 15:51:21 +02:00
Rafał Dzięgiel
2686c2ca03 Quietly handle ranking gsetting change after app update
Do not print errors for everyone who updates Clapper from 0.3.0 version.
How plugin ranking is stored in gsettings changed. Instead reset it quietly
into new defaults to avoid problems.

Also since now GstClapper API sets some default ranks based on installed
GStreamer version, hopefully this ranking will be only an edge case for
people who want to experiment or need to test/debug some GStreamer plugin.
2021-08-27 13:30:14 +02:00
Rafał Dzięgiel
ad563d16d0 Move init functions into main where they should be
It seems that libadwaita does not like being initialized too early. Move the init function into the beggining of main() to make it happy.
2021-08-27 12:56:58 +02:00
Rafał Dzięgiel
12ce95b664 rpm: Install translations 2021-08-26 21:14:19 +02:00
Rafał Dzięgiel
2dbabe52bb Update LINGUAS file 2021-08-26 20:40:21 +02:00
Rafał Dzięgiel
2c35ceb35a New Crowdin updates (#141)
* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Dutch)

* New translations com.github.rafostar.Clapper.pot (Dutch)
2021-08-26 20:20:59 +02:00
Rafał Dzięgiel
5eac1aa675 Merge pull request #140 from sp1ritCS/local_de
l10n: added german localization
2021-08-26 20:15:19 +02:00
Florian "sp1rit"​
0e6a68665d Merge remote-tracking branch 'origin/master' into local_de 2021-08-26 20:04:41 +02:00
Rafał Dzięgiel
86fe1628c3 Merge pull request #139 from juxuanu/master
Translate to Catalan
2021-08-26 19:36:48 +02:00
Rafał Dzięgiel
a427817e53 rpm: Install clapper symlink 2021-08-26 19:23:52 +02:00
Rafał Dzięgiel
7a767c34eb rpm: Fix bogus date 2021-08-26 19:20:19 +02:00
Rafał Dzięgiel
a7298e371e meson: Use DESTDIR env when creating symlink 2021-08-26 19:06:10 +02:00
Rafał Dzięgiel
f6393a177d Merge pull request #143 from Rafostar/symlink
meson: Create symlink to bin named simply "clapper"
2021-08-26 18:17:05 +02:00
Rafał Dzięgiel
45decb8563 meson: Create symlink to bin named simply "clapper" 2021-08-26 18:04:57 +02:00
Florian "sp1rit"​
2e12e52730 l10n: added german localization 2021-08-26 13:06:08 +02:00
Ícar
ffbd8c35e1 Update LINGUAS for Catalan 2021-08-26 10:54:59 +02:00
Ícar
01277f4a71 Add Catalan translation 2021-08-26 10:54:23 +02:00
Rafał Dzięgiel
a54c3e4bcc New Crowdin updates (#136)
* New translations com.github.rafostar.Clapper.pot (Polish)

* New translations com.github.rafostar.Clapper.pot (Romanian)

* New translations com.github.rafostar.Clapper.pot (Korean)

* New translations com.github.rafostar.Clapper.pot (Vietnamese)

* New translations com.github.rafostar.Clapper.pot (Chinese Traditional)

* New translations com.github.rafostar.Clapper.pot (Chinese Simplified)

* New translations com.github.rafostar.Clapper.pot (Ukrainian)

* New translations com.github.rafostar.Clapper.pot (Turkish)

* New translations com.github.rafostar.Clapper.pot (Swedish)

* New translations com.github.rafostar.Clapper.pot (Serbian (Cyrillic))

* New translations com.github.rafostar.Clapper.pot (Russian)

* New translations com.github.rafostar.Clapper.pot (Portuguese)

* New translations com.github.rafostar.Clapper.pot (Polish)

* New translations com.github.rafostar.Clapper.pot (Norwegian)

* New translations com.github.rafostar.Clapper.pot (Dutch)

* New translations com.github.rafostar.Clapper.pot (Japanese)

* New translations com.github.rafostar.Clapper.pot (French)

* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Hungarian)

* New translations com.github.rafostar.Clapper.pot (Hebrew)

* New translations com.github.rafostar.Clapper.pot (Finnish)

* New translations com.github.rafostar.Clapper.pot (Greek)

* New translations com.github.rafostar.Clapper.pot (German)

* New translations com.github.rafostar.Clapper.pot (Danish)

* New translations com.github.rafostar.Clapper.pot (Czech)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Arabic)

* New translations com.github.rafostar.Clapper.pot (Afrikaans)

* New translations com.github.rafostar.Clapper.pot (Spanish)

* New translations com.github.rafostar.Clapper.pot (Portuguese, Brazilian)
2021-08-25 21:47:28 +02:00
Rafostar
17b2aec170 YouTube name should not be translated 2021-08-25 17:14:12 +02:00
Rafał Dzięgiel
75bc0d6b69 Update README.md 2021-08-25 15:28:03 +02:00
Rafał Dzięgiel
edef26fc0e New Crowdin updates (#135)
* New translations com.github.rafostar.Clapper.pot (Romanian)

* New translations com.github.rafostar.Clapper.pot (Korean)

* New translations com.github.rafostar.Clapper.pot (Vietnamese)

* New translations com.github.rafostar.Clapper.pot (Chinese Traditional)

* New translations com.github.rafostar.Clapper.pot (Chinese Simplified)

* New translations com.github.rafostar.Clapper.pot (Ukrainian)

* New translations com.github.rafostar.Clapper.pot (Turkish)

* New translations com.github.rafostar.Clapper.pot (Swedish)

* New translations com.github.rafostar.Clapper.pot (Serbian (Cyrillic))

* New translations com.github.rafostar.Clapper.pot (Russian)

* New translations com.github.rafostar.Clapper.pot (Portuguese)

* New translations com.github.rafostar.Clapper.pot (Polish)

* New translations com.github.rafostar.Clapper.pot (Norwegian)

* New translations com.github.rafostar.Clapper.pot (Dutch)

* New translations com.github.rafostar.Clapper.pot (Japanese)

* New translations com.github.rafostar.Clapper.pot (French)

* New translations com.github.rafostar.Clapper.pot (Italian)

* New translations com.github.rafostar.Clapper.pot (Hungarian)

* New translations com.github.rafostar.Clapper.pot (Hebrew)

* New translations com.github.rafostar.Clapper.pot (Finnish)

* New translations com.github.rafostar.Clapper.pot (Greek)

* New translations com.github.rafostar.Clapper.pot (German)

* New translations com.github.rafostar.Clapper.pot (Danish)

* New translations com.github.rafostar.Clapper.pot (Czech)

* New translations com.github.rafostar.Clapper.pot (Catalan)

* New translations com.github.rafostar.Clapper.pot (Arabic)

* New translations com.github.rafostar.Clapper.pot (Afrikaans)

* New translations com.github.rafostar.Clapper.pot (Spanish)

* New translations com.github.rafostar.Clapper.pot (Portuguese, Brazilian)
2021-08-25 15:02:02 +02:00
Rafał Dzięgiel
0edab83f86 Update POT file 2021-08-25 14:39:07 +02:00
Rafał Dzięgiel
9681d0eea1 ui: Change letter case
Should be lowercase as the rest
2021-08-25 14:38:25 +02:00
Rafał Dzięgiel
b6559ee50f Sync shortcuts names with menu items
This option was renamed recently
2021-08-25 14:29:05 +02:00
Rafał Dzięgiel
ce183595cd readme: Add crowdin "localized" badge 2021-08-25 13:51:14 +02:00
Rafał Dzięgiel
71f50ba414 Revert "crowdin: Add some languages mappings"
This reverts commit 0de8ee2d54.
2021-08-25 13:28:49 +02:00
Rafał Dzięgiel
0de8ee2d54 crowdin: Add some languages mappings 2021-08-25 12:58:25 +02:00
Rafał Dzięgiel
8be49f25b4 Update Crowdin configuration file 2021-08-25 12:36:58 +02:00
Rafał Dzięgiel
69bef3d174 Update Crowdin configuration file 2021-08-25 12:26:59 +02:00
Rafał Dzięgiel
d429e9105c Update Crowdin configuration file 2021-08-25 12:25:12 +02:00
Rafał Dzięgiel
a1ce04edfa Initial translations support
Most of the app is now translatable, so put a POT file in git and make app use translations if available
2021-08-25 11:23:43 +02:00
Rafał Dzięgiel
8ca4c30beb Rename "Open Local" into "Open Files"
This is easier to understand, besides file chooser might show online filesystem mounts which makes open "local" an inaccurate name
2021-08-24 22:05:20 +02:00
Rafał Dzięgiel
9b53a3e387 api: Fix plugin feature unref 2021-08-24 20:52:18 +02:00
Rafał Dzięgiel
f31682624f Do not try to translate "GStreamer" name 2021-08-24 15:49:45 +02:00
Rafał Dzięgiel
5874db45ea api: Introduce custom gstreamer init function
Initializes GStreamer library and tweaks some of its defaults to our liking.
This also allows usage of GstClapper API alone without importing GStreamer on the implementation side.

It changes preferred hardware acceleration order (depending on plugins versions) into:
v4l2sl -> nv -> va -> vaapi -> v4l2
2021-08-24 14:15:29 +02:00
Rafał Dzięgiel
87a0dd473e flatpak: Add missing deps to testing manifest
These are required to build libadwaita
2021-08-24 09:26:33 +02:00
Rafał Dzięgiel
c50df5f2a3 Merge pull request #129 from Rafostar/libadwaita
Initialize with libadwaita, port preferences window to be adaptive and do few CSS tweaks to improve overall app look.
2021-08-23 18:33:21 +02:00
Rafał Dzięgiel
a72a8057e5 rpm: Require libadwaita 2021-08-23 17:13:36 +02:00
Rafał Dzięgiel
f29ec78b92 Update readme 2021-08-23 16:55:56 +02:00
Rafał Dzięgiel
10f54c7c3d Remove .deb package
This was unresolvable (and reportedly broken) for quite some time, now even more so with libadwaita added into the mix. Having .deb packages would require a custom PPA with up-to-date dependencies. Anyone interested is free to set it up, but this git repo is not a good place to do so.
2021-08-23 16:18:13 +02:00
Rafał Dzięgiel
2b91056543 Remove Arch PKGBUILD files from git
Both stable and git versions of Clapper are available in AUR, no point maintaining them in two places
2021-08-23 16:11:09 +02:00
Rafał Dzięgiel
2656762cbc Fix chapter popover coordinates 2021-08-23 15:57:11 +02:00
Rafostar
f5ff59f786 css: Remove custom preferences CSS classes
Those are not used anymore
2021-08-22 16:09:45 +02:00
Rafał Dzięgiel
e4fe7844c4 metainfo: Mark as mobile friendly and fix few typos 2021-08-22 16:09:41 +02:00
Rafał Dzięgiel
b7d9a22d33 flatpak: Build libadwaita 2021-08-22 16:09:36 +02:00
Rafał Dzięgiel
c8a5277908 Port preferences window to libadwaita 2021-08-22 16:09:23 +02:00
Rafał Dzięgiel
62fab289b7 Few small CSS optimizations for new Adwaita theme 2021-08-06 09:11:39 +02:00
Rafał Dzięgiel
56ca13b370 Remove GTK 4.0.2+ theme workarounds 2021-08-06 09:11:34 +02:00
Rafał Dzięgiel
ce46905319 css: Remove slider outline in TV mode 2021-08-06 09:11:28 +02:00
Rafał Dzięgiel
5fe5f89e5d css: Reduce sliders size
They are way too big in new Adwaita theme for windowed mode, but leave them bigger when in TV mode
2021-08-06 09:11:20 +02:00
Rafał Dzięgiel
9ba6f5d09e Apply "osd" CSS class to each button in headerbar
Otherwise it does not work correctly with new Adwaita theme
2021-08-06 09:11:14 +02:00
Rafał Dzięgiel
4c0fc1dac2 Init libadwaita 2021-08-06 09:11:06 +02:00
Rafał Dzięgiel
13a792c0a9 Remove Adwaita scale brightness increase
This was fixed inside Adwaita theme
2021-08-06 09:10:58 +02:00
Rafał Dzięgiel
02b0d5f03f Remove theme selection workaround
Libadwaita does not support any other stylesheets then Adwaita. Not my fault.
2021-08-06 09:10:44 +02:00
Rafał Dzięgiel
b577dd762d Fix D&D on GTK 4.3.2+ 2021-08-05 22:29:23 +02:00
Rafał Dzięgiel
d798539dce Merge pull request #128 from Rafostar/gles
Cleanup GL init and use GLES if GTK is using it
2021-08-01 13:47:24 +02:00
Rafostar
19e159d1bd sink: Cleanup GL context init code 2021-08-01 12:44:35 +02:00
Rafał Dzięgiel
c3cdabb050 Merge pull request #127 from Rafostar/show-decoders
API: Add video/audio decoder changed signals
2021-08-01 11:02:28 +02:00
Rafał Dzięgiel
c53cde4d78 Merge pull request #126 from Rafostar/gestures
Add side double tap gesture and update shortcuts window
2021-08-01 10:29:08 +02:00
Rafał Dzięgiel
b308ae367f sink: When GTK is using GLES on EGL, use it too
If for some reason GTK ended up with using EGL with GLES instead of OpenGL and user
did not specify anything other, use it by default in gstreamer part of the app too.
2021-07-28 18:00:08 +02:00
Rafostar
b2005fd34f Describe gestures in shortcuts window 2021-07-28 17:09:32 +02:00
Rafostar
a6dfeeca37 Switch playlist items via double tap on screen side
Double press left side of the touchscreen to play previous item, right side to play next one. #93
2021-07-28 12:06:18 +02:00
Rafostar
90844e49ad API: Add video/audio decoder changed signals 2021-07-28 12:02:52 +02:00
Rafostar
eb60d036db Update PKGBUILD files 2021-07-20 13:44:03 +02:00
Rafał Dzięgiel
6e20a5fa12 Update README.md 2021-07-20 11:25:44 +02:00
Rafał Dzięgiel
cf370961b4 Merge pull request #106 from mattblaha/cleanup-readme
Grammatical cleanups in readme
2021-07-19 20:51:46 +02:00
Matt Blaha
6db36d6ac2 Align build/built with the project description on github, several other small grammatical cleanups. 2021-07-19 12:14:12 -05:00
Rafostar
4738673f7f Fix bottom OSD margins on multi monitors setup
When player enters high resolution display, margins are being recalculated,
but when it goes back dragged to some lower resolution screen they are not.
This is wrong, as they should be reset back to the initial value which is zero.

Fixes #102
2021-07-19 12:43:01 +02:00
Rafostar
1004000ba2 Leave fullscreen with "Esc" key 2021-07-18 15:34:41 +02:00
Rafał Dzięgiel
e40f11def5 sink: Small code cleanup 2021-07-16 23:50:26 +02:00
Rafał Dzięgiel
5378facb46 Add long press gesture to toggle play/pause #93
Press and hold on touchscreen while in fullscreen to toggle between play and pause
2021-07-16 18:31:26 +02:00
Rafał Dzięgiel
c6b252f261 Reduce icon height a little #92
Make icon a tiny bit smaller in height. This also makes the play logo a little more centered vertically.
2021-07-15 11:24:16 +02:00
Rafał Dzięgiel
0f1447b14e sink: Check navigation state with a lock held
This happens as callback from GTK thread, so its not thread safe
2021-07-13 19:57:31 +02:00
Rafał Dzięgiel
cfd6e1bd23 Merge pull request #91 from bridadan/mobile_youtube_urls
Parse mobile youtube URLs
2021-07-12 21:35:03 +02:00
Brian Daniels
0cb89d3a84 Parse mobile youtube URLs.
Add support for youtube URLs with the format m.youtube.com?v=<video id>
2021-07-12 15:09:39 -04:00
Rafał Dzięgiel
3bf636d46b sink: Do not send navigation events when not playing
Before playback starts our video display size is zero, no point in sending navigation events in such case.
Latest gstreamer git prints criticals in such case.

Also do not send mouse navigaion when element is paused and skip keypresses when below paused state.
2021-07-08 20:33:12 +02:00
Rafał Dzięgiel
8f79a76a51 flatpak: Update metainfo description
Clapper was tested and confirmed to work with V4L2 stateless decoders. Also since latest GTK4 version moved to EGL on Xorg we no longer have the GLX related problems we used to have.
2021-07-06 10:00:28 +02:00
Rafał Dzięgiel
0efe9144d8 Merge pull request #90 from Rafostar/external-oes
sink: Support rendering external-oes textures
2021-07-05 22:31:12 +02:00
Rafał Dzięgiel
2e776ddf7b sink: Support rendering external-oes textures
This significantly improves performance on mobile devices by
removing the texture copy from an OES texture to 2D texture.
2021-07-05 22:08:51 +02:00
Rafostar
2eea3b05b1 flatpak: Include run number in testing github action 2021-06-27 11:04:06 +02:00
Rafał Dzięgiel
e647cdc8c6 Update README.md 2021-06-25 09:18:56 +02:00
Rafał Dzięgiel
1f3ddab566 flatpak: Fix duplicated cache key name 2021-06-25 08:56:07 +02:00
Rafał Dzięgiel
a38480c46b Merge pull request #88 from Rafostar/workflow
Add Flatpak workflows
2021-06-24 20:31:17 +02:00
Rafał Dzięgiel
562587846a Add flatpak testing workflow
Builds nightly with latest GStreamer from git (no patches applied)
2021-06-24 19:45:15 +02:00
Rafał Dzięgiel
c6cd829e7b Add flatpak workflow
Builds on push/pull with Flathub patches
2021-06-24 19:44:52 +02:00
Rafał Dzięgiel
9b31581aac flatpak: Add app testing manifest version
The main difference is that it builds latest GStreamer from git master and uses
runtime provided version of GTK4 (both without any patches applied).

This is done for testing purposes or finding regressions.
2021-06-24 16:55:53 +02:00
Rafał Dzięgiel
5018b3a28a Use new PiP icons when available
Use the new "pip-in" and "pip-out" GNOME symbolic icons if user theme has them for enter/leave floating mode button. When icon is unavailable on the host, old icon will be used instead.
2021-06-23 14:24:59 +02:00
Rafostar
bad836cc6d flatpak: Fix wrong module path 2021-06-20 15:50:21 +02:00
Rafał Dzięgiel
e1845a212f Merge pull request #87 from Rafostar/pipewire
Add PipeWire support
2021-06-20 15:46:03 +02:00
Rafostar
f86e32ed88 flatpak: Sync with Flathub 2021-06-20 15:17:15 +02:00
Rafostar
af2c74a4b1 flatpak: Support PipeWire GStreamer plugins
We need to allow PipeWire socket access and symlink the pipewire
plugin to the dir where our custom GStreamer installation is.
2021-06-20 14:44:49 +02:00
Rafostar
1c414ef36b API: allow using PipeWire for audio output
Instead of using PulseAudio sink and making a round way through pipewire-pulse,
access and use PipeWire directly for audio output when user sets env var
GST_CLAPPER_USE_PIPEWIRE=1
2021-06-20 11:27:43 +02:00
Rafał Dzięgiel
11e89dab26 Update README.md 2021-06-18 21:35:15 +02:00
115 changed files with 17391 additions and 1948 deletions

36
.github/workflows/flatpak-nightly.yml vendored Normal file
View File

@@ -0,0 +1,36 @@
on:
schedule:
- cron: "0 0 * * *"
name: "Flatpak Nightly"
jobs:
flatpak:
name: "Flatpak"
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-nightly
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
fail-fast: false
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Install Docker
run: |
dnf -y install docker
- name: Setup QEMU
id: qemu
uses: docker/setup-qemu-action@v1
with:
platforms: arm64
- uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v4
name: "Build"
with:
bundle: com.github.rafostar.Clapper.flatpak
manifest-path: pkgs/flatpak/com.github.rafostar.Clapper-nightly.json
repository-name: gnome-nightly
repository-url: https://nightly.gnome.org/gnome-nightly.flatpakrepo
cache-key: flatpak-builder-${{ github.sha }}-testing-${{ github.run_number }}
arch: ${{ matrix.arch }}

38
.github/workflows/flatpak.yml vendored Normal file
View File

@@ -0,0 +1,38 @@
on:
push:
branches:
- master
pull_request:
branches:
- master
name: "Flatpak"
jobs:
flatpak:
name: "Flatpak"
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-40
options: --privileged
strategy:
matrix:
arch: [x86_64, aarch64]
fail-fast: false
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Install Docker
run: |
dnf -y install docker
- name: Setup QEMU
id: qemu
uses: docker/setup-qemu-action@v1
with:
platforms: arm64
- uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v4
name: "Build"
with:
bundle: com.github.rafostar.Clapper.flatpak
manifest-path: pkgs/flatpak/com.github.rafostar.Clapper.json
cache-key: flatpak-builder-${{ github.sha }}
arch: ${{ matrix.arch }}

View File

@@ -1,6 +1,10 @@
# Clapper
A GNOME media player build using [GJS](https://gitlab.gnome.org/GNOME/gjs) with [GTK4](https://www.gtk.org) toolkit.
The media player is using [GStreamer](https://gstreamer.freedesktop.org/) as a media backend and renders everything via [OpenGL](https://www.opengl.org).
[![Flatpak](https://github.com/Rafostar/clapper/actions/workflows/flatpak.yml/badge.svg?event=push)](https://github.com/Rafostar/clapper/actions/workflows/flatpak.yml)
[![Flatpak Nightly](https://github.com/Rafostar/clapper/actions/workflows/flatpak-nightly.yml/badge.svg?event=schedule)](https://github.com/Rafostar/clapper/actions/workflows/flatpak-nightly.yml)
[![Crowdin](https://badges.crowdin.net/clapper/localized.svg)](https://crowdin.com/project/clapper)
A GNOME media player built using [GJS](https://gitlab.gnome.org/GNOME/gjs) with [GTK4](https://www.gtk.org) toolkit.
The media player uses [GStreamer](https://gstreamer.freedesktop.org/) as a media backend and renders everything via [OpenGL](https://www.opengl.org).
<p align="center">
<img src="https://raw.githubusercontent.com/wiki/Rafostar/clapper/media/screenshot-windowed.png"><br>
@@ -23,21 +27,21 @@ The media player is using [GStreamer](https://gstreamer.freedesktop.org/) as a m
* [Adaptive UI](https://raw.githubusercontent.com/wiki/Rafostar/clapper/media/screenshot-mobile.png)
* [Playlist from file](https://github.com/Rafostar/clapper/wiki/Playlists)
* Chapters on progress bar
* MPRIS support
## Installation from Flatpak
The `Flatpak` package includes all required dependencies and codecs.
Additionally it also has a few patches, thus some functionalities work better (or are only available) in `Flatpak` version (until my changes are accepted upstream). List of patches used in this version can be found [here](https://github.com/Rafostar/clapper/issues/35).
Additionally it also has a few patches, thus some functionalities work better (or are only available) in `Flatpak` version (until my changes are accepted upstream).
List of patches used in this version can be found [here](https://github.com/Rafostar/clapper/issues/35).
<a href='https://flathub.org/apps/details/com.github.rafostar.Clapper'><img width='240' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.png'/></a>
**Important:** If you have been using the flatpak package from my custom 3rd party repo, please remove it and replace your installation with version from Flathub. That repository will not be maintained any longer. Thank you for understanding.
<a href='https://flathub.org/apps/details/com.github.rafostar.Clapper'>
<img width='240' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.png'/>
</a>
## Packages
The [pkgs folder](https://github.com/Rafostar/clapper/tree/master/pkgs) in this repository contains build scripts for various package formats. You can use them to build package yourself or download one of pre-built packages:
#### Debian, Fedora & openSUSE
#### Fedora & openSUSE
Pre-built packages are available in [my repo](https://software.opensuse.org//download.html?project=home%3ARafostar&package=clapper) ([see status](https://build.opensuse.org/package/show/home:Rafostar/clapper)).<br>
Those are automatically build on each git commit, thus are considered unstable.
Those are automatically built on each git commit, and are thus considered unstable.
#### Arch Linux
You can get Clapper from the AUR:
@@ -50,22 +54,19 @@ meson builddir --prefix=/usr/local
sudo meson install -C builddir
```
## Q&A
**Q:** Does using `GJS` negatively impact video performance?<br>
**A:** Absolutely not. `GJS` here is used to put together the GUI during startup.
It has nothing to do with video rendering. All used `GTK4` and `GStreamer` libraries are in C.
Even the custom video widget that I prepared for this player (based on original `GTK3` implementation) is a compiled C code.
All these libs are acting "on their own" and no function calls from `GJS` related to video decoding and rendering are performed during playback.
**Q:** What settings should I set to maximize performance?<br>
**A:** As of now, player works best on `Wayland` session. `Wayland` users can try enabling highly experimental `vah264dec` plugin for improved performance (this plugin does not work on `Xorg` right now) for standard (8-bit) `H.264` videos.
It can be enabled from inside player preferences dialog inside `Advanced -> GStreamer` tab using customizable `Plugin Ranking` feature.
Since the whole app is rendered using your GPU, users of VERY weak GPUs might want to disable the "render window shadows" option to have more GPU power available for non-fullscreen video rendering.
## Other Questions?
## Questions?
Feel free to ask me any questions. Come and talk on Matrix: [#clapper-player:matrix.org](https://matrix.to/#/#clapper-player:matrix.org)
## Translations
Preferred translation method is to use [Clapper Crowdin](https://crowdin.com/project/clapper) web page.
Crowdin does not require any additional tools and translating can be done through web browser.
You can login using GitHub account or create a new one. Only I can add new languages to this project,
so if your language is not available, please contact me first.
## Special Thanks
Many thanks to [sp1ritCS](https://github.com/sp1ritCS) for creating and maintaining package build files.
Big thanks to [bridadan](https://github.com/bridadan) and [Uniformbuffer3](https://github.com/Uniformbuffer3) for helping
with testing V4L2 and NVDEC hardware acceleration methods.
Thanks a lot to all the people who are supporting the development with their anonymous donations through [Liberapay](https://liberapay.com/Clapper/). I :heart: U.

View File

@@ -4,7 +4,6 @@
<param name="url">https://github.com/Rafostar/clapper.git</param>
<param name="extract">pkgs/rpm/clapper.spec</param>
<param name="extract">pkgs/rpm/clapper.rpmlintrc</param>
<param name="extract">pkgs/deb/clapper.dsc</param>
</service>
<service name="tar" mode="buildtime"/>
<service name="recompress" mode="buildtime">

View File

@@ -1,17 +0,0 @@
#!@GJS@
/* pkg init enforces the imports path to the folder
* named after the pkg name, but I would prefer to have
* the bundled subprocess stored in the same directory */
imports.searchPath.unshift('@datadir@/@PACKAGE_NAME@');
const Package = imports.package;
Package.init({
name: '@PACKAGE_NAME@.@ID_POSTFIX@',
version: '@PACKAGE_VERSION@',
prefix: '@prefix@',
libdir: '@libdir@',
datadir: '@datadir@',
});
Package.run(imports.src.main@ID_POSTFIX@);

View File

@@ -1,12 +1,9 @@
#!@GJS@
const Package = imports.package;
Package.init({
imports.package.init({
name: '@PACKAGE_NAME@',
version: '@PACKAGE_VERSION@',
prefix: '@prefix@',
libdir: '@libdir@',
datadir: '@datadir@',
});
Package.run(imports.src.main);
imports.package.run(imports.src.main@ID_POSTFIX@);

View File

@@ -2,7 +2,6 @@ clapper_apps = ['', 'Remote', 'Daemon']
foreach id_postfix : clapper_apps
app_postfix = (id_postfix != '') ? '.' + id_postfix : ''
template_type = (id_postfix != '') ? '.Subprocess' : ''
bin_conf = configuration_data()
bin_conf.set('GJS', find_program('gjs').path())
@@ -10,15 +9,20 @@ foreach id_postfix : clapper_apps
bin_conf.set('PACKAGE_VERSION', meson.project_version())
bin_conf.set('ID_POSTFIX', id_postfix)
bin_conf.set('prefix', get_option('prefix'))
bin_conf.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
bin_conf.set('datadir', join_paths(get_option('prefix'), get_option('datadir')))
bin_conf.set('libdir', libdir)
configure_file(
input: 'com.github.rafostar.Clapper' + template_type + '.in',
input: 'com.github.rafostar.Clapper.in',
output: 'com.github.rafostar.Clapper' + app_postfix,
configuration: bin_conf,
install: true,
install_dir: get_option('bindir'),
install_dir: bindir,
install_mode: 'rwxr-xr-x'
)
endforeach
clapper_symlink_cmd = 'ln -fs @0@ $DESTDIR@1@'.format(
'com.github.rafostar.Clapper',
join_paths(bindir, 'clapper')
)
meson.add_install_script('sh', '-c', clapper_symlink_cmd)

3
crowdin.yml Normal file
View File

@@ -0,0 +1,3 @@
files:
- source: /po/com.github.rafostar.Clapper.pot
translation: /po/%osx_locale%.po

View File

@@ -5,19 +5,35 @@ scale marks {
radio {
margin-left: -2px;
}
scrolledwindow scrollbar.vertical slider {
min-height: 16px;
}
/* Adwaita is missing osd ListBox */
.osd list {
.clapperplaylist {
background: none;
}
.osd list row image {
.clapperplaylist row {
border-radius: 5px;
}
.clapperplaylist row {
color: @theme_fg_color;
}
.clapperplaylist row button {
margin: 0px;
padding: 0px;
min-width: 28px;
min-height: 28px;
}
.fullscreen.tvmode .clapperplaylist row button {
min-width: 36px;
min-height: 36px;
margin-left: 2px;
margin-right: 2px;
}
.osd .clapperplaylist row image {
-gtk-icon-shadow: none;
}
.gtk402 trough highlight {
border-color: transparent;
}
.gtk402 .osd trough highlight {
border-color: inherit;
}
.osdheaderbar {
background: transparent;
}
@@ -34,18 +50,18 @@ radio {
.linkedright image {
margin-right: 2px;
}
/* Non-osd style for popover menu */
.menupopover label {
color: @theme_text_color;
/* Flat popovers */
popover arrow,
popover contents {
border-color: transparent;
box-shadow: none;
}
.menupopover arrow {
background: @theme_base_color;
border-color: @insensitive_base_color;
}
.menupopover contents {
background: @theme_base_color;
border-color: @insensitive_base_color;
.popoverseparator separator {
background-color: @insensitive_fg_color;
}
/* Rounded corners */
.adwrounded.csd {
border-radius: 8px;
}
@@ -61,8 +77,15 @@ radio {
.roundedcorners {
border-radius: 8px;
}
.adwthemedark scale trough highlight {
filter: brightness(120%);
/* Reduce sliders size */
scale trough slider {
min-height: 18px;
min-width: 18px;
}
.fullscreen.tvmode scale trough slider {
min-height: 20px;
min-width: 20px;
}
.videowidget {
@@ -75,24 +98,29 @@ radio {
font-size: 21px;
font-weight: 500;
}
.adwicons .playercontrols {
margin-bottom: -1px;
}
.playercontrols {
.clappercontrols {
margin-left: 2px;
margin-right: 2px;
}
.playercontrols button {
.fullscreen.tvmode .clappercontrols {
margin-left: 1px;
margin-right: 1px;
}
.clappercontrolsbutton {
margin: 3px;
margin-left: 1px;
margin-right: 1px;
}
.fullscreen.tvmode .playercontrols button {
.fullscreen.tvmode .clappercontrolsbutton {
min-width: 32px;
min-height: 32px;
margin: 5px;
margin-left: 3px;
margin-right: 3px;
margin-left: 4px;
margin-right: 4px;
}
.clappercontrolsbutton.text-button {
padding-left: 4px;
padding-right: 4px;
}
.fullscreen.tvmode button image {
-gtk-icon-shadow: none;
@@ -105,24 +133,16 @@ radio {
min-height: 17px;
}
.fullscreen.tvmode .playercontrols button image {
-gtk-icon-size: 24px;
/* Also affects popover buttons */
.fullscreen.tvmode .clappercontrols button image {
-gtk-icon-size: 26px;
}
.adwicons .playbackicon {
-gtk-icon-size: 20px;
}
.adwicons.fullscreen.tvmode .playbackicon {
-gtk-icon-size: 28px;
}
.labelbuttonlabel {
margin-left: -4px;
margin-right: -4px;
min-width: 8px;
.clappercontrolsbutton.text-button label {
font-family: 'Cantarell', sans-serif;
font-variant-numeric: tabular-nums;
font-weight: 600;
}
.fullscreen.tvmode .labelbuttonlabel {
.fullscreen.tvmode .clappercontrolsbutton.text-button label {
font-size: 22px;
text-shadow: none;
}
@@ -153,29 +173,27 @@ radio {
font-variant-numeric: tabular-nums;
}
/* Button Inside Popover */
.popoverbutton {
min-width: 24px;
min-height: 24px;
}
/* Position Scale */
.positionscale {
margin: -2px;
margin-left: -4px;
margin-right: -4px;
}
.positionscale trough highlight {
min-height: 4px;
}
.osd .positionscale trough highlight {
min-height: 6px;
}
.fullscreen.tvmode .positionscale {
padding-left: 12px;
padding-right: 12px;
}
.fullscreen.tvmode .positionscale.fine-tune {
padding-left: 12px;
padding-right: 12px;
}
.fullscreen.tvmode .positionscale trough slider {
color: transparent;
background: transparent;
border-color: transparent;
box-shadow: none;
outline: none;
}
.positionscale mark indicator {
min-height: 6px;
@@ -205,6 +223,9 @@ radio {
.fullscreen.tvmode .positionscale marks.bottom {
margin-top: 2px;
}
.fullscreen.tvmode .positionscale trough {
border-radius: 3px;
}
.fullscreen.tvmode .positionscale trough highlight {
border-radius: 3px;
min-height: 20px;
@@ -232,6 +253,9 @@ radio {
margin-top: -4px;
margin-bottom: -6px;
}
.volumescale trough highlight {
min-width: 4px;
}
.fullscreen.tvmode .volumescale trough highlight {
min-width: 6px;
}
@@ -240,14 +264,21 @@ radio {
}
/* Elapsed Popover */
.elapsedpopoverbox {
min-width: 260px;
.elapsedpopover {
min-width: 326px;
}
.elapsedpopoverbox box separator {
background: @insensitive_fg_color;
.fullscreen.tvmode .elapsedpopover {
min-width: 448px;
}
.fullscreen.tvmode .elapsedpopoverbox {
min-width: 360px;
.elapsedpopover contents {
padding-bottom: 0px;
}
.speedscale {
margin-left: 4px;
margin-right: 4px;
}
.speedscale trough highlight {
min-height: 4px;
}
.fullscreen.tvmode .speedscale trough highlight {
min-height: 6px;
@@ -279,26 +310,9 @@ radio {
font-weight: 600;
}
/* Preferences */
.prefsnotebook grid {
margin: 10px;
}
.prefssubpage header {
background: none;
}
.prefssubpage header tabs tab {
box-shadow: none;
margin: 0px;
margin-right: 1px;
}
.prefssubpage header tabs tab:checked {
color: initial;
background: @theme_selected_bg_color;
}
/* Open URI Dialog */
.uridialogbox {
margin: 12px;
margin: 10px;
}
/* Tweaks */
@@ -322,3 +336,52 @@ radio {
.blackbackground {
background: black;
}
/** SCALING LOW-RES **/
.fullscreen.tvmode.lowres .clappercontrols button image {
-gtk-icon-size: 22px;
}
.fullscreen.tvmode.lowres .clappercontrolsbutton {
min-width: 28px;
min-height: 28px;
}
.fullscreen.tvmode.lowres .clappercontrolsbutton.text-button label {
font-size: 21px;
}
.fullscreen.tvmode.lowres .positionscale trough highlight {
min-height: 18px;
}
.fullscreen.tvmode.lowres .positionscale.fine-tune trough highlight {
min-height: 18px;
}
.fullscreen.tvmode.lowres popover box {
font-size: 19px;
}
.fullscreen.tvmode.lowres radio {
min-width: 15px;
min-height: 15px;
}
.fullscreen.tvmode.lowres .clapperplaylist row button {
min-width: 32px;
min-height: 32px;
}
.fullscreen.tvmode.lowres .tvtitle {
font-size: 26px;
}
.fullscreen.tvmode.lowres .tvtime {
font-size: 34px;
}
.fullscreen.tvmode.lowres .tvendtime {
font-size: 21px;
}
.fullscreen.tvmode.lowres .elapsedpopover {
min-width: 410px;
}
.fullscreen.tvmode.lowres .chapterlabel {
font-size: 21px;
}
/** SCALING HI-RES **/
.fullscreen.tvmode.hires .clappercontrols button image {
-gtk-icon-size: 24px; /* Sharpest on 2160p with scaling 2x */
}

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/com/github/rafostar/Clapper">
<file preprocess="xml-stripblanks" alias="icons/scalable/actions/play-symbolic.svg">icons/play-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="icons/scalable/actions/pause-symbolic.svg">icons/pause-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="icons/scalable/actions/pip-in-symbolic.svg">icons/pip-in-symbolic.svg</file>
<file preprocess="xml-stripblanks" alias="icons/scalable/actions/pip-out-symbolic.svg">icons/pip-out-symbolic.svg</file>
</gresource>
</gresources>

View File

@@ -6,35 +6,31 @@
<default>false</default>
<summary>Automatically enter fullscreen when first file is loaded</summary>
</key>
<key name="volume-initial" type="s">
<default>"restore"</default>
<summary>Mode used for startup volume value</summary>
<key name="volume-custom" type="b">
<default>false</default>
<summary>Set custom volume value at startup</summary>
</key>
<key name="volume-value" type="i">
<default>100</default>
<summary>Custom initial volume value in percentage after startup</summary>
</key>
<key name="keep-last-frame" type="b">
<default>false</default>
<summary>Keep showing last video frame after playback finishes</summary>
</key>
<key name="close-auto" type="b">
<default>false</default>
<summary>Automatically close the app after playback finishes</summary>
<key name="after-playback" type="i">
<default>0</default>
<summary>What to do after playback finishes</summary>
</key>
<!-- Behaviour -->
<key name="seeking-mode" type="s">
<default>"normal"</default>
<!-- Behavior -->
<key name="seeking-mode" type="i">
<default>0</default>
<summary>Mode used for seeking</summary>
</key>
<key name="seeking-value" type="i">
<default>10</default>
<summary>Time amount to seek with single press of arrow keys</summary>
</key>
<key name="seeking-unit" type="s">
<default>"second"</default>
<summary>Unit to use with seeking value</summary>
<key name="seeking-unit" type="i">
<default>0</default>
<summary>Unit ID to use with seeking value</summary>
</key>
<key name="resume-enabled" type="b">
<default>true</default>
@@ -50,16 +46,12 @@
</key>
<!-- Audio -->
<key name="audio-offset" type="d">
<key name="audio-offset" type="i">
<default>0</default>
<summary>Offset time for audio tracks relative to video (milliseconds)</summary>
</key>
<!-- Subtitles -->
<key name="subtitle-offset" type="d">
<default>0</default>
<summary>Offset time for subtitle tracks relative to video (milliseconds)</summary>
</key>
<key name="subtitle-font" type="s">
<default>"Sans 12"</default>
<summary>The subtitles font description</summary>
@@ -95,9 +87,17 @@
<!-- GStreamer -->
<key name="plugin-ranking" type="s">
<default>'[{"apply":false,"name":"vah264dec","rank":300}]'</default>
<default>'{}'</default>
<summary>Custom values for GStreamer plugin ranking</summary>
</key>
<key name="use-playbin3" type="b">
<default>false</default>
<summary>Use playbin3 element instead of playbin2</summary>
</key>
<key name="use-pipewire" type="b">
<default>false</default>
<summary>Use PipeWire for audio output</summary>
</key>
<key name="play-flags" type="i">
<default>1687</default>
<summary>Set PlayFlags for playbin</summary>
@@ -108,8 +108,8 @@
<default>false</default>
<summary>Enable to use adaptive streaming for YouTube</summary>
</key>
<key name="yt-quality-type" type="s">
<default>"hfr"</default>
<key name="yt-quality-type" type="i">
<default>1</default>
<summary>Max YouTube video quality type</summary>
</key>

View File

@@ -9,24 +9,20 @@
<launchable type="desktop-id">com.github.rafostar.Clapper.desktop</launchable>
<description>
<p>
Clapper is a GNOME media player build using GJS with GTK4 toolkit.
Clapper is a GNOME media player built using GJS with GTK4 toolkit.
The media player is using GStreamer as a media backend and renders
everything via OpenGL. Player works natively on both Xorg and Wayland.
It also supports VA-API on AMD/Intel GPUs.
It also supports hardware acceleration through VA-API on AMD/Intel GPUs,
NVDEC on Nvidia and V4L2 on mobile devices.
</p>
<p>
The media player has an adaptive GUI. When viewing videos in "Windowed Mode",
Clapper will use mostly unmodified GTK widgets to match your OS look nicely.
When player enters "Fullscreen Mode" all GUI elements will become darker, bigger
and semi-transparent for your viewing comfort. It also has a "Floating Mode" which
displays video only on top of all other windows for a PiP-like viewing experience.
displays only video on top of all other windows for a PiP-like viewing experience.
Mobile friendly transitions are also supported.
</p>
<p>
For best stability Wayland session is recommended. Wayland users with AMD/Intel GPUs
can try enabling HIGHLY EXPERIMENTAL "vah264dec" plugin inside player preferences
for reduced CPU and GPU usage on H.264 videos.
</p>
</description>
<developer_name>Rafał Dzięgiel</developer_name>
<url type="homepage">https://rafostar.github.io/clapper</url>
@@ -52,6 +48,71 @@
</screenshot>
</screenshots>
<releases>
<release version="0.4.1" date="2021-12-20">
<description>
<p>Fixes:</p>
<ul>
<li>Compatibility with more recent libadwaita versions</li>
<li>Toggle mute with M button alone</li>
<li>Allow handling YouTube with external GStreamer plugins</li>
<li>Fix catching errors when reading clipboard</li>
<li>Fix missing translator-credits</li>
<li>Fix missing gio-unix-2.0 dep</li>
<li>Fix playback pausing when entering fullscreen with touchscreen</li>
<li>Fix GST_PLUGIN_FEATURE_RANK env usage</li>
<li>Fix video/audio decoder change detection</li>
<li>Merge global video tags instead replacing them</li>
<li>Few other misc bug fixes</li>
</ul>
<p>New translations:</p>
<ul>
<li>Chinese Simplified</li>
<li>Czech</li>
<li>Hungarian</li>
<li>Portuguese</li>
<li>Portuguese, Brazilian</li>
<li>Russian</li>
<li>Spanish</li>
</ul>
</description>
</release>
<release version="0.4.0" date="2021-09-12">
<description>
<p>Changes:</p>
<ul>
<li>Now uses libadwaita</li>
<li>New and adaptive preferences window</li>
<li>Improved open URI dialog</li>
<li>Few small tweaks to fullscreen UI design</li>
<li>Show current video and audio decoders in popovers (easy way to check if HW accel is used)</li>
<li>Enabled NVDEC hardware acceleration by default (requires Nvidia proprietary drivers)</li>
<li>Added option to use PipeWire for audio output (experimental)</li>
<li>Added option to use playbin3 element (experimental)</li>
<li>New PiP icon from icon development kit</li>
<li>Improved performance on devices running OpenGL ES</li>
<li>Translations support</li>
<li>Various bug fixes</li>
</ul>
<p>New keyboard shortcuts:</p>
<ul>
<li>Leave fullscreen with Escape key</li>
<li>Toggle mute with Ctrl+M</li>
</ul>
<p>More touchscreen gestures:</p>
<ul>
<li>Toggle playback with a long press</li>
<li>Switch playlist items via double tap on screen side</li>
</ul>
<p>New translations:</p>
<ul>
<li>Catalan</li>
<li>Dutch</li>
<li>German</li>
<li>Italian</li>
<li>Polish</li>
</ul>
</description>
</release>
<release version="0.3.0" date="2021-06-18">
<description>
<p>Changes:</p>
@@ -122,6 +183,14 @@
</release>
</releases>
<content_rating type="oars-1.1" />
<recommends>
<control>keyboard</control>
<control>pointing</control>
<control>touch</control>
</recommends>
<requires>
<display_length compare="ge">small</display_length>
</requires>
<custom>
<value key="Purism::form_factor">workstation</value>
<value key="Purism::form_factor">mobile</value>

View File

@@ -1,29 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256" width="256" height="256">
<defs>
<path d="M27.2 243.52C27.2 236.16 27.2 199.83 27.2 134.22C47.64 134.22 211.12 134.22 231.56 134.22C231.56 199.83 231.56 236.16 231.56 243.52C231.56 250.4 225.96 256 218.92 256C183.07 256 57.77 256 39.84 256C32.8 256 27.2 250.4 27.2 243.52Z" id="b1nGq5BrLC"></path>
<path d="M24.32 103.65C24.32 106.22 24.32 127.02 24.32 129.58C24.32 132.78 26.72 135.18 29.92 135.18C50.41 135.18 215.08 135.18 235.72 135.18C238.76 135.18 241.32 132.78 241.32 129.58C241.32 127.02 241.32 106.22 241.32 103.65C241.32 100.45 238.76 98.05 235.72 98.05C194.59 98.05 50.41 98.05 29.92 98.05C26.72 98.05 24.32 100.45 24.32 103.65Z" id="a3jkaoNn4k"></path>
<path d="M174.59 135.18L211.87 98.05L171.07 98.05L133.78 135.18L174.59 135.18Z" id="atpVQ8mnd"></path>
<path d="M76.81 135.18L114.1 98.05L73.13 98.05L35.84 135.18L76.81 135.18Z" id="bMtYoNHu0"></path>
<path d="M19.04 69.41C19.84 71.97 25.92 91.97 26.72 94.37C27.68 97.41 30.72 99.01 33.76 98.05C54.09 91.81 216.68 42.04 237 35.8C240.04 35 241.64 31.8 240.84 28.92C240.04 26.36 233.96 6.36 233.16 3.96C232.2 0.92 229.16 -0.68 226.12 0.28C185.47 12.6 43.21 56.29 22.88 62.53C19.84 63.33 18.24 66.53 19.04 69.41Z" id="b5oP0Glp4"></path>
<path d="M176.51 54.37L129.94 29.4L169.15 17.56L215.72 42.52L176.51 54.37Z" id="lwBgev6DR"></path>
<path d="M81.61 83.49L35.04 58.69L74.25 46.69L120.82 71.49L81.61 83.49Z" id="cUsjEMRUu"></path>
<path d="M14.72 66.69C14.72 72.93 14.72 123.02 14.72 129.26C14.72 132.62 17.44 135.18 20.64 135.18C26.56 135.18 74.09 135.18 80.01 135.18C84.33 135.18 87.21 130.86 85.61 127.02C82.89 120.78 61.45 70.53 58.73 64.29C57.77 62.05 55.69 60.77 53.29 60.77C46.73 60.77 24 60.77 20.64 60.77C17.44 60.77 14.72 63.33 14.72 66.69Z" id="c1bcHZGXe"></path>
<path d="M32.64 60.61C31.52 60.61 21.92 60.61 20.64 60.61C17.44 60.61 14.72 63.33 14.72 66.53C14.72 72.77 14.72 123.02 14.72 129.26C14.72 132.46 17.44 135.18 20.64 135.18C21.92 135.18 31.52 135.18 32.64 135.18C29.44 135.18 26.72 132.46 26.72 129.26C26.72 116.62 26.72 72.77 26.72 66.53C26.72 63.33 29.44 60.61 32.64 60.61Z" id="f2PtH0V1vC"></path>
<path d="M231.56 135.18C231.56 143.82 231.56 148.46 231.56 149.42C231.56 149.42 231.56 149.42 231.56 149.42C108.98 149.42 40.8 149.42 27.2 149.42C27.2 149.42 27.2 149.42 27.2 149.42C27.2 140.94 27.2 136.14 27.2 135.18C27.2 135.18 27.2 135.18 27.2 135.18C149.78 135.18 217.96 135.18 231.56 135.18C231.56 135.18 231.56 135.18 231.56 135.18Z" id="a1SvrrkqVm"></path>
<path d="M104.22 162.46L104.22 234.46L163.22 198.54L104.22 162.46Z" id="agXcvKqh8"></path>
<path id="b1nGq5BrLC" d="M27.2 243.52C27.2 236.16 27.2 199.83 27.2 134.22C47.64 134.22 211.12 134.22 231.56 134.22C231.56 199.83 231.56 236.16 231.56 243.52C231.56 250.4 225.96 256 218.92 256C183.07 256 57.77 256 39.84 256C32.8 256 27.2 250.4 27.2 243.52Z"></path>
<path id="a3jkaoNn4k" d="M24.32 103.65C24.32 106.22 24.32 127.02 24.32 129.58C24.32 132.78 26.72 135.18 29.92 135.18C50.41 135.18 215.08 135.18 235.72 135.18C238.76 135.18 241.32 132.78 241.32 129.58C241.32 127.02 241.32 106.22 241.32 103.65C241.32 100.45 238.76 98.05 235.72 98.05C194.59 98.05 50.41 98.05 29.92 98.05C26.72 98.05 24.32 100.45 24.32 103.65Z"></path>
<path id="atpVQ8mnd" d="M174.59 135.18L211.87 98.05L171.07 98.05L133.78 135.18L174.59 135.18Z"></path>
<path id="bMtYoNHu0" d="M76.81 135.18L114.1 98.05L73.13 98.05L35.84 135.18L76.81 135.18Z"></path>
<path id="b5oP0Glp4" d="M19.04 69.41C19.84 71.97 25.92 91.97 26.72 94.37C27.68 97.41 30.72 99.01 33.76 98.05C54.09 91.81 216.68 42.04 237 35.8C240.04 35 241.64 31.8 240.84 28.92C240.04 26.36 233.96 6.36 233.16 3.96C232.2 0.92 229.16 -0.68 226.12 0.28C185.47 12.6 43.21 56.29 22.88 62.53C19.84 63.33 18.24 66.53 19.04 69.41Z"></path>
<path id="lwBgev6DR" d="M176.51 54.37L129.94 29.4L169.15 17.56L215.72 42.52L176.51 54.37Z"></path>
<path id="cUsjEMRUu" d="M81.61 83.49L35.04 58.69L74.25 46.69L120.82 71.49L81.61 83.49Z"></path>
<path id="c1bcHZGXe" d="M14.72 66.69C14.72 72.93 14.72 123.02 14.72 129.26C14.72 132.62 17.44 135.18 20.64 135.18C26.56 135.18 74.09 135.18 80.01 135.18C84.33 135.18 87.21 130.86 85.61 127.02C82.89 120.78 61.45 70.53 58.73 64.29C57.77 62.05 55.69 60.77 53.29 60.77C46.73 60.77 24 60.77 20.64 60.77C17.44 60.77 14.72 63.33 14.72 66.69Z"></path>
<path id="f2PtH0V1vC" d="M32.64 60.61C31.52 60.61 21.92 60.61 20.64 60.61C17.44 60.61 14.72 63.33 14.72 66.53C14.72 72.77 14.72 123.02 14.72 129.26C14.72 132.46 17.44 135.18 20.64 135.18C21.92 135.18 31.52 135.18 32.64 135.18C29.44 135.18 26.72 132.46 26.72 129.26C26.72 116.62 26.72 72.77 26.72 66.53C26.72 63.33 29.44 60.61 32.64 60.61Z"></path>
<path id="a1SvrrkqVm" d="M231.56 135.18C231.56 143.82 231.56 148.46 231.56 149.42C231.56 149.42 231.56 149.42 231.56 149.42C108.98 149.42 40.8 149.42 27.2 149.42C27.2 149.42 27.2 149.42 27.2 149.42C27.2 140.94 27.2 136.14 27.2 135.18C27.2 135.18 27.2 135.18 27.2 135.18C149.78 135.18 217.96 135.18 231.56 135.18C231.56 135.18 231.56 135.18 231.56 135.18Z"></path>
<path id="agXcvKqh8" d="M104.22 162.46L104.22 234.46L163.22 198.54L104.22 162.46Z"></path>
</defs>
<g>
<g><use xlink:href="#b1nGq5BrLC" fill="#4747d1"></use></g>
<g><use xlink:href="#a3jkaoNn4k" fill="#4747d1"></use></g>
<g><use xlink:href="#atpVQ8mnd" fill="#f1f1f1"></use></g>
<g><use xlink:href="#bMtYoNHu0" fill="#f1f1f1"></use></g>
<g><use xlink:href="#b5oP0Glp4" fill="#4747d1"></use></g>
<g><use xlink:href="#lwBgev6DR" fill="#f1f1f1"></use></g>
<g><use xlink:href="#cUsjEMRUu" fill="#f1f1f1"></use></g>
<g><use xlink:href="#c1bcHZGXe" fill="#a9a9a9"></use></g>
<g><use xlink:href="#f2PtH0V1vC" opacity="0.2" fill="#000000"></use></g>
<g><use xlink:href="#a1SvrrkqVm" opacity="0.2" fill="#000000"></use></g>
<g><use xlink:href="#agXcvKqh8" fill="#f1f1f1"></use></g>
<g><use xlink:href="#b1nGq5BrLC" fill="#4747d1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#a3jkaoNn4k" fill="#4747d1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#atpVQ8mnd" fill="#f1f1f1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#bMtYoNHu0" fill="#f1f1f1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#b5oP0Glp4" fill="#4747d1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#lwBgev6DR" fill="#f1f1f1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#cUsjEMRUu" fill="#f1f1f1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#c1bcHZGXe" fill="#a9a9a9" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#f2PtH0V1vC" opacity="0.2" fill="#000000" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#a1SvrrkqVm" opacity="0.2" fill="#000000" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
<g><use xlink:href="#agXcvKqh8" fill="#f1f1f1" transform="matrix(1, 0, 0, 0.97, 0, 0)"></use></g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<g fill="#2e3436">
<path d="m 3 3 h 4 v 10 h -4 z m 0 0"/>
<path d="m 9 3 h 4 v 10 h -4 z m 0 0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 262 B

View File

@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<filter id="a" height="100%" width="100%" x="0%" y="0%">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
</filter>
<mask id="b">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
</g>
</mask>
<clipPath id="c">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="d">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="e">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="f">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="g">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="h">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="i">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="j">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="k">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="l">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="m">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="n">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="o">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="p">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
</g>
</mask>
<clipPath id="q">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="r">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
</g>
</mask>
<clipPath id="s">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<g fill="#2e3436">
<path d="m 1 2.007812 c -0.550781 0 -1 0.449219 -1 1 v 9 c 0 0.550782 0.449219 1 1 1 h 4 v -2 h -3 v -7 h 10 v 3 h 2 v -4 c 0 -0.550781 -0.449219 -1 -1 -1 z m 0 0" fill-opacity="0.35"/>
<path d="m 9 10 c -0.550781 0 -1 0.449219 -1 1 v 4.007812 c 0 0.550782 0.449219 1 1 1 h 6 c 0.550781 0 1 -0.449218 1 -1 v -4.007812 c 0 -0.550781 -0.449219 -1 -1 -1 z m 1 2 h 4 v 2.007812 h -4 z m 0 0"/>
<path d="m 3.132812 5.140625 c 0.171876 -0.164063 0.496094 -0.1875 0.757813 0.015625 l 3.109375 3.089844 v 0.753906 h -0.753906 l -3.109375 -3.089844 c -0.191407 -0.191406 -0.179688 -0.597656 -0.003907 -0.769531 z m 0 0"/>
<path d="m 4 9 h 4 v 1 h -4 z m 0 0"/>
<path d="m 7 6 h 1 v 4 h -1 z m 0 0"/>
</g>
<g clip-path="url(#c)" mask="url(#b)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 562.460938 212.058594 h 10.449218 c -1.183594 0.492187 -1.296875 2.460937 0 3 h -10.449218 z m 0 0" fill="#2e3436"/>
</g>
<g clip-path="url(#e)" mask="url(#d)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 16 632 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#g)" mask="url(#f)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 17 631 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#i)" mask="url(#h)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 18 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#k)" mask="url(#j)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 16 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#m)" mask="url(#l)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 17 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#o)" mask="url(#n)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 19 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#q)" mask="url(#p)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 136 660 v 7 h 7 v -7 z m 0 0" fill="#2e3436"/>
</g>
<g clip-path="url(#s)" mask="url(#r)" transform="matrix(1 0 0 1 -580 -764)">
<path d="m 219 642 h 3 v 12 h -3 z m 0 0" fill="#2e3436"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<filter id="a" height="100%" width="100%" x="0%" y="0%">
<feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
</filter>
<mask id="b">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
</g>
</mask>
<clipPath id="c">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="d">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="e">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="f">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="g">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="h">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="i">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="j">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="k">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="l">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="m">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="n">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
</g>
</mask>
<clipPath id="o">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="p">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
</g>
</mask>
<clipPath id="q">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<mask id="r">
<g filter="url(#a)">
<path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
</g>
</mask>
<clipPath id="s">
<path d="m 0 0 h 1024 v 800 h -1024 z"/>
</clipPath>
<g fill="#2e3436">
<path d="m 1 2.007812 c -0.550781 0 -1 0.449219 -1 1 v 9 c 0 0.550782 0.449219 1 1 1 h 4 v -2 h -3 v -7 h 10 v 3 h 2 v -4 c 0 -0.550781 -0.449219 -1 -1 -1 z m 0 0"/>
<path d="m 9 10 c -0.550781 0 -1 0.449219 -1 1 v 4.007812 c 0 0.550782 0.449219 1 1 1 h 6 c 0.550781 0 1 -0.449218 1 -1 v -4.007812 c 0 -0.550781 -0.449219 -1 -1 -1 z m 1 2 h 4 v 2.007812 h -4 z m 0 0" fill-opacity="0.35"/>
<path d="m 7.863281 9.871094 c -0.167969 0.164062 -0.492187 0.1875 -0.753906 -0.019532 l -3.113281 -3.085937 v -0.753906 h 0.753906 l 3.109375 3.085937 c 0.191406 0.191406 0.179687 0.601563 0.003906 0.773438 z m 0 0"/>
<path d="m 6.996094 6.011719 h -4 v -1 h 4 z m 0 0"/>
<path d="m 3.996094 9.011719 h -1 v -4 h 1 z m 0 0"/>
</g>
<g clip-path="url(#c)" mask="url(#b)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 562.460938 212.058594 h 10.449218 c -1.183594 0.492187 -1.296875 2.460937 0 3 h -10.449218 z m 0 0" fill="#2e3436"/>
</g>
<g clip-path="url(#e)" mask="url(#d)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 16 632 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#g)" mask="url(#f)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 17 631 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#i)" mask="url(#h)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 18 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#k)" mask="url(#j)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 16 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#m)" mask="url(#l)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 17 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#o)" mask="url(#n)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 19 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</g>
<g clip-path="url(#q)" mask="url(#p)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 136 660 v 7 h 7 v -7 z m 0 0" fill="#2e3436"/>
</g>
<g clip-path="url(#s)" mask="url(#r)" transform="matrix(1 0 0 1 -600 -764)">
<path d="m 219 642 h 3 v 12 h -3 z m 0 0" fill="#2e3436"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="2 2 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="M 5 3.746094 L 5 16.246094 L 6.25 16.246094 C 6.46875 16.246094 6.683594 16.195312 6.875 16.089844 L 15.625 11.089844 C 16.015625 10.875 16.210938 10.433594 16.210938 9.996094 C 16.210938 9.554688 16.015625 9.117188 15.625 8.902344 L 6.875 3.902344 C 6.683594 3.792969 6.46875 3.746094 6.25 3.746094 Z M 5 3.746094" fill="#2e3436"/>
</svg>

After

Width:  |  Height:  |  Size: 480 B

View File

@@ -1,5 +1,12 @@
sharedir = join_paths(get_option('prefix'), 'share')
iconsdir = join_paths(sharedir, 'icons', 'hicolor')
iconsdir = join_paths(datadir, 'icons', 'hicolor')
appstream_util = find_program('appstream-util', required: false)
if appstream_util.found()
test('Validate appstream file', appstream_util, args: [
'validate-relax',
join_paths(meson.current_source_dir(), 'com.github.rafostar.Clapper.metainfo.xml')
])
endif
install_data('com.github.rafostar.Clapper.svg',
install_dir: join_paths(iconsdir, 'scalable', 'apps')
@@ -8,14 +15,20 @@ install_data('com.github.rafostar.Clapper-symbolic.svg',
install_dir: join_paths(iconsdir, 'symbolic', 'apps')
)
install_data('com.github.rafostar.Clapper.gschema.xml',
install_dir: join_paths(sharedir, 'glib-2.0', 'schemas')
install_dir: join_paths(datadir, 'glib-2.0', 'schemas')
)
install_data('com.github.rafostar.Clapper.xml',
install_dir: join_paths(sharedir, 'mime', 'packages')
install_dir: join_paths(datadir, 'mime', 'packages')
)
install_data('com.github.rafostar.Clapper.desktop',
install_dir: join_paths(sharedir, 'applications')
install_dir: join_paths(datadir, 'applications')
)
install_data('com.github.rafostar.Clapper.metainfo.xml',
install_dir: join_paths(sharedir, 'metainfo')
install_dir: join_paths(datadir, 'metainfo')
)
gnome.compile_resources('com.github.rafostar.Clapper.data',
'com.github.rafostar.Clapper.data.gresource.xml',
gresource_bundle: true,
install: true,
install_dir: pkgdatadir,
)

View File

@@ -147,31 +147,31 @@ gst_clapper_mpris_class_init (GstClapperMprisClass * klass)
param_specs[PROP_OWN_NAME] =
g_param_spec_string ("own-name", "DBus own name",
"DBus name to own on connection",
NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_ID_PATH] =
g_param_spec_string ("id-path", "DBus id path",
"A valid D-Bus path describing this player",
NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_IDENTITY] =
g_param_spec_string ("identity", "Player name",
"A friendly name to identify the media player",
NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_DESKTOP_ENTRY] =
g_param_spec_string ("desktop-entry", "Desktop entry filename",
"The basename of an installed .desktop file",
NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_DEFAULT_ART_URL] =
g_param_spec_string ("default-art-url", "Default Art URL",
"Default art to show when media does not provide one",
NULL, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_VOLUME] =
@@ -220,6 +220,21 @@ gst_clapper_mpris_get_property (GObject * object, guint prop_id,
GstClapperMpris *self = GST_CLAPPER_MPRIS (object);
switch (prop_id) {
case PROP_OWN_NAME:
g_value_set_string (value, self->own_name);
break;
case PROP_ID_PATH:
g_value_set_string (value, self->id_path);
break;
case PROP_IDENTITY:
g_value_set_string (value, self->identity);
break;
case PROP_DESKTOP_ENTRY:
g_value_set_string (value, self->desktop_entry);
break;
case PROP_DEFAULT_ART_URL:
g_value_set_string (value, self->default_art_url);
break;
case PROP_VOLUME:
g_object_get_property (G_OBJECT (self->player_skeleton), "volume", value);
break;

View File

@@ -51,6 +51,8 @@
GST_DEBUG_CATEGORY_STATIC (gst_clapper_debug);
#define GST_CAT_DEFAULT gst_clapper_debug
#define DEFAULT_USE_PLAYBIN3 FALSE
#define DEFAULT_USE_PIPEWIRE FALSE
#define DEFAULT_STATE GST_CLAPPER_STATE_STOPPED
#define DEFAULT_URI NULL
#define DEFAULT_POSITION GST_CLOCK_TIME_NONE
@@ -63,6 +65,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_clapper_debug);
#define DEFAULT_SUBTITLE_VIDEO_OFFSET 0
#define DEFAULT_SEEK_MODE GST_CLAPPER_SEEK_MODE_DEFAULT
static gboolean gst_clapper_gstreamer_prepared = FALSE;
/**
* gst_clapper_error_quark:
*/
@@ -78,6 +82,8 @@ enum
PROP_VIDEO_RENDERER,
PROP_SIGNAL_DISPATCHER,
PROP_MPRIS,
PROP_USE_PLAYBIN3,
PROP_USE_PIPEWIRE,
PROP_STATE,
PROP_URI,
PROP_SUBURI,
@@ -111,7 +117,8 @@ enum
SIGNAL_WARNING,
SIGNAL_VIDEO_DIMENSIONS_CHANGED,
SIGNAL_MEDIA_INFO_UPDATED,
SIGNAL_MUTE_CHANGED,
SIGNAL_VIDEO_DECODER_CHANGED,
SIGNAL_AUDIO_DECODER_CHANGED,
SIGNAL_LAST
};
@@ -152,6 +159,7 @@ struct _GstClapper
/* Prevent unnecessary signals emissions */
gdouble last_volume;
gboolean last_mute;
GstClapperState app_state;
gint buffering;
@@ -181,6 +189,10 @@ struct _GstClapper
/* If should emit media info updated signal */
gboolean needs_info_update;
/* Prevent notify with the same decoders */
gchar *last_vdecoder;
gchar *last_adecoder;
/* For playbin3 */
gboolean use_playbin3;
GstStreamCollection *collection;
@@ -188,6 +200,8 @@ struct _GstClapper
gchar *audio_sid;
gchar *subtitle_sid;
gulong stream_notify_id;
gboolean use_pipewire;
};
struct _GstClapperClass
@@ -239,6 +253,9 @@ static void gst_clapper_audio_info_update (GstClapper * self,
static void gst_clapper_subtitle_info_update (GstClapper * self,
GstClapperStreamInfo * stream_info);
static gboolean find_active_decoder_with_stream_id (GstClapper * self,
GstElementFactoryListType type, const gchar * stream_id);
/* For playbin3 */
static void gst_clapper_streams_info_create_from_collection (GstClapper * self,
GstClapperMediaInfo * media_info, GstStreamCollection * collection);
@@ -262,7 +279,6 @@ static void remove_seek_source (GstClapper * self);
static void
gst_clapper_init (GstClapper * self)
{
GST_DEBUG_CATEGORY_INIT (gst_clapper_debug, "Clapper", 0, "GstClapper");
GST_TRACE_OBJECT (self, "Initializing");
self = gst_clapper_get_instance_private (self);
@@ -294,6 +310,8 @@ gst_clapper_class_init (GstClapperClass * klass)
gobject_class->finalize = gst_clapper_finalize;
gobject_class->constructed = gst_clapper_constructed;
GST_DEBUG_CATEGORY_INIT (gst_clapper_debug, "Clapper", 0, "GstClapper");
param_specs[PROP_VIDEO_RENDERER] =
g_param_spec_object ("video-renderer",
"Video Renderer", "Video renderer to use for rendering videos",
@@ -315,6 +333,16 @@ gst_clapper_class_init (GstClapperClass * klass)
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_USE_PLAYBIN3] =
g_param_spec_boolean ("use-playbin3", "Use playbin3", "Use playbin3",
DEFAULT_USE_PLAYBIN3, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_USE_PIPEWIRE] =
g_param_spec_boolean ("use-pipewire", "Use PipeWire", "PipeWire audio output",
DEFAULT_USE_PIPEWIRE, G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
param_specs[PROP_STATE] =
g_param_spec_enum ("state", "Clapper State", "Current player state",
GST_TYPE_CLAPPER_STATE, DEFAULT_STATE, G_PARAM_READABLE |
@@ -459,15 +487,20 @@ gst_clapper_class_init (GstClapperClass * klass)
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
NULL, NULL, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
signals[SIGNAL_MUTE_CHANGED] =
g_signal_new ("mute-changed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
NULL, NULL, G_TYPE_NONE, 0, G_TYPE_INVALID);
signals[SIGNAL_WARNING] =
g_signal_new ("warning", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
NULL, NULL, G_TYPE_NONE, 1, G_TYPE_ERROR);
signals[SIGNAL_VIDEO_DECODER_CHANGED] =
g_signal_new ("video-decoder-changed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
NULL, NULL, G_TYPE_NONE, 1, G_TYPE_STRING);
signals[SIGNAL_AUDIO_DECODER_CHANGED] =
g_signal_new ("audio-decoder-changed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
NULL, NULL, G_TYPE_NONE, 1, G_TYPE_STRING);
}
static void
@@ -506,6 +539,8 @@ gst_clapper_finalize (GObject * object)
g_free (self->uri);
g_free (self->redirect_uri);
g_free (self->suburi);
g_free (self->last_vdecoder);
g_free (self->last_adecoder);
g_free (self->video_sid);
g_free (self->audio_sid);
g_free (self->subtitle_sid);
@@ -664,6 +699,12 @@ gst_clapper_set_property (GObject * object, guint prop_id,
case PROP_MPRIS:
self->mpris = g_value_dup_object (value);
break;
case PROP_USE_PLAYBIN3:
self->use_playbin3 = g_value_get_boolean (value);
break;
case PROP_USE_PIPEWIRE:
self->use_pipewire = g_value_get_boolean (value);
break;
case PROP_URI:{
g_mutex_lock (&self->lock);
g_free (self->uri);
@@ -1824,6 +1865,15 @@ media_info_update (GstClapper * self, GstClapperMediaInfo * info)
"image_sample: %p", info->title, info->container, info->image_sample);
}
static void
merge_tags (GstTagList **my_tags, GstTagList *tags)
{
if (*my_tags)
gst_tag_list_insert (*my_tags, tags, GST_TAG_MERGE_REPLACE);
else
*my_tags = gst_tag_list_ref (tags);
}
static void
tags_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, gpointer user_data)
{
@@ -1839,17 +1889,12 @@ tags_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg, gpointer user_data)
if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_GLOBAL) {
g_mutex_lock (&self->lock);
if (self->media_info) {
if (self->media_info->tags)
gst_tag_list_unref (self->media_info->tags);
self->media_info->tags = gst_tag_list_ref (tags);
merge_tags (&self->media_info->tags, tags);
media_info_update (self, self->media_info);
g_mutex_unlock (&self->lock);
} else {
if (self->global_tags)
gst_tag_list_unref (self->global_tags);
self->global_tags = gst_tag_list_ref (tags);
g_mutex_unlock (&self->lock);
merge_tags (&self->global_tags, tags);
}
g_mutex_unlock (&self->lock);
}
gst_tag_list_unref (tags);
@@ -2012,6 +2057,7 @@ streams_selected_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg,
{
GstClapper *self = GST_CLAPPER (user_data);
GstStreamCollection *collection = NULL;
gchar *video_sid, *audio_sid;
guint i, len;
gst_message_parse_streams_selected (msg, &collection);
@@ -2060,7 +2106,22 @@ streams_selected_cb (G_GNUC_UNUSED GstBus * bus, GstMessage * msg,
*current_sid = g_strdup (stream_id);
}
video_sid = g_strdup (self->video_sid);
audio_sid = g_strdup (self->audio_sid);
g_mutex_unlock (&self->lock);
if (video_sid) {
find_active_decoder_with_stream_id (self, GST_ELEMENT_FACTORY_TYPE_DECODER
| GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO, video_sid);
g_free (video_sid);
}
if (audio_sid) {
find_active_decoder_with_stream_id (self, GST_ELEMENT_FACTORY_TYPE_DECODER
| GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO, audio_sid);
g_free (audio_sid);
}
}
static gboolean
@@ -2907,28 +2968,237 @@ volume_notify_cb (G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GParamSpec * pspec,
}
static void
mute_changed_dispatch (gpointer user_data)
mute_notify_dispatch (gpointer user_data)
{
GstClapper *clapper = user_data;
if (clapper->inhibit_sigs)
return;
g_signal_emit (clapper, signals[SIGNAL_MUTE_CHANGED], 0);
g_object_notify_by_pspec (G_OBJECT (clapper), param_specs[PROP_MUTE]);
}
static void
mute_notify_cb (G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GParamSpec * pspec,
GstClapper * self)
{
if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
signals[SIGNAL_MUTE_CHANGED], 0, NULL, NULL, NULL) != 0) {
gboolean mute = gst_clapper_get_mute (self);
if (self->last_mute != mute) {
self->last_mute = mute;
gst_clapper_signal_dispatcher_dispatch (self->signal_dispatcher, self,
mute_changed_dispatch, g_object_ref (self),
mute_notify_dispatch, g_object_ref (self),
(GDestroyNotify) g_object_unref);
}
}
typedef struct
{
GstClapper *clapper;
gchar *decoder_name;
} DecoderChangedSignalData;
static void
video_decoder_changed_dispatch (gpointer user_data)
{
DecoderChangedSignalData *data = user_data;
if (data->clapper->inhibit_sigs)
return;
g_signal_emit (data->clapper, signals[SIGNAL_VIDEO_DECODER_CHANGED],
0, data->decoder_name);
}
static void
audio_decoder_changed_dispatch (gpointer user_data)
{
DecoderChangedSignalData *data = user_data;
if (data->clapper->inhibit_sigs)
return;
g_signal_emit (data->clapper, signals[SIGNAL_AUDIO_DECODER_CHANGED],
0, data->decoder_name);
}
static void
decoder_changed_signal_data_free (DecoderChangedSignalData * data)
{
g_object_unref (data->clapper);
g_free (data->decoder_name);
g_free (data);
}
static void
emit_decoder_changed (GstClapper * self, gchar * decoder_name,
GstElementFactoryListType type)
{
GstClapperSignalDispatcherFunc func = NULL;
if ((type & GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO) ==
GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO) {
if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
signals[SIGNAL_VIDEO_DECODER_CHANGED], 0, NULL, NULL, NULL) != 0 &&
g_strcmp0 (self->last_vdecoder, decoder_name) != 0) {
func = video_decoder_changed_dispatch;
g_free (self->last_vdecoder);
self->last_vdecoder = g_strdup (decoder_name);
}
} else if ((type & GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO) ==
GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO) {
if (g_signal_handler_find (self, G_SIGNAL_MATCH_ID,
signals[SIGNAL_AUDIO_DECODER_CHANGED], 0, NULL, NULL, NULL) != 0 &&
g_strcmp0 (self->last_adecoder, decoder_name) != 0) {
func = audio_decoder_changed_dispatch;
g_free (self->last_adecoder);
self->last_adecoder = g_strdup (decoder_name);
}
}
if (func) {
DecoderChangedSignalData *data = g_new (DecoderChangedSignalData, 1);
data->clapper = g_object_ref (self);
data->decoder_name = g_strdup (decoder_name);
gst_clapper_signal_dispatcher_dispatch (self->signal_dispatcher, self,
func, data, (GDestroyNotify) decoder_changed_signal_data_free);
}
}
static gboolean
iterate_decoder_pads (GstClapper * self, GstElement * element,
const gchar * stream_id, GstElementFactoryListType type)
{
GstIterator *iter;
GValue value = { 0, };
gboolean found = FALSE;
iter = gst_element_iterate_src_pads (element);
while (gst_iterator_next (iter, &value) == GST_ITERATOR_OK) {
GstPad *decoder_pad = g_value_get_object (&value);
gchar *decoder_stream_id = gst_pad_get_stream_id (decoder_pad);
GST_DEBUG_OBJECT (self, "Decoder stream: %s", decoder_stream_id);
/* In case of playbin3, pad may not be active yet */
if ((found = (g_strcmp0 (decoder_stream_id, stream_id) == 0
|| (!decoder_stream_id && self->use_playbin3)))) {
GstElementFactory *factory;
gchar *plugin_name;
factory = gst_element_get_factory (element);
plugin_name = gst_object_get_name (GST_OBJECT_CAST (factory));
if (plugin_name) {
GST_DEBUG_OBJECT (self, "Found decoder: %s", plugin_name);
emit_decoder_changed (self, plugin_name, type);
g_free (plugin_name);
}
}
g_free (decoder_stream_id);
g_value_unset (&value);
if (found)
break;
}
gst_iterator_free (iter);
return found;
}
static gboolean
find_active_decoder_with_stream_id (GstClapper * self, GstElementFactoryListType type,
const gchar * stream_id)
{
GstIterator *iter;
GValue value = { 0, };
gboolean found = FALSE;
GST_DEBUG_OBJECT (self, "Searching for decoder with stream: %s", stream_id);
iter = gst_bin_iterate_recurse (GST_BIN (self->playbin));
while (gst_iterator_next (iter, &value) == GST_ITERATOR_OK) {
GstElement *element = g_value_get_object (&value);
GstElementFactory *factory = gst_element_get_factory (element);
if (factory && gst_element_factory_list_is_type (factory, type))
found = iterate_decoder_pads (self, element, stream_id, type);
g_value_unset (&value);
if (found)
break;
}
gst_iterator_free (iter);
return found;
}
static void
update_current_decoder (GstClapper *self, GstElementFactoryListType type)
{
GstIterator *iter;
GValue value = { 0, };
iter = gst_bin_iterate_all_by_element_factory_name (
GST_BIN (self->playbin), "input-selector");
while (gst_iterator_next (iter, &value) == GST_ITERATOR_OK) {
GstElement *element = g_value_get_object (&value);
GstPad *active_pad;
gboolean found = FALSE;
g_object_get (G_OBJECT (element), "active-pad", &active_pad, NULL);
if (active_pad) {
gchar *stream_id;
stream_id = gst_pad_get_stream_id (active_pad);
gst_object_unref (active_pad);
if (stream_id) {
found = find_active_decoder_with_stream_id (self, type, stream_id);
g_free (stream_id);
}
}
g_value_unset (&value);
if (found)
break;
}
gst_iterator_free (iter);
}
static void
current_video_notify_cb (G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GParamSpec * pspec,
GstClapper * self)
{
GstElementFactoryListType type = GST_ELEMENT_FACTORY_TYPE_DECODER
| GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO;
update_current_decoder (self, type);
}
static void
current_audio_notify_cb (G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GParamSpec * pspec,
GstClapper * self)
{
GstElementFactoryListType type = GST_ELEMENT_FACTORY_TYPE_DECODER
| GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO;
update_current_decoder (self, type);
}
static void
element_setup_cb (GstElement * playbin, GstElement * element, GstClapper * self)
{
@@ -2956,14 +3226,26 @@ element_setup_cb (GstElement * playbin, GstElement * element, GstClapper * self)
}
}
static void
_update_from_env (gboolean * enabled, const gchar * env_name)
{
const gchar *env = g_getenv (env_name);
if (env) {
if (g_str_has_prefix (env, "1"))
*enabled = TRUE;
else if (g_str_has_prefix (env, "0"))
*enabled = FALSE;
}
}
static gpointer
gst_clapper_main (gpointer data)
{
GstClapper *self = GST_CLAPPER (data);
GstBus *bus;
GSource *source;
GstElement *scaletempo;
const gchar *env;
GstElement *scaletempo, *pipewiresink;
GST_TRACE_OBJECT (self, "Starting main thread");
@@ -2975,9 +3257,7 @@ gst_clapper_main (gpointer data)
g_source_attach (source, self->context);
g_source_unref (source);
env = g_getenv ("GST_CLAPPER_USE_PLAYBIN3");
if (env && g_str_has_prefix (env, "1"))
self->use_playbin3 = TRUE;
_update_from_env (&self->use_playbin3, "GST_CLAPPER_USE_PLAYBIN3");
if (self->use_playbin3) {
GST_DEBUG_OBJECT (self, "playbin3 enabled");
@@ -2993,6 +3273,9 @@ gst_clapper_main (gpointer data)
gst_object_ref_sink (self->playbin);
/* Do not start muted and make it sync with last_mute value */
g_object_set (self->playbin, "mute", FALSE, NULL);
if (self->video_renderer) {
GstElement *video_sink =
gst_clapper_video_renderer_create_video_sink (self->video_renderer, self);
@@ -3018,12 +3301,32 @@ gst_clapper_main (gpointer data)
}
}
_update_from_env (&self->use_pipewire, "GST_CLAPPER_USE_PIPEWIRE");
if (self->use_pipewire) {
pipewiresink = gst_element_factory_make ("pipewiresink", NULL);
if (pipewiresink) {
g_object_set (self->playbin, "audio-sink", pipewiresink, NULL);
} else {
GstElement *fakesink;
g_warning ("GstClapper: pipewiresink element not available");
fakesink = gst_element_factory_make ("fakesink", "fakeaudiosink");
if (fakesink) {
g_object_set (fakesink, "sync", TRUE, NULL);
g_object_set (self->playbin, "audio-sink", fakesink, NULL);
} else {
g_warning ("GstClapper: default audio sink will be used instead");
}
}
}
scaletempo = gst_element_factory_make ("scaletempo", NULL);
if (scaletempo) {
g_object_set (self->playbin, "audio-filter", scaletempo, NULL);
} else {
g_warning ("GstClapper: scaletempo element not available. Audio pitch "
"will not be preserved during trick modes");
g_warning ("GstClapper: scaletempo element not available. "
"Audio pitch will not be preserved during trick modes.");
}
self->bus = bus = gst_element_get_bus (self->playbin);
@@ -3076,6 +3379,11 @@ gst_clapper_main (gpointer data)
G_CALLBACK (audio_tags_changed_cb), self);
g_signal_connect (self->playbin, "text-tags-changed",
G_CALLBACK (subtitle_tags_changed_cb), self);
g_signal_connect (self->playbin, "notify::current-video",
G_CALLBACK (current_video_notify_cb), self);
g_signal_connect (self->playbin, "notify::current-audio",
G_CALLBACK (current_audio_notify_cb), self);
}
g_signal_connect (self->playbin, "notify::volume",
@@ -3128,6 +3436,196 @@ gst_clapper_main (gpointer data)
return NULL;
}
static gboolean
gst_clapper_set_feature_rank_versioned (const gchar * name, guint rank,
guint min_major, guint min_minor, guint min_micro)
{
GstRegistry *registry = gst_registry_get ();
GstPluginFeature *feature = gst_registry_lookup_feature (registry, name);
gboolean res = FALSE;
if (!feature) {
GST_DEBUG ("Cannot change rank of unavailable feature: %s", name);
return res;
}
if (gst_plugin_feature_check_version (feature, min_major, min_minor, min_micro)) {
guint old_rank = gst_plugin_feature_get_rank (feature);
gst_plugin_feature_set_rank (feature, rank);
res = TRUE;
GST_DEBUG ("Changed rank: %i -> %i for %s", old_rank, rank, name);
} else {
GST_DEBUG ("Feature %s is at older version then required", name);
}
gst_object_unref (feature);
return res;
}
static gboolean
gst_clapper_set_feature_rank (const gchar * name, guint rank)
{
return gst_clapper_set_feature_rank_versioned (name, rank, 0, 0, 0);
}
static gboolean
gst_clapper_has_plugin_with_features (const gchar * name)
{
GstRegistry *registry = gst_registry_get ();
GList *features = gst_registry_get_feature_list_by_plugin (registry, name);
gboolean ret = g_list_length (features) > 0;
gst_plugin_feature_list_free (features);
return ret;
}
static gboolean
parse_feature_name (gchar * str, const gchar ** feature)
{
if (!str)
return FALSE;
g_strstrip (str);
if (str[0] != '\0') {
*feature = str;
return TRUE;
}
return FALSE;
}
static gboolean
parse_feature_rank (gchar * str, GstRank * rank)
{
if (!str)
return FALSE;
g_strstrip (str);
if (g_ascii_isdigit (str[0])) {
unsigned long l;
char *endptr;
l = strtoul (str, &endptr, 10);
if (endptr > str && endptr[0] == 0) {
*rank = (GstRank) l;
} else {
return FALSE;
}
} else if (g_ascii_strcasecmp (str, "NONE") == 0) {
*rank = GST_RANK_NONE;
} else if (g_ascii_strcasecmp (str, "MARGINAL") == 0) {
*rank = GST_RANK_MARGINAL;
} else if (g_ascii_strcasecmp (str, "SECONDARY") == 0) {
*rank = GST_RANK_SECONDARY;
} else if (g_ascii_strcasecmp (str, "PRIMARY") == 0) {
*rank = GST_RANK_PRIMARY;
} else if (g_ascii_strcasecmp (str, "MAX") == 0) {
*rank = (GstRank) G_MAXINT;
} else {
return FALSE;
}
return TRUE;
}
static void
_env_feature_rank_update (void)
{
const gchar *env;
gchar **split, **walk;
env = g_getenv ("GST_PLUGIN_FEATURE_RANK");
if (!env)
return;
split = g_strsplit (env, ",", 0);
for (walk = split; *walk; walk++) {
if (strchr (*walk, ':')) {
gchar **values;
values = g_strsplit (*walk, ":", 2);
if (values[0] && values[1]) {
GstRank rank;
const gchar *name;
if (parse_feature_name (values[0], &name)
&& parse_feature_rank (values[1], &rank)) {
GstPluginFeature *feature;
feature = gst_registry_find_feature (gst_registry_get (), name,
GST_TYPE_ELEMENT_FACTORY);
if (feature) {
GstRank old_rank;
old_rank = gst_plugin_feature_get_rank (feature);
if (old_rank != rank) {
gst_plugin_feature_set_rank (feature, rank);
GST_DEBUG ("Updated rank from env: %i -> %i for %s", old_rank, rank, name);
}
}
}
}
g_strfreev (values);
}
}
g_strfreev (split);
}
static void
gst_clapper_prepare_gstreamer (void)
{
const guint rank = GST_RANK_PRIMARY + 24;
GST_DEBUG ("Preparing GStreamer plugins");
if (gst_clapper_has_plugin_with_features ("va")) {
gst_clapper_set_feature_rank_versioned ("vah264dec", rank, 1, 19, 1);
gst_clapper_set_feature_rank_versioned ("vampeg2dec", rank, 1, 19, 1);
}
if (gst_clapper_has_plugin_with_features ("nvcodec")) {
gst_clapper_set_feature_rank ("nvh264dec", rank + 4);
gst_clapper_set_feature_rank ("nvh265dec", rank + 4);
}
if (gst_clapper_has_plugin_with_features ("v4l2codecs")) {
if (!gst_clapper_set_feature_rank_versioned ("v4l2slh264dec", rank + 10, 1, 19, 1))
gst_clapper_set_feature_rank ("v4l2slh264dec", GST_RANK_NONE);
if (!gst_clapper_set_feature_rank_versioned ("v4l2slvp8dec", rank + 10, 1, 19, 2))
gst_clapper_set_feature_rank ("v4l2slvp8dec", GST_RANK_NONE);
}
/* After setting defaults, update them from ENV */
_env_feature_rank_update ();
gst_clapper_gstreamer_prepared = TRUE;
GST_DEBUG ("GStreamer plugins prepared");
}
/**
* gst_clapper_gst_init:
* @argc: (inout) (allow-none): pointer to application's argc
* @argv: (inout) (array length=argc) (allow-none): pointer to application's argv
*
* Automatically initializes GStreamer library if this was not done by the user yet
* and tweaks some of its defaults to our liking. It is recommended to use this
* function instead of plain gst_init().
*
* This also allows usage of GstClapper API alone without importing GStreamer
* on the implementation side.
*/
void
gst_clapper_gst_init (int * argc, char ** argv[])
{
if (!gst_is_initialized ())
gst_init (argc, argv);
if (!gst_clapper_gstreamer_prepared)
gst_clapper_prepare_gstreamer ();
}
/**
* gst_clapper_new:
* @video_renderer: (transfer full) (allow-none): GstClapperVideoRenderer to use

View File

@@ -153,6 +153,9 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstClapper, gst_object_unref)
GST_CLAPPER_API
GType gst_clapper_get_type (void);
GST_CLAPPER_API
void gst_clapper_gst_init (int *argc, char **argv[]);
GST_CLAPPER_API
GstClapper * gst_clapper_new (GstClapperVideoRenderer *video_renderer, GstClapperSignalDispatcher *signal_dispatcher,
GstClapperMpris *mpris);

View File

@@ -37,15 +37,27 @@
GST_DEBUG_CATEGORY (gst_debug_clapper_gl_sink);
#define GST_CAT_DEFAULT gst_debug_clapper_gl_sink
#define GST_CLAPPER_GL_SINK_CAPS \
"video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), " \
"format = (string) RGBA, " \
"width = " GST_VIDEO_SIZE_RANGE ", " \
"height = " GST_VIDEO_SIZE_RANGE ", " \
"framerate = " GST_VIDEO_FPS_RANGE ", " \
"texture-target = (string) { 2D, external-oes } " \
" ; " \
"video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "," \
GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION "), " \
"format = (string) RGBA, " \
"width = " GST_VIDEO_SIZE_RANGE ", " \
"height = " GST_VIDEO_SIZE_RANGE ", " \
"framerate = " GST_VIDEO_FPS_RANGE ", " \
"texture-target = (string) { 2D, external-oes } "
static GstStaticPadTemplate gst_clapper_gl_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
(GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA") "; "
GST_VIDEO_CAPS_MAKE_WITH_FEATURES
(GST_CAPS_FEATURE_MEMORY_GL_MEMORY ", "
GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, "RGBA")));
GST_STATIC_CAPS (GST_CLAPPER_GL_SINK_CAPS));
static void gst_clapper_gl_sink_finalize (GObject * object);
static void gst_clapper_gl_sink_set_property (GObject * object, guint prop_id,
@@ -360,8 +372,10 @@ gst_clapper_gl_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
gst_buffer_pool_config_add_option (config,
GST_BUFFER_POOL_OPTION_GL_SYNC_META);
if (!gst_buffer_pool_set_config (pool, config))
if (!gst_buffer_pool_set_config (pool, config)) {
gst_object_unref (pool);
goto config_failed;
}
}
/* we need at least 2 buffer because we hold on to the last one */
@@ -422,12 +436,9 @@ gst_clapper_gl_sink_query (GstBaseSink * bsink, GstQuery * query)
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_CONTEXT:
{
if (gst_gl_handle_context_query ((GstElement *) clapper_sink, query,
clapper_sink->display, clapper_sink->context, clapper_sink->gtk_context))
return TRUE;
res = gst_gl_handle_context_query ((GstElement *) clapper_sink, query,
clapper_sink->display, clapper_sink->context, clapper_sink->gtk_context);
break;
}
default:
res = GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
break;
@@ -672,6 +683,7 @@ static gboolean
gst_clapper_gl_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
{
GstClapperGLSink *clapper_sink = GST_CLAPPER_GL_SINK (bsink);
gboolean res = FALSE;
GST_DEBUG ("set caps with %" GST_PTR_FORMAT, caps);
@@ -691,9 +703,11 @@ gst_clapper_gl_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
GST_OBJECT_UNLOCK (clapper_sink);
return FALSE;
}
res = gtk_clapper_gl_widget_update_output_format (clapper_sink->widget, caps);
GST_OBJECT_UNLOCK (clapper_sink);
return TRUE;
return res;
}
static GstFlowReturn

View File

@@ -0,0 +1,103 @@
/*
* GStreamer
* Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
* Copyright (C) 2015 Thibault Saunier <tsaunier@gnome.org>
* Copyright (C) 2021 Rafał Dzięgiel <rafostar.github@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
/* FIXME: remove these once their headers are public in gstreamer:
* https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/804
*/
#include "gstclapperglutils.h"
static const gfloat identity_matrix[] = {
1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0,
};
static const gfloat from_ndc_matrix[] = {
0.5, 0.0, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0,
0.0, 0.0, 0.5, 0.0,
0.5, 0.5, 0.5, 1.0,
};
static const gfloat to_ndc_matrix[] = {
2.0, 0.0, 0.0, 0.0,
0.0, 2.0, 0.0, 0.0,
0.0, 0.0, 2.0, 0.0,
-1.0, -1.0, -1.0, 1.0,
};
/* multiplies two 4x4 matrices, @a X @b, and stores the result in @result
* https://en.wikipedia.org/wiki/Matrix_multiplication
*/
static void
gst_gl_multiply_matrix4 (const gfloat * a, const gfloat * b, gfloat * result)
{
int i, j, k;
gfloat tmp[16] = { 0.0f };
if (!a || !b || !result)
return;
for (i = 0; i < 4; i++) { /* column */
for (j = 0; j < 4; j++) { /* row */
for (k = 0; k < 4; k++) {
tmp[j + (i * 4)] += a[k + (i * 4)] * b[j + (k * 4)];
}
}
}
for (i = 0; i < 16; i++)
result[i] = tmp[i];
}
/*
* gst_clapper_gl_get_affine_transformation_meta_as_ndc:
* @meta: (nullable): a #GstVideoAffineTransformationMeta
* @matrix: (out): result of the 4x4 matrix
*
* Retrieves the stored 4x4 affine transformation matrix stored in @meta in
* NDC coordinates. if @meta is NULL, an identity matrix is returned.
*
* NDC is a left-handed coordinate system
* - x - [-1, 1] - +ve X moves right
* - y - [-1, 1] - +ve Y moves up
* - z - [-1, 1] - +ve Z moves into
*/
void
gst_clapper_gl_get_affine_transformation_meta_as_ndc (GstVideoAffineTransformationMeta *
meta, gfloat * matrix)
{
if (!meta) {
int i;
for (i = 0; i < 16; i++) {
matrix[i] = identity_matrix[i];
}
} else {
float tmp[16];
/* change of basis multiplications */
gst_gl_multiply_matrix4 (from_ndc_matrix, meta->matrix, tmp);
gst_gl_multiply_matrix4 (tmp, to_ndc_matrix, matrix);
}
}

View File

@@ -0,0 +1,29 @@
/*
* GStreamer
* Copyright (C) 2016 Matthew Waters <matthew@centricular.com>
* Copyright (C) 2021 Rafał Dzięgiel <rafostar.github@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __GST_CLAPPER_GL_UTILS_H__
#define __GST_CLAPPER_GL_UTILS_H__
#include <gst/video/gstvideoaffinetransformationmeta.h>
void gst_clapper_gl_get_affine_transformation_meta_as_ndc (GstVideoAffineTransformationMeta *meta, gfloat *matrix);
#endif /* __GST_CLAPPER_GL_UTILS_H__ */

View File

@@ -26,9 +26,11 @@
#include <stdio.h>
#include <gst/gl/gstglfuncs.h>
#include <gst/video/video.h>
#include <gst/video/gstvideoaffinetransformationmeta.h>
#include "gtkclapperglwidget.h"
#include "gstgtkutils.h"
#include "gstclapperglutils.h"
#if GST_GL_HAVE_WINDOW_X11 && defined (GDK_WINDOWING_X11)
#include <gdk/x11/gdkx.h>
@@ -60,17 +62,24 @@ GST_DEBUG_CATEGORY (gst_debug_clapper_gl_widget);
struct _GtkClapperGLWidgetPrivate
{
gboolean initiated;
GstGLDisplay *display;
GdkGLContext *gdk_context;
GstGLContext *other_context;
GstGLContext *context;
GstGLTextureTarget texture_target;
guint gl_target;
GstGLUpload *upload;
GstGLShader *shader;
GLuint vao;
GLuint vertex_buffer;
GLint attr_position;
GLint attr_texture;
GLuint current_tex;
GstGLOverlayCompositor *overlay_compositor;
};
@@ -311,6 +320,22 @@ _gdk_key_to_navigation_string (guint keyval)
}
}
static gboolean
_get_is_navigation_allowed (GstElement * element, GstState min_state)
{
if (GST_IS_NAVIGATION (element)) {
GstState nav_state;
GST_OBJECT_LOCK (element);
nav_state = element->current_state;
GST_OBJECT_UNLOCK (element);
return nav_state >= min_state;
}
return FALSE;
}
static gboolean
gtk_clapper_gl_widget_key_event (GtkEventControllerKey * key_controller,
guint keyval, guint keycode, GdkModifierType state)
@@ -321,7 +346,7 @@ gtk_clapper_gl_widget_key_event (GtkEventControllerKey * key_controller,
GstElement *element;
if ((element = g_weak_ref_get (&clapper_widget->element))) {
if (GST_IS_NAVIGATION (element)) {
if (_get_is_navigation_allowed (element, GST_STATE_PAUSED)) {
GdkEvent *event = gtk_event_controller_get_current_event (controller);
const gchar *str = _gdk_key_to_navigation_string (keyval);
@@ -410,8 +435,11 @@ gtk_clapper_gl_widget_button_event (GtkGestureClick * gesture,
GtkClapperGLWidget *clapper_widget = GTK_CLAPPER_GL_WIDGET (widget);
GstElement *element;
if (clapper_widget->display_width == 0 || clapper_widget->display_height == 0)
return FALSE;
if ((element = g_weak_ref_get (&clapper_widget->element))) {
if (GST_IS_NAVIGATION (element)) {
if (_get_is_navigation_allowed (element, GST_STATE_PLAYING)) {
GdkEvent *event = gtk_event_controller_get_current_event (controller);
const gchar *key_type =
gdk_event_get_event_type (event) == GDK_BUTTON_PRESS
@@ -440,9 +468,12 @@ gtk_clapper_gl_widget_motion_event (GtkEventControllerMotion * motion_controller
GtkClapperGLWidget *clapper_widget = GTK_CLAPPER_GL_WIDGET (widget);
GstElement *element;
if (x != clapper_widget->last_pos_x && y != clapper_widget->last_pos_y &&
(element = g_weak_ref_get (&clapper_widget->element))) {
if (GST_IS_NAVIGATION (element)) {
if ((x == clapper_widget->last_pos_x && y == clapper_widget->last_pos_y) ||
clapper_widget->display_width == 0 || clapper_widget->display_height == 0)
return FALSE;
if ((element = g_weak_ref_get (&clapper_widget->element))) {
if (_get_is_navigation_allowed (element, GST_STATE_PLAYING)) {
gdouble stream_x, stream_y;
clapper_widget->last_pos_x = x;
@@ -503,9 +534,42 @@ gtk_clapper_gl_widget_init_redisplay (GtkClapperGLWidget * clapper_widget)
GtkClapperGLWidgetPrivate *priv = clapper_widget->priv;
const GstGLFuncs *gl = priv->context->gl_vtable;
GError *error = NULL;
GstGLSLStage *frag_stage, *vert_stage;
gst_gl_insert_debug_marker (priv->other_context, "initializing redisplay");
if (!(priv->shader = gst_gl_shader_new_default (priv->context, &error))) {
vert_stage = gst_glsl_stage_new_with_string (priv->context,
GL_VERTEX_SHADER, GST_GLSL_VERSION_NONE,
GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY,
gst_gl_shader_string_vertex_mat4_vertex_transform);
if (priv->texture_target == GST_GL_TEXTURE_TARGET_EXTERNAL_OES) {
gchar *frag_str;
frag_str =
gst_gl_shader_string_fragment_external_oes_get_default
(priv->context, GST_GLSL_VERSION_NONE,
GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY);
frag_stage = gst_glsl_stage_new_with_string (priv->context,
GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE,
GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, frag_str);
g_free (frag_str);
} else {
frag_stage = gst_glsl_stage_new_default_fragment (priv->context);
}
if (!vert_stage || !frag_stage) {
GST_ERROR ("Failed to retrieve fragment shader for texture target");
if (vert_stage)
gst_object_unref (vert_stage);
if (frag_stage)
gst_object_unref (frag_stage);
return;
}
if (!(priv->shader =
gst_gl_shader_new_link_with_stages (priv->context, &error,
vert_stage, frag_stage, NULL))) {
GST_ERROR ("Failed to initialize shader: %s", error->message);
return;
}
@@ -532,8 +596,9 @@ gtk_clapper_gl_widget_init_redisplay (GtkClapperGLWidget * clapper_widget)
gl->BindBuffer (GL_ARRAY_BUFFER, 0);
priv->overlay_compositor =
gst_gl_overlay_compositor_new (priv->other_context);
if (!priv->overlay_compositor)
priv->overlay_compositor =
gst_gl_overlay_compositor_new (priv->other_context);
priv->initiated = TRUE;
}
@@ -564,6 +629,9 @@ gtk_clapper_gl_widget_render (GtkGLArea * widget, GdkGLContext * context)
GtkClapperGLWidgetPrivate *priv = clapper_widget->priv;
const GstGLFuncs *gl;
GstVideoAffineTransformationMeta *af_meta;
gfloat matrix[16];
GTK_CLAPPER_GL_WIDGET_LOCK (clapper_widget);
/* Draw black with GDK context when priv is not available yet.
@@ -651,9 +719,15 @@ gtk_clapper_gl_widget_render (GtkGLArea * widget, GdkGLContext * context)
gtk_clapper_gl_widget_bind_buffer (clapper_widget);
gl->ActiveTexture (GL_TEXTURE0);
gl->BindTexture (GL_TEXTURE_2D, priv->current_tex);
gl->BindTexture (priv->gl_target, priv->current_tex);
gst_gl_shader_set_uniform_1i (priv->shader, "tex", 0);
af_meta = gst_buffer_get_video_affine_transformation_meta (
clapper_widget->buffer);
gst_clapper_gl_get_affine_transformation_meta_as_ndc (af_meta, matrix);
gst_gl_shader_set_uniform_matrix_4fv (priv->shader,
"u_transformation", 1, FALSE, matrix);
gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
if (gl->BindVertexArray)
@@ -661,7 +735,7 @@ gtk_clapper_gl_widget_render (GtkGLArea * widget, GdkGLContext * context)
else
gtk_clapper_gl_widget_unbind_buffer (clapper_widget);
gl->BindTexture (GL_TEXTURE_2D, 0);
gl->BindTexture (priv->gl_target, 0);
/* Draw subtitles */
gst_gl_overlay_compositor_draw_overlays (priv->overlay_compositor);
@@ -675,10 +749,34 @@ done:
}
static void
_reset_gl (GtkClapperGLWidget * clapper_widget)
_cleanup_gl_private (GtkClapperGLWidgetPrivate * priv)
{
const GstGLFuncs *gl = priv->other_context->gl_vtable;
if (priv->vao) {
gl->DeleteVertexArrays (1, &priv->vao);
priv->vao = 0;
}
if (priv->vertex_buffer) {
gl->DeleteBuffers (1, &priv->vertex_buffer);
priv->vertex_buffer = 0;
}
if (priv->upload) {
gst_object_unref (priv->upload);
priv->upload = NULL;
}
if (priv->shader) {
gst_object_unref (priv->shader);
priv->shader = NULL;
}
if (priv->overlay_compositor)
gst_gl_overlay_compositor_free_overlays (priv->overlay_compositor);
}
static void
_cleanup_gl_thread (GtkClapperGLWidget * clapper_widget)
{
GtkClapperGLWidgetPrivate *priv = clapper_widget->priv;
const GstGLFuncs *gl = priv->other_context->gl_vtable;
if (!priv->gdk_context)
priv->gdk_context = gtk_gl_area_get_context (GTK_GL_AREA (clapper_widget));
@@ -689,25 +787,29 @@ _reset_gl (GtkClapperGLWidget * clapper_widget)
gdk_gl_context_make_current (priv->gdk_context);
gst_gl_context_activate (priv->other_context, TRUE);
if (priv->vao) {
gl->DeleteVertexArrays (1, &priv->vao);
priv->vao = 0;
}
_cleanup_gl_private (priv);
if (priv->vertex_buffer) {
gl->DeleteBuffers (1, &priv->vertex_buffer);
priv->vertex_buffer = 0;
}
gst_gl_context_activate (priv->other_context, FALSE);
gdk_gl_context_clear_current ();
if (priv->upload) {
gst_object_unref (priv->upload);
priv->upload = NULL;
}
priv->initiated = FALSE;
}
if (priv->shader) {
gst_object_unref (priv->shader);
priv->shader = NULL;
}
static void
_reset_gl (GtkClapperGLWidget * clapper_widget)
{
GtkClapperGLWidgetPrivate *priv = clapper_widget->priv;
if (!priv->gdk_context)
priv->gdk_context = gtk_gl_area_get_context (GTK_GL_AREA (clapper_widget));
if (priv->gdk_context == NULL)
return;
gdk_gl_context_make_current (priv->gdk_context);
gst_gl_context_activate (priv->other_context, TRUE);
_cleanup_gl_private (priv);
if (priv->overlay_compositor)
gst_object_unref (priv->overlay_compositor);
@@ -798,8 +900,9 @@ gtk_clapper_gl_widget_set_buffer (GtkClapperGLWidget * clapper_widget,
GTK_CLAPPER_GL_WIDGET_UNLOCK (clapper_widget);
}
static GstGLAPI
_get_current_gl_api (GstGLPlatform platform)
static gboolean
_wrap_current_gl (GstGLDisplay * display, GstGLPlatform platform,
GstGLContext ** other_context)
{
GstGLAPI gl_api = GST_GL_API_NONE;
guint gl_major = 0, gl_minor = 0;
@@ -808,11 +911,26 @@ _get_current_gl_api (GstGLPlatform platform)
if (gl_api) {
const gboolean is_es = gl_api & (GST_GL_API_GLES1 | GST_GL_API_GLES2);
gchar *gl_api_str = gst_gl_api_to_string (gl_api);
guintptr gl_handle = 0;
GST_INFO ("Using OpenGL%s %d.%d", is_es ? " ES" : "", gl_major, gl_minor);
GST_INFO ("Using GL API: %s, ver: %d.%d", gl_api_str, gl_major, gl_minor);
g_free (gl_api_str);
if (is_es && platform == GST_GL_PLATFORM_EGL && !g_getenv ("GST_GL_API")) {
GST_DEBUG ("No GST_GL_API env and GTK is using EGL GLES2, enforcing it");
gst_gl_display_filter_gl_api (display, GST_GL_API_GLES2);
}
gl_handle = gst_gl_context_get_current_gl_context (platform);
if (gl_handle) {
if ((*other_context = gst_gl_context_new_wrapped (display,
gl_handle, platform, gl_api)))
return TRUE;
}
}
return gl_api;
return FALSE;
}
static void
@@ -820,8 +938,6 @@ _get_gl_context (GtkClapperGLWidget * clapper_widget)
{
GtkClapperGLWidgetPrivate *priv = clapper_widget->priv;
GstGLPlatform platform = GST_GL_PLATFORM_NONE;
GstGLAPI gl_api = GST_GL_API_NONE;
guintptr gl_handle = 0;
gtk_widget_realize (GTK_WIDGET (clapper_widget));
@@ -843,53 +959,45 @@ _get_gl_context (GtkClapperGLWidget * clapper_widget)
}
g_object_ref (priv->gdk_context);
gdk_gl_context_make_current (priv->gdk_context);
#if GST_GL_HAVE_WINDOW_WAYLAND && GST_GL_HAVE_PLATFORM_EGL && defined (GDK_WINDOWING_WAYLAND)
if (GST_IS_GL_DISPLAY_WAYLAND (priv->display)) {
platform = GST_GL_PLATFORM_EGL;
GST_DEBUG ("Using EGL on Wayland");
goto have_platform;
}
#endif
#if GST_GL_HAVE_WINDOW_X11 && defined (GDK_WINDOWING_X11)
#if GST_GL_HAVE_PLATFORM_EGL
if (GST_IS_GL_DISPLAY_EGL (priv->display)) {
platform = GST_GL_PLATFORM_EGL;
gl_handle = gst_gl_context_get_current_gl_context (platform);
GST_DEBUG ("Using EGL on x11");
goto have_platform;
}
#endif
#if GST_GL_HAVE_PLATFORM_GLX
if (!gl_handle && GST_IS_GL_DISPLAY_X11 (priv->display)) {
if (GST_IS_GL_DISPLAY_X11 (priv->display)) {
platform = GST_GL_PLATFORM_GLX;
gl_handle = gst_gl_context_get_current_gl_context (platform);
GST_DEBUG ("Using GLX on x11");
goto have_platform;
}
#endif
if (gl_handle) {
gl_api = _get_current_gl_api (platform);
priv->other_context =
gst_gl_context_new_wrapped (priv->display, gl_handle,
platform, gl_api);
}
#endif
#if GST_GL_HAVE_WINDOW_WAYLAND && GST_GL_HAVE_PLATFORM_EGL && defined (GDK_WINDOWING_WAYLAND)
if (GST_IS_GL_DISPLAY_WAYLAND (priv->display)) {
platform = GST_GL_PLATFORM_EGL;
gl_api = _get_current_gl_api (platform);
gl_handle = gst_gl_context_get_current_gl_context (platform);
if (gl_handle)
priv->other_context =
gst_gl_context_new_wrapped (priv->display, gl_handle,
platform, gl_api);
}
#endif
(void) platform;
(void) gl_api;
(void) gl_handle;
GST_ERROR ("Unknown GL platform");
return;
if (priv->other_context) {
have_platform:
if (_wrap_current_gl (priv->display, platform, &priv->other_context)) {
GError *error = NULL;
GST_INFO ("Retrieved Gdk OpenGL context %" GST_PTR_FORMAT,
priv->other_context);
gst_gl_context_activate (priv->other_context, TRUE);
if (!gst_gl_context_fill_info (priv->other_context, &error)) {
GST_ERROR ("failed to retrieve gdk context info: %s", error->message);
GST_ERROR ("Failed to retrieve gdk context info: %s", error->message);
g_clear_error (&error);
g_object_unref (priv->other_context);
priv->other_context = NULL;
@@ -1010,6 +1118,9 @@ gtk_clapper_gl_widget_init (GtkClapperGLWidget * clapper_widget)
GST_INFO ("Created %" GST_PTR_FORMAT, priv->display);
priv->texture_target = GST_GL_TEXTURE_TARGET_NONE;
priv->gl_target = 0;
gtk_gl_area_set_auto_render (GTK_GL_AREA (widget), FALSE);
g_signal_connect_swapped (gtk_widget_get_settings (widget), "notify",
@@ -1094,3 +1205,44 @@ gtk_clapper_gl_widget_get_display (GtkClapperGLWidget * clapper_widget)
return gst_object_ref (clapper_widget->priv->display);
}
gboolean
gtk_clapper_gl_widget_update_output_format (GtkClapperGLWidget * clapper_widget,
GstCaps * caps)
{
GtkClapperGLWidgetPrivate *priv;
GstGLTextureTarget previous_target;
GstStructure *structure;
const gchar *target_str;
gboolean cleanup_gl;
GTK_CLAPPER_GL_WIDGET_LOCK (clapper_widget);
priv = clapper_widget->priv;
previous_target = priv->texture_target;
structure = gst_caps_get_structure (caps, 0);
target_str = gst_structure_get_string (structure, "texture-target");
if (!target_str)
target_str = GST_GL_TEXTURE_TARGET_2D_STR;
priv->texture_target = gst_gl_texture_target_from_string (target_str);
if (!priv->texture_target)
goto fail;
GST_DEBUG_OBJECT (clapper_widget, "Using texture-target: %s", target_str);
priv->gl_target = gst_gl_texture_target_to_gl (priv->texture_target);
cleanup_gl = (previous_target != GST_GL_TEXTURE_TARGET_NONE &&
priv->texture_target != previous_target);
GTK_CLAPPER_GL_WIDGET_UNLOCK (clapper_widget);
if (cleanup_gl)
gst_gtk_invoke_on_main ((GThreadFunc) (GCallback) _cleanup_gl_thread, clapper_widget);
return TRUE;
fail:
GTK_CLAPPER_GL_WIDGET_UNLOCK (clapper_widget);
return FALSE;
}

View File

@@ -100,12 +100,13 @@ gboolean gtk_clapper_gl_widget_set_format (GtkClapperGLWidget *
void gtk_clapper_gl_widget_set_buffer (GtkClapperGLWidget * widget, GstBuffer * buffer);
void gtk_clapper_gl_widget_set_element (GtkClapperGLWidget * widget, GstElement * element);
GtkWidget * gtk_clapper_gl_widget_new (void);
GtkWidget * gtk_clapper_gl_widget_new (void);
gboolean gtk_clapper_gl_widget_init_winsys (GtkClapperGLWidget * widget);
GstGLDisplay * gtk_clapper_gl_widget_get_display (GtkClapperGLWidget * widget);
GstGLContext * gtk_clapper_gl_widget_get_context (GtkClapperGLWidget * widget);
GstGLContext * gtk_clapper_gl_widget_get_gtk_context (GtkClapperGLWidget * widget);
gboolean gtk_clapper_gl_widget_update_output_format (GtkClapperGLWidget * widget, GstCaps * caps);
G_END_DECLS

View File

@@ -1,5 +1,3 @@
gnome = import('gnome')
gstclapper_sources = [
'gstclapper.c',
'gstclapper-signal-dispatcher.c',
@@ -14,6 +12,7 @@ gstclapper_sources = [
'gtk4/gstclapperglsink.c',
'gtk4/gstgtkutils.c',
'gtk4/gtkclapperglwidget.c',
'gtk4/gstclapperglutils.c',
]
gstclapper_headers = [
'clapper.h',
@@ -38,14 +37,14 @@ gstclapper_defines = [
gtk_deps = [gstgl_dep, gstglproto_dep]
have_gtk_gl_windowing = false
gtk4_dep = dependency('gtk4', required : true)
gtk4_dep = dependency('gtk4', required: true)
if not gtk4_dep.version().version_compare('>=4.0.0')
error('GTK4 version on this system is too old')
endif
if gst_gl_have_window_x11 and (gst_gl_have_platform_egl or gst_gl_have_platform_glx)
gtk_x11_dep = dependency('gtk4-x11', required : false)
gtk_x11_dep = dependency('gtk4-x11', required: false)
if gtk_x11_dep.found()
gtk_deps += gtk_x11_dep
if gst_gl_have_platform_glx
@@ -56,7 +55,7 @@ if gst_gl_have_window_x11 and (gst_gl_have_platform_egl or gst_gl_have_platform_
endif
if gst_gl_have_window_wayland and gst_gl_have_platform_egl
gtk_wayland_dep = dependency('gtk4-wayland', required : false)
gtk_wayland_dep = dependency('gtk4-wayland', required: false)
if gtk_wayland_dep.found()
gtk_deps += [gtk_wayland_dep, gstglwayland_dep]
have_gtk_gl_windowing = true
@@ -79,29 +78,29 @@ gstclapper_mpris_gdbus = gnome.gdbus_codegen('gstclapper-mpris-gdbus',
gstclapper = library('gstclapper-' + api_version,
gstclapper_sources + gstclapper_mpris_gdbus,
c_args : gstclapper_defines,
link_args : noseh_link_args,
include_directories : [configinc, libsinc],
version : libversion,
install : true,
install_dir : clapper_libdir,
dependencies : [gtk4_dep, glib_dep, gio_dep,
c_args: gstclapper_defines,
link_args: noseh_link_args,
include_directories: [configinc, libsinc],
version: libversion,
install: true,
install_dir: pkglibdir,
dependencies: [gtk4_dep, glib_dep, gio_dep, giounix_dep,
gstbase_dep, gstvideo_dep, gstaudio_dep,
gsttag_dep, gstpbutils_dep, libm] + gtk_deps,
)
clapper_gir = gnome.generate_gir(gstclapper,
sources : gstclapper_sources + gstclapper_headers,
namespace : 'GstClapper',
nsversion : api_version,
identifier_prefix : 'Gst',
symbol_prefix : 'gst',
export_packages : 'gstreamer-clapper-1.0',
includes : ['Gst-1.0', 'GstPbutils-1.0', 'GstBase-1.0', 'GstVideo-1.0',
sources: gstclapper_sources + gstclapper_headers,
namespace: 'GstClapper',
nsversion: api_version,
identifier_prefix: 'Gst',
symbol_prefix: 'gst',
export_packages: 'gstreamer-clapper-1.0',
includes: ['Gst-1.0', 'GstPbutils-1.0', 'GstBase-1.0', 'GstVideo-1.0',
'GstAudio-1.0', 'GstTag-1.0'],
install : true,
install_dir_typelib : join_paths(clapper_libdir, 'girepository-1.0'),
extra_args : gir_init_section + ['-DGST_USE_UNSTABLE_API'],
dependencies : [gstbase_dep, gstvideo_dep, gstaudio_dep,
install: true,
install_dir_typelib: join_paths(pkglibdir, 'girepository-1.0'),
extra_args: gir_init_section + ['-DGST_USE_UNSTABLE_API'],
dependencies: [gstbase_dep, gstvideo_dep, gstaudio_dep,
gsttag_dep, gstpbutils_dep]
)

77
lib/meson.build vendored
View File

@@ -7,10 +7,6 @@ libversion = meson.project_version()
cc = meson.get_compiler('c')
cxx = meson.get_compiler('cpp')
clapper_libdir = join_paths(
get_option('prefix'), get_option('libdir'), meson.project_name()
)
cdata = configuration_data()
if cc.get_id() == 'msvc'
@@ -40,7 +36,7 @@ else
endif
if cc.has_link_argument('-Wl,-Bsymbolic-functions')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
add_project_link_arguments('-Wl,-Bsymbolic-functions', language: 'c')
endif
# Symbol visibility
@@ -142,7 +138,7 @@ cdata.set_quoted('PACKAGE_BUGREPORT', 'https://github.com/Rafostar/clapper/issue
cdata.set_quoted('PACKAGE_NAME', 'GStreamer Clapper Libs')
cdata.set_quoted('GST_API_VERSION', api_version)
cdata.set_quoted('GST_LICENSE', 'LGPL')
cdata.set_quoted('LIBDIR', clapper_libdir)
cdata.set_quoted('LIBDIR', pkglibdir)
cdata.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
warning_flags = [
@@ -192,25 +188,25 @@ cdata.set_quoted('GST_PACKAGE_NAME', 'GStreamer Plugins Clapper')
cdata.set_quoted('GST_PACKAGE_ORIGIN', 'https://github.com/Rafostar/clapper')
# Mandatory GST deps
gst_dep = dependency('gstreamer-1.0', version : gst_req,
fallback : ['gstreamer', 'gst_dep'])
gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
fallback : ['gstreamer', 'gst_base_dep'])
gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'pbutils_dep'])
gstaudio_dep = dependency('gstreamer-audio-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'audio_dep'])
gsttag_dep = dependency('gstreamer-tag-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'tag_dep'])
gstvideo_dep = dependency('gstreamer-video-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'video_dep'])
gst_dep = dependency('gstreamer-1.0', version: gst_req,
fallback: ['gstreamer', 'gst_dep'])
gstbase_dep = dependency('gstreamer-base-1.0', version: gst_req,
fallback: ['gstreamer', 'gst_base_dep'])
gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'pbutils_dep'])
gstaudio_dep = dependency('gstreamer-audio-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'audio_dep'])
gsttag_dep = dependency('gstreamer-tag-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'tag_dep'])
gstvideo_dep = dependency('gstreamer-video-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'video_dep'])
# GStreamer OpenGL
gstgl_dep = dependency('gstreamer-gl-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'gstgl_dep'], required: true)
gstglx11_dep = dependency('', required : false)
gstglwayland_dep = dependency('', required : false)
gstglegl_dep = dependency('', required : false)
gstgl_dep = dependency('gstreamer-gl-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'gstgl_dep'], required: true)
gstglx11_dep = dependency('', required: false)
gstglwayland_dep = dependency('', required: false)
gstglegl_dep = dependency('', required: false)
gst_gl_apis = gstgl_dep.get_pkgconfig_variable('gl_apis')
gst_gl_winsys = gstgl_dep.get_pkgconfig_variable('gl_winsys')
@@ -232,44 +228,35 @@ foreach api : ['gl', 'gles2']
set_variable('gst_gl_have_api_@0@'.format(api), gst_gl_apis.contains(api))
endforeach
gstglproto_dep = dependency('gstreamer-gl-prototypes-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'gstglproto_dep'], required: true)
gstglproto_dep = dependency('gstreamer-gl-prototypes-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'gstglproto_dep'], required: true)
if gst_gl_have_window_x11
gstglx11_dep = dependency('gstreamer-gl-x11-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'gstglx11_dep'], required: true)
gstglx11_dep = dependency('gstreamer-gl-x11-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'gstglx11_dep'], required: true)
endif
if gst_gl_have_window_wayland
gstglwayland_dep = dependency('gstreamer-gl-wayland-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'gstglwayland_dep'], required: true)
gstglwayland_dep = dependency('gstreamer-gl-wayland-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'gstglwayland_dep'], required: true)
endif
if gst_gl_have_platform_egl
gstglegl_dep = dependency('gstreamer-gl-egl-1.0', version : gst_req,
fallback : ['gst-plugins-base', 'gstglegl_dep'], required: true)
gstglegl_dep = dependency('gstreamer-gl-egl-1.0', version: gst_req,
fallback: ['gst-plugins-base', 'gstglegl_dep'], required: true)
endif
libm = cc.find_library('m', required : false)
glib_dep = dependency('glib-2.0', version : glib_req, fallback: ['glib', 'libglib_dep'])
libm = cc.find_library('m', required: false)
glib_dep = dependency('glib-2.0', version: glib_req, fallback: ['glib', 'libglib_dep'])
gmodule_dep = dependency('gmodule-2.0', fallback: ['glib', 'libgmodule_dep'])
gio_dep = dependency('gio-2.0', fallback: ['glib', 'libgio_dep'])
giounix_dep = dependency('gio-unix-2.0', version: glib_req, fallback: ['glib', 'libgiounix_dep'])
cdata.set('DISABLE_ORC', 1)
cdata.set('GST_ENABLE_EXTRA_CHECKS', get_option('devel-checks'))
cdata.set_quoted('GST_PACKAGE_RELEASE_DATETIME', 'Unknown')
message('GStreamer debug system is disabled')
if cc.has_argument('-Wno-unused')
add_project_arguments('-Wno-unused', language: 'c')
endif
if cxx.has_argument ('-Wno-unused')
add_project_arguments('-Wno-unused', language: 'cpp')
endif
configinc = include_directories('.')
libsinc = include_directories('gst')
gnome = import('gnome')
gir = find_program('g-ir-scanner', required : true)
gir = find_program('g-ir-scanner', required: true)
if not gir.found()
error('Clapper requires GI bindings to be compiled')
endif
@@ -281,4 +268,4 @@ gir_init_section = ['--add-init-section=extern void gst_init(gint*,gchar**);' +
'gst_init(NULL,NULL);', '--quiet'
]
subdir('gst')
configure_file(output : 'config.h', configuration : cdata)
configure_file(output: 'config.h', configuration: cdata)

View File

@@ -1,33 +1,41 @@
project('com.github.rafostar.Clapper', 'c', 'cpp',
version: '0.3.0',
version: '0.4.1',
meson_version: '>= 0.50.0',
license: 'GPL3',
license: 'GPL-3.0-or-later',
default_options: [
'warning_level=1',
'buildtype=debugoptimized'
]
)
gnome = import('gnome')
i18n = import('i18n')
python = import('python')
python_bin = python.find_installation('python3')
if not python_bin.found()
error('No valid python3 binary found')
endif
bindir = join_paths(get_option('prefix'), get_option('bindir'))
libdir = join_paths(get_option('prefix'), get_option('libdir'))
datadir = join_paths(get_option('prefix'), get_option('datadir'))
if get_option('clapper-lib')
pkglibdir = join_paths(libdir, meson.project_name())
pkgdatadir = join_paths(datadir, meson.project_name())
if get_option('lib')
subdir('lib')
endif
if get_option('clapper-player')
if get_option('player')
subdir('bin')
subdir('data')
subdir('po')
installdir = join_paths(get_option('prefix'), 'share', meson.project_name())
install_subdir('src', install_dir : installdir)
install_subdir('extras', install_dir : installdir)
install_subdir('css', install_dir : installdir)
install_subdir('ui', install_dir : installdir)
install_subdir('src', install_dir: pkgdatadir)
install_subdir('extras', install_dir: pkgdatadir)
install_subdir('css', install_dir: pkgdatadir)
install_subdir('ui', install_dir: pkgdatadir)
python_bin = python.find_installation('python3')
if not python_bin.found()
error('No valid python3 binary found')
endif
meson.add_install_script('build-aux/meson/postinstall.py')
endif

View File

@@ -1,20 +1,20 @@
option('clapper-player',
type : 'boolean',
value : true,
option('player',
type: 'boolean',
value: true,
description: 'Build Clapper player'
)
option('clapper-lib',
type : 'boolean',
value : true,
description: 'Build Clapper libs (including API)'
option('lib',
type: 'boolean',
value: true,
description: 'Build GstClapper lib'
)
option('devel-checks',
type : 'boolean',
value : false,
type: 'boolean',
value: false,
description: 'GStreamer GLib checks and asserts such as API guards (disable for stable releases)'
)
option('deprecated-glib-api',
type : 'boolean',
value : true,
type: 'boolean',
value: true,
description: 'Allow using of deprecated GLib API'
)

View File

@@ -1,29 +0,0 @@
pkgbase = clapper-git
pkgdesc = A GNOME media player built using GJS with GTK4 toolkit and powered by GStreamer with OpenGL rendering.
pkgver = r393.bf04af2
pkgrel = 1
url = https://github.com/Rafostar/clapper
arch = any
license = GPL-3.0
makedepends = meson>=0.50
makedepends = git
depends = gtk4
depends = gjs
depends = glib2>=2.56.0
depends = gobject-introspection
depends = wayland-protocols
depends = hicolor-icon-theme
depends = gstreamer>=1.18.0
depends = gst-plugins-base-libs>=1.18.0
depends = gst-plugins-good>=1.18.0
depends = gst-plugins-bad-libs>=1.18.0
optdepends = gst-libav>=1.18.0: Popular video decoders
optdepends = gstreamer-vaapi>=1.18.0: Intel/AMD video acceleration
provides = clapper
conflicts = clapper
replaces = clapper
source = clapper::git+https://github.com/Rafostar/clapper.git
md5sums = SKIP
pkgname = clapper-git

View File

@@ -1,4 +0,0 @@
clapper-*/
clapper-*.pkg.tar.*
pkg/
src/

View File

@@ -1,74 +0,0 @@
#
# PKGBUILD file for package clapper
#
# Copyright (C) 2020/21 sp1rit
# Copyright (C) 2020 Rafostar
#
# 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 <https://www.gnu.org/licenses/>.
# Maintainer: sp1rit <sp1ritCS@protonmail.com>
_basename=clapper
pkgname="${_basename}-git"
pkgver=r393.bf04af2
pkgrel=1
pkgdesc="A GNOME media player built using GJS with GTK4 toolkit and powered by GStreamer with OpenGL rendering."
arch=(any)
url="https://github.com/Rafostar/clapper"
license=("GPL-3.0")
depends=(
"gtk4"
"gjs"
"glib2>=2.56.0" # glib-2.0, gmodule-2.0, gio-2.0
"gobject-introspection" # /usr/sbin/g-ir-scanner
"wayland-protocols" # gtk4 non-default runtime dep
"hicolor-icon-theme"
"gstreamer>=1.18.0" # gstreamer-1.0, gstreamer-base-1.0
"gst-plugins-base-libs>=1.18.0" # gstreamer-pbutils-1.0, gstreamer-audio-1.0, gstreamer-tag-1.0, gstreamer-video-1.0, gstreamer-gl-1.0, gstreamer-gl-prototypes-1.0, gstreamer-gl-x11-1.0, gstreamer-gl-wayland-1.0, gstreamer-gl-egl-1.0,
"gst-plugins-good>=1.18.0"
"gst-plugins-bad-libs>=1.18.0"
)
makedepends=(
"meson>=0.50"
"git"
)
optdepends=(
"gst-libav>=1.18.0: Popular video decoders"
"gstreamer-vaapi>=1.18.0: Intel/AMD video acceleration"
)
source=("${_basename}::git+https://github.com/Rafostar/${_basename}.git")
provides=("${_basename}")
replaces=("${_basename}")
conflicts=("${_basename}")
md5sums=("SKIP")
pkgver() {
cd "${srcdir}/${_basename}"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
prepare() {
cd "${srcdir}/${_basename}"
arch-meson . _build
}
build() {
cd "${srcdir}/${_basename}"
ninja -C _build
}
package() {
cd "${srcdir}/${_basename}"
DESTDIR="$pkgdir" meson install -C _build/
}

View File

@@ -1,28 +0,0 @@
Format: 3.0 (quilt)
Source: clapper
Binary: clapper
Architecture: any
Version: 0.3.0
Maintainer: Rafostar <rafostar.github@gmail.com>
Build-Depends: debhelper (>= 10),
meson (>= 0.50),
gjs,
gobject-introspection,
libgtk-4-dev (>= 4.0.0),
libgstreamer1.0-dev (>= 1.18),
libgstreamer-plugins-base1.0-dev (>= 1.18),
libgstreamer-gl1.0-0 (>= 1.18),
libgles-dev,
libglib2.0-dev,
libglib2.0-bin,
desktop-file-utils,
hicolor-icon-theme,
brz,
libfontconfig1-dev,
libpam-systemd
Package-List:
clapper deb gnome optional arch=any
Files:
0 0 debian.tar.xz
Description: Simple and modern GNOME media player
A GNOME media player built using GJS with GTK4 toolkit and powered by GStreamer with OpenGL rendering.

View File

@@ -1,5 +0,0 @@
clapper (0.3.0) unstable; urgency=low
* New version
-- Rafostar <rafostar.github@gmail.com> Fri, 18 Jun 2021 09:39:00 +0100

View File

@@ -1 +0,0 @@
10

View File

@@ -1,37 +0,0 @@
Source: clapper
Section: gnome
Priority: optional
Maintainer: Rafostar <rafostar.github@gmail.com>
Standards-Version: 4.4.0
Build-Depends: debhelper (>= 10),
meson (>= 0.50),
gjs,
gobject-introspection,
libgtk-4-dev (>= 4.0.0),
libgstreamer1.0-dev (>= 1.18),
libgstreamer-plugins-base1.0-dev (>= 1.18),
libgstreamer-gl1.0-0 (>= 1.18),
libgles-dev,
libglib2.0-dev,
libglib2.0-bin,
desktop-file-utils,
hicolor-icon-theme
Package: clapper
Architecture: any
Depends: gjs,
gir1.2-gtk-4.0 (>= 4.0.0),
hicolor-icon-theme,
libgstreamer1.0-0 (>= 1.18),
gstreamer1.0-plugins-base (>= 1.18),
gstreamer1.0-plugins-good (>= 1.18),
gstreamer1.0-plugins-bad (>= 1.18),
gstreamer1.0-gl (>= 1.18)
Recommends: gstreamer1.0-libav,
gstreamer1.0-pulseaudio
Suggests: gstreamer1.0-plugins-ugly,
gstreamer1.0-vaapi
Description: Simple and modern GNOME media player
A GNOME media player built using GJS with GTK4 toolkit and powered by GStreamer with OpenGL rendering.
.
More codecs/features and video acceleration can be enabled by installing the suggested packages.

View File

@@ -1,27 +0,0 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: clapper
Source: https://github.com/Rafostar/clapper
Files: *
Copyright: 2020 Rafostar <rafostar.github@gmail.com>
License: GPL-3.0+
Files: debian/*
Copyright: 2020 Rafostar <rafostar.github@gmail.com>
License: GPL-3.0+
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/>.
.
On Debian systems, the complete text of the GNU General Public License
Version 3 can be found in `/usr/share/common-licenses/GPL-3'.

View File

@@ -1,4 +0,0 @@
#!/usr/bin/make -f
%:
dh $@

View File

@@ -1 +0,0 @@
3.0 (quilt)

View File

@@ -0,0 +1,51 @@
{
"app-id": "com.github.rafostar.Clapper",
"runtime": "org.gnome.Platform",
"runtime-version": "master",
"sdk": "org.gnome.Sdk",
"command": "com.github.rafostar.Clapper",
"finish-args": [
"--share=ipc",
"--socket=fallback-x11",
"--socket=wayland",
"--device=dri",
"--socket=pulseaudio",
"--share=network",
"--device=all",
"--filesystem=xdg-run/pipewire-0:ro",
"--filesystem=xdg-videos",
"--own-name=org.mpris.MediaPlayer2.Clapper",
"--talk-name=org.gnome.Shell",
"--env=GST_PLUGIN_SYSTEM_PATH=/app/lib/gstreamer-1.0",
"--env=GST_VAAPI_ALL_DRIVERS=1"
],
"modules": [
"flathub/shared-modules/gudev/gudev.json",
"flathub/lib/libsass.json",
"flathub/lib/sassc.json",
"flathub/lib/libadwaita.json",
"flathub/lib/liba52.json",
"flathub/lib/libmpeg2.json",
"flathub/lib/libdv.json",
"flathub/lib/libdvdcss.json",
"flathub/lib/libdvdread.json",
"flathub/lib/libdvdnav.json",
"flathub/lib/libass.json",
"flathub/lib/ffmpeg.json",
"testing/gstreamer.json",
"testing/gtuber.json",
{
"name": "clapper",
"buildsystem": "meson",
"sources": [
{
"type": "dir",
"path": "../../."
}
]
}
],
"cleanup-commands": [
"ln -s /lib/$FLATPAK_ARCH-linux-*/gstreamer-1.0/libgstpipewire.so /app/lib/gstreamer-1.0/"
]
}

View File

@@ -12,6 +12,7 @@
"--socket=pulseaudio",
"--share=network",
"--device=all",
"--filesystem=xdg-run/pipewire-0:ro",
"--filesystem=xdg-videos",
"--own-name=org.mpris.MediaPlayer2.Clapper",
"--talk-name=org.gnome.Shell",
@@ -19,14 +20,13 @@
"--env=GST_VAAPI_ALL_DRIVERS=1"
],
"modules": [
"flathub/lib/glib-networking.json",
"flathub/shared-modules/gudev/gudev.json",
"flathub/lib/pango.json",
"flathub/lib/libsass.json",
"flathub/lib/sassc.json",
"flathub/lib/gtk4.json",
"flathub/lib/liba52.json",
"flathub/lib/libmpeg2.json",
"flathub/lib/libdv.json",
"flathub/lib/libdvdcss.json",
"flathub/lib/libdvdread.json",
"flathub/lib/libdvdnav.json",
@@ -40,6 +40,9 @@
"flathub/gstreamer-1.0/gst-plugins-ugly.json",
"flathub/gstreamer-1.0/gst-libav.json",
"flathub/gstreamer-1.0/gstreamer-vaapi.json",
"flathub/lib/gtk4.json",
"flathub/lib/libadwaita.json",
"testing/gtuber.json",
{
"name": "clapper",
"buildsystem": "meson",
@@ -50,5 +53,8 @@
}
]
}
],
"cleanup-commands": [
"ln -s /lib/$FLATPAK_ARCH-linux-*/gstreamer-1.0/libgstpipewire.so /app/lib/gstreamer-1.0/"
]
}

View File

@@ -0,0 +1,72 @@
{
"name": "gstreamer",
"buildsystem": "meson",
"config-opts": [
"--wrap-mode=nofallback",
"-Dbase=enabled",
"-Dgood=enabled",
"-Dbad=enabled",
"-Dugly=enabled",
"-Dlibav=enabled",
"-Dvaapi=enabled",
"-Dsharp=disabled",
"-Drs=disabled",
"-Dpython=disabled",
"-Ddevtools=disabled",
"-Dges=disabled",
"-Drtsp_server=disabled",
"-Dgst-examples=disabled",
"-Dqt5=disabled",
"-Dtests=disabled",
"-Dexamples=disabled",
"-Dintrospection=enabled",
"-Ddoc=disabled",
"-Dgtk_doc=disabled",
"-Dgpl=enabled",
"-Dgstreamer:benchmarks=disabled",
"-Dgstreamer:gobject-cast-checks=disabled",
"-Dgstreamer:glib-asserts=disabled",
"-Dgstreamer:glib-checks=disabled",
"-Dgstreamer:extra-checks=disabled",
"-Dgst-plugins-base:gobject-cast-checks=disabled",
"-Dgst-plugins-base:glib-asserts=disabled",
"-Dgst-plugins-base:glib-checks=disabled",
"-Dgst-plugins-base:gl_api=opengl,gles2",
"-Dgst-plugins-base:gl_platform=egl,glx",
"-Dgst-plugins-good:gobject-cast-checks=disabled",
"-Dgst-plugins-good:glib-asserts=disabled",
"-Dgst-plugins-good:glib-checks=disabled",
"-Dgst-plugins-good:gtk3=disabled",
"-Dgst-plugins-bad:gobject-cast-checks=disabled",
"-Dgst-plugins-bad:glib-asserts=disabled",
"-Dgst-plugins-bad:glib-checks=disabled",
"-Dgst-plugins-bad:extra-checks=disabled",
"-Dgst-plugins-bad:vulkan=disabled",
"-Dgst-plugins-bad:webrtc=disabled",
"-Dgst-plugins-bad:wasapi=disabled",
"-Dgst-plugins-bad:wasapi2=disabled",
"-Dgst-plugins-bad:winks=disabled",
"-Dgst-plugins-bad:winscreencap=disabled",
"-Dgst-plugins-bad:assrender=enabled",
"-Dgst-plugins-bad:nvcodec=enabled",
"-Dgst-plugins-bad:v4l2codecs=enabled",
"-Dgst-plugins-bad:va=enabled",
"-Dgst-plugins-ugly:gobject-cast-checks=disabled",
"-Dgst-plugins-ugly:glib-asserts=disabled",
"-Dgst-plugins-ugly:glib-checks=disabled",
"-Dgst-plugins-ugly:mpeg2dec=enabled"
],
"sources": [
{
"type": "git",
"url": "https://gitlab.freedesktop.org/gstreamer/gstreamer.git",
"branch": "main"
}
]
}

View File

@@ -0,0 +1,20 @@
{
"name": "gtuber",
"buildsystem": "meson",
"config-opts": [
"-Dintrospection=disabled",
"-Dvapi=disabled",
"-Dgst-gtuber=enabled"
],
"cleanup": [
"/include",
"/lib/pkgconfig"
],
"sources": [
{
"type": "git",
"url": "https://github.com/Rafostar/gtuber.git",
"branch": "main"
}
]
}

View File

@@ -26,7 +26,7 @@
%global glib2_version 2.56.0
Name: clapper
Version: 0.3.0
Version: 0.4.1
Release: 1%{?dist}
Summary: Simple and modern GNOME media player
@@ -46,6 +46,7 @@ BuildRequires: hicolor-icon-theme
Requires: gjs
Requires: gtk4 >= %{gtk4_version}
Requires: libadwaita
Requires: hicolor-icon-theme
%if 0%{?suse_version}
@@ -116,6 +117,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%license COPYING
%doc README.md
%{_bindir}/%{appname}*
%{_bindir}/clapper
%{_datadir}/%{appname}/
%{_datadir}/icons/hicolor/*/apps/*.svg
%{_datadir}/glib-2.0/schemas/%{appname}.gschema.xml
@@ -123,9 +125,25 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%{_datadir}/applications/*.desktop
%{_datadir}/metainfo/*.metainfo.xml
%{_datadir}/gir-1.0/GstClapper-1.0.gir
%{_datadir}/locale/*/LC_MESSAGES/%{appname}.mo
%{_libdir}/%{appname}/
%changelog
* Mon Dec 20 2021 Rafostar <rafostar.github@gmail.com> - 0.4.1-1
- New version
* Sun Sep 12 2021 Rafostar <rafostar.github@gmail.com> - 0.4.0-1
- New version
* Thu Aug 26 2021 Rafostar <rafostar.github@gmail.com> - 0.3.0-4
- Install translations
* Thu Aug 26 2021 Rafostar <rafostar.github@gmail.com> - 0.3.0-3
- Install clapper symlink
* Mon Aug 23 2021 Rafostar <rafostar.github@gmail.com> - 0.3.0-2
- Require libadwaita
* Fri Jun 18 2021 Rafostar <rafostar.github@gmail.com> - 0.3.0-1
- New version
@@ -135,7 +153,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
* Tue Apr 13 2021 Rafostar <rafostar.github@gmail.com> - 0.2.0-1
- New version
* Fri Feb 25 2021 Rafostar <rafostar.github@gmail.com> - 0.1.0-1
* Fri Feb 26 2021 Rafostar <rafostar.github@gmail.com> - 0.1.0-1
- New version
* Sun Feb 7 2021 Rafostar <rafostar.github@gmail.com> - 0.0.0-10

1
po/LINGUAS Normal file
View File

@@ -0,0 +1 @@
ca cs de es hu it nl pl pt pt_BR ru zh_CN

10
po/POTFILES Normal file
View File

@@ -0,0 +1,10 @@
ui/clapper.ui
ui/elapsed-time-button.ui
ui/help-overlay.ui
ui/preferences-plugin-ranking-subpage.ui
ui/preferences-window.ui
src/buttons.js
src/dialogs.js
src/revealers.js
src/widget.js

459
po/af.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: af\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/ar.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ar\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/ca.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 16:21\n"
"Last-Translator: \n"
"Language-Team: Catalan\n"
"Language: ca_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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ca\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Obre fitxers..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Obre l'URI..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferències"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Dreceres"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Quant al Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocitat"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "General"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostra les dreceres"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Commuta la pantalla completa"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Prem dues vegades | Doble clic"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Surt de la pantalla completa"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Mostra l'OSD (només pantalla completa)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Toca"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Surt"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Mèdia"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Obre fitxers"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Obre l'URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Llista de reproducció"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Element següent"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Prem dues vegades (part dreta)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Element anterior"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Prem dues vegades (part esquerra)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Canvia el mode de repetició"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exporta a un fitxer"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Reproducció"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Commuta la reproducció"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Prem llarga | Clic dret"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Avança"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Llisca el dit a la dreta | Desplaça a la dreta"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Retrocedeix"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Llisca el dit a l'esquerra | Desplaça a l'esquerra"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Apuja el volum"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Llisca el dit cap amunt | Desplaça amunt"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Baixa el volum"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Llisca el dit cap avall | Desplaça cap avall"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Commuta el silenci"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Capítol següent"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capítol anterior"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Descodificadors"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Torna a les preferències"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Comportament"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Pantalla completa automàtica"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Entra a pantalla completa quan se substitueix la llista de reproducció excepte el mode flotant"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Pregunta per reprendre recents"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Flota en tots els espais de treball"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Aquesta opció només funciona amb el GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Després de la reproducció"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "No facis res"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Congela l'últim fotograma"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Surt de l'aplicació"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Volum"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Valor inicial personalitzat"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Estableix el volum personalitzat a l'inici en lloc de restaurar-lo"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Percentatge de volum"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Cerca"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Mode"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Acurat"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Ràpid"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Unitat"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Segon"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minut"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Percentatge"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Valor"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Àudio"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Desplaçament en mil·lisegons"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Només formats d'àudio natius"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Subtítols"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Tipus de lletra per defecte"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Xarxa"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Memòria intermèdia de baixada progressiva"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Servidor"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Controla el reproductor remotament"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Port d'escolta"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Executa l'aplicació web en segon pla"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Requereix el GTK compilat amb el backend Broadway"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Port de l'aplicació web"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Prefereix la transmissió adaptativa"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Qualitat màxima"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Ajustaments"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Aparença"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Tema fosc"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Renderitza les ombres de la finestra"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Inhabilita per augmentar el rendiment en mode finestra"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Classificació dels connectors"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera els rangs predeterminats dels connectors del GStreamer"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Usa playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Requereix reiniciar el reproductor"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Experimental"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "Usa PipeWire per la sortida d'àudio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Descodificador: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Escriu o deixa anar una URI aquí"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancel·la"
#: src/dialogs.js:158
msgid "Open"
msgstr "Obre"
#: src/dialogs.js:226
msgid "Title"
msgstr "Títol"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completat"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Reprèn la reproducció?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versió del GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versió del Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versió del GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versió del GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Un reproductor multimèdia del GNOME que usa GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Ícar Nin Solana <icar.nin@protonmail.com>, 2021"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Acaba a la/les %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Sense determinar"
#: src/widget.js:243
msgid "Channels"
msgstr "Canals"
#: src/widget.js:261
msgid "Disabled"
msgstr "Deshabilitat"

View File

@@ -0,0 +1,458 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the com.github.rafostar.Clapper package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: com.github.rafostar.Clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/cs.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-19 20:57\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Language: cs_CZ\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) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: cs\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Otevřít soubory..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Otevřít URI..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Předvolby"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Klávesové zkratky"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "O aplikaci Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Rychlost"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normální"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Obecné"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Zobrazit klávesové zkratky"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Celá obrazovka"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dvojitým poklepáním | Dvojitým kliknutím"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Opustit režim celé obrazovky"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Odhalit OSD (pouze při zobrazení na celou obrazovku)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Klepnutím"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Ukončit"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Média"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Otevřít soubory"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Otevřít URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Playlisty"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Další položka"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dvojité poklepání (pravá strana)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Předchozí položka"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dvojité poklepání (levá strana)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Změnit režim opakování"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportovat do souboru"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Přehrávání"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Přepnout přehrávání"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Dlouhým stisknutím | Klepnutím pravým tlačítkem"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Přetočit vpřed"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Přejetím vpravo | Scrollováním vpravo"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Přetočit zpět"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Přejetím vlevo | Scrollováním vlevo"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Zesílit"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Přejetím nahoru | Scrollováním nahoru"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Zeslabit"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Přejetím dolů | Scrollováním dolů"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Vypnout/zapnout zvuk"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Další kapitola"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Předchozí kapitola"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekodéry"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Zpět do předvoleb"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Chování"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Automaticky na celou obrazovku"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Přejít do režimu na celou obrazovku při nahrazení seznamu skladeb s výjimkou plovoucího režimu"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Zeptat se na obnovení nedávných médií"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Plovoucí režim na všech pracovních plochách"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Tato možnost funguje pouze na GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Po skončení přehrávání"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Nedělat nic"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Zůstat na posledním snímku"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Zavřít aplikaci"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Hlasitost"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Vlastní počáteční hodnota"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Nastavit vlastní hlasitost při spuštění namísto obnovení předchozí hodnoty"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Procento hlasitosti"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Přetáčení"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Režim"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Přesný"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Rychlý"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Jednotka"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Sekundy"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minuty"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Procenta"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Hodnota"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Zvuk"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Posunutí v milisekundách"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Pouze nativní formáty zvuku"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Titulky"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Výchozí styl písma"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Síť"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Klient"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Postupné stahování do vyrovnávací paměti"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Vzdáleně ovládat přehrávač"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Naslouchat na portu"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Spustit webovou aplikaci na pozadí"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Vyžaduje GTK kompilovaný s Broadway backendem"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Port webové aplikace"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Preferovat adaptivní streamování"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Maximální kvalita"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Vylepšení"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Vzhled"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Tmavý motiv"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Vykreslovat stíny okna"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Zakázat pro zvýšení výkonu"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Pořadí pluginů"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Změna výchozího pořadí zásuvných modulů GStreameru"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Použít playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Vyžaduje restart přehrávače"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Experimentální"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "Použít PipeWire pro zvukový výstup"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekodér: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Zde zadejte nebo přetáhněte URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Zrušit"
#: src/dialogs.js:158
msgid "Open"
msgstr "Otevřít"
#: src/dialogs.js:226
msgid "Title"
msgstr "Název"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Přehráno"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Pokračovat v přehrávání?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Verze GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Verze Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Verze GStreameru: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Verze GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Přehrávač médií pro GNOME postavený na GStreameru"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Vojtěch Perník <translations@pervoj.cz>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Končí v: %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Neurčeno"
#: src/widget.js:243
msgid "Channels"
msgstr "Kanály"
#: src/widget.js:261
msgid "Disabled"
msgstr "Vypnuto"

459
po/da.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Language: da_DK\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: da\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/de.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: de\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Dateien öffnen..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Webquelle öffnen..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Einstellungen"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Tastenkombinationen"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Über Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Wiedergabegeschwindigkeit"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Allgemein"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Tastenkombinationen zeigen"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "In Vollbildmodus wechseln"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Doppelt tippen bzw. klicken"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Vollbildmodus beenden"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "OSD zeigen (nur im Vollbildmodus)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tippen"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Clapper beenden"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Medien"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Dateien öffnen"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Webquelle öffnen"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Wiedergabeliste"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Nächster Titel"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Doppelt auf der rechten Seite tippen"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Vorheriger Titel"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Doppelt auf der linken Seite tippen"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Wiederholmodus ändern"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Als Datei exportieren"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Wiedergabe"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Wiedergabe umschalten"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Lange Bildschirm berühren oder Rechtsklick"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Vorwärts springen"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Nach rechts wischen bzw. scrollen"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Rückwärts springen"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Nach links wischen bzw. scrollen"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Lautstärke erhöhen"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Nach oben wischen bzw. scrollen"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Lautstärke verringern"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Nach unten wischen bzw. scrollen"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "In Vollbildmodus wechseln"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Nächstes Kapitel"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Vorheriges Kapitel"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodierer"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Zurück zu den Einstellungen"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Verhalten"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Automatischer Vollbildmodus"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Vollbildmodus betreten, wenn Wiedergabeliste ersetzt wird. (Außer Clapper befindet sich im Schwebemodus)"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Nachfragen ob kürzlich wiedergegebene Medien weitergespielt werden sollen"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Schwebemodus auf allen Arbeitsflächen"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Diese Option funktioniert nur auf GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Nach Wiedergabe"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Nichts tun"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Letztes Bild einfrieren"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Anwendung beenden"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Lautstärke"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Benutzerdefinierter Anfangswert"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Lautstärke auf einen fixierten Wert beim Start setzen, anstelle ihn wiederherzustellen."
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Lautstärke (in Prozent)"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Springen"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Modus"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Genau"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Schnell"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Einheit"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Sekunden"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minuten"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Prozentsatz"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Wert"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Verschiebung in Millisekunden"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Nur systemeigene Audioformate"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Untertitel"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Standartschriftart"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Netzwerk"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Fortschreitender Download-Puffer"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Clapper fernsteuern"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Empfangsport"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Webanwendung im Hintergrund starten"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Benötigt, dass GTK mit Broadway Unterstützung kompiliert wurde"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Webanwendungsport"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Bevorzuge adaptives Streaming"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Höchste Qualität"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Optimierungen"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Erscheinungsbild"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Dunkler Modus"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Fensterschatten darstellen"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Deaktivieren, um Performance im Fenstermodus zu verbessern"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Plugin-Reihenfolge"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Standard GStreamer Reihenfolge verändern"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Playbin3 benutzen"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Benötigt Neustart von Clapper"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Experimentell"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "PipeWire für Audioausgabe verwenden"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decodierer: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "URI hier einfügen"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Abbrechen"
#: src/dialogs.js:158
msgid "Open"
msgstr "Öffnen"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titel"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Abgespielt"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Wiedergabe fortfahren?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK Version: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita Version: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer Version: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS Version: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Ein von GStreamer betriebener GNOME Multimedia-Player"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Ended um %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Unbestimmet"
#: src/widget.js:243
msgid "Channels"
msgstr "Audio-Kanäle"
#: src/widget.js:261
msgid "Disabled"
msgstr "Deaktiviert"

459
po/el.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Language: el_GR\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: el\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/es.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Abrir archivos"
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Abrir URI"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferencias"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Atajos"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Acerca de Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocidad"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "General"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostrar atajos"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Fijar a pantalla completa"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Doble toque | Doble clic "
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Salir de pantalla completa"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Revelar OSD (solo pantalla completa)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocar"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Abandonar"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Abrir archivos"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Abrir URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lista de reproducción"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Artículo siguiente"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Tocar doble (lado derecho)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Artículo anterior"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Tocar doble (lado izquierdo)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Cambiar a modo repetición"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportar a archivo"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Reproducir"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Fijar a reproducir"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Pulsación larga | Clic derecho"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Buscar adelante "
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Deslizar a derecha | Desplazar a derecha"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Buscar a atrás"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Deslizar a izquierda | Desplazar a izquierda"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Volumen +"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Deslizar + | Desplazar +"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Volumen -"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Deslizar - | Desplazar -"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Fijar a mudo"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Siguiente capítulo"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Anterior capítulo"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodificadores"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Regresar a preferencias"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Comportamiento"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Pantalla completa automática"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Fijar a pantalla completa cuando se reemplaza la lista de reproducción, excepto el modo flotante"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Preguntar al reanudar los medios recientes"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Flotar todos los espacios de trabajo"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Esta opción solo funciona en GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Después de reproducción "
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Nada por hacer"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Congelar el último fotograma"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Cerrar la aplicación"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Volumen"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Valor inicial personalizado"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Establecer un volumen personalizado al inicio en lugar de restaurarlo"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Porcentaje de volumen"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Buscando"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Modo"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Precisión"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Rápido"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Unidad"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Segundo"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minuto"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Porcentaje"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Valor"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Compensación en milisegundos"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Solo formatos de audio nativos"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Subtítulos"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Fuente predeterminada"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Red"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Cliente"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Bajada progresiva de búfer"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Servidor"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Controlar el reproductor remotamente"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Puerto de escucha"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Ejecutar la aplicación web en modo demonio"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Requiere GTK compilado con el backend de Broadway"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Puerto de la aplicación web"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Preferir la transmisión adaptativa "
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Calidad máxima"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Retoques"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Apariencia"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Tema oscuro"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Renderizar sombras de ventana"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Desactivar para aumentar el rendimiento cuando se abre en ventana"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Rango de enchufes"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Alterar los rangos predeterminados de los enchufes de GStreamer"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Usar Playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Require reiniciar el reproductor"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Experimental"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "Usar PipeWire para la salida de audio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decodificador: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Intoducir la URI aquí"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancelar"
#: src/dialogs.js:158
msgid "Open"
msgstr "Abrir"
#: src/dialogs.js:226
msgid "Title"
msgstr "Título"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completado"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Resumir el reproductor?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versión GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versión LibAdwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versión GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versión GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Un reproductor multimedia de GNOME impulsado por GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "carlosgonz"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Termina en: %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Indeterminado"
#: src/widget.js:243
msgid "Channels"
msgstr "Canales"
#: src/widget.js:261
msgid "Disabled"
msgstr "Deshabilitado"

459
po/fi.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Language: fi_FI\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: fi\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/fr.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: fr\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/he.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Language: he_IL\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%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: he\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/hu.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-21 16:37\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Language: hu_HU\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: hu\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Fájlok megnyitása..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "URI megnyitása..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Beállítások"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Gyorsbillentyűk"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "A Clapper -ről"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Sebesség"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normál"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Általános beállítások"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Gyorsbillentyűk megjelenítése"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Teljes képernyő be/ki"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dupla koppintás | Dupla kattintás"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Teljes képernyő be/ki"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Képernyőn megjelenő kijelző (OSD) mutatása (csak teljes képernyős módban)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Koppintás"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Kilépés"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Média"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Fájlok megnyitása"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "URI megnyitása"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lejátszólista"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Következő listaelem"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dupla koppintás (jobb oldalon)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Előző listaelem"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dupla koppintás (bal oldalon)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Ismétlési típus változtatása"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportálás fájlba"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Lejátszás"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Lejátszás indítása/megállítása"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Hosszú nyomás | Jobb kattintás"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Előretekerés"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Húzás jobbra | Görgetés jobbra"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Visszatekerés"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Húzás balra | Görgetés balra"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Hangerő növelése"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Húzás felfelé | Görgetés felfelé"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Hangerő csökkentése"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Húzás lefelé | Görgetés lefelé"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Némítás be-/kikapcsolása"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Következő jelenet"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Előző jelenet"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekóderek"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Visszatérés a beállításokhoz"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Viselkedés"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Automatikus teljes képernyős mód"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Teljes képernyős módra váltás a lejátszólista megváltoztatásakor (kivétel ha lebegőablakos módban vagyunk)"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Rákérdezés a legutóbbi média folytatására"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Lebegő ablak az összes munkaasztalon"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Ez az opció csak GNOME asztali környezettel működik"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Lejátszás után"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Ne csináljon semmit"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Utolsó képkocka mutatása"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Alkalmazás bezárása"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Hangerő"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Egyedi kezdeti érték"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Induláskor egyedi hangerő az utolsó visszaállítása helyett"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Hangerő százalék"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Tekerés"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Mód"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Precíz"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Gyors"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Mértékegység"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Másodperc"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Perc"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Százalék"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Érték"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Hang"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Eltolás miliszekundumban"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Csak natív hang formátumok"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Feliratok"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Alapértelmezett betűtípus"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Hálózat"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Kliens"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Progresszív letöltéspufferelés"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Szerver"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Lejátszó távirányítása"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Port figyelése"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Web alkalmazás háttérben való futtatása"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Broadway backenddel fordított GTK -t igényel"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Web alkalmazás portja"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Adaptív streaming előnyben részesítése"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Maximális minőség"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Finomhangolások"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Megjelenés"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Sötét téma"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Ablak árnyékok renderelése"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Kikapcsolása javítja a teljesítményt ablakban futtatás esetén"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Bővítményrangsor"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Az alapértelmezett GStreamer bővítményrangsor megváltoztatása"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "A playbin3 használata"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "A lejátszó újraindítását igényli"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Kísérleti funkció"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "A PipeWire használata hang kimenetként"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekóder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Adjon meg egy URI -t itt, vagy húzza és ejtse ide"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Mégsem"
#: src/dialogs.js:158
msgid "Open"
msgstr "Megnyitás"
#: src/dialogs.js:226
msgid "Title"
msgstr "Cím"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Lejátszva"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Lejátszás folytatása?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK verzió: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita verzió: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer verzió: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS verzió: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "GNOME médialejátszó a GStreamer képességeivel"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Ferenc Géczi"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "%s-kor ér véget"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Meghatározatlan"
#: src/widget.js:243
msgid "Channels"
msgstr "Csatornák"
#: src/widget.js:261
msgid "Disabled"
msgstr "Kikapcsolva"

459
po/it.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-10-04 08:30\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Language: it_IT\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: it\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Apri i File..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Apri URI..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferenze"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Scorciatoie"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Informazioni su Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocità"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normale"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Generale"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostra scorciatoie"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Attiva/Disattiva schermo intero"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Doppio tocco | Doppio click"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Disattiva schermo intero"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Rivela controlli (solo a schermo intero)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocco"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Esci"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Apri i file"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Apri URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Playlist"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Elemento successivo"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Doppio tocco (lato destro)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Elemento precedente"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Doppio tocco (lato sinistro)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Cambia modalità di ripetizione"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Esporta su file"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Riproduzione"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Attiva/Disattiva riproduzione"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Tocco prolungato | Click destro"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Scorri avanti"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Scorri a destra"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Scorri indietro"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Scorri a sinistra"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Aumenta volume"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Scorri in alto"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Abbassa volume"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Scorri in basso"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Attiva/Disattiva muto"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Capitolo successivo"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capitolo precedente"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodificatori"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Ritorna alle preferenze"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Comportamento"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Schermo intero automatico"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Attiva schermo intero quando la playlist viene sostituita, tranne in modalità fluttuante"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Chiedi di riprendere i media recenti"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Fluttuante su tutti i workspace"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Questa opzione funziona solo su GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Dopo la riproduzione"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Non fare nulla"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Mostra l'ultimo fotogramma"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Chiudi l'app"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Valore iniziale personalizato"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Imposta un volume all'avvio personalizzato invece di ripristinarlo"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Percentuale volume"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Scorrimento"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Modalità"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Accurata"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Veloce"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Unità"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Secondo"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minuto"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Percentuale"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Valore"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Ritardo/Anticipo in millisecondi"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Solo formati audio nativi"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Sottotitoli"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Carattere predefinito"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Rete"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Download buffering progressivo"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Controlla la riproduzione da remoto"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Porta in ascolto"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Lancia l'applicazione web in sottofondo"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Richiede GTK compilato con il supporto a Broadway"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Porta per l'applicazione web"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Preferisci stream adattivo"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Qualità massima"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Aggiustamenti"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Aspetto"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Tema scuro"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Ombreggiatura della finestra"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Disabilita per aumentare le prestazioni in modalità finestra"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Ordine dei plugin"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera l'ordine predefinito dei plugin di GStreamer"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Usa playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Richiede il riavvio del player"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Sperimentale"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "Usa PipeWire per l'uscita audio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decoder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Inserisci o rilascia URI qui"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancella"
#: src/dialogs.js:158
msgid "Open"
msgstr "Apri"
#: src/dialogs.js:226
msgid "Title"
msgstr "Titolo"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completato"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Riprendere la riproduzione?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versione GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Versione Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versione GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versione GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Un riproduttore multimediale per GNOME basato su GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Termina alle: %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Indeterminato"
#: src/widget.js:243
msgid "Channels"
msgstr "Canali"
#: src/widget.js:261
msgid "Disabled"
msgstr "Disabilitato"

459
po/ja.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ja\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/ko.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:24\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ko\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

1
po/meson.build Normal file
View File

@@ -0,0 +1 @@
i18n.gettext(meson.project_name(), preset: 'glib')

459
po/nl.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 16:21\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: nl\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Bestanden openen…"
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "URI openen…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Voorkeuren"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Sneltoetsen"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Over Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normaal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Algemeen"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Sneltoetsen tonen"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Beeldvullende modus aan/uit"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Dubbeltikken/Dubbelklikken"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Beeldvullende modus verlaten"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "OSD tonen (alleen in beeldvullende modus)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tikken"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Afsluiten"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Bestanden openen"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "URI openen"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Afspeellijst"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Volgend item"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dubbeltikken (rechterkant)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Vorig item"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Dubbeltikken (linkerkant)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Herhaalmodus wijzigen"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exporteren naar bestand"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Afspelen"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Afspelen/Pauzeren"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Lang ingedrukt houden/Rechtsklikken"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Vooruitspoelen"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Naar rechts vegen/scrollen"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Terugspoelen"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Naar links vegen/scrollen"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Volume omhoog"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Omhoog vegen/scrollen"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Volume omlaag"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Omlaag vegen/scrollen"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Volgend hoofdstuk"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Vorig hoofdstuk"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodering"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Terug naar voorkeuren"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Gedrag"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Beeldvullende modus automatisch inschakelen"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Schakel de beeldvullende modus automatisch in als de afspeellijst wordt vervangen (behalve in de zwevende modus)"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Vragen om onlangs afgespeelde media te hervatten"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Zweven op alle werkbladen"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Deze optie werkt alleen op GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Actie na het afspelen:"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Niets doen"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Laatste frame bevriezen"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Toepassing afsluiten"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Aangepaste initiële waarde"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Stel een aangepast volumeniveau in bij het opstarten in plaats van het vorige te herstellen"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Volumeniveau"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Spoelen"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Modus"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Nauwkeurig"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Snel"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Eenheid"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Seconde"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minuut"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Percentage"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Waarde"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Verschuiving (in milliseconden)"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Alleen ingebouwde audioformaten"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Ondertiteling"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Standaardlettertype"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Netwerk"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Client"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Progressieve downloadbuffering"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Server"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Speler op afstand bedienen"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Luisteren op poort:"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Webtoepassing op achtergrond uitvoeren"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Vereist GTK met het Broadway-backend"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Webtoepassingspoort"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Adaptief streamen"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Maximumkwaliteit"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Aanpassingen"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Vormgeving"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Donker thema"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Vensterschaduwen tonen"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Schakel uit om de prestaties te verbeteren in de zwevende modus"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Plug-involgorde"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Pas de standaardvolgorde van GStreamer-plug-ins aan"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Heimen Stoffels <vistausss@fastmail.com>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Eindigt op: %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/no.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Language: no_NO\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: no\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/pl.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-15 08:41\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Language: pl_PL\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 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: pl\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Otwórz pliki..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Otwórz URI..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferencje"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Skróty"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "O programie"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Prędkość"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normalny"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Główne"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Pokaż skróty"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Przełącz tryb pełnoekranowy"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Podwójne dotknięcie | Podwójne kliknięcie"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Opuść pełny ekran"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Pokaż OSD (tylko w trybie pełnoekranowym)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Stuknij"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Zamknij"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Media"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Otwórz pliki"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Otwórz URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Playlista"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Następna pozycja"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Dwukrotne dotknięcie (po prawej)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Poprzednia pozycja"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Podwójne dotknięcie (po lewej stronie)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Zmień tryb powtarzania"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Eksportuj do pliku"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Odtwarzanie"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Przełącz odtwarzanie"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Długie naciśnięcie | Prawy przycisk"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Przewiń do przodu"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Przesuń w prawo | Przewiń w prawo"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Przewiń do tyłu"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Przesuń w lewo | Przewiń w lewo"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Zwiększ głośność"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Przesuń w górę | Przewiń w górę"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Zmniejsz głośność"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Przesuń w dół | Przewiń w dół"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Przełącz wyciszenie"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Następny rozdział"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Poprzedni rozdział"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Dekodery"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Wróć do preferencji"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Zachowanie"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Automatyczny tryb pełnoekranowy"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Wejdź do trybu pełnoekranowego, gdy lista odtwarzania zostanie zastąpiona z wyjątkiem trybu pływającego"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Pytaj o wznowienie ostatnich mediów"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Pływaj na wszystkich obszarach roboczych"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Ta opcja działa tylko na GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Po odtwarzaniu"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Nic nie rób"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Zamroź ostatnią klatkę"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Zamknij aplikację"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Głośność"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Wartość początkowa"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Ustaw własną głośność początkową zamiast ją przywracać"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Procent głośności"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Przewijanie"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Tryb"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Dokładny"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Szybki"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Jednostka"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Sekunda"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minuta"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Procent"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Wartość"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Przesunięcie w milisekundach"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Tylko natywne formaty audio"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Napisy"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Domyślna czcionka"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Sieć"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Klient"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Buforuj pobierając progresywnie"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Serwer"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Zdalne sterowanie odtwarzaczem"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Port połączeń przychodzących"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Uruchom aplikację webową w tle"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Wymaga GTK skompilowanego z backendem Broadway"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Port aplikacji webowej"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Preferuj adaptacyjne streamowanie"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Maksymalna jakość"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Dostrajanie"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Wygląd"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Ciemny motyw"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Renderuj cienie okna"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Wyłącz, aby zwiększyć wydajność w trybie okienkowym"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Ranking pluginów"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Zmień domyślne rangi pluginów GStreamera"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Użyj playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Wymaga restartu odtwarzacza"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Eksperyment"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "Użyj PipeWire do wyprowadzenia dźwięku"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Dekoder: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Wprowadź lub upuść URI tutaj"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Anuluj"
#: src/dialogs.js:158
msgid "Open"
msgstr "Otwórz"
#: src/dialogs.js:226
msgid "Title"
msgstr "Tytuł"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Ukończono"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Wznowić odtwarzanie?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Wersja GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Wersja Adwaity: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Wersja GStreamera: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Wersja GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Odtwarzacz multimedialny dla GNOME zasilany przez GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Rafał Dzięgiel <rafostar.github@gmail.com>"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Koniec o: %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Nieokreślony"
#: src/widget.js:243
msgid "Channels"
msgstr "Kanały"
#: src/widget.js:261
msgid "Disabled"
msgstr "Wyłączony"

459
po/pt.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-10-21 00:29\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Language: pt_PT\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: pt-PT\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Abrir Arquivos..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Abrir URI..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferências"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Atalhos"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Sobre o Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocidade"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Predefinido"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Geral"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostrar atalhos"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Mudar modo de ecrã"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Toque duplo duplo Clique duplo"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Sair do modo de ecrã completo"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Revelar OSD (apenas em tela cheia)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocar"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Sair"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Multimédia"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Abrir ficheiro"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Abrir URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lista de reprodução"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Próximo item"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Toque duplo (lado direito)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/pt_BR.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-10-11 10:33\n"
"Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: pt-BR\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Abrir Arquivos"
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Abrir URI"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Preferências"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Atalhos"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "Sobre o Clapper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Velocidade"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Normal"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Geral"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Mostrar atalhos"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Tela Cheia"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Toque duplo duplo Clique duplo"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Sair de tela cheia"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Revelar OSD (apenas em tela cheia)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Tocar"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Sair"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Mídia"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Abrir Arquivos"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Abrir o URL"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Lista de reprodução"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Próximo"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Toque duplo (lado direito)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Anterior"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Toque duplo (lado esquerdo)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Alternar modo de repetição"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Exportar arquivo"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Reprodução"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Alternar video"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Toque longo (Clique com o botão direito)"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Avançar para frente"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Deslizar para a Direita Scroll para Direita"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Volta video"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Deslizar para a esquerda Scroll para a Esquerda"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Aumentar o volume"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Deslizar para cima Scroll para cima"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Diminuir o volume"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Deslizar para baixo ► Rolar para baixo"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Ativar/Desativar Som"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Próximo Capítulo"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Capítulo Anterior"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Decodificadores"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Voltar para as preferências"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Comportamento"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Tela cheia automaticamente"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Insira em tela cheia quando a lista de reprodução for substituída, exceto o modo flutuante"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Pedir para retomar o video recente"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Flutuar em todas as áreas de trabalho"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Esta opção só funciona no GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "Pós reprodução"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Não fazer nada"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Congelar o último quadro"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Fechar aplicativo"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Volume"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Valor inicial personalizado"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Definir volume personalizado na inicialização ao invés de restaurá-lo"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Percentual do volume"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Buscando"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Modo"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Preciso"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Rápido"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Unidade"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Segundo"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Minuto"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Porcentagem"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Valor"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Audio"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "tempo de desvanecimento em milissegundos"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Apenas formatos de áudio nativos"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Legendas"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Fonte padrão"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Rede"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Cliente"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "buffering progressivo de download"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Servidor"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Controle o video remotamente "
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Porta de escuta"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Executar web app em segundo plano"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Requer GTK compilado com backend de Broadway"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Porta do aplicativo Web"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Preferir streaming adaptável"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Qualidade Máxima"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Ajustes"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Aparência"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Tema Escuro"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Renderizar sombras das janelas"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Desabilite para aumentar o desempenho em placas gráficas mais fracas."
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Classificação do plugin"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Altera os ranks padrão dos plugins do GStreamer"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Usar playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Requer reinicialização do Clapper"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Experimental"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "Usar PipeWire para saída de áudio"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Decodificador: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Digite ou solte o URI aqui"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Cancelar"
#: src/dialogs.js:158
msgid "Open"
msgstr "Abrir"
#: src/dialogs.js:226
msgid "Title"
msgstr "Título"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Completado"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Retomar a reprodução?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Versão do GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita versão:"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Versão do GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Versão do GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Um player de mídia GNOME desenvolvido por GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "KevenDoriaLinuxBR"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "termina em %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Indeterminado"
#: src/widget.js:243
msgid "Channels"
msgstr "Canais"
#: src/widget.js:261
msgid "Disabled"
msgstr "Desabilitado"

459
po/ro.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:24\n"
"Last-Translator: \n"
"Language-Team: Romanian\n"
"Language: ro_RO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ro\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/ru.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-17 08:56\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\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%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: ru\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "Открыть файлы ..."
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "Открыть URI..."
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "Параметры"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "Комбинации клавиш"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "О приложении"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr "Скорость"
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "Обычная"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr "Общие"
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr "Комбинации клавиш"
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr "Включить полноэкранный режим"
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr "Двойное нажатие | Двойной клик"
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "Выйти из полноэкранного режима"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "Показывать OSD (только в полноэкранном режиме)"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr "Нажатие"
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "Выйти из приложения"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "Медиа"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "Открыть файлы"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "Открыть URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "Плейлист"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "Следующий элемент"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr "Двойное нажатие (правая сторона)"
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "Предыдущий элемент"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr "Двойное нажатие (левая сторона)"
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr "Изменить режим повторения"
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr "Экспорт в файл"
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr "Воспроизведение"
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr "Управление воспроизведением"
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr "Длительное нажатие | Щелкните правой кнопкой мыши"
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "Перемотка вперед"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr "Проведите вправо | Прокрутите вправо"
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "Перемотка назад"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr "Проведите влево | Прокрутите влево"
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr "Увеличить громкость"
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr "Проведите вверх | Прокрутите вверх"
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr "Уменьшить громкость"
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr "Проведите вниз | Прокрутить вниз"
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr "Отключить звук"
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr "Следующая глава"
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr "Предыдущая глава"
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "Декодеры"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr "Вернуться к настройкам"
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "Поведение"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "Автоматический полноэкранный режим"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr "Переход в полноэкранный режим при замене списка воспроизведения, кроме плавающего режима"
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr "Спрашивать о возобновление недавние медиа"
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr "Показывать «плавающий режим» на всех рабочих столах"
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "Эта опция работает только в GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr "После воспроизведения"
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr "Ничего не делать"
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr "Заморозить последний кадр"
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr "Закрыть приложение"
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "Громкость"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "Пользовательское начальное значение"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr "Установите настраиваемую громкость при запуске вместо ее восстановления"
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "Процент громкости"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr "Перемотка"
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "Режим"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "Точный"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "Быстрый"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "Ед. изм"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "Секунды"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "Минуты"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "Проценты"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "Значение"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "Аудио"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr "Смещение в миллисекундах"
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr "Только нативные аудиоформаты"
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "Субтитры"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "Шрифт по умолчанию"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "Сеть"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "Клиент"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr "Прогрессивная буферизация загрузки"
#: ui/preferences-window.ui:169
msgid "Server"
msgstr "Сервер"
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "Удаленное управление плеером"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "Порт прослушивания"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr "Запустить веб-приложение в фоновом режиме"
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr "Требуется GTK, скомпилированный с бэкэндом Broadway"
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr "Порт веб-приложения"
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr "Предпочитайте адаптивную потоковую передачу"
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr "Максимальное качество"
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "Твики"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "Внешний вид"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "Тёмная тема"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "Рендеринг оконных теней"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr "Отключить, чтобы повысить производительность в оконном режиме"
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr "Рейтинг плагинов"
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr "Изменить ранги плагинов GStreamer по умолчанию"
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "Использовать playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "Требуется перезапуск плеера"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "Экспериментально"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "Использовать PipeWire для вывода звука"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "Декодер: %s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr "Введите URI"
#: src/dialogs.js:157
msgid "Cancel"
msgstr "Отмена"
#: src/dialogs.js:158
msgid "Open"
msgstr "Открыть"
#: src/dialogs.js:226
msgid "Title"
msgstr "Заголовок"
#: src/dialogs.js:227
msgid "Completed"
msgstr "Завершенный"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "Возобновить воспроизведение?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "Версия GTK: %s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Версия Adwaita: %s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "Версия GStreamer: %s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "Версия GJS: %s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr "Медиаплеер для GNOME на базе GStreamer"
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr "Игорь Дятлов"
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr "Окончание: %s"
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr "Неопределенный"
#: src/widget.js:243
msgid "Channels"
msgstr "Каналы"
#: src/widget.js:261
msgid "Disabled"
msgstr "Отключено"

459
po/sr.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:25\n"
"Last-Translator: \n"
"Language-Team: Serbian (Cyrillic)\n"
"Language: sr_SP\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: sr\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/sv.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:24\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: sv-SE\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/tr.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:24\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\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-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: tr\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/uk.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:24\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\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%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: uk\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/vi.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:24\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Language: vi_VN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: vi\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/zh_CN.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-24 14:11\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: zh-CN\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr "打开文件…"
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr "打开 URI…"
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr "选项"
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr "快捷键"
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr "关于 Claper"
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr "一般"
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr "离开全屏"
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr "显示 OSD仅全屏"
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr "退出"
#: ui/help-overlay.ui:47
msgid "Media"
msgstr "媒体"
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr "打开文件"
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr "打开 URI"
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr "播放列表"
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr "下一项"
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr "上一项"
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr "快进"
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr "快退"
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr "解码器"
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr "行为"
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr "自动全屏"
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr "此选项仅适用于 GNOME"
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr "音量"
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr "自定义初始值"
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr "音量百分比"
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr "模式"
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr "精确"
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr "快速"
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr "单位"
#: ui/preferences-window.ui:98
msgid "Second"
msgstr "秒钟"
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr "分钟"
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr "百分比"
#: ui/preferences-window.ui:108
msgid "Value"
msgstr "值"
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr "音频"
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr "字幕"
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr "默认字体"
#: ui/preferences-window.ui:154
msgid "Network"
msgstr "网络"
#: ui/preferences-window.ui:158
msgid "Client"
msgstr "客户端"
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr "远程控制播放器"
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr "监听端口"
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr "微调"
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr "界面"
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr "暗色主题"
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr "渲染窗口阴影"
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr "使用 playbin3"
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr "需要重启播放器"
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr "实验性功能"
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr "使用 PipeWire 输出音频"
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr "解码器:%s"
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr "取消"
#: src/dialogs.js:158
msgid "Open"
msgstr "打开"
#: src/dialogs.js:226
msgid "Title"
msgstr "标题"
#: src/dialogs.js:227
msgid "Completed"
msgstr "已播放"
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr "继续播放?"
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr "GTK 版本:%s"
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr "Adwaita 版本:%s"
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr "GStreamer 版本:%s"
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr "GJS 版本:%s"
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr "声道"
#: src/widget.js:261
msgid "Disabled"
msgstr ""

459
po/zh_TW.po Normal file
View File

@@ -0,0 +1,459 @@
msgid ""
msgstr ""
"Project-Id-Version: clapper\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-14 16:35+0200\n"
"PO-Revision-Date: 2021-09-14 15:24\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Crowdin-Project: clapper\n"
"X-Crowdin-Project-ID: 473374\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/po/com.github.rafostar.Clapper.pot\n"
"X-Crowdin-File-ID: 31\n"
#: ui/clapper.ui:6
msgid "Open Files..."
msgstr ""
#: ui/clapper.ui:10
msgid "Open URI..."
msgstr ""
#: ui/clapper.ui:16 ui/preferences-window.ui:4
msgid "Preferences"
msgstr ""
#: ui/clapper.ui:20
msgid "Shortcuts"
msgstr ""
#: ui/clapper.ui:26
msgid "About Clapper"
msgstr ""
#: ui/elapsed-time-button.ui:27
msgid "Speed"
msgstr ""
#: ui/elapsed-time-button.ui:41 ui/preferences-window.ui:83
#: ui/preferences-window.ui:215
msgid "Normal"
msgstr ""
#: ui/help-overlay.ui:10 ui/preferences-window.ui:12
msgid "General"
msgstr ""
#: ui/help-overlay.ui:13
msgid "Show shortcuts"
msgstr ""
#: ui/help-overlay.ui:19
msgid "Toggle fullscreen"
msgstr ""
#: ui/help-overlay.ui:20
msgid "Double tap | Double click"
msgstr ""
#: ui/help-overlay.ui:26
msgid "Leave fullscreen"
msgstr ""
#: ui/help-overlay.ui:32
msgid "Reveal OSD (fullscreen only)"
msgstr ""
#: ui/help-overlay.ui:33
msgid "Tap"
msgstr ""
#: ui/help-overlay.ui:39
msgid "Quit"
msgstr ""
#: ui/help-overlay.ui:47
msgid "Media"
msgstr ""
#: ui/help-overlay.ui:50
msgid "Open files"
msgstr ""
#: ui/help-overlay.ui:56 src/dialogs.js:137
msgid "Open URI"
msgstr ""
#: ui/help-overlay.ui:64
msgid "Playlist"
msgstr ""
#: ui/help-overlay.ui:67
msgid "Next item"
msgstr ""
#: ui/help-overlay.ui:68
msgid "Double tap (right side)"
msgstr ""
#: ui/help-overlay.ui:74
msgid "Previous item"
msgstr ""
#: ui/help-overlay.ui:75
msgid "Double tap (left side)"
msgstr ""
#: ui/help-overlay.ui:81
msgid "Change repeat mode"
msgstr ""
#: ui/help-overlay.ui:87
msgid "Export to file"
msgstr ""
#: ui/help-overlay.ui:95 ui/preferences-window.ui:119
msgid "Playback"
msgstr ""
#: ui/help-overlay.ui:98
msgid "Toggle play"
msgstr ""
#: ui/help-overlay.ui:99
msgid "Long press | Right click"
msgstr ""
#: ui/help-overlay.ui:105
msgid "Seek forward"
msgstr ""
#: ui/help-overlay.ui:106
msgid "Swipe right | Scroll right"
msgstr ""
#: ui/help-overlay.ui:112
msgid "Seek backward"
msgstr ""
#: ui/help-overlay.ui:113
msgid "Swipe left | Scroll left"
msgstr ""
#: ui/help-overlay.ui:119
msgid "Volume up"
msgstr ""
#: ui/help-overlay.ui:120
msgid "Swipe up | Scroll up"
msgstr ""
#: ui/help-overlay.ui:126
msgid "Volume down"
msgstr ""
#: ui/help-overlay.ui:127
msgid "Swipe down | Scroll down"
msgstr ""
#: ui/help-overlay.ui:133
msgid "Toggle mute"
msgstr ""
#: ui/help-overlay.ui:139
msgid "Next chapter"
msgstr ""
#: ui/help-overlay.ui:145
msgid "Previous chapter"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:11
msgid "Decoders"
msgstr ""
#: ui/preferences-plugin-ranking-subpage.ui:18
msgid "Return to the preferences"
msgstr ""
#: ui/preferences-window.ui:16
msgid "Behavior"
msgstr ""
#: ui/preferences-window.ui:19
msgid "Auto fullscreen"
msgstr ""
#: ui/preferences-window.ui:20
msgid "Enter fullscreen when playlist is replaced except floating mode"
msgstr ""
#: ui/preferences-window.ui:26
msgid "Ask to resume recent media"
msgstr ""
#: ui/preferences-window.ui:32
msgid "Float on all workspaces"
msgstr ""
#: ui/preferences-window.ui:33
msgid "This option only works on GNOME"
msgstr ""
#: ui/preferences-window.ui:39
msgid "After playback"
msgstr ""
#: ui/preferences-window.ui:44
msgid "Do nothing"
msgstr ""
#: ui/preferences-window.ui:45
msgid "Freeze last frame"
msgstr ""
#: ui/preferences-window.ui:46
msgid "Close the app"
msgstr ""
#: ui/preferences-window.ui:56
msgid "Volume"
msgstr ""
#: ui/preferences-window.ui:59
msgid "Custom initial value"
msgstr ""
#: ui/preferences-window.ui:60
msgid "Set custom volume at startup instead of restoring it"
msgstr ""
#: ui/preferences-window.ui:64
msgid "Volume percentage"
msgstr ""
#: ui/preferences-window.ui:75
msgid "Seeking"
msgstr ""
#: ui/preferences-window.ui:78
msgid "Mode"
msgstr ""
#: ui/preferences-window.ui:84
msgid "Accurate"
msgstr ""
#: ui/preferences-window.ui:85
msgid "Fast"
msgstr ""
#: ui/preferences-window.ui:93
msgid "Unit"
msgstr ""
#: ui/preferences-window.ui:98
msgid "Second"
msgstr ""
#: ui/preferences-window.ui:99
msgid "Minute"
msgstr ""
#: ui/preferences-window.ui:100
msgid "Percentage"
msgstr ""
#: ui/preferences-window.ui:108
msgid "Value"
msgstr ""
#: ui/preferences-window.ui:123
msgid "Audio"
msgstr ""
#: ui/preferences-window.ui:126
msgid "Offset in milliseconds"
msgstr ""
#: ui/preferences-window.ui:133
msgid "Only native audio formats"
msgstr ""
#: ui/preferences-window.ui:141
msgid "Subtitles"
msgstr ""
#: ui/preferences-window.ui:144
msgid "Default font"
msgstr ""
#: ui/preferences-window.ui:154
msgid "Network"
msgstr ""
#: ui/preferences-window.ui:158
msgid "Client"
msgstr ""
#: ui/preferences-window.ui:161
msgid "Progressive download buffering"
msgstr ""
#: ui/preferences-window.ui:169
msgid "Server"
msgstr ""
#: ui/preferences-window.ui:172
msgid "Control player remotely"
msgstr ""
#: ui/preferences-window.ui:176
msgid "Listening port"
msgstr ""
#: ui/preferences-window.ui:183
msgid "Run web application in background"
msgstr ""
#: ui/preferences-window.ui:184
msgid "Requires GTK compiled with Broadway backend"
msgstr ""
#: ui/preferences-window.ui:190
msgid "Web application port"
msgstr ""
#: ui/preferences-window.ui:204
msgid "Prefer adaptive streaming"
msgstr ""
#: ui/preferences-window.ui:210
msgid "Max quality"
msgstr ""
#: ui/preferences-window.ui:228
msgid "Tweaks"
msgstr ""
#: ui/preferences-window.ui:232
msgid "Appearance"
msgstr ""
#: ui/preferences-window.ui:235
msgid "Dark theme"
msgstr ""
#: ui/preferences-window.ui:241
msgid "Render window shadows"
msgstr ""
#: ui/preferences-window.ui:242
msgid "Disable to increase performance when windowed"
msgstr ""
#: ui/preferences-window.ui:253
msgid "Plugin ranking"
msgstr ""
#: ui/preferences-window.ui:254
msgid "Alter default ranks of GStreamer plugins"
msgstr ""
#: ui/preferences-window.ui:259
msgid "Use playbin3"
msgstr ""
#: ui/preferences-window.ui:260 ui/preferences-window.ui:269
msgid "Requires player restart"
msgstr ""
#: ui/preferences-window.ui:262 ui/preferences-window.ui:271
msgid "Experimental"
msgstr ""
#: ui/preferences-window.ui:268
msgid "Use PipeWire for audio output"
msgstr ""
#: src/buttons.js:201
#, javascript-format
msgid "Decoder: %s"
msgstr ""
#: src/dialogs.js:152
msgid "Enter or drop URI here"
msgstr ""
#: src/dialogs.js:157
msgid "Cancel"
msgstr ""
#: src/dialogs.js:158
msgid "Open"
msgstr ""
#: src/dialogs.js:226
msgid "Title"
msgstr ""
#: src/dialogs.js:227
msgid "Completed"
msgstr ""
#: src/dialogs.js:235
msgid "Resume playback?"
msgstr ""
#: src/dialogs.js:289
#, javascript-format
msgid "GTK version: %s"
msgstr ""
#: src/dialogs.js:290
#, javascript-format
msgid "Adwaita version: %s"
msgstr ""
#: src/dialogs.js:291
#, javascript-format
msgid "GStreamer version: %s"
msgstr ""
#: src/dialogs.js:292
#, javascript-format
msgid "GJS version: %s"
msgstr ""
#: src/dialogs.js:300
msgid "A GNOME media player powered by GStreamer"
msgstr ""
#. TRANSLATORS: Put your name(s) here for credits or leave untranslated
#: src/dialogs.js:305
msgid "translator-credits"
msgstr ""
#: src/revealers.js:170
#, javascript-format
msgid "Ends at: %s"
msgstr ""
#: src/widget.js:227 src/widget.js:236 src/widget.js:242 src/widget.js:248
msgid "Undetermined"
msgstr ""
#: src/widget.js:243
msgid "Channels"
msgstr ""
#: src/widget.js:261
msgid "Disabled"
msgstr ""

View File

@@ -1,5 +1,6 @@
const { Gtk } = imports.gi;
const Dialogs = imports.src.dialogs;
const Prefs = imports.src.prefs;
const Misc = imports.src.misc;
var actions = {
@@ -17,11 +18,13 @@ var actions = {
prev_track: ['<Ctrl>Left'],
volume_up: ['Up'],
volume_down: ['Down'],
mute: ['<Ctrl>M', 'M'],
toggle_play: ['space'],
change_repeat: ['<Ctrl>r'],
change_repeat: ['<Ctrl>R'],
reveal_controls: ['Return'],
toggle_fullscreen: ['F11', 'f'],
quit: ['<Ctrl>q', 'q'],
toggle_fullscreen: ['F11', 'F'],
leave_fullscreen: ['Escape'],
quit: ['<Ctrl>Q', 'Q'],
};
function handleAction(action, window)
@@ -41,14 +44,11 @@ function handleAction(action, window)
new Dialogs.UriDialog(window);
break;
case 'prefs':
new Dialogs.PrefsDialog(window);
new Prefs.PrefsWindow(window);
break;
case 'shortcuts':
if(!window.get_help_overlay()) {
const clapperPath = Misc.getClapperPath();
const helpBuilder = Gtk.Builder.new_from_file(
`${clapperPath}/ui/help-overlay.ui`
);
const helpBuilder = Misc.getBuilderForName('help-overlay.ui');
window.set_help_overlay(helpBuilder.get_object('help_overlay'));
}
clapperWidget.activate_action('win.show-help-overlay', null);
@@ -75,6 +75,9 @@ function handleAction(action, window)
case 'volume_down':
player.adjust_volume(bool);
break;
case 'mute':
player.mute ^= true;
break;
case 'next_track':
player.playlistWidget.nextTrack();
break;
@@ -85,6 +88,9 @@ function handleAction(action, window)
if(clapperWidget.isFullscreenMode)
clapperWidget.revealControls();
break;
case 'leave_fullscreen':
if(!clapperWidget.isFullscreenMode)
break;
case 'toggle_fullscreen':
clapperWidget.toggleFullscreen();
break;

View File

@@ -1,11 +1,13 @@
const { Gio, GObject, Gtk } = imports.gi;
const { Gio, GObject, Gdk, Gtk } = imports.gi;
const { AppBase } = imports.src.appBase;
const { Widget } = imports.src.widget;
const Debug = imports.src.debug;
const { debug } = Debug;
var App = GObject.registerClass(
var App = GObject.registerClass({
GTypeName: 'ClapperApp',
},
class ClapperApp extends AppBase
{
_init()
@@ -46,6 +48,8 @@ class ClapperApp extends AppBase
window.disconnect(this.mapSignal);
this.mapSignal = null;
debug('window mapped');
window.child._onWindowMap(window);
}
});

View File

@@ -7,7 +7,9 @@ const Actions = imports.src.actions;
const { debug } = Debug;
const { settings } = Misc;
var AppBase = GObject.registerClass(
var AppBase = GObject.registerClass({
GTypeName: 'ClapperAppBase',
},
class ClapperAppBase extends Gtk.Application
{
_init()
@@ -29,8 +31,9 @@ class ClapperAppBase extends Gtk.Application
title: Misc.appName,
});
if(Gtk.MINOR_VERSION > 0 || Gtk.MICRO_VERSION > 1)
window.add_css_class('gtk402');
/* FIXME: AFAIK there is no way to detect theme rounded corners.
* Having 2/4 corners rounded in floating mode is not good. */
window.add_css_class('adwrounded');
if(!settings.get_boolean('render-shadows'))
window.add_css_class('gpufriendly');
@@ -93,66 +96,6 @@ class ClapperAppBase extends Gtk.Application
if(accels)
this.set_accels_for_action(`app.${name}`, accels);
}
const gtkSettings = Gtk.Settings.get_default();
settings.bind(
'dark-theme', gtkSettings,
'gtk-application-prefer-dark-theme',
Gio.SettingsBindFlags.GET
);
this._onThemeChanged(gtkSettings);
this._onIconThemeChanged(gtkSettings);
gtkSettings.connect('notify::gtk-theme-name', this._onThemeChanged.bind(this));
gtkSettings.connect('notify::gtk-icon-theme-name', this._onIconThemeChanged.bind(this));
this.doneFirstActivate = true;
}
_onThemeChanged(gtkSettings)
{
const theme = gtkSettings.gtk_theme_name;
const window = this.active_window;
const hasAdwThemeDark = window.has_css_class('adwthemedark');
debug(`user selected theme: ${theme}`);
/* FIXME: AFAIK there is no way to detect theme rounded corners.
Having 2/4 corners rounded in floating mode is not good. */
if(!window.has_css_class('adwrounded'))
window.add_css_class('adwrounded');
if(theme.startsWith('Adwaita') || theme.startsWith('Default')) {
const isDarkTheme = settings.get_boolean('dark-theme');
if(isDarkTheme && !hasAdwThemeDark)
window.add_css_class('adwthemedark');
else if(!isDarkTheme && hasAdwThemeDark)
window.remove_css_class('adwthemedark');
}
else if(hasAdwThemeDark)
window.remove_css_class('adwthemedark');
if(!theme.endsWith('-dark'))
return;
/* We need to request a default theme with optional dark variant
to make the "gtk_application_prefer_dark_theme" setting work */
const parsedTheme = theme.substring(0, theme.lastIndexOf('-'));
gtkSettings.gtk_theme_name = parsedTheme;
debug(`set theme: ${parsedTheme}`);
}
_onIconThemeChanged(gtkSettings)
{
const iconTheme = gtkSettings.gtk_icon_theme_name;
const window = this.active_window;
const hasAdwIcons = window.has_css_class('adwicons');
if(iconTheme === 'Adwaita' || iconTheme === 'Default') {
if(!hasAdwIcons)
window.add_css_class('adwicons');
}
else if(hasAdwIcons)
window.remove_css_class('adwicons');
}
});

View File

@@ -3,7 +3,9 @@ const { AppBase } = imports.src.appBase;
const { HeaderBarRemote } = imports.src.headerbarRemote;
const { WidgetRemote } = imports.src.widgetRemote;
var AppRemote = GObject.registerClass(
var AppRemote = GObject.registerClass({
GTypeName: 'ClapperAppRemote',
},
class ClapperAppRemote extends AppBase
{
vfunc_startup()

View File

@@ -1,12 +1,9 @@
const { GObject, Gtk } = imports.gi;
const Misc = imports.src.misc;
/* Negative values from CSS */
const PopoverOffset = {
DEFAULT: -3,
TVMODE: -5,
};
var CustomButton = GObject.registerClass(
var CustomButton = GObject.registerClass({
GTypeName: 'ClapperCustomButton',
},
class ClapperCustomButton extends Gtk.Button
{
_init(opts)
@@ -22,33 +19,22 @@ class ClapperCustomButton extends Gtk.Button
super._init(opts);
this.isFullscreen = false;
this.add_css_class('flat');
}
setFullscreenMode(isFullscreen)
{
if(this.isFullscreen === isFullscreen)
return;
/* Redraw icon after style class change */
if(this.icon_name)
this.set_icon_name(this.icon_name);
this.isFullscreen = isFullscreen;
this.add_css_class('clappercontrolsbutton');
}
vfunc_clicked()
{
if(!this.isFullscreen)
return;
const clapperWidget = this.get_ancestor(Gtk.Grid);
clapperWidget.revealControls();
if(clapperWidget.isFullscreenMode)
clapperWidget.revealControls();
}
});
var IconToggleButton = GObject.registerClass(
var IconToggleButton = GObject.registerClass({
GTypeName: 'ClapperIconToggleButton',
},
class ClapperIconToggleButton extends CustomButton
{
_init(primaryIcon, secondaryIcon)
@@ -72,79 +58,73 @@ class ClapperIconToggleButton extends CustomButton
}
});
var PopoverButtonBase = GObject.registerClass(
class ClapperPopoverButtonBase extends Gtk.ToggleButton
var PopoverSeparator = GObject.registerClass({
GTypeName: 'ClapperPopoverSeparator',
Template: Misc.getResourceUri('ui/popover-separator.ui'),
InternalChildren: ['middle_label'],
Properties: {
'label': GObject.ParamSpec.string(
'label',
'Middle label',
'Text to set in the middle',
GObject.ParamFlags.WRITABLE,
null
),
}
},
class ClapperPopoverSeparator extends Gtk.Box
{
_init()
_init(opts)
{
super._init({
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER,
can_focus: false,
});
super._init();
this.isFullscreen = false;
this.add_css_class('flat');
if(!opts.label)
this.visible = false;
this.popover = new Gtk.Popover({
position: Gtk.PositionType.TOP,
});
this.popoverBox = new Gtk.Box({
orientation: Gtk.Orientation.VERTICAL,
});
this.popover.set_child(this.popoverBox);
this.popover.set_offset(0, PopoverOffset.DEFAULT);
if(this.isFullscreen)
this.popover.add_css_class('osd');
this.popover.connect('closed', this._onClosed.bind(this));
this.popover.set_parent(this);
this.label = opts.label;
}
setFullscreenMode(isFullscreen)
set label(value)
{
if(this.isFullscreen === isFullscreen)
return;
this._middle_label.label = value || "";
/* Redraw icon after style class change */
if(this.icon_name)
this.set_icon_name(this.icon_name);
if(value)
this.visible = true;
}
});
this.isFullscreen = isFullscreen;
var PopoverButtonBase = GObject.registerClass({
GTypeName: 'ClapperPopoverButtonBase',
},
class ClapperPopoverButtonBase extends Gtk.MenuButton
{
_init(opts = {})
{
super._init(opts);
/* TODO: Fullscreen non-tv mode */
const offset = (isFullscreen)
? PopoverOffset.TVMODE
: PopoverOffset.DEFAULT;
if(opts.icon_name)
this.icon_name = opts.icon_name;
else if(opts.label)
this.label = opts.label;
this.popover.set_offset(0, offset);
this.toggleButton = this.get_first_child();
this.toggleButton.add_css_class('clappercontrolsbutton');
const cssClass = 'osd';
if(isFullscreen === this.popover.has_css_class(cssClass))
return;
const action = (isFullscreen) ? 'add' : 'remove';
this.popover[action + '_css_class'](cssClass);
this.set_create_popup_func(this._onPopoverOpened);
this.popover.connect('closed', this._onPopoverClosed.bind(this));
}
vfunc_toggled()
_onPopoverOpened(self)
{
if(!this.active)
return;
const clapperWidget = self.get_ancestor(Gtk.Grid);
const clapperWidget = this.get_ancestor(Gtk.Grid);
if(this.isFullscreen) {
if(clapperWidget.isFullscreenMode) {
clapperWidget.revealControls();
clapperWidget.isPopoverOpen = true;
}
this.popover.popup();
}
_onClosed()
_onPopoverClosed(popover)
{
const clapperWidget = this.get_ancestor(Gtk.Grid);
@@ -153,94 +133,128 @@ class ClapperPopoverButtonBase extends Gtk.ToggleButton
clapperWidget.revealControls();
clapperWidget.isPopoverOpen = false;
this.active = false;
}
_onCloseRequest()
{
this.popover.unparent();
}
});
var IconPopoverButton = GObject.registerClass(
class ClapperIconPopoverButton extends PopoverButtonBase
var ElapsedTimeButton = GObject.registerClass({
GTypeName: 'ClapperElapsedTimeButton',
Template: Misc.getResourceUri('ui/elapsed-time-button.ui'),
Children: ['scrolledWindow', 'speedScale'],
},
class ClapperElapsedTimeButton extends PopoverButtonBase
{
_init(icon)
_init(opts)
{
super._init();
super._init(opts);
this.icon_name = icon;
}
});
this.setInitialState();
this.popover.add_css_class('elapsedpopover');
var LabelPopoverButton = GObject.registerClass(
class ClapperLabelPopoverButton extends PopoverButtonBase
{
_init(text)
{
super._init();
this.customLabel = new Gtk.Label({
label: text,
single_line_mode: true,
});
this.customLabel.add_css_class('labelbuttonlabel');
this.set_child(this.customLabel);
this.scrolledWindow.max_content_height = 150;
}
set_label(text)
set label(value)
{
this.customLabel.set_text(text);
}
});
var ElapsedPopoverButton = GObject.registerClass(
class ClapperElapsedPopoverButton extends LabelPopoverButton
{
_init(text)
{
super._init(text);
this.popoverBox.add_css_class('elapsedpopoverbox');
this.scrolledWindow = new Gtk.ScrolledWindow({
max_content_height: 150,
propagate_natural_height: true,
});
this.popoverBox.append(this.scrolledWindow);
this.toggleButton.label = value;
}
setFullscreenMode(isFullscreen)
get label()
{
super.setFullscreenMode(isFullscreen);
return this.toggleButton.label;
}
this.scrolledWindow.max_content_height = (isFullscreen)
setInitialState()
{
this.label = '00:00/00:00';
}
setFullscreenMode(isFullscreen, isMobileMonitor)
{
this.scrolledWindow.max_content_height = (isFullscreen && !isMobileMonitor)
? 190 : 150;
}
});
addSeparator(text)
var TrackSelectButton = GObject.registerClass({
GTypeName: 'ClapperTrackSelectButton',
Template: Misc.getResourceUri('ui/track-select-button.ui'),
Children: ['popoverBox'],
InternalChildren: ['scrolled_window', 'decoder_separator'],
},
class ClapperTrackSelectButton extends PopoverButtonBase
{
_init(opts)
{
const box = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
hexpand: true,
});
const label = new Gtk.Label({
label: text,
halign: Gtk.Align.CENTER,
});
const leftSeparator = new Gtk.Separator({
orientation: Gtk.Orientation.HORIZONTAL,
hexpand: true,
valign: Gtk.Align.CENTER,
});
const rightSeparator = new Gtk.Separator({
orientation: Gtk.Orientation.HORIZONTAL,
hexpand: true,
valign: Gtk.Align.CENTER,
});
box.append(leftSeparator);
box.append(label);
box.append(rightSeparator);
this.popoverBox.append(box);
super._init(opts);
this._scrolled_window.max_content_height = 220;
}
setFullscreenMode(isFullscreen, isMobileMonitor)
{
this._scrolled_window.max_content_height = (isFullscreen && !isMobileMonitor)
? 290 : 220;
}
setDecoder(decoder)
{
this._decoder_separator.label = _('Decoder: %s').format(decoder);
}
});
var VolumeButton = GObject.registerClass({
GTypeName: 'ClapperVolumeButton',
Template: Misc.getResourceUri('ui/volume-button.ui'),
Children: ['volumeScale'],
Properties: {
'muted': GObject.ParamSpec.boolean(
'muted',
'Set muted',
'Mark scale as muted',
GObject.ParamFlags.WRITABLE,
false
),
}
},
class ClapperVolumeButton extends PopoverButtonBase
{
_init(opts)
{
super._init(opts);
this._isMuted = false;
}
set muted(isMuted)
{
this._isMuted = isMuted;
this._onVolumeScaleValueChanged(this.volumeScale);
}
_onVolumeScaleValueChanged(scale)
{
const volume = scale.get_value();
const cssClass = 'overamp';
const hasOveramp = (scale.has_css_class(cssClass));
if(volume > 1) {
if(!hasOveramp)
scale.add_css_class(cssClass);
}
else {
if(hasOveramp)
scale.remove_css_class(cssClass);
}
const icon = (volume <= 0 || this._isMuted)
? 'muted'
: (volume <= 0.3)
? 'low'
: (volume <= 0.7)
? 'medium'
: (volume <= 1)
? 'high'
: 'overamplified';
this.icon_name = `audio-volume-${icon}-symbolic`;
}
});

326
src/controls.js vendored
View File

@@ -9,7 +9,9 @@ const { settings } = Misc;
const INITIAL_ELAPSED = '00:00/00:00';
var Controls = GObject.registerClass(
var Controls = GObject.registerClass({
GTypeName: 'ClapperControls',
},
class ClapperControls extends Gtk.Box
{
_init()
@@ -25,19 +27,31 @@ class ClapperControls extends Gtk.Box
this.currentPosition = 0;
this.isPositionDragging = false;
this.isMobile = false;
this.isFullscreen = false;
this.showHours = false;
this.durationFormatted = '00:00';
this.buttonsArr = [];
this.revealersArr = [];
this.chapters = null;
this.chapterShowId = null;
this.chapterHideId = null;
this._addTogglePlayButton();
this._addElapsedButton();
this.togglePlayButton = new Buttons.IconToggleButton(
'play-symbolic',
'pause-symbolic'
);
this.togglePlayButton.connect(
'clicked', this._onTogglePlayClicked.bind(this)
);
this.append(this.togglePlayButton);
const elapsedRevealer = new Revealers.ButtonsRevealer('SLIDE_RIGHT');
this.elapsedButton = new Buttons.ElapsedTimeButton();
elapsedRevealer.append(this.elapsedButton);
elapsedRevealer.reveal_child = true;
this.append(elapsedRevealer);
this.revealersArr.push(elapsedRevealer);
this._addPositionScale();
const revealTracksButton = new Buttons.IconToggleButton(
@@ -45,30 +59,29 @@ class ClapperControls extends Gtk.Box
'go-next-symbolic'
);
revealTracksButton.add_css_class('narrowbutton');
this.buttonsArr.push(revealTracksButton);
const tracksRevealer = new Revealers.ButtonsRevealer(
'SLIDE_LEFT', revealTracksButton
);
this.visualizationsButton = this.addIconPopoverButton(
'display-projector-symbolic',
tracksRevealer
);
this.visualizationsButton.set_visible(false);
this.videoTracksButton = this.addIconPopoverButton(
'emblem-videos-symbolic',
tracksRevealer
);
this.videoTracksButton.set_visible(false);
this.audioTracksButton = this.addIconPopoverButton(
'emblem-music-symbolic',
tracksRevealer
);
this.audioTracksButton.set_visible(false);
this.subtitleTracksButton = this.addIconPopoverButton(
'media-view-subtitles-symbolic',
tracksRevealer
);
this.subtitleTracksButton.set_visible(false);
this.visualizationsButton = new Buttons.TrackSelectButton({
icon_name: 'display-projector-symbolic',
visible: false,
});
tracksRevealer.append(this.visualizationsButton);
this.videoTracksButton = new Buttons.TrackSelectButton({
icon_name: 'emblem-videos-symbolic',
visible: false,
});
tracksRevealer.append(this.videoTracksButton);
this.audioTracksButton = new Buttons.TrackSelectButton({
icon_name: 'emblem-music-symbolic',
visible: false,
});
tracksRevealer.append(this.audioTracksButton);
this.subtitleTracksButton = new Buttons.TrackSelectButton({
icon_name: 'media-view-subtitles-symbolic',
visible: false,
});
tracksRevealer.append(this.subtitleTracksButton);
this.revealTracksRevealer = new Revealers.ButtonsRevealer('SLIDE_LEFT');
this.revealTracksRevealer.append(revealTracksButton);
@@ -79,33 +92,38 @@ class ClapperControls extends Gtk.Box
this.revealersArr.push(tracksRevealer);
this.append(tracksRevealer);
this._addVolumeButton();
this.unfullscreenButton = this.addButton(
'view-restore-symbolic'
);
this.volumeButton = new Buttons.VolumeButton();
this.append(this.volumeButton);
this.unfullscreenButton = new Buttons.CustomButton({
icon_name: 'view-restore-symbolic',
});
this.unfullscreenButton.connect('clicked', this._onUnfullscreenClicked.bind(this));
this.unfullscreenButton.set_visible(false);
this.append(this.unfullscreenButton);
this.add_css_class('playercontrols');
this.add_css_class('clappercontrols');
this.realizeSignal = this.connect('realize', this._onRealize.bind(this));
}
setFullscreenMode(isFullscreen)
setFullscreenMode(isFullscreen, isMobileMonitor)
{
/* Allow recheck on next resize */
this.isMobile = null;
for(let button of this.buttonsArr)
button.setFullscreenMode(isFullscreen);
this.elapsedButton.setFullscreenMode(isFullscreen, isMobileMonitor);
this.visualizationsButton.setFullscreenMode(isFullscreen, isMobileMonitor);
this.videoTracksButton.setFullscreenMode(isFullscreen, isMobileMonitor);
this.audioTracksButton.setFullscreenMode(isFullscreen, isMobileMonitor);
this.subtitleTracksButton.setFullscreenMode(isFullscreen, isMobileMonitor);
this.unfullscreenButton.visible = isFullscreen;
this.isFullscreen = isFullscreen;
}
setLiveMode(isLive, isSeekable)
{
if(isLive)
this.elapsedButton.set_label('LIVE');
this.elapsedButton.label = 'LIVE';
this.positionScale.visible = isSeekable;
}
@@ -116,7 +134,7 @@ class ClapperControls extends Gtk.Box
this.positionScale.set_value(0);
this.positionScale.visible = false;
this.elapsedButton.set_label(INITIAL_ELAPSED);
this.elapsedButton.setInitialState();
this.togglePlayButton.setPrimaryIcon();
for(let type of ['video', 'audio', 'subtitle'])
@@ -132,46 +150,7 @@ class ClapperControls extends Gtk.Box
const elapsed = Misc.getFormattedTime(value, this.showHours)
+ '/' + this.durationFormatted;
this.elapsedButton.set_label(elapsed);
}
addButton(buttonIcon, revealer)
{
const button = (buttonIcon instanceof Gtk.Button)
? buttonIcon
: new Buttons.CustomButton({ icon_name: buttonIcon });
if(!revealer)
this.append(button);
else
revealer.append(button);
this.buttonsArr.push(button);
return button;
}
addIconPopoverButton(iconName, revealer)
{
const button = new Buttons.IconPopoverButton(iconName);
return this.addButton(button, revealer);
}
addLabelPopoverButton(text, revealer)
{
text = text || '';
const button = new Buttons.LabelPopoverButton(text);
return this.addButton(button, revealer);
}
addElapsedPopoverButton(text, revealer)
{
text = text || '';
const button = new Buttons.ElapsedPopoverButton(text);
return this.addButton(button, revealer);
this.elapsedButton.label = elapsed;
}
addCheckButtons(box, array, activeId)
@@ -182,8 +161,10 @@ class ClapperControls extends Gtk.Box
while(child || i < array.length) {
if(i >= array.length) {
child.hide();
debug(`hiding unused ${child.type} checkButton nr: ${i}`);
if(child.visible) {
debug(`hiding unused ${child.type} checkButton nr: ${i}`);
child.visible = false;
}
i++;
child = child.get_next_sibling();
continue;
@@ -214,6 +195,7 @@ class ClapperControls extends Gtk.Box
debug(`checkButton type: ${checkButton.type}`);
checkButton.activeId = el.activeId;
debug(`checkButton id: ${checkButton.activeId}`);
checkButton.visible = true;
if(checkButton.activeId === activeId) {
checkButton.set_active(true);
@@ -232,20 +214,6 @@ class ClapperControls extends Gtk.Box
{
const clapperWidget = this.get_ancestor(Gtk.Grid);
/* Reenabling audio is slow (as expected),
* so it is better to toggle mute instead */
if(checkButton.type === 'audio') {
if(checkButton.activeId < 0)
return clapperWidget.player.set_mute(true);
if(clapperWidget.player.get_mute())
clapperWidget.player.set_mute(false);
return clapperWidget.player[
`set_${checkButton.type}_track`
](checkButton.activeId);
}
if(checkButton.activeId < 0) {
return clapperWidget.player[
`set_${checkButton.type}_track_enabled`
@@ -285,51 +253,6 @@ class ClapperControls extends Gtk.Box
}
}
_addTogglePlayButton()
{
this.togglePlayButton = new Buttons.IconToggleButton(
'media-playback-start-symbolic',
'media-playback-pause-symbolic'
);
this.togglePlayButton.child.add_css_class('playbackicon');
this.togglePlayButton.connect(
'clicked', this._onTogglePlayClicked.bind(this)
);
this.addButton(this.togglePlayButton);
}
_addElapsedButton()
{
const elapsedRevealer = new Revealers.ButtonsRevealer('SLIDE_RIGHT');
this.elapsedButton = this.addElapsedPopoverButton(INITIAL_ELAPSED, elapsedRevealer);
elapsedRevealer.set_reveal_child(true);
this.revealersArr.push(elapsedRevealer);
this.elapsedButton.addSeparator('Speed');
const speedScale = new Gtk.Scale({
orientation: Gtk.Orientation.HORIZONTAL,
value_pos: Gtk.PositionType.BOTTOM,
draw_value: false,
round_digits: 2,
hexpand: true,
valign: Gtk.Align.CENTER,
});
speedScale.add_css_class('speedscale');
this.speedAdjustment = speedScale.get_adjustment();
this.speedAdjustment.set_lower(0.01);
this.speedAdjustment.set_upper(2);
this.speedAdjustment.set_value(1);
this.speedAdjustment.set_page_increment(0.1);
speedScale.add_mark(0.25, Gtk.PositionType.BOTTOM, '0.25x');
speedScale.add_mark(1, Gtk.PositionType.BOTTOM, 'Normal');
speedScale.add_mark(2, Gtk.PositionType.BOTTOM, '2x');
this.elapsedButton.popoverBox.append(speedScale);
this.append(elapsedRevealer);
}
_addPositionScale()
{
this.positionScale = new Gtk.Scale({
@@ -362,55 +285,26 @@ class ClapperControls extends Gtk.Box
this.positionAdjustment.set_page_increment(0);
this.positionAdjustment.set_step_increment(8);
const chapterLabel = new Gtk.Label();
chapterLabel.add_css_class('chapterlabel');
this.chapterPopover = new Gtk.Popover({
position: Gtk.PositionType.TOP,
autohide: false,
child: chapterLabel,
});
const box = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
orientation: Gtk.Orientation.VERTICAL,
hexpand: true,
valign: Gtk.Align.CENTER,
can_focus: false,
});
this.chapterPopover = new Gtk.Popover({
position: Gtk.PositionType.TOP,
autohide: false,
});
const chapterLabel = new Gtk.Label();
chapterLabel.add_css_class('chapterlabel');
this.chapterPopover.set_child(chapterLabel);
this.chapterPopover.set_parent(box);
box.append(this.chapterPopover);
box.append(this.positionScale);
this.append(box);
}
_addVolumeButton()
{
this.volumeButton = this.addIconPopoverButton(
'audio-volume-muted-symbolic'
);
this.volumeScale = new Gtk.Scale({
orientation: Gtk.Orientation.VERTICAL,
inverted: true,
value_pos: Gtk.PositionType.TOP,
draw_value: false,
vexpand: true,
});
this.volumeScale.add_css_class('volumescale');
this.volumeAdjustment = this.volumeScale.get_adjustment();
this.volumeAdjustment.set_upper(Misc.maxVolume);
this.volumeAdjustment.set_step_increment(0.05);
this.volumeAdjustment.set_page_increment(0.05);
for(let i of [0, 1, Misc.maxVolume]) {
const text = (!i) ? '0%' : (i % 1 === 0) ? `${i}00%` : `${i * 10}0%`;
this.volumeScale.add_mark(i, Gtk.PositionType.LEFT, text);
}
this.volumeScale.connect(
'value-changed', this._onVolumeScaleValueChanged.bind(this)
);
this.volumeButton.popoverBox.append(this.volumeScale);
}
_setChapterVisible(isVisible)
{
const type = (isVisible) ? 'Show' : 'Hide';
@@ -435,12 +329,21 @@ class ClapperControls extends Gtk.Box
if(isVisible) {
const [start, end] = this.positionScale.get_slider_range();
const controlsHeight = this.parent.get_height();
const scaleHeight = this.positionScale.parent.get_height();
const scaleBoxHeight = this.positionScale.parent.get_height();
const [isShared, destX, destY] = this.positionScale.translate_coordinates(
this.positionScale.parent, 0, 0
);
const clapperWidget = this.get_ancestor(Gtk.Grid);
/* Half of slider width, values are defined in CSS */
const sliderOffset = (
clapperWidget.isFullscreenMode && !clapperWidget.isMobileMonitor
) ? 10 : 9;
this.chapterPopover.set_pointing_to(new Gdk.Rectangle({
x: -2,
y: -(controlsHeight - scaleHeight) / 2,
width: 2 * end,
x: destX + end - sliderOffset,
y: -(controlsHeight - scaleBoxHeight) / 2,
width: 0,
height: 0,
}));
}
@@ -469,11 +372,14 @@ class ClapperControls extends Gtk.Box
scrollController.connect('scroll', clapperWidget._onScroll.bind(clapperWidget));
this.volumeButton.add_controller(scrollController);
const initialVolume = (settings.get_string('volume-initial') === 'custom')
const initialVolume = (settings.get_boolean('volume-custom'))
? settings.get_int('volume-value') / 100
: settings.get_double('volume-last');
clapperWidget.player.volume = initialVolume;
clapperWidget.player.bind_property('mute', this.volumeButton, 'muted',
GObject.BindingFlags.DEFAULT
);
}
_onPlayerResize(width, height)
@@ -546,62 +452,17 @@ class ClapperControls extends Gtk.Box
}
}
_onVolumeScaleValueChanged(scale)
{
const volume = scale.get_value();
/* FIXME: All of below should be placed in 'volume-changed'
* event once we move to message bus API */
const cssClass = 'overamp';
const hasOveramp = (scale.has_css_class(cssClass));
if(volume > 1) {
if(!hasOveramp)
scale.add_css_class(cssClass);
}
else {
if(hasOveramp)
scale.remove_css_class(cssClass);
}
const icon = (volume <= 0)
? 'muted'
: (volume <= 0.3)
? 'low'
: (volume <= 0.7)
? 'medium'
: (volume <= 1)
? 'high'
: 'overamplified';
const iconName = `audio-volume-${icon}-symbolic`;
if(this.volumeButton.icon_name === iconName)
return;
this.volumeButton.icon_name = iconName;
debug(`set volume icon: ${icon}`);
}
_onPositionScaleDragging(scale)
{
const isPositionDragging = scale.has_css_class('dragging');
/* When scale enters "fine-tune", slider changes position a little.
* We do not want that to cause seek time change on TV mode */
if(
this.isFullscreen
&& !this.isMobile
&& scale.has_css_class('fine-tune')
)
scale.remove_css_class('fine-tune');
if(this.isPositionDragging === isPositionDragging)
return;
const clapperWidget = this.get_ancestor(Gtk.Grid);
if(!clapperWidget) return;
if(this.isFullscreen) {
if(clapperWidget.isFullscreenMode) {
clapperWidget.revealControls();
if(isPositionDragging)
@@ -630,14 +491,5 @@ class ClapperControls extends Gtk.Box
this.positionScale.disconnect(this.positionScaleValueSignal);
this.positionScale.disconnect(this.positionScaleDragSignal);
for(let button of this.buttonsArr) {
if(!button._onCloseRequest)
continue;
button._onCloseRequest();
}
this.chapterPopover.unparent();
}
});

View File

@@ -3,7 +3,9 @@ const Debug = imports.src.debug;
const { debug } = Debug;
var Daemon = GObject.registerClass(
var Daemon = GObject.registerClass({
GTypeName: 'ClapperDaemon',
},
class ClapperDaemon extends Gio.SubprocessLauncher
{
_init()

View File

@@ -17,7 +17,7 @@ const ShellProxyWrapper = Gio.DBusProxy.makeProxyWrapper(`
let shellProxy = null;
debug('initializing GNOME Shell DBus proxy');
debug('creating GNOME Shell DBus proxy');
new ShellProxyWrapper(
Gio.DBus.session,
'org.gnome.Shell',

View File

@@ -1,14 +1,14 @@
const { Gio, GObject, Gtk, Gst } = imports.gi;
const { Adw, Gdk, Gio, GObject, Gst, Gtk } = imports.gi;
const System = imports.system;
const Debug = imports.src.debug;
const FileOps = imports.src.fileOps;
const Misc = imports.src.misc;
const Prefs = imports.src.prefs;
const PrefsBase = imports.src.prefsBase;
const { debug } = Debug;
var FileChooser = GObject.registerClass(
var FileChooser = GObject.registerClass({
GTypeName: 'ClapperFileChooser',
},
class ClapperFileChooser extends Gtk.FileChooserNative
{
_init(window, purpose)
@@ -31,7 +31,6 @@ class ClapperFileChooser extends Gtk.FileChooserNative
}
this.chooserPurpose = purpose;
this.responseSignal = this.connect('response', this._onResponse.bind(this));
/* File chooser closes itself when nobody is holding its ref */
this.ref();
@@ -64,14 +63,11 @@ class ClapperFileChooser extends Gtk.FileChooserNative
this.add_filter(filter);
}
_onResponse(filechooser, response)
vfunc_response(respId)
{
debug('closing file chooser dialog');
this.disconnect(this.responseSignal);
this.responseSignal = null;
if(response === Gtk.ResponseType.ACCEPT) {
if(respId === Gtk.ResponseType.ACCEPT) {
switch(this.chooserPurpose) {
case 'open_local':
this._handleOpenLocal();
@@ -127,58 +123,63 @@ class ClapperFileChooser extends Gtk.FileChooserNative
}
});
var UriDialog = GObject.registerClass(
var UriDialog = GObject.registerClass({
GTypeName: 'ClapperUriDialog',
},
class ClapperUriDialog extends Gtk.Dialog
{
_init(window)
{
super._init({
transient_for: window,
destroy_with_parent: true,
modal: true,
title: 'Open URI',
default_width: 460,
use_header_bar: true,
title: _('Open URI'),
default_width: 420,
});
const box = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
valign: Gtk.Align.CENTER,
spacing: 6,
});
box.add_css_class('uridialogbox');
const contentBox = this.get_content_area();
contentBox.vexpand = true;
contentBox.add_css_class('uridialogbox');
const linkEntry = new Gtk.Entry({
activates_default: true,
truncate_multiline: true,
width_request: 220,
height_request: 36,
height_request: 38,
hexpand: true,
valign: Gtk.Align.CENTER,
input_purpose: Gtk.InputPurpose.URL,
placeholder_text: _('Enter or drop URI here'),
});
linkEntry.set_placeholder_text("Enter or drop URI here");
linkEntry.connect('notify::text', this._onTextNotify.bind(this));
box.append(linkEntry);
contentBox.append(linkEntry);
const openButton = new Gtk.Button({
label: "Open",
halign: Gtk.Align.END,
sensitive: false,
});
openButton.connect('clicked', this._onOpenButtonClicked.bind(this));
box.append(openButton);
this.add_button(_('Cancel'), Gtk.ResponseType.CANCEL);
this.add_button(_('Open'), Gtk.ResponseType.OK);
const area = this.get_content_area();
area.append(box);
this.set_default_response(Gtk.ResponseType.OK);
this.set_response_sensitive(Gtk.ResponseType.OK, false);
const display = Gdk.Display.get_default();
const clipboard = (display) ? display.get_clipboard() : null;
if(clipboard)
clipboard.read_text_async(null, this._readTextAsyncCb.bind(this));
this.closeSignal = this.connect('close-request', this._onCloseRequest.bind(this));
this.show();
}
openUri(uri)
vfunc_response(respId)
{
const { player } = this.get_transient_for().get_child();
player.set_playlist([uri]);
if(respId === Gtk.ResponseType.OK) {
const contentBox = this.get_content_area();
const linkEntry = contentBox.get_last_child();
const { player } = this.transient_for.child;
this.close();
player.set_playlist([linkEntry.text]);
}
this.destroy();
}
_onTextNotify(entry)
@@ -187,26 +188,34 @@ class ClapperUriDialog extends Gtk.Dialog
? Gst.uri_is_valid(entry.text)
: false;
const button = entry.get_next_sibling();
button.set_sensitive(isUriValid);
this.set_response_sensitive(Gtk.ResponseType.OK, isUriValid);
}
_onOpenButtonClicked(button)
_readTextAsyncCb(clipboard, result)
{
const entry = button.get_prev_sibling();
this.openUri(entry.text);
}
let uri = null;
_onCloseRequest(dialog)
{
debug('closing URI dialog');
try {
uri = clipboard.read_text_finish(result);
}
catch(err) {
debug(`could not read clipboard: ${err.message}`);
}
dialog.disconnect(this.closeSignal);
this.closeSignal = null;
if(!uri || !Gst.uri_is_valid(uri))
return;
const contentBox = this.get_content_area();
const linkEntry = contentBox.get_last_child();
linkEntry.set_text(uri);
linkEntry.select_region(0, -1);
}
});
var ResumeDialog = GObject.registerClass(
var ResumeDialog = GObject.registerClass({
GTypeName: 'ClapperResumeDialog',
},
class ClapperResumeDialog extends Gtk.MessageDialog
{
_init(window, resumeInfo)
@@ -214,8 +223,8 @@ class ClapperResumeDialog extends Gtk.MessageDialog
const percentage = Math.round((resumeInfo.time / resumeInfo.duration) * 100);
const msg = [
`<b>Title:</b> ${resumeInfo.title}`,
`<b>Completed:</b> ${percentage}%`
'<b>' + _('Title') + `:</b> ${resumeInfo.title}`,
'<b>' + _('Completed') + `:</b> ${percentage}%`
].join('\n');
super._init({
@@ -223,20 +232,18 @@ class ClapperResumeDialog extends Gtk.MessageDialog
modal: true,
message_type: Gtk.MessageType.QUESTION,
buttons: Gtk.ButtonsType.YES_NO,
text: 'Resume playback?',
text: _('Resume playback?'),
secondary_use_markup: true,
secondary_text: msg,
});
this.resumeInfo = resumeInfo;
this.set_default_response(Gtk.ResponseType.YES);
this.connect('response', this._onResponse.bind(this));
this.show();
}
_onResponse(dialog, respId)
vfunc_response(respId)
{
const { player } = this.transient_for.child;
@@ -247,89 +254,9 @@ class ClapperResumeDialog extends Gtk.MessageDialog
}
});
var PrefsDialog = GObject.registerClass(
class ClapperPrefsDialog extends Gtk.Dialog
{
_init(window)
{
super._init({
transient_for: window,
destroy_with_parent: true,
modal: true,
title: 'Preferences',
default_width: 460,
default_height: 400,
});
const pages = [
{
title: 'Player',
pages: [
{
title: 'General',
widget: Prefs.GeneralPage,
},
{
title: 'Behaviour',
widget: Prefs.BehaviourPage,
},
{
title: 'Audio',
widget: Prefs.AudioPage,
},
{
title: 'Subtitles',
widget: Prefs.SubtitlesPage,
},
{
title: 'Network',
widget: Prefs.NetworkPage,
},
{
title: 'YouTube',
widget: Prefs.YouTubePage,
}
]
},
{
title: 'Advanced',
pages: [
{
title: 'GStreamer',
widget: Prefs.GStreamerPage,
},
{
title: 'Tweaks',
widget: Prefs.TweaksPage,
}
]
}
];
const prefsNotebook = new PrefsBase.Notebook(pages);
prefsNotebook.add_css_class('prefsnotebook');
const area = this.get_content_area();
area.append(prefsNotebook);
this.closeSignal = this.connect('close-request', this._onCloseRequest.bind(this));
this.show();
}
_onCloseRequest(dialog)
{
debug('closing prefs dialog');
dialog.disconnect(this.closeSignal);
this.closeSignal = null;
const area = dialog.get_content_area();
const notebook = area.get_first_child();
notebook._onClose();
}
});
var AboutDialog = GObject.registerClass(
var AboutDialog = GObject.registerClass({
GTypeName: 'ClapperAboutDialog',
},
class ClapperAboutDialog extends Gtk.AboutDialog
{
_init(window)
@@ -342,6 +269,13 @@ class ClapperAboutDialog extends Gtk.AboutDialog
Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION
].join('.');
/* TODO: This is as of Alpha2 still broken, requires:
* https://gitlab.gnome.org/GNOME/libadwaita/-/merge_requests/230
* can be simplified later in future */
const adwVer = Adw.MAJOR_VERSION ? [
Adw.MAJOR_VERSION, Adw.MINOR_VERSION, Adw.MICRO_VERSION
].join('.') : '1.0.0';
const gjsVerStr = String(System.version);
let gjsVer = '';
@@ -352,9 +286,10 @@ class ClapperAboutDialog extends Gtk.AboutDialog
gjsVer += gjsVerStr.charAt(4);
const osInfo = [
'GTK ' + 'version' + ': ' + gtkVer,
'GStreamer ' + 'version' + ': ' + gstVer,
'GJS ' + 'version' + ': ' + gjsVer
_('GTK version: %s').format(gtkVer),
_('Adwaita version: %s').format(adwVer),
_('GStreamer version: %s').format(gstVer),
_('GJS version: %s').format(gjsVer)
].join('\n');
super._init({
@@ -362,25 +297,18 @@ class ClapperAboutDialog extends Gtk.AboutDialog
destroy_with_parent: true,
modal: true,
program_name: Misc.appName,
comments: 'A GNOME media player powered by GStreamer',
version: Misc.getClapperVersion(),
comments: _('A GNOME media player powered by GStreamer'),
version: pkg.version,
authors: ['Rafał Dzięgiel'],
artists: ['Rafał Dzięgiel'],
/* TRANSLATORS: Put your name(s) here for credits or leave untranslated */
translator_credits: _('translator-credits'),
license_type: Gtk.License.GPL_3_0,
logo_icon_name: 'com.github.rafostar.Clapper',
website: 'https://rafostar.github.io/clapper',
system_information: osInfo,
});
this.closeSignal = this.connect('close-request', this._onCloseRequest.bind(this));
this.show();
}
_onCloseRequest(dialog)
{
debug('closing about dialog');
dialog.disconnect(this.closeSignal);
this.closeSignal = null;
}
});

View File

@@ -1,7 +1,9 @@
const { GObject } = imports.gi;
const { HeaderBarBase } = imports.src.headerbarBase;
var HeaderBar = GObject.registerClass(
var HeaderBar = GObject.registerClass({
GTypeName: 'ClapperHeaderBar',
},
class ClapperHeaderBar extends HeaderBarBase
{
_onWindowButtonActivate(action)
@@ -9,17 +11,20 @@ class ClapperHeaderBar extends HeaderBarBase
this.activate_action(`window.${action}`, null);
}
_onFloatButtonClicked()
_onFloatButtonClicked(button)
{
const clapperWidget = this.root.child;
const { controlsRevealer } = clapperWidget;
clapperWidget.controlsRevealer.toggleReveal();
controlsRevealer.toggleReveal();
/* Reset timer to not disappear during click */
clapperWidget._setHideControlsTimeout();
this._updateFloatIcon(!controlsRevealer.reveal_child);
}
_onFullscreenButtonClicked()
_onFullscreenButtonClicked(button)
{
this.root.fullscreen();
}

View File

@@ -4,7 +4,9 @@ const Misc = imports.src.misc;
const { debug } = Debug;
var HeaderBarBase = GObject.registerClass(
var HeaderBarBase = GObject.registerClass({
GTypeName: 'ClapperHeaderBarBase',
},
class ClapperHeaderBarBase extends Gtk.Box
{
_init()
@@ -17,16 +19,12 @@ class ClapperHeaderBarBase extends Gtk.Box
margin_start: 6,
margin_end: 6,
});
this.add_css_class('osd');
this.add_css_class('osdheaderbar');
this.isMaximized = false;
this.isMenuOnLeft = true;
const clapperPath = Misc.getClapperPath();
const uiBuilder = Gtk.Builder.new_from_file(
`${clapperPath}/ui/clapper.ui`
);
const uiBuilder = Misc.getBuilderForName('clapper.ui');
this.menuWidget = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
@@ -39,9 +37,10 @@ class ClapperHeaderBarBase extends Gtk.Box
valign: Gtk.Align.CENTER,
can_focus: false,
});
const menuToggleButton = this.menuButton.get_first_child();
menuToggleButton.add_css_class('osd');
const mainMenuModel = uiBuilder.get_object('mainMenu');
const mainMenuPopover = new HeaderBarPopover(mainMenuModel);
mainMenuPopover.add_css_class('menupopover');
this.menuButton.set_popover(mainMenuPopover);
this.menuButton.add_css_class('circular');
this.menuWidget.append(this.menuButton);
@@ -53,9 +52,10 @@ class ClapperHeaderBarBase extends Gtk.Box
this.extraButtonsBox.add_css_class('linked');
const floatButton = new Gtk.Button({
icon_name: 'go-bottom-symbolic',
icon_name: 'pip-in-symbolic',
can_focus: false,
});
floatButton.add_css_class('osd');
floatButton.add_css_class('circular');
floatButton.add_css_class('linkedleft');
floatButton.connect('clicked',
@@ -73,6 +73,7 @@ class ClapperHeaderBarBase extends Gtk.Box
icon_name: 'view-fullscreen-symbolic',
can_focus: false,
});
fullscreenButton.add_css_class('osd');
fullscreenButton.add_css_class('circular');
fullscreenButton.add_css_class('linkedright');
fullscreenButton.connect('clicked',
@@ -201,6 +202,7 @@ class ClapperHeaderBarBase extends Gtk.Box
valign: Gtk.Align.CENTER,
can_focus: false,
});
button.add_css_class('osd');
button.add_css_class('circular');
if(name === 'maximize')
@@ -213,20 +215,35 @@ class ClapperHeaderBarBase extends Gtk.Box
return button;
}
_updateFloatIcon(isFloating)
{
const floatButton = this.extraButtonsBox.get_first_child();
if(!floatButton) return;
const iconName = (isFloating)
? 'pip-out-symbolic'
: 'pip-in-symbolic';
if(floatButton.icon_name !== iconName)
floatButton.icon_name = iconName;
}
_onWindowButtonActivate(action)
{
}
_onFloatButtonClicked()
_onFloatButtonClicked(button)
{
}
_onFullscreenButtonClicked()
_onFullscreenButtonClicked(button)
{
}
});
var HeaderBarPopover = GObject.registerClass(
var HeaderBarPopover = GObject.registerClass({
GTypeName: 'ClapperHeaderBarPopover',
},
class ClapperHeaderBarPopover extends Gtk.PopoverMenu
{
_init(model)

View File

@@ -1,7 +1,9 @@
const { GObject } = imports.gi;
const { HeaderBarBase } = imports.src.headerbarBase;
var HeaderBarRemote = GObject.registerClass(
var HeaderBarRemote = GObject.registerClass({
GTypeName: 'ClapperHeaderBarRemote',
},
class ClapperHeaderBarRemote extends HeaderBarBase
{
_init()

View File

@@ -2,12 +2,24 @@ imports.gi.versions.Gdk = '4.0';
imports.gi.versions.Gtk = '4.0';
imports.gi.versions.Soup = '2.4';
const { Gst } = imports.gi;
Gst.init(null);
pkg.initGettext();
pkg.initFormat();
const Debug = imports.src.debug;
Debug.debug('imports');
const { GstClapper, Gtk, Adw } = imports.gi;
const { App } = imports.src.app;
function main(argv)
{
Debug.debug('main');
GstClapper.Clapper.gst_init(null);
Gtk.init();
Adw.init();
Debug.debug('initialized');
new App().run(argv);
}

View File

@@ -2,15 +2,18 @@ imports.gi.versions.Gdk = '4.0';
imports.gi.versions.Gtk = '4.0';
imports.gi.versions.Soup = '2.4';
const { AppRemote } = imports.src.appRemote;
pkg.initGettext();
const Misc = imports.src.misc;
Misc.appId += '.Remote';
const ID_POSTFIX = 'Remote';
Misc.clapperPath = `${pkg.datadir}/${Misc.appId}`;
Misc.appId += '.' + ID_POSTFIX;
const { Gtk, Adw } = imports.gi;
const { AppRemote } = imports.src.appRemote;
function main(argv)
{
Gtk.init();
Adw.init();
new AppRemote().run(argv);
}

View File

@@ -10,9 +10,6 @@ var subsMimes = [
'text/x-ssa',
];
var clapperPath = null;
var clapperVersion = null;
var settings = new Gio.Settings({
schema_id: appId,
});
@@ -31,22 +28,31 @@ const subsKeys = Object.keys(subsTitles);
let inhibitCookie;
function getClapperPath()
function getResourceUri(path)
{
return (clapperPath)
? clapperPath
: (pkg)
? `${pkg.datadir}/${pkg.name}`
: '.';
const res = `file://${pkg.pkgdatadir}/${path}`;
debug(`importing ${res}`);
return res;
}
function getClapperVersion()
function getBuilderForName(name)
{
return (clapperVersion)
? clapperVersion
: (pkg)
? pkg.version
: '';
return Gtk.Builder.new_from_file(`${pkg.pkgdatadir}/ui/${name}`);
}
function loadCustomCss()
{
const cssProvider = new Gtk.CssProvider();
cssProvider.load_from_path(`${pkg.pkgdatadir}/css/styles.css`);
Gtk.StyleContext.add_provider_for_display(
Gdk.Display.get_default(),
cssProvider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
);
}
function getClapperThemeIconUri()
@@ -111,19 +117,6 @@ function getSubsTitle(infoTitle)
return (found) ? subsTitles[found] : null;
}
function loadCustomCss()
{
const clapperPath = getClapperPath();
const cssProvider = new Gtk.CssProvider();
cssProvider.load_from_path(`${clapperPath}/css/styles.css`);
Gtk.StyleContext.add_provider_for_display(
Gdk.Display.get_default(),
cssProvider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
);
}
function setAppInhibit(isInhibit, window)
{
let isInhibited = false;
@@ -219,6 +212,19 @@ function getUriProtocol(uri)
return (arr.length > 1) ? arr[0] : null;
}
function getIsTouch(gesture)
{
const { source } = gesture.get_device();
switch(source) {
case Gdk.InputSource.PEN:
case Gdk.InputSource.TOUCHSCREEN:
return true;
default:
return false;
}
}
function encodeHTML(text)
{
return text.replace(/&/g, '&amp;')

View File

@@ -1,4 +1,4 @@
const { Gdk, Gio, GObject, Gst, GstClapper, Gtk } = imports.gi;
const { Adw, Gdk, Gio, GObject, Gst, GstClapper, Gtk } = imports.gi;
const ByteArray = imports.byteArray;
const Debug = imports.src.debug;
const Misc = imports.src.misc;
@@ -11,7 +11,9 @@ const { settings } = Misc;
let WebServer;
var Player = GObject.registerClass(
var Player = GObject.registerClass({
GTypeName: 'ClapperPlayer',
},
class ClapperPlayer extends GstClapper.Clapper
{
_init()
@@ -32,6 +34,8 @@ class ClapperPlayer extends GstClapper.Clapper
desktop_entry: Misc.appId,
default_art_url: Misc.getClapperThemeIconUri(),
}),
use_playbin3: settings.get_boolean('use-playbin3'),
use_pipewire: settings.get_boolean('use-pipewire'),
});
this.widget = gtk4plugin.video_sink.widget;
@@ -44,7 +48,7 @@ class ClapperPlayer extends GstClapper.Clapper
this.ytClient = null;
this.playlistWidget = new PlaylistWidget();
this.seek_done = true;
this.seekDone = true;
this.needsFastSeekRestore = false;
this.customVideoTitle = null;
@@ -70,9 +74,10 @@ class ClapperPlayer extends GstClapper.Clapper
set_and_bind_settings()
{
const settingsToSet = [
'dark-theme',
'after-playback',
'seeking-mode',
'audio-offset',
'subtitle-offset',
'play-flags',
'webserver-enabled'
];
@@ -81,14 +86,11 @@ class ClapperPlayer extends GstClapper.Clapper
this._onSettingsKeyChanged(settings, key);
const flag = Gio.SettingsBindFlags.GET;
settings.bind('keep-last-frame', this.widget, 'keep-last-frame', flag);
settings.bind('subtitle-font', this.pipeline, 'subtitle-font-desc', flag);
}
set_initial_config()
{
this.set_mute(false);
/* FIXME: change into option in preferences */
const pipeline = this.get_pipeline();
pipeline.ring_buffer_max_size = 8 * 1024 * 1024;
@@ -96,25 +98,29 @@ class ClapperPlayer extends GstClapper.Clapper
set_all_plugins_ranks()
{
let data = [];
let data = {};
let hadErr = false;
/* Set empty plugin list if someone messed it externally */
try {
data = JSON.parse(settings.get_string('plugin-ranking'));
if(!Array.isArray(data))
throw new Error('plugin ranking data is not an array!');
if(Array.isArray(data)) {
data = {};
hadErr = true;
}
}
catch(err) {
debug(err);
settings.set_string('plugin-ranking', "[]");
hadErr = true;
}
for(let plugin of data) {
if(!plugin.apply || !plugin.name)
continue;
this.set_plugin_rank(plugin.name, plugin.rank);
if(hadErr) {
settings.set_string('plugin-ranking', "{}");
debug('restored plugin ranking to defaults');
}
for(let plugin of Object.keys(data))
this.set_plugin_rank(plugin, data[plugin]);
}
set_plugin_rank(name, rank)
@@ -284,7 +290,7 @@ class ClapperPlayer extends GstClapper.Clapper
if(this.needsTocUpdate)
return;
this.seek_done = false;
this.seekDone = false;
if(this.state === GstClapper.ClapperState.STOPPED)
this.pause();
@@ -292,8 +298,6 @@ class ClapperPlayer extends GstClapper.Clapper
if(position < 0)
position = 0;
debug(`${this.seekingMode} seeking to position: ${position}`);
super.seek(position);
}
@@ -304,13 +308,12 @@ class ClapperPlayer extends GstClapper.Clapper
seek_chapter(seconds)
{
if(this.seekingMode !== 'fast') {
if(this.seek_mode !== GstClapper.ClapperSeekMode.FAST) {
this.seek_seconds(seconds);
return;
}
this.set_seek_mode(GstClapper.ClapperSeekMode.DEFAULT);
this.seekingMode = 'normal';
this.needsFastSeekRestore = true;
this.seek_seconds(seconds);
@@ -318,20 +321,19 @@ class ClapperPlayer extends GstClapper.Clapper
adjust_position(isIncrease)
{
this.seek_done = false;
this.seekDone = false;
const { controls } = this.widget.get_ancestor(Gtk.Grid);
const max = controls.positionAdjustment.get_upper();
const seekingUnit = settings.get_string('seeking-unit');
let seekingValue = settings.get_int('seeking-value');
switch(seekingUnit) {
case 'minute':
seekingValue *= 60;
switch(settings.get_int('seeking-unit')) {
case 2: /* Percentage */
seekingValue *= max / 100;
break;
case 'percentage':
seekingValue = max * seekingValue / 100;
case 1: /* Minute */
seekingValue *= 60;
break;
default:
break;
@@ -354,9 +356,9 @@ class ClapperPlayer extends GstClapper.Clapper
const { controls } = this.widget.get_ancestor(Gtk.Grid);
const value = (isIncrease) ? offset : -offset;
const volume = controls.volumeScale.get_value() + value;
const scale = controls.volumeButton.volumeScale;
controls.volumeScale.set_value(volume);
scale.set_value(scale.get_value() + value);
}
next_chapter()
@@ -538,16 +540,15 @@ class ClapperPlayer extends GstClapper.Clapper
const clapperWidget = player.widget.get_ancestor(Gtk.Grid);
if(!clapperWidget) return;
if(!this.seek_done && state !== GstClapper.ClapperState.BUFFERING) {
if(!this.seekDone && state !== GstClapper.ClapperState.BUFFERING) {
clapperWidget.updateTime();
if(this.needsFastSeekRestore) {
this.set_seek_mode(GstClapper.ClapperSeekMode.FAST);
this.seekingMode = 'fast';
this.needsFastSeekRestore = false;
}
this.seek_done = true;
this.seekDone = true;
debug('seeking finished');
clapperWidget._onPlayerPositionUpdated(this, this.position);
@@ -566,7 +567,8 @@ class ClapperPlayer extends GstClapper.Clapper
if(this.playlistWidget._handleStreamEnded(player))
return;
if(settings.get_boolean('close-auto')) {
/* After playback equal 2 means close the app */
if(settings.get_int('after-playback') === 2) {
/* Stop will be automatically called soon afterwards */
this.quitOnStop = true;
this._performCloseCleanup(this.widget.get_root());
@@ -640,20 +642,35 @@ class ClapperPlayer extends GstClapper.Clapper
let root, value, action;
switch(key) {
case 'after-playback':
this.widget.keep_last_frame = (settings.get_int(key) === 1);
break;
case 'seeking-mode':
this.seekingMode = settings.get_string('seeking-mode');
switch(this.seekingMode) {
case 'fast':
switch(settings.get_int(key)) {
case 2: /* Fast */
this.set_seek_mode(GstClapper.ClapperSeekMode.FAST);
break;
case 'accurate':
case 1: /* Accurate */
this.set_seek_mode(GstClapper.ClapperSeekMode.ACCURATE);
break;
default:
default: /* Normal */
this.set_seek_mode(GstClapper.ClapperSeekMode.DEFAULT);
break;
}
break;
case 'dark-theme':
/* TODO: Remove libadwaita alpha2 compat someday */
if (Adw.StyleManager != null) {
const styleManager = Adw.StyleManager.get_default();
styleManager.color_scheme = (settings.get_boolean(key))
? Adw.ColorScheme.FORCE_DARK
: Adw.ColorScheme.FORCE_LIGHT;
}
else {
const gtkSettings = Gtk.Settings.get_default();
gtkSettings.gtk_application_prefer_dark_theme = settings.get_boolean(key);
}
break;
case 'render-shadows':
root = this.widget.get_root();
if(!root) break;
@@ -669,21 +686,10 @@ class ClapperPlayer extends GstClapper.Clapper
root[action + '_css_class'](gpuClass);
break;
case 'audio-offset':
value = Math.round(settings.get_double(key) * -Gst.MSECOND);
value = Math.round(settings.get_int(key) * -Gst.MSECOND);
this.set_audio_video_offset(value);
debug(`set audio-video offset: ${value}`);
break;
case 'subtitle-offset':
value = Math.round(settings.get_double(key) * -Gst.MSECOND);
this.set_subtitle_video_offset(value);
debug(`set subtitle-video offset: ${value}`);
break;
case 'dark-theme':
root = this.widget.get_root();
if(!root) break;
root.application._onThemeChanged(Gtk.Settings.get_default());
break;
case 'play-flags':
const initialFlags = this.pipeline.flags;
const settingsFlags = settings.get_int(key);

View File

@@ -8,7 +8,9 @@ var ClapperState = {
PLAYING: 3,
};
var PlayerRemote = GObject.registerClass(
var PlayerRemote = GObject.registerClass({
GTypeName: 'ClapperPlayerRemote',
},
class ClapperPlayerRemote extends GObject.Object
{
_init()

View File

@@ -18,7 +18,9 @@ const repeatIcons = [
'media-playlist-shuffle-symbolic',
];
var PlaylistWidget = GObject.registerClass(
var PlaylistWidget = GObject.registerClass({
GTypeName: 'ClapperPlaylistWidget',
},
class ClapperPlaylistWidget extends Gtk.ListBox
{
_init()
@@ -28,6 +30,7 @@ class ClapperPlaylistWidget extends Gtk.ListBox
});
this.activeRowId = -1;
this.repeatMode = RepeatMode.NONE;
this.add_css_class('clapperplaylist');
this.connect('row-activated', this._onRowActivated.bind(this));
}
@@ -233,7 +236,9 @@ class ClapperPlaylistWidget extends Gtk.ListBox
}
});
let PlaylistItem = GObject.registerClass(
let PlaylistItem = GObject.registerClass({
GTypeName: 'ClapperPlaylistItem',
},
class ClapperPlaylistItem extends Gtk.ListBoxRow
{
_init(uri)
@@ -268,7 +273,6 @@ class ClapperPlaylistItem extends Gtk.ListBoxRow
});
repeatButton.add_css_class('flat');
repeatButton.add_css_class('circular');
repeatButton.add_css_class('popoverbutton');
repeatButton.connect('clicked', this._onRepeatClicked.bind(this));
const label = new Gtk.Label({
label: this.filename,
@@ -283,7 +287,6 @@ class ClapperPlaylistItem extends Gtk.ListBoxRow
});
removeButton.add_css_class('flat');
removeButton.add_css_class('circular');
removeButton.add_css_class('popoverbutton');
removeButton.connect('clicked', this._onRemoveClicked.bind(this));
box.append(repeatButton);

View File

@@ -1,354 +1,563 @@
const { GObject, Gst, Gtk, Pango } = imports.gi;
const { Adw, GObject, Gio, Gst, Gtk } = imports.gi;
const Debug = imports.src.debug;
const Misc = imports.src.misc;
const PrefsBase = imports.src.prefsBase;
const { debug } = Debug;
const { settings } = Misc;
/* PlayFlags are not exported through GI */
Gst.PlayFlags = {
VIDEO: 1,
AUDIO: 2,
TEXT: 4,
VIS: 8,
SOFT_VOLUME: 16,
NATIVE_AUDIO: 32,
NATIVE_VIDEO: 64,
DOWNLOAD: 128,
BUFFERING: 256,
DEINTERLACE: 512,
SOFT_COLORBALANCE: 1024,
FORCE_FILTERS: 2048,
FORCE_SW_DECODERS: 4096,
VIDEO: 1,
AUDIO: 2,
TEXT: 4,
VIS: 8,
SOFT_VOLUME: 16,
NATIVE_AUDIO: 32,
NATIVE_VIDEO: 64,
DOWNLOAD: 128,
BUFFERING: 256,
DEINTERLACE: 512,
SOFT_COLORBALANCE: 1024,
FORCE_FILTERS: 2048,
FORCE_SW_DECODERS: 4096,
};
var GeneralPage = GObject.registerClass(
class ClapperGeneralPage extends PrefsBase.Grid
const widgetOpts = {
halign: Gtk.Align.CENTER,
valign: Gtk.Align.CENTER,
};
function getCommonProps()
{
_init()
return {
'schema-name': GObject.ParamSpec.string(
'schema-name',
'GSchema setting name',
'Name of the setting to bind',
GObject.ParamFlags.WRITABLE,
null
),
};
}
const flags = Gio.SettingsBindFlags.DEFAULT;
let PrefsActionRow = GObject.registerClass({
GTypeName: 'ClapperPrefsActionRow',
Properties: getCommonProps(),
},
class ClapperPrefsActionRow extends Adw.ActionRow
{
_init(widget)
{
super._init();
this.addTitle('Startup');
this.addCheckButton('Auto enter fullscreen', 'fullscreen-auto');
this._schemaName = null;
this._bindProp = null;
this.addTitle('Volume');
const comboBox = this.addComboBoxText('Initial value', [
['restore', "Restore"],
['custom', "Custom"],
], 'volume-initial');
const spinButton = this.addSpinButton('Value (percentage)', 0, 200, 'volume-value');
this._onVolumeInitialChanged(spinButton, comboBox);
comboBox.connect('changed', this._onVolumeInitialChanged.bind(this, spinButton));
this.addTitle('Finish');
this.addCheckButton('Keep showing last frame', 'keep-last-frame');
this.addCheckButton('Close after playback', 'close-auto');
if(widget) {
this.add_suffix(widget);
this.set_activatable_widget(widget);
}
}
_onVolumeInitialChanged(spinButton, comboBox)
set schema_name(value)
{
const value = comboBox.get_active_id();
spinButton.set_visible(value === 'custom');
}
});
var BehaviourPage = GObject.registerClass(
class ClapperBehaviourPage extends PrefsBase.Grid
{
_init()
{
super._init();
this.addTitle('Seeking');
this.addComboBoxText('Mode', [
['normal', "Normal"],
['accurate', "Accurate"],
['fast', "Fast"],
], 'seeking-mode');
this.addComboBoxText('Unit', [
['second', "Second"],
['minute', "Minute"],
['percentage', "Percentage"],
], 'seeking-unit');
this.addSpinButton('Value', 1, 99, 'seeking-value');
this.addTitle('Resume');
this.addCheckButton('Ask to resume last unfinished video', 'resume-enabled');
this.addTitle('Floating Mode');
this.addCheckButton('Show on all workspaces', 'floating-stick');
}
});
var AudioPage = GObject.registerClass(
class ClapperAudioPage extends PrefsBase.Grid
{
_init()
{
super._init();
this.addTitle('Synchronization');
this.addSpinButton('Offset (milliseconds)', -1000, 1000, 'audio-offset', 25);
this.addTitle('Processing');
this.addPlayFlagCheckButton('Only use native audio formats', Gst.PlayFlags.NATIVE_AUDIO);
}
});
var SubtitlesPage = GObject.registerClass(
class ClapperSubtitlesPage extends PrefsBase.Grid
{
_init()
{
super._init();
/* FIXME: This should be moved to subtitles popup and displayed only when
external subtitles were added for easier customization per video. */
//this.addTitle('Synchronization');
//this.addSpinButton('Offset (milliseconds)', -5000, 5000, 'subtitle-offset', 25);
this.addTitle('External Subtitles');
this.addFontButton('Default font', 'subtitle-font');
}
});
var NetworkPage = GObject.registerClass(
class ClapperNetworkPage extends PrefsBase.Grid
{
_init()
{
super._init();
this.addTitle('Client');
this.addPlayFlagCheckButton('Progressive download buffering', Gst.PlayFlags.DOWNLOAD);
this.addTitle('Server');
const webServer = this.addCheckButton('Control player remotely', 'webserver-enabled');
const serverPort = this.addSpinButton('Listening port', 1024, 65535, 'webserver-port');
webServer.bind_property('active', serverPort, 'visible', GObject.BindingFlags.SYNC_CREATE);
const webApp = this.addCheckButton('Start built-in web application', 'webapp-enabled');
webServer.bind_property('active', webApp, 'visible', GObject.BindingFlags.SYNC_CREATE);
const webAppPort = this.addSpinButton('Web application port', 1024, 65535, 'webapp-port');
webServer.bind_property('active', webAppPort, 'visible', GObject.BindingFlags.SYNC_CREATE);
}
});
var YouTubePage = GObject.registerClass(
class ClapperYouTubePage extends PrefsBase.Grid
{
_init()
{
super._init();
this.addTitle('YouTube');
this.addCheckButton('Prefer adaptive streaming', 'yt-adaptive-enabled');
this.addComboBoxText('Max quality', [
['normal', "Normal"],
['hfr', "HFR"],
], 'yt-quality-type');
}
});
var GStreamerPage = GObject.registerClass(
class ClapperGStreamerPage extends PrefsBase.Grid
{
_init()
{
super._init();
this.addTitle('Plugin Ranking');
const listStore = new Gtk.ListStore();
listStore.set_column_types([
GObject.TYPE_BOOLEAN,
GObject.TYPE_STRING,
GObject.TYPE_STRING,
]);
const treeView = new Gtk.TreeView({
hexpand: true,
vexpand: true,
enable_search: false,
model: listStore,
});
const treeSelection = treeView.get_selection();
const apply = new Gtk.TreeViewColumn({
title: "Apply",
});
const name = new Gtk.TreeViewColumn({
title: "Plugin",
expand: true,
});
const rank = new Gtk.TreeViewColumn({
title: "Rank",
min_width: 90,
});
const applyCell = new Gtk.CellRendererToggle();
const nameCell = new Gtk.CellRendererText({
editable: true,
placeholder_text: "Insert plugin name",
});
const rankCell = new Gtk.CellRendererText({
editable: true,
weight: Pango.Weight.BOLD,
placeholder_text: "Insert plugin rank",
});
apply.pack_start(applyCell, true);
name.pack_start(nameCell, true);
rank.pack_start(rankCell, true);
apply.add_attribute(applyCell, 'active', 0);
name.add_attribute(nameCell, 'text', 1);
rank.add_attribute(rankCell, 'text', 2);
treeView.insert_column(apply, 0);
treeView.insert_column(name, 1);
treeView.insert_column(rank, 2);
const frame = new Gtk.Frame({
child: treeView
});
this.addToGrid(frame);
const addButton = new Gtk.Button({
icon_name: 'list-add-symbolic',
halign: Gtk.Align.END,
});
const removeButton = new Gtk.Button({
icon_name: 'list-remove-symbolic',
sensitive: false,
halign: Gtk.Align.END,
});
const label = new Gtk.Label({
label: 'Changes require player restart',
halign: Gtk.Align.START,
hexpand: true,
ellipsize: Pango.EllipsizeMode.END,
});
const box = new Gtk.Box({
orientation: Gtk.Orientation.HORIZONTAL,
spacing: 6,
hexpand: true,
});
box.append(label);
box.append(removeButton);
box.append(addButton);
this.addToGrid(box);
applyCell.connect('toggled', this._onApplyCellEdited.bind(this));
nameCell.connect('edited', this._onNameCellEdited.bind(this));
rankCell.connect('edited', this._onRankCellEdited.bind(this));
addButton.connect('clicked', this._onAddButtonClicked.bind(this, listStore));
removeButton.connect('clicked', this._onRemoveButtonClicked.bind(this, listStore));
treeSelection.connect('changed', this._onTreeSelectionChanged.bind(this, removeButton));
this.settingsChangedSignal = settings.connect(
'changed::plugin-ranking', this.refreshListStore.bind(this, listStore)
);
this.refreshListStore(listStore);
this._schemaName = value;
}
refreshListStore(listStore)
vfunc_realize()
{
const data = JSON.parse(settings.get_string('plugin-ranking'));
listStore.clear();
super.vfunc_realize();
for(let plugin of data) {
listStore.set(
listStore.append(),
[0, 1, 2], [
plugin.apply || false,
plugin.name || '',
plugin.rank || 0
]
if(this._schemaName && this._bindProp) {
settings.bind(this._schemaName,
this.activatable_widget, this._bindProp, flags
);
}
}
updatePlugin(index, prop, value)
{
const data = JSON.parse(settings.get_string('plugin-ranking'));
data[index][prop] = value;
settings.set_string('plugin-ranking', JSON.stringify(data));
}
_onTreeSelectionChanged(removeButton, treeSelection)
{
const [isSelected, model, iter] = treeSelection.get_selected();
this.activeIndex = -1;
if(isSelected) {
this.activeIndex = Number(model.get_string_from_iter(iter));
}
removeButton.set_sensitive(this.activeIndex >= 0);
}
_onAddButtonClicked(listStore, button)
{
const data = JSON.parse(settings.get_string('plugin-ranking'));
data.push({
apply: false,
name: '',
rank: 0,
});
settings.set_string('plugin-ranking', JSON.stringify(data));
}
_onRemoveButtonClicked(listStore, button)
{
if(this.activeIndex < 0)
return;
const data = JSON.parse(settings.get_string('plugin-ranking'));
data.splice(this.activeIndex, 1);
settings.set_string('plugin-ranking', JSON.stringify(data));
}
_onApplyCellEdited(cell, path)
{
const newState = !cell.active;
this.updatePlugin(path, 'apply', newState);
}
_onNameCellEdited(cell, path, newText)
{
newText = newText.trim();
this.updatePlugin(path, 'name', newText);
}
_onRankCellEdited(cell, path, newText)
{
newText = newText.trim();
if(isNaN(newText))
newText = 0;
this.updatePlugin(path, 'rank', Number(newText));
}
_onClose()
{
super._onClose('gstreamer');
settings.disconnect(this.settingsChangedSignal);
this.settingsChangedSignal = null;
this._schemaName = null;
}
});
var TweaksPage = GObject.registerClass(
class ClapperTweaksPage extends PrefsBase.Grid
let PrefsSubpageRow = GObject.registerClass({
GTypeName: 'ClapperPrefsSubpageRow',
Properties: getCommonProps(),
},
class ClapperPrefsSubpageRow extends Adw.ActionRow
{
_init(widget)
{
super._init({
activatable: true,
});
this._prefsSubpage = null;
const icon = new Gtk.Image({
icon_name: 'go-next-symbolic',
});
this.add_suffix(icon);
}
vfunc_activate()
{
super.vfunc_activate();
if(!this._prefsSubpage)
this._prefsSubpage = this._createSubpage();
const prefs = this.get_ancestor(PrefsWindow);
prefs.present_subpage(this._prefsSubpage);
}
_createSubpage()
{
/* For override */
return null;
}
});
GObject.registerClass({
GTypeName: 'ClapperPrefsSwitch',
Properties: {
'custom-icon-name': GObject.ParamSpec.string(
'custom-icon-name',
'Icon name',
'Name of the icon',
GObject.ParamFlags.WRITABLE | GObject.ParamFlags.CONSTRUCT_ONLY,
null
),
'custom-icon-subtitle': GObject.ParamSpec.string(
'custom-icon-subtitle',
'Icon subtitle',
'Text below the icon',
GObject.ParamFlags.WRITABLE | GObject.ParamFlags.CONSTRUCT_ONLY,
null
),
}
},
class ClapperPrefsSwitch extends PrefsActionRow
{
_init(opts)
{
super._init(null);
this._bindProp = 'active';
if(opts.custom_icon_name || opts.custom_icon_subtitle) {
const box = new Gtk.Box({
margin_top: 2,
orientation: Gtk.Orientation.VERTICAL,
valign: Gtk.Align.CENTER,
});
const customIcon = new Gtk.Image({
icon_name: opts.custom_icon_name || null,
});
box.append(customIcon);
const customLabel = new Gtk.Label({
label: opts.custom_icon_subtitle || '',
});
customLabel.add_css_class('subtitle');
box.append(customLabel);
this.add_suffix(box);
}
const sw = new Gtk.Switch(widgetOpts);
this.add_suffix(sw);
this.set_activatable_widget(sw);
}
});
GObject.registerClass({
GTypeName: 'ClapperPrefsPlayFlagSwitch',
Properties: {
'play-flag': GObject.ParamSpec.int(
'play-flag',
'PlayFlag',
'Value of the gstreamer play flag to toggle',
GObject.ParamFlags.WRITABLE,
1, 4096, 1,
),
},
},
class ClapperPrefsPlayFlagSwitch extends PrefsActionRow
{
_init()
{
super._init(new Gtk.Switch(widgetOpts));
this._flag = 1;
this._doneRealize = false;
}
set play_flag(value)
{
this._flag = value;
}
vfunc_realize()
{
super.vfunc_realize();
if(!this._doneRealize) {
const playFlags = settings.get_int('play-flags');
this.activatable_widget.active = (
(playFlags & this._flag) === this._flag
);
this.activatable_widget.connect(
'notify::active', this._onPlayFlagToggled.bind(this)
);
}
this._doneRealize = true;
}
_onPlayFlagToggled()
{
let playFlags = settings.get_int('play-flags');
if(this.activatable_widget.active)
playFlags |= this._flag;
else
playFlags &= ~this._flag;
settings.set_int('play-flags', playFlags);
}
});
GObject.registerClass({
GTypeName: 'ClapperPrefsSpin',
Properties: {
'spin-adjustment': GObject.ParamSpec.object(
'spin-adjustment',
'GtkAdjustment',
'Custom GtkAdjustment for spin button',
GObject.ParamFlags.WRITABLE,
Gtk.Adjustment
),
},
},
class ClapperPrefsSpin extends PrefsActionRow
{
_init()
{
super._init(new Gtk.SpinButton(widgetOpts));
this._bindProp = 'value';
}
set spin_adjustment(value)
{
this.activatable_widget.set_adjustment(value);
}
});
let PrefsPluginFeature = GObject.registerClass({
GTypeName: 'ClapperPrefsPluginFeature',
},
class ClapperPrefsPluginFeature extends Adw.ActionRow
{
_init(featureObj)
{
super._init({
title: featureObj.name,
});
const enableSwitch = new Gtk.Switch(widgetOpts);
const spinButton = new Gtk.SpinButton(widgetOpts);
spinButton.set_range(0, 512);
spinButton.set_increments(1, 1);
enableSwitch.active = featureObj.enabled;
spinButton.value = featureObj.rank;
this.currentRank = featureObj.rank;
this.add_suffix(enableSwitch);
this.add_suffix(spinButton);
enableSwitch.bind_property('active', spinButton, 'sensitive',
GObject.BindingFlags.SYNC_CREATE
);
enableSwitch.connect('notify::active', this._onSwitchActivate.bind(this));
spinButton.connect('value-changed', this._onValueChanged.bind(this));
}
_updateRanking(data)
{
settings.set_string('plugin-ranking', JSON.stringify(data));
}
_onSwitchActivate(enableSwitch)
{
const { settingsData } = this.get_ancestor(PrefsPluginRankingSubpage);
const pluginExp = this.get_ancestor(PrefsPluginExpander);
if(enableSwitch.active) {
settingsData[this.title] = this.currentRank;
pluginExp.modCount++;
}
else if(settingsData[this.title] != null) {
delete settingsData[this.title];
pluginExp.modCount--;
}
this._updateRanking(settingsData);
}
_onValueChanged(spinButton)
{
const { settingsData } = this.get_ancestor(PrefsPluginRankingSubpage);
this.currentRank = spinButton.value;
settingsData[this.title] = this.currentRank;
this._updateRanking(settingsData);
}
});
GObject.registerClass({
GTypeName: 'ClapperPrefsFont',
},
class ClapperPrefsFont extends PrefsActionRow
{
_init()
{
const opts = {
use_font: true,
use_size: true,
};
Object.assign(opts, widgetOpts);
super._init(new Gtk.FontButton(opts));
this._bindProp = 'font';
}
});
GObject.registerClass({
GTypeName: 'ClapperPrefsCombo',
Properties: getCommonProps(),
},
class ClapperPrefsCombo extends Adw.ComboRow
{
_init()
{
super._init();
this._schemaName = null;
}
set schema_name(value)
{
this._schemaName = value;
}
vfunc_realize()
{
super.vfunc_realize();
if(this._schemaName)
settings.bind(this._schemaName, this, 'selected', flags);
this._schemaName = null;
}
});
GObject.registerClass({
GTypeName: 'ClapperPrefsExpander',
Properties: getCommonProps(),
},
class ClapperPrefsExpander extends Adw.ExpanderRow
{
_init()
{
super._init({
show_enable_switch: true,
});
}
set schema_name(value)
{
settings.bind(value, this, 'enable-expansion', flags);
}
});
GObject.registerClass({
GTypeName: 'ClapperPrefsPluginRankingSubpageRow',
},
class ClapperPrefsPluginRankingSubpageRow extends PrefsSubpageRow
{
_createSubpage()
{
return new PrefsPluginRankingSubpage();
}
});
let PrefsPluginExpander = GObject.registerClass({
GTypeName: 'ClapperPrefsPluginExpander',
},
class ClapperPrefsPluginExpander extends Adw.ExpanderRow
{
_init(plugin, modCount)
{
super._init({
title: plugin,
show_enable_switch: false,
});
this.modCount = modCount;
this.expandSignal = this.connect(
'notify::expanded', this._onExpandedNotify.bind(this)
);
}
set modCount(value)
{
this._modCount = value;
this.icon_name = (value > 0) ? 'dialog-information-symbolic' : null;
debug(`Plugin ${this.title} has ${value} modified features`);
}
get modCount()
{
return this._modCount;
}
_onExpandedNotify()
{
if(!this.expanded)
return;
this.disconnect(this.expandSignal);
this.expandSignal = null;
const { pluginsData } = this.get_ancestor(PrefsPluginRankingSubpage);
pluginsData[this.title].sort((a, b) =>
(a.name > b.name) - (a.name < b.name)
);
const featuresNames = Object.keys(pluginsData[this.title]);
debug(`Adding ${featuresNames.length} features to the list of plugin: ${this.title}`);
for(let featureObj of pluginsData[this.title]) {
const prefsPluginFeature = new PrefsPluginFeature(featureObj);
/* TODO: Remove old libadwaita compat */
if(this.add_row)
this.add_row(prefsPluginFeature);
else
this.add(prefsPluginFeature);
}
}
});
let PrefsPluginRankingSubpage = GObject.registerClass({
GTypeName: 'ClapperPrefsPluginRankingSubpage',
Template: Misc.getResourceUri('ui/preferences-plugin-ranking-subpage.ui'),
InternalChildren: ['decoders_group'],
},
class ClapperPrefsPluginRankingSubpage extends Gtk.Box
{
_init()
{
super._init();
this.addTitle('Appearance');
this.addCheckButton('Enable dark theme', 'dark-theme');
if(!Gst.is_initialized())
Gst.init(null);
this.addTitle('Performance');
this.addCheckButton('Render window shadows', 'render-shadows');
const gstRegistry = Gst.Registry.get();
const decoders = gstRegistry.feature_filter(this._decodersFilterCb, false);
const plugins = {};
const mods = {};
this.settingsData = {};
/* In case someone messed up gsettings values */
try {
this.settingsData = JSON.parse(settings.get_string('plugin-ranking'));
/* Might be an array in older Clapper versions */
if(Array.isArray(this.settingsData))
this.settingsData = {};
}
catch(err) { /* Ignore */ }
for(let decoder of decoders) {
const pluginName = decoder.get_plugin_name();
/* Do not add unsupported plugins */
switch(pluginName) {
case 'playback':
continue;
default:
break;
}
if(!plugins[pluginName])
plugins[pluginName] = [];
const decName = decoder.get_name();
const isModified = (this.settingsData[decName] != null);
plugins[pluginName].push({
name: decName,
rank: decoder.get_rank(),
enabled: isModified,
});
if(isModified) {
if(!mods[pluginName])
mods[pluginName] = 0;
mods[pluginName]++;
}
}
const pluginsNames = Object.keys(plugins);
debug(`Adding ${pluginsNames.length} found plugins to the list`);
this.pluginsData = pluginsNames.sort().reduce((res, key) =>
(res[key] = plugins[key], res), {}
);
for(let plugin in this.pluginsData) {
const modCount = mods[plugin] || 0;
this._decoders_group.add(new PrefsPluginExpander(plugin, modCount));
}
}
_decodersFilterCb(feature)
{
return (
feature.list_is_type
&& feature.list_is_type(Gst.ELEMENT_FACTORY_TYPE_DECODER)
);
}
_onReturnClicked(button)
{
const prefs = this.get_ancestor(PrefsWindow);
prefs.close_subpage();
}
});
var PrefsWindow = GObject.registerClass({
GTypeName: 'ClapperPrefsWindow',
Template: Misc.getResourceUri('ui/preferences-window.ui'),
},
class ClapperPrefsWindow extends Adw.PreferencesWindow
{
_init(window)
{
super._init({
transient_for: window,
});
/* FIXME: old libadwaita compat, should be
* normally in prefs UI file */
this.can_swipe_back = true;
this.can_navigate_back = true;
this.show();
}
});

View File

@@ -1,238 +0,0 @@
const { Gio, GObject, Gtk } = imports.gi;
const Debug = imports.src.debug;
const Misc = imports.src.misc;
const { debug } = Debug;
const { settings } = Misc;
var Notebook = GObject.registerClass(
class ClapperPrefsNotebook extends Gtk.Notebook
{
_init(pages, isSubpage)
{
super._init({
show_border: false,
vexpand: true,
hexpand: true,
});
if(isSubpage) {
this.set_tab_pos(Gtk.PositionType.LEFT);
this.add_css_class('prefssubpage');
}
this.addArrayPages(pages);
}
addArrayPages(array)
{
for(let obj of array)
this.addObjectPages(obj);
}
addObjectPages(item)
{
const widget = (item.pages)
? new Notebook(item.pages, true)
: new item.widget();
this.addToNotebook(widget, item.title);
}
addToNotebook(widget, title)
{
const label = new Gtk.Label({
label: title,
});
this.append_page(widget, label);
}
_onClose()
{
const totalPages = this.get_n_pages();
let index = 0;
while(index < totalPages) {
const page = this.get_nth_page(index);
page._onClose();
index++;
}
}
});
var Grid = GObject.registerClass(
class ClapperPrefsGrid extends Gtk.Grid
{
_init()
{
super._init({
row_spacing: 6,
column_spacing: 20,
});
this.flag = Gio.SettingsBindFlags.DEFAULT;
this.gridIndex = 0;
this.widgetDefaults = {
width_request: 160,
halign: Gtk.Align.END,
valign: Gtk.Align.CENTER,
};
}
addToGrid(leftWidget, rightWidget)
{
let spanWidth = 2;
if(rightWidget) {
spanWidth = 1;
rightWidget.bind_property('visible', leftWidget, 'visible',
GObject.BindingFlags.SYNC_CREATE
);
this.attach(rightWidget, 1, this.gridIndex, 1, 1);
}
this.attach(leftWidget, 0, this.gridIndex, spanWidth, 1);
this.gridIndex++;
return rightWidget || leftWidget;
}
addTitle(text)
{
const label = this.getLabel(text, true);
return this.addToGrid(label);
}
addComboBoxText(text, entries, setting)
{
const label = this.getLabel(text + ':');
const widget = this.getComboBoxText(entries, setting);
return this.addToGrid(label, widget);
}
addSpinButton(text, min, max, setting, precision)
{
const label = this.getLabel(text + ':');
const widget = this.getSpinButton(min, max, setting, precision);
return this.addToGrid(label, widget);
}
addCheckButton(text, setting)
{
const widget = this.getCheckButton(text, setting);
return this.addToGrid(widget);
}
addPlayFlagCheckButton(text, flag)
{
const checkButton = this.addCheckButton(text);
const playFlags = settings.get_int('play-flags');
checkButton.active = ((playFlags & flag) === flag);
checkButton.connect('toggled', this._onPlayFlagToggled.bind(this, flag));
return checkButton;
}
addFontButton(text, setting)
{
const label = this.getLabel(text + ':');
const widget = this.getFontButton(setting);
return this.addToGrid(label, widget);
}
getLabel(text, isTitle)
{
const marginTop = (isTitle && this.gridIndex > 0) ? 16 : 0;
const marginBottom = (isTitle) ? 2 : 0;
let marginLR = 0;
if(isTitle)
text = '<span font="12"><b>' + text + '</b></span>';
else
marginLR = 12;
return new Gtk.Label({
label: text,
use_markup: true,
hexpand: true,
halign: Gtk.Align.START,
margin_top: marginTop,
margin_bottom: marginBottom,
margin_start: marginLR,
margin_end: marginLR,
});
}
getComboBoxText(entries, setting)
{
const comboBox = new Gtk.ComboBoxText(this.widgetDefaults);
for(let entry of entries)
comboBox.append(entry[0], entry[1]);
settings.bind(setting, comboBox, 'active-id', this.flag);
return comboBox;
}
getSpinButton(min, max, setting, precision)
{
precision = precision || 1;
const spinButton = new Gtk.SpinButton(this.widgetDefaults);
spinButton.set_range(min, max);
spinButton.set_digits(precision % 1 === 0 ? 0 : 3);
spinButton.set_increments(precision, 1);
settings.bind(setting, spinButton, 'value', this.flag);
return spinButton;
}
getCheckButton(text, setting)
{
const checkButton = new Gtk.CheckButton({
label: text || null,
});
if(setting)
settings.bind(setting, checkButton, 'active', this.flag);
return checkButton;
}
getFontButton(setting)
{
const fontButton = new Gtk.FontButton({
use_font: true,
use_size: true,
});
settings.bind(setting, fontButton, 'font', this.flag);
return fontButton;
}
_onPlayFlagToggled(flag, button)
{
let playFlags = settings.get_int('play-flags');
if(button.active)
playFlags |= flag;
else
playFlags &= ~flag;
settings.set_int('play-flags', playFlags);
}
_onClose(name)
{
if(name)
debug(`cleanup of prefs ${name} page`);
}
});

View File

@@ -7,7 +7,9 @@ const Misc = imports.src.misc;
const { debug } = Debug;
const { settings } = Misc;
var CustomRevealer = GObject.registerClass(
var CustomRevealer = GObject.registerClass({
GTypeName: 'ClapperCustomRevealer',
},
class ClapperCustomRevealer extends Gtk.Revealer
{
_init(opts)
@@ -41,7 +43,9 @@ class ClapperCustomRevealer extends Gtk.Revealer
}
});
var RevealerTop = GObject.registerClass(
var RevealerTop = GObject.registerClass({
GTypeName: 'ClapperRevealerTop',
},
class ClapperRevealerTop extends CustomRevealer
{
_init()
@@ -163,7 +167,7 @@ class ClapperRevealerTop extends CustomRevealer
? endTime.format(this.timeFormat)
: 'unknown';
this.endTime.label = `Ends at: ${end}`;
this.endTime.label = _('Ends at: %s').format(end);
/* Make sure that next timeout is always run after clock changes,
* by delaying it for additional few milliseconds */
@@ -215,7 +219,9 @@ class ClapperRevealerTop extends CustomRevealer
}
});
var RevealerBottom = GObject.registerClass(
var RevealerBottom = GObject.registerClass({
GTypeName: 'ClapperRevealerBottom',
},
class ClapperRevealerBottom extends CustomRevealer
{
_init()
@@ -257,10 +263,9 @@ class ClapperRevealerBottom extends CustomRevealer
{
const maxWidth = 1720;
if(layoutWidth <= maxWidth)
return;
const margin = (layoutWidth - maxWidth) / 2;
const margin = (layoutWidth > maxWidth)
? (layoutWidth - maxWidth) / 2
: 0;
this.margin_start = margin;
this.margin_end = margin;
@@ -273,7 +278,9 @@ class ClapperRevealerBottom extends CustomRevealer
}
});
var ControlsRevealer = GObject.registerClass(
var ControlsRevealer = GObject.registerClass({
GTypeName: 'ClapperControlsRevealer',
},
class ClapperControlsRevealer extends Gtk.Revealer
{
_init()
@@ -314,6 +321,8 @@ class ClapperControlsRevealer extends Gtk.Revealer
const isStick = (isFloating && settings.get_boolean('floating-stick'));
DBus.shellWindowEval('stick', isStick);
this.root.child.refreshWindowTitle(this.root.title);
}
_onControlsRevealed()
@@ -343,7 +352,9 @@ class ClapperControlsRevealer extends Gtk.Revealer
}
});
var ButtonsRevealer = GObject.registerClass(
var ButtonsRevealer = GObject.registerClass({
GTypeName: 'ClapperButtonsRevealer',
},
class ClapperButtonsRevealer extends Gtk.Revealer
{
_init(trType, toggleButton)

Some files were not shown because too many files have changed in this diff Show More