@@ -8,111 +7,51 @@
# It's getting Cozy
+![Unit Testing](https://github.com/geigi/cozy/workflows/Unit%20Testing/badge.svg)
+![Flathub Downloads](https://img.shields.io/flathub/downloads/com.github.geigi.cozy?color=e66100&logo=flatpak)
+
![Screenshot](https://raw.githubusercontent.com/geigi/cozy/img/img/screenshot1.png)
Cozy is a modern audiobook player for Linux.
-Head over to [Matrix](https://matrix.to/#/#cozy:gnome.org?via=matrix.org&via=gnome.org) to join the conversation.
+Head over to [Matrix](https://matrix.to/#/#cozy:gnome.org) to join the conversation.
## Here are some of the current features:
-- **Import** your audiobooks into Cozy to browse them comfortably
+- **Import** all your audio books into Cozy to browse them comfortably
- **Sort** your audio books by author, reader & name
- **Remembers** your **playback position**
- **Sleep timer**
-- **Playback speed control**
+- **Playback speed control** for each book individually
- **Search** your library
- **Offline Mode!** This allows you to keep an audio book on your internal storage if you store your audiobooks on an external or network drive. Perfect for listening on the go!
-- Add **mulitple storage locations**
+- Add **multiple storage locations**
- **Drag & Drop** to import new audio books
-- Support for DRM free **mp3, m4a (aac, ALAC, …), flac, ogg, opus, wav** files
-- Mpris integration (**Media keys** & playback info for desktop environment)
+- Listen to your DRM free **mp3, m4b, m4a (aac, ALAC, …), flac, ogg and wav** audio books
+- MPRIS integration (**Media keys** & playback info for desktop environment)
# Install
+The preferred source for installing Cozy is Flathub
+
+
+
+### Distro packages
+
| Distro | Package |
|--------|:---------:|
-| Flatpak | |
| openSUSE |
After almost two years, a new version of Cozy is finally here! This release brings an updated user interface along with numerous bug fixes and improved performance.
@@ -67,7 +67,7 @@
-
+
Support for GTK style manager (thanks A6GibKm)
Use natural sorting for chapter titles
@@ -76,7 +76,7 @@
-
+
This release features a redesigned preference window. All settings can now be searched. Good news for mobile users too: the redesign should work a lot better on mobile devices now.
@@ -91,7 +91,7 @@
-
+
A small bugfix release which makes Cozy more reliable.
@@ -104,7 +104,7 @@
-
+
A small bugfix release which makes Cozy more reliable.
@@ -120,7 +120,7 @@
-
+
A small bugfix release which makes Cozy more reliable.
@@ -136,7 +136,7 @@
-
+
This release features a redesigned library with responsiveness in mind.
@@ -153,7 +153,7 @@
-
+
Performance improvements for the book detail view and some bugfixes.
@@ -168,7 +168,7 @@
-
+
A small bugfix release which makes Cozy more reliable.
@@ -183,7 +183,7 @@
-
+
A small bugfix release which makes Cozy more reliable.
@@ -198,7 +198,7 @@
-
+
This release features chapter support for m4b files.
@@ -212,7 +212,7 @@
-
+
This release features chapter support for m4b files.
@@ -238,8 +238,8 @@
360
- #ffa348
- #ffa348
+ #ffbe6f
+ #6a451f2
diff --git a/data/com.github.geigi.cozy.gschema.xml b/data/com.github.geigi.cozy.gschema.xml
index ecb44add..b8ddeec9 100644
--- a/data/com.github.geigi.cozy.gschema.xml
+++ b/data/com.github.geigi.cozy.gschema.xml
@@ -41,11 +41,6 @@
Display the time according to the playback speed.
-
- false
- Enable Dark Mode.
-
- falseSwap author and reader tag assignment.
@@ -112,4 +107,4 @@
-
\ No newline at end of file
+
diff --git a/data/gresource.xml b/data/gresource.xml
index 79834c56..ed745904 100644
--- a/data/gresource.xml
+++ b/data/gresource.xml
@@ -1,8 +1,28 @@
+ style.css
+ ui/album_element.ui
+ ui/book_detail.ui
+ ui/book_element.ui
+ ui/chapter_element.ui
+ ui/error_reporting.ui
+ ui/first_import_button.ui
+ ui/headerbar.ui
+ ui/main_window.ui
+ ui/media_controller.ui
+ ui/playback_speed_popover.ui
+ ui/preferences.ui
+ ui/progress_popover.ui
+ ui/search_page.ui
+ ui/seek_bar.ui
+ ui/storage_locations.ui
+ ui/storage_row.ui
+ ui/timer_popover.ui
+
+
+ ../AUTHORS.mdcom.github.geigi.cozy.appdata.xml
- ../AUTHORS.md
diff --git a/data/meson.build b/data/meson.build
index d6e010a5..8d002ba1 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -2,14 +2,15 @@ subdir('ui')
subdir('icons')
gnome.compile_resources(
- meson.project_name() + '.appdata',
- 'gresource.xml',
- gresource_bundle: true,
- install_dir: DATA_DIR,
- install: true,
+ meson.project_name(),
+ 'gresource.xml',
+ dependencies: blueprints,
+ gresource_bundle: true,
+ source_dir: meson.current_build_dir(),
+ install_dir: DATA_DIR,
+ install: true,
)
-
install_data(
meson.project_name() + '.gschema.xml',
install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')
diff --git a/data/ui/style.css b/data/style.css
similarity index 100%
rename from data/ui/style.css
rename to data/style.css
diff --git a/data/ui/album_element.blp b/data/ui/album_element.blp
new file mode 100644
index 00000000..f970886c
--- /dev/null
+++ b/data/ui/album_element.blp
@@ -0,0 +1,71 @@
+using Gtk 4.0;
+
+template $AlbumElement: Box {
+ orientation: vertical;
+
+ Overlay {
+ child: Stack stack {
+ Picture artwork {
+ content-fit: contain;
+ hexpand: true;
+ vexpand: true;
+
+ styles [
+ "artwork_rounded_top_corners",
+ ]
+ }
+
+ Image book_icon {
+ pixel-size: 200;
+ hexpand: true;
+ vexpand: true;
+ }
+ };
+
+ [overlay]
+ Revealer play_button_revealer {
+ name: 'play_button_revealer';
+ halign: end;
+ valign: end;
+ hexpand: false;
+ vexpand: false;
+ transition-type: crossfade;
+ transition-duration: 200;
+
+ child: Overlay {
+ halign: end;
+ valign: end;
+ margin-end: 10;
+ margin-bottom: 10;
+
+ child: Button play_button {
+ width-request: 40;
+ height-request: 40;
+ focusable: true;
+ focus-on-click: false;
+ halign: center;
+ valign: center;
+ icon-name: 'media-playback-start-symbolic';
+ tooltip-text: _("Start/Stop playback");
+ accessibility {
+ label: _("Start or pause the playback");
+ }
+
+ styles [
+ "circular",
+ "book_play_button",
+ ]
+ };
+
+ [overlay]
+ DrawingArea progress_drawing_area {
+ can-target: false;
+ width-request: 40;
+ height-request: 40;
+ halign: center;
+ valign: center;
+ }
+ };
+ }
+ }
+}
diff --git a/data/ui/album_element.ui b/data/ui/album_element.ui
index abb6616f..57d6bac0 100644
--- a/data/ui/album_element.ui
+++ b/data/ui/album_element.ui
@@ -1,76 +1,72 @@
-
-
-
-
- vertical
-
-
-
-
-
+using Gtk 4.0;
+
+template $AlbumElement: Box {
+ orientation: vertical;
+
+ Overlay {
+ child: Stack stack {
+ Picture artwork {
+ content-fit: contain;
+ hexpand: true;
+ vexpand: true;
+
+ styles [
+ "artwork_rounded_top_corners",
+ ]
+ }
+
+ Image book_icon {
+ pixel-size: 200;
+ hexpand: true;
+ vexpand: true;
+ }
+ };
+
+ [overlay]
+ Revealer play_button_revealer {
+ name: 'play_button_revealer';
+ halign: end;
+ valign: end;
+ hexpand: false;
+ vexpand: false;
+ transition-type: crossfade;
+ transition-duration: 200;
+
+ child: Overlay {
+ halign: end;
+ valign: end;
+ margin-end: 10;
+ margin-bottom: 10;
+
+ child: Button play_button {
+ width-request: 40;
+ height-request: 40;
+ focusable: true;
+ focus-on-click: false;
+ halign: center;
+ valign: center;
+ icon-name: 'media-playback-start-symbolic';
+ tooltip-text: _("Start/Stop playback");
+ accessibility {
+ label: _("Start or pause the playback");
+ }
+
+ styles [
+ "circular",
+ "book_play_button",
+ ]
+ };
+
+ [overlay]
+ DrawingArea progress_drawing_area {
+ can-target: false;
+ width-request: 40;
+ height-request: 40;
+ halign: center;
+ valign: center;
+ }
+ };
+ }
+ }
+}
+
diff --git a/data/ui/book_detail.blp b/data/ui/book_detail.blp
new file mode 100644
index 00000000..5a1dc1f2
--- /dev/null
+++ b/data/ui/book_detail.blp
@@ -0,0 +1,360 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $BookDetail: Box {
+ Box {
+ orientation: vertical;
+
+ ScrolledWindow {
+ focusable: true;
+ valign: center;
+ vexpand: true;
+ hscrollbar-policy: never;
+ propagate-natural-width: true;
+ propagate-natural-height: true;
+
+ child: Viewport {
+ child: FlowBox main_flow_box {
+ valign: center;
+ margin-start: 12;
+ margin-end: 12;
+ margin-top: 12;
+ margin-bottom: 12;
+ hexpand: true;
+ vexpand: true;
+ column-spacing: 12;
+ row-spacing: 12;
+ min-children-per-line: 1;
+ max-children-per-line: 2;
+ selection-mode: none;
+
+ FlowBoxChild {
+ halign: center;
+ valign: start;
+
+ child: Adw.Clamp {
+ maximum-size: 250;
+ tightening-threshold: 250;
+
+ Box {
+ orientation: vertical;
+ spacing: 6;
+
+ Box album_art_container {
+ halign: center;
+ margin-bottom: 18;
+ width-request: 256;
+ height-request: 256;
+
+ Picture album_art {
+ styles [
+ "book_detail_art",
+ ]
+ }
+
+ styles [
+ "card",
+ ]
+ }
+
+ Label book_label {
+ halign: start;
+ valign: end;
+ label: _("Book name");
+ wrap: true;
+ wrap-mode: word_char;
+ ellipsize: end;
+ max-width-chars: 25;
+ lines: 4;
+ xalign: 0;
+
+ styles [
+ "title-1",
+ "bold",
+ ]
+ }
+
+ Label author_label {
+ halign: start;
+ valign: start;
+ margin-bottom: 6;
+ label: _("Book author");
+ wrap: true;
+ wrap-mode: word_char;
+ ellipsize: end;
+ max-width-chars: 30;
+ lines: 2;
+ xalign: 0;
+
+ styles [
+ "title-3",
+ "dim-label",
+ ]
+ }
+
+ Box {
+ halign: center;
+ valign: center;
+ margin-bottom: 12;
+ spacing: 5;
+
+ Box download_box {
+ halign: end;
+ valign: center;
+
+ Image download_image {
+ icon-name: 'download-symbolic';
+ }
+
+ Label download_label {
+ margin-start: 5;
+ margin-end: 4;
+ label: _("Download");
+ }
+ }
+
+ Switch download_switch {
+ focusable: true;
+ halign: start;
+ valign: center;
+ }
+ }
+
+ ProgressBar book_progress_bar {
+ width-request: 250;
+ halign: center;
+ valign: start;
+ show-text: true;
+ margin-bottom: 18;
+ }
+
+ Grid {
+ margin-bottom: 18;
+ hexpand: true;
+ row-spacing: 4;
+ column-spacing: 20;
+
+ Label remaining_text {
+ halign: start;
+ hexpand: true;
+ label: _("Remaining");
+
+ styles [
+ "dim-label",
+ ]
+
+ layout {
+ column: '0';
+ row: '3';
+ }
+ }
+
+ Label remaining_label {
+ hexpand: true;
+ label: 'label';
+ xalign: 0;
+
+ layout {
+ column: '1';
+ row: '3';
+ }
+ }
+
+ Label total_label {
+ hexpand: true;
+ label: 'label';
+ xalign: 0;
+
+ layout {
+ column: '1';
+ row: '2';
+ }
+ }
+
+ Label last_played_label {
+ hexpand: true;
+ label: 'label';
+ xalign: 0;
+
+ layout {
+ column: '1';
+ row: '1';
+ }
+ }
+
+ Label {
+ halign: start;
+ label: _("Total");
+
+ styles [
+ "dim-label",
+ ]
+
+ layout {
+ column: '0';
+ row: '2';
+ }
+ }
+
+ Label {
+ halign: start;
+ label: _("Last played");
+
+ styles [
+ "dim-label",
+ ]
+
+ layout {
+ column: '0';
+ row: '1';
+ }
+ }
+
+ Label published_text {
+ halign: start;
+ label: _("Published");
+
+ styles [
+ "dim-label",
+ ]
+
+ layout {
+ column: '0';
+ row: '0';
+ }
+ }
+
+ Label published_label {
+ hexpand: true;
+ label: 'label';
+ xalign: 0;
+
+ layout {
+ column: '1';
+ row: '0';
+ }
+ }
+ }
+
+ Box unavailable_box {
+ tooltip-text: _("Some or all files of this book cannot be found.");
+ halign: center;
+ spacing: 4;
+
+ Image {
+ icon-name: 'info-symbolic';
+
+ styles [
+ "unavailable_image",
+ ]
+ }
+
+ Label {
+ label: _("unavailable");
+
+ styles [
+ "unavailable_label",
+ ]
+ }
+
+ styles [
+ "unavailable_box",
+ ]
+ }
+
+ Box {
+ margin-top: 20;
+ orientation: vertical;
+
+ Button play_book_button {
+ focusable: true;
+ receives-default: true;
+ halign: center;
+ icon-name: 'media-playback-start-symbolic';
+ tooltip-text: _("Start/Stop playback");
+ accessibility {
+ label: _("Start or pause the playback");
+ }
+
+ styles [
+ "suggested-action",
+ "pill",
+ ]
+ }
+ }
+ }
+ };
+ }
+
+ FlowBoxChild {
+ hexpand: true;
+ vexpand: true;
+
+ child: Adw.Clamp {
+ maximum-size: 500;
+ tightening-threshold: 350;
+
+ Stack chapters_stack {
+ StackPage {
+ name: 'chapters_wrapper';
+ title: 'page0';
+
+ child: ScrolledWindow book_overview_scroller {
+ focusable: true;
+ hexpand: true;
+ vexpand: true;
+ hscrollbar-policy: never;
+ vscrollbar-policy: never;
+ propagate-natural-width: true;
+ propagate-natural-height: true;
+
+ child: Viewport track_list_container {
+ child: Box chapter_box {
+ valign: start;
+ margin-start: 8;
+ margin-end: 8;
+ margin-top: 8;
+ margin-bottom: 8;
+ orientation: vertical;
+ spacing: 4;
+ };
+
+ styles [
+ "no_frame",
+ ]
+ };
+
+ styles [
+ "no_frame",
+ ]
+ };
+ }
+
+ StackPage {
+ name: 'chapters_loader';
+ title: 'chapters';
+
+ child: Box {
+ halign: center;
+ valign: start;
+ margin-top: 8;
+
+ Spinner {
+ halign: center;
+ hexpand: true;
+ }
+
+ Label chapters_loading_text {
+ halign: center;
+ label: _("Loading chapters, please wait...");
+ }
+ };
+ }
+ }
+ };
+ }
+ };
+ };
+ }
+ }
+}
diff --git a/data/ui/book_detail.ui b/data/ui/book_detail.ui
deleted file mode 100644
index df9a7838..00000000
--- a/data/ui/book_detail.ui
+++ /dev/null
@@ -1,387 +0,0 @@
-
-
-
-
-
-
- vertical
-
-
- true
- center
- true
- never
- true
- true
-
-
-
-
- center
- 12
- 12
- 12
- 12
- true
- true
- 12
- 12
- 1
- 2
- none
-
-
- center
- start
-
-
- 250
- 250
-
-
- vertical
- 6
-
-
- center
- 18
- 256
- 256
-
-
-
-
-
-
-
-
-
-
- start
- end
- Book name
- true
- word-char
- end
- 25
- 4
- 0
-
-
-
-
-
- start
- start
- 6
- Book author
- true
- word-char
- end
- 30
- 2
- 0
-
-
-
-
-
- center
- center
- 12
- 5
-
-
- end
- center
-
-
- download-symbolic
-
-
-
-
- 5
- 4
- Download
-
-
-
-
-
-
- true
- start
- center
-
-
-
-
-
-
- 250
- center
- start
- true
- 18
-
-
-
-
- 18
- true
- 4
- 20
-
-
- start
- true
- Remaining
-
-
- 0
- 3
-
-
-
-
-
- true
- label
- 0
-
- 1
- 3
-
-
-
-
-
- true
- label
- 0
-
- 1
- 2
-
-
-
-
-
- true
- label
- 0
-
- 1
- 1
-
-
-
-
-
- start
- Total
-
-
- 0
- 2
-
-
-
-
-
- start
- Last played
-
-
- 0
- 1
-
-
-
-
-
- start
- Published
-
-
- 0
- 0
-
-
-
-
-
- true
- label
- 0
-
- 1
- 0
-
-
-
-
-
-
-
- Some or all files of this book cannot be found.
- center
- 4
-
-
- info-symbolic
-
-
-
-
-
- unavailable
-
-
-
-
-
-
-
-
- 20
- vertical
-
-
- true
- true
- center
- media-playback-start-symbolic
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
-
-
- 500
- 350
-
-
-
-
- chapters_wrapper
- page0
-
-
- true
- true
- true
- never
- never
- true
- true
-
-
-
-
- start
- 8
- 8
- 8
- 8
- vertical
- 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- chapters_loader
- chapters
-
-
- center
- start
- 8
-
-
- center
- true
-
-
-
-
- center
- Loading chapters, please wait...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/book_element.blp b/data/ui/book_element.blp
new file mode 100644
index 00000000..db15d23d
--- /dev/null
+++ b/data/ui/book_element.blp
@@ -0,0 +1,61 @@
+
+using Gtk 4.0;
+
+template $BookElement: FlowBoxChild {
+ height-request: 90;
+ width-request: 90;
+
+ child: Box container_box {
+ focusable: true;
+ tooltip-text: _("Open book overview");
+ orientation: vertical;
+ spacing: 1;
+ hexpand: true;
+ vexpand: true;
+
+ Label name_label {
+ halign: start;
+ valign: end;
+ margin-top: 12;
+ margin-start: 12;
+ margin-end: 12;
+ hexpand: false;
+ vexpand: false;
+ wrap: true;
+ ellipsize: end;
+ max-width-chars: 20;
+ xalign: 0;
+ yalign: 0;
+
+ styles [
+ "heading",
+ ]
+ }
+
+ Label author_label {
+ halign: start;
+ valign: end;
+ margin-top: 12;
+ margin-bottom: 12;
+ margin-start: 12;
+ margin-end: 12;
+ hexpand: false;
+ vexpand: false;
+ wrap: true;
+ ellipsize: end;
+ max-width-chars: 30;
+ xalign: 0;
+ yalign: 0;
+
+ styles [
+ "dim-label",
+ "caption",
+ ]
+ }
+
+ styles [
+ "card",
+ "book_card",
+ ]
+ };
+}
diff --git a/data/ui/book_element.ui b/data/ui/book_element.ui
deleted file mode 100644
index 142e7004..00000000
--- a/data/ui/book_element.ui
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
- 90
- 90
-
-
- true
- Open book overview
- vertical
- 1
- true
- true
-
-
- start
- end
- 12
- 12
- 12
- false
- false
- true
- end
- 20
- 0
- 0
-
-
-
-
-
- start
- end
- 12
- 12
- 12
- 12
- false
- false
- true
- end
- 30
- 0
- 0
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/chapter_element.blp b/data/ui/chapter_element.blp
new file mode 100644
index 00000000..298c19f1
--- /dev/null
+++ b/data/ui/chapter_element.blp
@@ -0,0 +1,64 @@
+using Gtk 4.0;
+
+template $ChapterElement: Box {
+ tooltip-text: _("Play this part");
+
+ Box {
+ margin-start: 12;
+ margin-end: 12;
+ margin-top: 6;
+ margin-bottom: 6;
+ spacing: 5;
+
+ Stack icon_stack {
+ StackPage {
+ name: 'number';
+
+ child: Label number_label {
+ halign: start;
+ width-chars: 3;
+ xalign: 0;
+ yalign: 0;
+
+ styles [
+ "dim-label",
+ ]
+ };
+ }
+
+ StackPage {
+ name: 'play_icon';
+
+ child: Image play_icon {
+ halign: start;
+ valign: center;
+ icon-name: 'media-playback-start-symbolic';
+ pixel-size: 12;
+ };
+ }
+ }
+
+ Label title_label {
+ hexpand: true;
+ ellipsize: end;
+ max-width-chars: 50;
+ xalign: 0;
+ yalign: 0;
+
+ styles [
+ "semi-bold",
+ ]
+ }
+
+ Label duration_label {
+ halign: end;
+ justify: right;
+ xalign: 0;
+ yalign: 0;
+ }
+ }
+
+ styles [
+ "chapter_element",
+ ]
+}
diff --git a/data/ui/chapter_element.ui b/data/ui/chapter_element.ui
deleted file mode 100644
index 21137c26..00000000
--- a/data/ui/chapter_element.ui
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
- Play this part
-
-
- 12
- 12
- 6
- 6
- 5
-
-
-
-
- number
-
-
- start
- 3
- 0
- 0
-
-
-
-
-
-
-
- play_icon
-
-
- start
- center
- media-playback-start-symbolic
- 12
-
-
-
-
-
-
-
-
- true
- end
- 50
- 0
- 0
-
-
-
-
-
- end
- right
- 0
- 0
-
-
-
-
-
-
-
diff --git a/data/ui/error_reporting.blp b/data/ui/error_reporting.blp
new file mode 100644
index 00000000..6f59a85d
--- /dev/null
+++ b/data/ui/error_reporting.blp
@@ -0,0 +1,174 @@
+using Gtk 4.0;
+
+Adjustment verbose_adjustment {
+ lower: 1;
+ upper: 5;
+ value: 3;
+ step-increment: 1;
+ page-increment: 1;
+ page-size: 1;
+}
+
+template $ErrorReporting: Box {
+ orientation: vertical;
+ spacing: 10;
+
+ styles [
+ "card",
+ ]
+
+ Box header_box {
+ halign: center;
+ spacing: 15;
+
+ Label {
+ label: _("User feedback");
+ wrap: true;
+
+ styles [
+ "title-3",
+ ]
+ }
+
+ Image {
+ pixel-size: 32;
+ icon-name: 'book-alert-symbolic';
+ }
+ }
+
+ ListBox {
+ selection-mode: none;
+ activate-on-single-click: false;
+
+ styles [
+ "transparent_bg",
+ ]
+
+ ListBoxRow {
+ activatable: false;
+ selectable: false;
+
+ child: Box {
+ margin-start: 10;
+ margin-end: 10;
+ margin-top: 10;
+ margin-bottom: 10;
+ orientation: vertical;
+ spacing: 10;
+
+ Box {
+ valign: center;
+ orientation: vertical;
+ spacing: 10;
+
+ Label {
+ halign: start;
+ valign: center;
+ label: C_("Error and crash reporting dialog", "You can help improve Cozy by contributing information in case of errors and crashes. ");
+ wrap: true;
+ xalign: 0;
+ }
+
+ Label {
+ valign: center;
+ label: C_("Error and crash reporting dialog", "Contributing this information is optional and completely anonymous. We will never collect personal data, files you import or any information that could identify you.");
+ wrap: true;
+ xalign: 0;
+ }
+
+ Label {
+ valign: center;
+ halign: start;
+ label: C_("Error and crash reporting dialog", "Cozy is opensource and the user feedback source code can be inspected here: ");
+ wrap: true;
+ xalign: 0;
+ }
+ }
+
+ Label {
+ label: _("Sourcecode on GitHub");
+ use-markup: true;
+ }
+ };
+ }
+
+ ListBoxRow {
+ activatable: false;
+ selectable: false;
+
+ child: Separator {
+ margin-start: 5;
+ margin-end: 5;
+ };
+ }
+
+ ListBoxRow {
+ activatable: false;
+ selectable: false;
+
+ child: Scale verbose_scale {
+ focusable: true;
+ margin-start: 20;
+ margin-end: 20;
+ margin-top: 10;
+ margin-bottom: 10;
+ adjustment: verbose_adjustment;
+ restrict-to-fill-level: false;
+ fill-level: 0;
+ round-digits: 0;
+ };
+ }
+
+ ListBoxRow {
+ activatable: false;
+ selectable: false;
+
+ child: Separator {
+ margin-start: 5;
+ margin-end: 5;
+ };
+ }
+
+ ListBoxRow {
+ activatable: false;
+ selectable: false;
+
+ child: Box {
+ halign: start;
+ valign: center;
+ margin-start: 10;
+ margin-end: 10;
+ margin-top: 10;
+ margin-bottom: 10;
+ orientation: vertical;
+ spacing: 10;
+
+ Label level_label {
+ halign: start;
+ label: _("Detailed error reporting with import errors");
+ wrap: true;
+ xalign: 0;
+
+ styles [
+ "heading",
+ ]
+ }
+
+ Label description_label {
+ halign: start;
+ valign: start;
+ label: _("The following information will be sent in case of an error or crash:");
+ wrap: true;
+ xalign: 0;
+ }
+
+ Label details_label {
+ vexpand: true;
+ halign: start;
+ valign: start;
+ wrap: true;
+ }
+ };
+ }
+ }
+}
diff --git a/data/ui/error_reporting.ui b/data/ui/error_reporting.ui
deleted file mode 100644
index 53900433..00000000
--- a/data/ui/error_reporting.ui
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-
-
- 1
- 5
- 3
- 1
- 1
- 1
-
-
- vertical
- 10
-
-
-
- center
- 15
-
-
- User feedback
- 1
-
-
-
-
-
- 32
- book-alert-symbolic
-
-
-
-
-
-
- none
- 0
-
-
-
- 0
- 0
-
-
- 10
- 10
- 10
- 10
- vertical
- 10
-
-
- center
- vertical
- 10
-
-
- start
- center
- You can help improve Cozy by contributing information in case of errors and crashes.
- 1
- 0
-
-
-
-
- center
- Contributing this information is optional and completely anonymous. We will never collect personal data, files you import or any information that could identify you.
- 1
- 0
-
-
-
-
- center
- start
- Cozy is opensource and the user feedback source code can be inspected here:
- true
- 0
-
-
-
-
-
-
-
- <a href="https://github.com/geigi/cozy/tree/master/cozy/report">Sourcecode on GitHub</a>
- 1
-
-
-
-
-
-
-
-
- 0
- 0
-
-
- 5
- 5
-
-
-
-
-
-
- 0
- 0
-
-
- 1
- 20
- 20
- 10
- 10
- verbose_adjustment
- 0
- 0
- 0
-
-
-
-
-
-
- 0
- 0
-
-
- 5
- 5
-
-
-
-
-
-
- 0
- 0
-
-
- start
- center
- 10
- 10
- 10
- 10
- vertical
- 10
-
-
- start
- Detailed error reporting with import errors
- 1
- 0
-
-
-
-
-
- start
- start
- The following information will be sent in case of an error or crash:
- 1
- 0
-
-
-
-
- 1
- start
- start
- 1
-
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/first_import_button.blp b/data/ui/first_import_button.blp
new file mode 100644
index 00000000..57219637
--- /dev/null
+++ b/data/ui/first_import_button.blp
@@ -0,0 +1,23 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $FirstImportButton: Button {
+ halign: center;
+
+ Stack stack {
+ hhomogeneous: false;
+
+ Adw.ButtonContent label {
+ halign: center;
+ label: _("Select Folder");
+ icon-name: 'folder-open-symbolic';
+ }
+
+ Spinner spinner {}
+ }
+
+ styles [
+ "suggested-action",
+ "pill",
+ ]
+}
diff --git a/data/ui/first_import_button.ui b/data/ui/first_import_button.ui
deleted file mode 100644
index ff26a8b3..00000000
--- a/data/ui/first_import_button.ui
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- center
-
-
- false
-
-
- center
- Select Folder
- folder-open-symbolic
-
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/gresource.xml b/data/ui/gresource.xml
deleted file mode 100644
index b8098433..00000000
--- a/data/ui/gresource.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- style.css
- album_element.ui
- book_detail.ui
- book_element.ui
- chapter_element.ui
- error_reporting.ui
- first_import_button.ui
- headerbar.ui
- main_window.ui
- media_controller.ui
- playback_speed_popover.ui
- preferences.ui
- progress_popover.ui
- search_page.ui
- seek_bar.ui
- storage_locations.ui
- storage_row.ui
- timer_popover.ui
-
-
diff --git a/data/ui/headerbar.blp b/data/ui/headerbar.blp
new file mode 100644
index 00000000..88f00f14
--- /dev/null
+++ b/data/ui/headerbar.blp
@@ -0,0 +1,107 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $Headerbar: Box {
+ orientation: vertical;
+
+ Adw.HeaderBar headerbar {
+ [title]
+ Adw.ViewSwitcher view_switcher {
+ policy: wide;
+ }
+
+ [start]
+ ToggleButton show_sidebar_button {
+ visible: false;
+ icon-name: 'sidebar-show-symbolic';
+ tooltip-text: _("Toggle Filter Sidebar");
+ }
+
+ [end]
+ MenuButton menu_button {
+ tooltip-text: _("Options");
+ menu-model: primary_menu;
+ icon-name: 'open-menu-symbolic';
+
+ accessibility {
+ label: _("Open the options popover");
+ }
+ }
+
+ [end]
+ ToggleButton search_button {
+ name: 'Search toggle button';
+ tooltip-text: _("Search your library");
+ icon-name: 'loupe-large-symbolic';
+
+ accessibility {
+ label: _("Open the search popover");
+ }
+ }
+
+ [end]
+ MenuButton progress_menu_button {
+ visible: false;
+ can-focus: true;
+ tooltip-text: _("Display background task progress");
+
+ Spinner progress_spinner {}
+
+ styles [
+ "flat",
+ ]
+ }
+ }
+
+ SearchBar search_bar {
+ search-mode-enabled: bind search_button.active bidirectional;
+
+ Adw.Clamp {
+ margin-start: 6;
+ margin-end: 6;
+ margin-bottom: 6;
+ maximum-size: 450;
+
+ SearchEntry search_entry {
+ search-delay: 100;
+ placeholder-text: _("Start typing...");
+ hexpand: true;
+ }
+ }
+ }
+}
+
+menu primary_menu {
+ section {
+ item {
+ action: 'app.scan';
+ label: _("_Scan Library");
+ }
+ }
+
+ section {
+ item {
+ action: 'app.hide_offline';
+ label: _("_Hide unavailable books");
+ }
+ }
+
+ section {
+ item {
+ action: 'app.prefs';
+ label: _("_Preferences");
+ }
+
+ item {
+ action: 'app.about';
+ label: _("_About Cozy");
+ }
+ }
+
+ section {
+ item {
+ action: 'app.quit';
+ label: _("_Quit");
+ }
+ }
+}
diff --git a/data/ui/headerbar.ui b/data/ui/headerbar.ui
deleted file mode 100644
index 38b87863..00000000
--- a/data/ui/headerbar.ui
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
- vertical
-
-
-
-
- wide
-
-
-
-
- false
- sidebar-show-symbolic
- Toggle Filter Sidebar
-
-
-
-
- Options
- primary_menu
- open-menu-symbolic
-
- Open the options popover
-
-
-
-
-
- Search toggle button
- Search your library
- loupe-large-symbolic
-
- Open the search popover
-
-
-
-
-
- false
- true
- Display background task progress
-
-
-
-
-
-
-
-
-
-
-
-
-
- 6
- 6
- 6
- 450
-
-
- 100
- Start typing...
- true
-
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/main_window.blp b/data/ui/main_window.blp
new file mode 100644
index 00000000..4a96dc38
--- /dev/null
+++ b/data/ui/main_window.blp
@@ -0,0 +1,253 @@
+using Gtk 4.0;
+using Adw 1;
+
+Adw.ApplicationWindow app_window {
+ name: 'main_window';
+ title: 'Cozy';
+ icon-name: 'com.github.geigi.cozy';
+ width-request: 360;
+ height-request: 294;
+
+ Adw.Breakpoint {
+ condition ("max-width: 500sp")
+
+ setters {
+ mobile_view_switcher.reveal: true;
+ }
+ }
+
+ content: Overlay {
+ [overlay]
+ Revealer drop_revealer {
+ transition-type: crossfade;
+ reveal-child: false;
+ can-target: false;
+
+ Adw.StatusPage {
+ icon-name: 'library-symbolic';
+ title: _("Drop Audio Books Here to Add Them to Your Library");
+
+ styles [
+ "drag-overlay-status-page",
+ ]
+ }
+ }
+
+ Adw.ToastOverlay toast_overlay {
+ Stack main_stack {
+ StackPage {
+ name: 'main';
+
+ child: Adw.ToolbarView {
+ bottom-bar-style: raised;
+
+ content: Adw.NavigationView navigation_view {
+ Adw.NavigationPage {
+ title: _("Library");
+ tag: 'main';
+
+ Adw.ToolbarView header_container {
+ content: Stack library_stack {
+ transition-type: crossfade;
+
+ Adw.OverlaySplitView split_view {
+ show-sidebar: false;
+ collapsed: true;
+
+ sidebar: Adw.ViewStack sort_stack {
+ vexpand: true;
+
+ Adw.ViewStackPage {
+ name: 'recent';
+ title: _("Recent");
+ icon-name: 'recent-symbolic';
+
+ child: Label {
+ label: _("Empty");
+ };
+ }
+
+ Adw.ViewStackPage {
+ name: 'author';
+ title: _("Author");
+ icon-name: 'person-symbolic';
+
+ child: ScrolledWindow sort_author_scroller {
+ focusable: true;
+ hscrollbar-policy: never;
+ has-frame: true;
+
+ child: Viewport sort_author_viewport {
+ $FilterListBox author_box {
+ accessibility {
+ label: _("List of authors");
+ }
+
+ styles [
+ "navigation-sidebar",
+ ]
+ }
+ };
+
+ styles [
+ "no_frame",
+ ]
+ };
+ }
+
+ Adw.ViewStackPage {
+ name: 'reader';
+ title: _("Reader");
+ icon-name: 'microphone2-symbolic';
+
+ child: ScrolledWindow sort_reader_scroller {
+ focusable: true;
+ hscrollbar-policy: never;
+ has-frame: true;
+
+ child: Viewport sort_reader_viewport {
+ $FilterListBox reader_box {
+ accessibility {
+ label: _("List of readers");
+ }
+
+ styles [
+ "navigation-sidebar",
+ ]
+ }
+ };
+
+ styles [
+ "no_frame",
+ ]
+ };
+ }
+ };
+
+ content: Stack book_stack {
+ hexpand: true;
+ hhomogeneous: false;
+ vhomogeneous: false;
+ interpolate-size: true;
+
+ StackPage {
+ name: 'books';
+
+ child: ScrolledWindow book_scroller {
+ focusable: true;
+ hexpand: true;
+ hscrollbar-policy: never;
+ has-frame: true;
+
+ child: Viewport books_viewport {
+ vscroll-policy: natural;
+ hscroll-policy: minimum;
+
+ child: FlowBox book_box {
+ margin-top: 18;
+ margin-bottom: 18;
+ margin-start: 18;
+ margin-end: 18;
+ hexpand: true;
+ valign: start;
+ homogeneous: true;
+ column-spacing: 18;
+ row-spacing: 18;
+ min-children-per-line: 1;
+ max-children-per-line: 10;
+ selection-mode: none;
+
+ accessibility {
+ label: _("List of books");
+ }
+
+ styles [
+ "book_box",
+ ]
+ };
+ };
+
+ styles [
+ "no_frame",
+ ]
+ };
+ }
+
+ StackPage {
+ name: 'no_recent';
+
+ child: Adw.StatusPage {
+ icon-name: 'library-symbolic';
+ title: _("No Recent Books Yet");
+ description: _("Explore your library by switching to the Author or Reader view");
+ };
+ }
+
+ styles [
+ "main_stack",
+ ]
+ };
+ }
+ };
+ }
+ }
+
+ Adw.NavigationPage {
+ title: _("Book title");
+ tag: 'book_overview';
+
+ child: Adw.ToolbarView book_details_container {};
+ }
+ };
+
+ [bottom]
+ Box {
+ orientation: vertical;
+
+ Revealer media_control_box {}
+
+ Adw.ViewSwitcherBar mobile_view_switcher {
+ reveal: false;
+ hexpand: true;
+ }
+ }
+ };
+ }
+
+ StackPage {
+ name: 'import';
+
+ child: Adw.ToolbarView {
+ [top]
+ Adw.HeaderBar {
+ show-title: false;
+ }
+
+ content: Adw.StatusPage {
+ icon-name: 'com.github.geigi.cozy';
+ title: _("Importing");
+ description: _("Stay tuned while Cozy is preparing your library…");
+ };
+ };
+ }
+
+ StackPage {
+ name: 'welcome';
+
+ child: Adw.ToolbarView {
+ [top]
+ Adw.HeaderBar {
+ show-title: false;
+ }
+
+ content: Adw.StatusPage welcome_status_page {
+ icon-name: 'com.github.geigi.cozy';
+ title: _("Let's get cozy");
+ description: _("Select a Folder, or Drag Audiobooks Here to Add Them to Your Library");
+ };
+ };
+ }
+ }
+ }
+ };
+}
diff --git a/data/ui/main_window.ui b/data/ui/main_window.ui
deleted file mode 100644
index e0418da7..00000000
--- a/data/ui/main_window.ui
+++ /dev/null
@@ -1,291 +0,0 @@
-
-
-
-
- main_window
- Cozy
- com.github.geigi.cozy
- 360
- 294
-
-
- max-width: 550sp
- true
-
-
-
-
-
-
- crossfade
- false
- false
-
-
- library-symbolic
- Drop Audio Books Here to Add Them to Your Library
-
-
-
-
-
-
-
-
-
-
-
- main
-
-
- raised
-
-
-
-
- Library
- main
-
-
-
-
- crossfade
-
-
- false
- true
-
-
- true
-
-
- recent
- Recent
- recent-symbolic
-
-
- Empty
-
-
-
-
-
-
- author
- Author
- person-symbolic
-
-
- true
- never
- true
-
-
-
-
-
- List of authors
-
-
-
-
-
-
-
-
-
-
-
-
-
- reader
- Reader
- microphone2-symbolic
-
-
- true
- never
- true
-
-
-
-
-
- List of readers
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- false
- false
- true
-
-
- books
-
-
- true
- true
- never
- true
-
-
- natural
- minimum
-
-
- 18
- 18
- 18
- 18
- true
- start
- true
- 18
- 18
- 1
- 10
- none
-
- List of books
-
-
-
-
-
-
-
-
-
-
-
-
-
- no_recent
-
-
- library-symbolic
- No Recent Books Yet
- Explore your library by switching to the Author or Reader view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Book title
- book_overview
-
-
-
-
-
-
-
-
-
- vertical
-
-
-
-
-
- false
- true
-
-
-
-
-
-
-
-
-
-
- import
-
-
-
-
- false
-
-
-
-
- com.github.geigi.cozy
- Importing
- Stay tuned while Cozy is preparing your library…
-
-
-
-
-
-
-
-
- welcome
-
-
-
-
- false
-
-
-
-
- com.github.geigi.cozy
- Let's get cozy
- Select a Folder, or Drag Audiobooks Here to Add Them to Your Library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/media_controller.blp b/data/ui/media_controller.blp
new file mode 100644
index 00000000..2fa0ee47
--- /dev/null
+++ b/data/ui/media_controller.blp
@@ -0,0 +1,223 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $MediaController: Adw.BreakpointBin {
+ hexpand: true;
+ width-request: 350;
+ height-request: 52;
+
+ Adw.Breakpoint {
+ condition ("max-width: 750sp")
+
+ setters {
+ seek_bar_container.visible: false;
+ volume_button.visible: false;
+ separator.visible: false;
+ center_box.hexpand: false;
+ }
+ }
+
+ Adw.Breakpoint {
+ condition ("max-width: 550sp")
+
+ setters {
+ title_box.visible: false;
+ seek_bar_container.visible: false;
+ volume_button.visible: false;
+ timer_button.visible: false;
+ separator.visible: false;
+ center_box.hexpand: false;
+ }
+ }
+
+ child: CenterBox {
+ [start]
+ Box mini_player {
+ valign: center;
+ hexpand: false;
+ spacing: 12;
+
+ Box book_info_box {
+ spacing: 12;
+ height-request: 0;
+
+ Image cover_img {
+ pixel-size: 52;
+ icon-name: 'end';
+ }
+
+ Box title_box {
+ hexpand: true;
+ tooltip-text: _("Currently playing");
+ valign: center;
+ orientation: vertical;
+ spacing: 2;
+
+ Label title_label {
+ halign: start;
+ valign: center;
+ ellipsize: end;
+ width-chars: 15;
+ single-line-mode: true;
+ max-width-chars: 20;
+ xalign: 0;
+
+ accessibility {
+ label: _("Title of currently playing book");
+ }
+
+ styles [
+ "heading",
+ ]
+ }
+
+ Label subtitle_label {
+ halign: start;
+ valign: center;
+ ellipsize: end;
+ width-chars: 15;
+ single-line-mode: true;
+ max-width-chars: 20;
+ xalign: 0;
+
+ accessibility {
+ label: _("Title of the currently playing part");
+ }
+ }
+ }
+
+ Separator separator {
+ orientation: vertical;
+ }
+ }
+ }
+
+ [center]
+ Box center_box {
+ hexpand: true;
+ margin-start: 12;
+ margin-end: 12;
+ spacing: 12;
+
+ Box control_box {
+ valign: center;
+ spacing: 6;
+
+ Button prev_button {
+ focusable: true;
+ receives-default: true;
+ tooltip-text: _("Rewind");
+ halign: center;
+ valign: center;
+ icon-name: 'object-rotate-left-symbolic';
+
+ accessibility {
+ label: _("Rewind playback");
+ }
+
+ styles [
+ "flat",
+ "circular",
+ ]
+ }
+
+ Button play_button {
+ width-request: 42;
+ height-request: 42;
+ focusable: true;
+ receives-default: true;
+ tooltip-text: _("Start/Stop playback");
+ halign: center;
+ valign: center;
+ icon-name: 'media-playback-start-symbolic';
+
+ accessibility {
+ label: _("Start or pause the playback");
+ }
+
+ styles [
+ "opaque",
+ "play_button",
+ "circular",
+ ]
+ }
+
+ Button next_button {
+ focusable: true;
+ receives-default: true;
+ tooltip-text: _("Forward");
+ halign: center;
+ valign: center;
+ icon-name: 'object-rotate-right-symbolic';
+
+ accessibility {
+ label: _("Forward Playback");
+ }
+
+ styles [
+ "flat",
+ "circular",
+ ]
+ }
+ }
+
+ Box seek_bar_container {
+ hexpand: true;
+ }
+ }
+
+ [end]
+ Box tools_box {
+ halign: center;
+ valign: center;
+ margin-start: 12;
+ margin-end: 12;
+ spacing: 3;
+
+ ScaleButton volume_button {
+ tooltip-text: _("Volume control");
+
+ adjustment: Adjustment {
+ lower: 0;
+ upper: 1;
+ value: 1;
+ step-increment: 0.1;
+ page-increment: 0.2;
+ };
+
+ styles [
+ "flat",
+ ]
+ }
+
+ MenuButton playback_speed_button {
+ focusable: true;
+ receives-default: true;
+ tooltip-text: _("Playback speed");
+ icon-name: 'playback-speed-symbolic';
+
+ styles [
+ "flat",
+ ]
+ }
+
+ MenuButton timer_button {
+ focusable: true;
+ receives-default: true;
+ tooltip-text: _("Sleep Timer");
+
+ Image timer_image {
+ icon-name: 'bed-symbolic';
+ }
+
+ accessibility {
+ label: _("Open the sleep timer popover");
+ }
+
+ styles [
+ "flat",
+ ]
+ }
+ }
+ };
+}
diff --git a/data/ui/media_controller.ui b/data/ui/media_controller.ui
deleted file mode 100644
index ebb3f3a8..00000000
--- a/data/ui/media_controller.ui
+++ /dev/null
@@ -1,232 +0,0 @@
-
-
-
-
- true
- 350
- 52
-
-
- max-width: 750px
- false
- false
- false
- false
-
-
-
-
- max-width: 550px
- false
- false
- false
- false
- false
- false
-
-
-
-
-
-
- center
- false
- 12
-
-
- 12
- 0
-
-
- 52
- end
-
-
-
-
- true
- Currently playing
- center
- vertical
- 2
-
-
- start
- center
- end
- 15
- true
- 20
- 0
-
-
-
-
- Title of currently playing book
-
-
-
-
-
-
- start
- center
- end
- 15
- true
- 20
- 0
-
- Title of the currently playing part
-
-
-
-
-
-
-
- vertical
-
-
-
-
-
-
-
-
- true
- 12
- 12
- 12
-
-
- center
- 6
-
-
- true
- true
- Rewind
- center
- center
- object-rotate-left-symbolic
-
- Rewind playback
-
-
-
-
-
-
- 42
- 42
- true
- true
- Start playback
- center
- center
- media-playback-start-symbolic
-
- Start or pause the playback
-
-
-
-
-
-
- true
- true
- Forward
- center
- center
- object-rotate-right-symbolic
-
- Forward Playback
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
- center
- center
- 12
- 12
- 3
-
-
- Volume control
- audio-volume-muted-symbolic
-audio-volume-high-symbolic
-audio-volume-low-symbolic
-audio-volume-medium-symbolic
-
-
- 0
- 1
- 1
- 0.1
- 0.2
-
-
-
-
-
-
-
- true
- true
- Playback speed
- playback-speed-symbolic
-
-
-
-
-
- true
- true
- Sleep Timer
-
-
- bed-symbolic
-
-
-
- Open the sleep timer popover
-
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/meson.build b/data/ui/meson.build
index c9087642..62d2ee72 100644
--- a/data/ui/meson.build
+++ b/data/ui/meson.build
@@ -1,9 +1,26 @@
-message('Compiling resources')
+message('Compiling blueprints')
-gnome.compile_resources(
- meson.project_name() + '.ui',
- 'gresource.xml',
- gresource_bundle: true,
- install_dir: DATA_DIR,
- install: true
+
+blueprints = custom_target('blueprints',
+ input: files(
+ 'album_element.blp',
+ 'book_detail.blp',
+ 'book_element.blp',
+ 'chapter_element.blp',
+ 'error_reporting.blp',
+ 'first_import_button.blp',
+ 'headerbar.blp',
+ 'main_window.blp',
+ 'media_controller.blp',
+ 'playback_speed_popover.blp',
+ 'preferences.blp',
+ 'progress_popover.blp',
+ 'search_page.blp',
+ 'seek_bar.blp',
+ 'storage_locations.blp',
+ 'storage_row.blp',
+ 'timer_popover.blp',
+ ),
+ output: '.',
+ command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'],
)
diff --git a/data/ui/playback_speed_popover.blp b/data/ui/playback_speed_popover.blp
new file mode 100644
index 00000000..a2be5ce2
--- /dev/null
+++ b/data/ui/playback_speed_popover.blp
@@ -0,0 +1,33 @@
+using Gtk 4.0;
+
+Adjustment speed_value {
+ lower: 0.5;
+ upper: 3.5;
+ value: 1;
+ step-increment: 0.05;
+ page-increment: 0.1;
+}
+
+template $PlaybackSpeedPopover: Popover {
+ width-request: 300;
+
+ child: Box {
+ Scale playback_speed_scale {
+ hexpand: true;
+ focusable: true;
+ margin-start: 6;
+ margin-end: 6;
+ margin-top: 6;
+ margin-bottom: 6;
+ adjustment: speed_value;
+ fill-level: 5;
+ round-digits: 1;
+ }
+
+ Label playback_speed_label {
+ margin-end: 12;
+ label: '1.0 x';
+ use-markup: true;
+ }
+ };
+}
diff --git a/data/ui/playback_speed_popover.ui b/data/ui/playback_speed_popover.ui
deleted file mode 100644
index 7965dee5..00000000
--- a/data/ui/playback_speed_popover.ui
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
- 0.5
- 3.5
- 1
- 0.05
- 0.1
-
-
- 300
-
-
-
-
- true
- true
- 6
- 6
- 6
- 6
- speed_value
- 5
- 1
-
-
-
-
- 12
- <span font_features='tnum'>1.0 x</span>
- true
-
-
-
-
-
-
-
diff --git a/data/ui/preferences.blp b/data/ui/preferences.blp
new file mode 100644
index 00000000..beaa90ca
--- /dev/null
+++ b/data/ui/preferences.blp
@@ -0,0 +1,106 @@
+using Gtk 4.0;
+using Adw 1;
+
+Adjustment fadeout_duration_adjustment {
+ upper: 120;
+ value: 15;
+ step-increment: 5;
+ page-increment: 10;
+}
+
+Adjustment forward_duration_adjustment {
+ lower: 5;
+ upper: 120;
+ step-increment: 5;
+ page-increment: 10;
+}
+
+Adjustment rewind_duration_adjustment {
+ lower: 5;
+ upper: 120;
+ value: 15;
+ step-increment: 5;
+ page-increment: 10;
+}
+
+template $PreferencesWindow: Adw.PreferencesDialog {
+ Adw.PreferencesPage {
+ icon-name: 'settings-symbolic';
+ title: _("General");
+
+ Adw.PreferencesGroup {
+ title: _("Tags");
+
+ Adw.SwitchRow swap_author_reader_switch {
+ title: _("Swap Author and Reader");
+ subtitle: _("Activate if author and reader are displayed the wrong way");
+ }
+ }
+
+ Adw.PreferencesGroup {
+ title: _("Playback");
+
+ Adw.SwitchRow replay_switch {
+ title: _("Replay");
+ subtitle: _("Rewind 30 seconds of the current book when starting Cozy");
+ }
+
+ Adw.SpinRow rewind_duration_spin_button {
+ title: _("Rewind Duration");
+ focusable: true;
+ adjustment: rewind_duration_adjustment;
+ snap-to-ticks: true;
+ numeric: true;
+ }
+
+ Adw.SpinRow forward_duration_spin_button {
+ title: _("Forward Duration");
+ focusable: true;
+ adjustment: forward_duration_adjustment;
+ snap-to-ticks: true;
+ numeric: true;
+ }
+ }
+
+ Adw.PreferencesGroup {
+ title: _("Sleep Timer");
+
+ Adw.ExpanderRow sleep_timer_fadeout_switch {
+ title: _("Fadeout");
+ expanded: true;
+ show-enable-switch: true;
+
+ Adw.SpinRow {
+ title: _("Fadeout Duration");
+ focusable: true;
+ adjustment: fadeout_duration_adjustment;
+ snap-to-ticks: true;
+ numeric: true;
+ }
+ }
+ }
+ }
+
+ Adw.PreferencesPage storages_page {
+ icon-name: 'harddisk-symbolic';
+ title: _("Storage");
+
+ Adw.PreferencesGroup {
+ title: _("Artwork");
+
+ Adw.SwitchRow artwork_prefer_external_switch {
+ title: _("Prefer External Images Over Embedded Cover");
+ subtitle: _("Always use images (cover.jpg, *.png, …) when available");
+ }
+ }
+ }
+
+ Adw.PreferencesPage {
+ icon-name: 'papyrus-vertical-symbolic';
+ title: _("Feedback");
+
+ Adw.PreferencesGroup user_feedback_preference_group {
+ title: _("User feedback");
+ }
+ }
+}
diff --git a/data/ui/preferences.ui b/data/ui/preferences.ui
deleted file mode 100644
index fa684640..00000000
--- a/data/ui/preferences.ui
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
- 120
- 15
- 5
- 10
-
-
- 5
- 120
- 5
- 10
-
-
- 5
- 120
- 15
- 5
- 10
-
-
-
-
- settings-symbolic
- General
-
-
- Appearance
-
-
- Dark Mode
-
-
-
-
-
-
- Tags
-
-
- Swap Author and Reader
- Activate if author and reader are displayed the wrong way
-
-
-
-
-
-
- Playback
-
-
- Replay
- Rewind 30 seconds of the current book when starting Cozy
-
-
-
-
- Rewind Duration
- true
- rewind_duration_adjustment
- true
- true
-
-
-
-
- Forward Duration
- true
- forward_duration_adjustment
- true
- true
-
-
-
-
-
-
- Sleep Timer
-
-
- Fadeout
- true
- true
-
-
- Fadeout Duration
- true
- fadeout_duration_adjustment
- true
- true
-
-
-
-
-
-
-
-
-
-
- harddisk-symbolic
- Storage
-
-
- Artwork
-
-
- Prefer External Images Over Embedded Cover
- Always use images (cover.jpg, *.png, …) when available
-
-
-
-
-
-
-
-
- papyrus-vertical-symbolic
- Feedback
-
-
- User feedback
-
-
-
-
-
-
-
diff --git a/data/ui/progress_popover.blp b/data/ui/progress_popover.blp
new file mode 100644
index 00000000..1de13da6
--- /dev/null
+++ b/data/ui/progress_popover.blp
@@ -0,0 +1,27 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $ProgressPopover: Popover {
+ Adw.Clamp {
+ margin-start: 15;
+ margin-end: 15;
+ margin-top: 15;
+ margin-bottom: 15;
+ maximum-size: 300;
+ tightening-threshold: 250;
+
+ Box {
+ orientation: vertical;
+ spacing: 10;
+
+ Label progress_label {
+ ellipsize: end;
+ xalign: 0;
+ }
+
+ ProgressBar progress_bar {
+ fraction: 0.5;
+ }
+ }
+ }
+}
diff --git a/data/ui/progress_popover.ui b/data/ui/progress_popover.ui
deleted file mode 100644
index e0838bdb..00000000
--- a/data/ui/progress_popover.ui
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
- 15
- 15
- 15
- 15
- 300
- 250
-
-
- vertical
- 10
-
-
- end
- 0
-
-
-
-
- 0.5
- dfsg
-
-
-
-
-
-
-
-
diff --git a/data/ui/search_page.blp b/data/ui/search_page.blp
new file mode 100644
index 00000000..b043e990
--- /dev/null
+++ b/data/ui/search_page.blp
@@ -0,0 +1,63 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $SearchView: Adw.Bin {
+ Stack stack {
+ Adw.StatusPage start_searching_page {
+ title: _("Search in your library");
+ icon-name: 'library-symbolic';
+ }
+
+ Adw.StatusPage nothing_found_page {
+ title: _("No results found");
+ icon-name: 'edit-find-symbolic';
+ }
+
+ ScrolledWindow search_scroller {
+ Adw.Clamp {
+ margin-start: 18;
+ margin-end: 18;
+ margin-top: 18;
+ margin-bottom: 18;
+
+ Box {
+ orientation: vertical;
+ spacing: 24;
+
+ Adw.PreferencesGroup book_result_box {
+ title: _("Book");
+ visible: false;
+
+ ListBox book_result_list {
+ styles [
+ "boxed-list",
+ ]
+ }
+ }
+
+ Adw.PreferencesGroup author_result_box {
+ title: _("Author");
+ visible: false;
+
+ ListBox author_result_list {
+ styles [
+ "boxed-list",
+ ]
+ }
+ }
+
+ Adw.PreferencesGroup reader_result_box {
+ title: _("Reader");
+ visible: false;
+
+ ListBox reader_result_list {
+ styles [
+ "boxed-list",
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/data/ui/search_page.ui b/data/ui/search_page.ui
deleted file mode 100644
index ec3ff64f..00000000
--- a/data/ui/search_page.ui
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
-
-
- Search in your library
- library-symbolic
-
-
-
-
- No results found
- edit-find-symbolic
-
-
-
-
-
-
- 18
- 18
- 18
- 18
-
-
- vertical
- 24
-
-
- Book
- false
-
-
-
-
-
-
-
-
-
- Author
- false
-
-
-
-
-
-
-
-
-
- Reader
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/seek_bar.blp b/data/ui/seek_bar.blp
new file mode 100644
index 00000000..b3cb54e2
--- /dev/null
+++ b/data/ui/seek_bar.blp
@@ -0,0 +1,63 @@
+using Gtk 4.0;
+
+Adjustment seek_bar_adjustment {
+ upper: 100;
+ step-increment: 1;
+ page-increment: 15;
+}
+
+template $SeekBar: Box {
+ valign: center;
+ hexpand: true;
+ spacing: 5;
+
+ Label current_label {
+ tooltip-text: _("Elapsed time");
+ halign: end;
+ valign: center;
+ label: '--:--';
+ single-line-mode: true;
+
+ accessibility {
+ label: _("Elapsed time of current part");
+ }
+
+ styles [
+ "numeric",
+ ]
+ }
+
+ Scale progress_scale {
+ width-request: 150;
+ focusable: true;
+ tooltip-text: _("Jump to position in current chapter");
+ valign: center;
+ hexpand: true;
+ adjustment: seek_bar_adjustment;
+ restrict-to-fill-level: false;
+ fill-level: 0;
+
+ accessibility {
+ label: _("Position of the current part in seconds");
+ }
+ }
+
+ Box remaining_event_box {
+ valign: center;
+
+ Label remaining_label {
+ tooltip-text: _("Remaining time");
+ halign: start;
+ label: '--:--';
+ single-line-mode: true;
+
+ accessibility {
+ label: _("Remaining time of current part");
+ }
+
+ styles [
+ "numeric",
+ ]
+ }
+ }
+}
diff --git a/data/ui/seek_bar.ui b/data/ui/seek_bar.ui
deleted file mode 100644
index 2b91b6d2..00000000
--- a/data/ui/seek_bar.ui
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
- 100
- 1
- 15
-
-
- center
- true
- 5
-
-
- Elapsed time
- end
- center
- --:--
- true
-
- Elapsed time of current part
-
-
-
-
-
-
- 150
- true
- Jump to position in current chapter
- center
- true
- seek_bar_adjustment
- false
- 0
-
- Position of the current part in seconds
-
-
-
-
-
- center
-
-
- Remaining time
- start
- --:--
- true
-
- Remaining time of current part
-
-
-
-
-
-
-
-
diff --git a/data/ui/storage_locations.blp b/data/ui/storage_locations.blp
new file mode 100644
index 00000000..2b59a738
--- /dev/null
+++ b/data/ui/storage_locations.blp
@@ -0,0 +1,35 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $StorageLocations: Adw.PreferencesGroup {
+ title: _("Storage locations");
+
+ ListBox storage_locations_list {
+ margin-bottom: 18;
+
+ styles [
+ "boxed-list",
+ ]
+ }
+}
+
+menu storage_menu {
+ section {
+ item {
+ label: _("External drive");
+ action: 'storage.mark-external';
+ }
+ }
+
+ section {
+ item {
+ label: _("Set as default");
+ action: 'storage.make-default';
+ }
+
+ item {
+ label: _("Remove");
+ action: 'storage.remove';
+ }
+ }
+}
diff --git a/data/ui/storage_locations.ui b/data/ui/storage_locations.ui
deleted file mode 100644
index afb6dce7..00000000
--- a/data/ui/storage_locations.ui
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
- Storage locations
-
-
- 18
-
-
-
-
-
-
-
diff --git a/data/ui/storage_row.blp b/data/ui/storage_row.blp
new file mode 100644
index 00000000..f029706a
--- /dev/null
+++ b/data/ui/storage_row.blp
@@ -0,0 +1,33 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $StorageRow: Adw.ActionRow {
+ selectable: false;
+ activatable: true;
+
+ [prefix]
+ Image icon {}
+
+ [suffix]
+ Image default_icon {
+ visible: false;
+ margin-start: 6;
+ margin-end: 6;
+ icon-name: 'emblem-default-symbolic';
+
+ styles [
+ "accent",
+ ]
+ }
+
+ [suffix]
+ MenuButton menu_button {
+ icon-name: 'view-more-symbolic';
+ valign: center;
+ halign: center;
+
+ styles [
+ "flat",
+ ]
+ }
+}
diff --git a/data/ui/storage_row.ui b/data/ui/storage_row.ui
deleted file mode 100644
index 0669bcf9..00000000
--- a/data/ui/storage_row.ui
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
- false
- true
-
-
-
-
-
- false
- 6
- 6
- emblem-default-symbolic
-
-
-
-
-
- view-more-symbolic
- center
- center
-
-
-
-
-
diff --git a/data/ui/timer_popover.blp b/data/ui/timer_popover.blp
new file mode 100644
index 00000000..0548f4f7
--- /dev/null
+++ b/data/ui/timer_popover.blp
@@ -0,0 +1,135 @@
+using Gtk 4.0;
+
+EntryBuffer timer_buffer {
+ text: '0';
+ max-length: 10;
+}
+
+Adjustment timer_value {
+ upper: 120;
+ step-increment: 1;
+ page-increment: 5;
+}
+
+template $SleepTimer: Popover {
+ width-request: 180;
+
+ child: Box {
+ width-request: 270;
+ margin-start: 10;
+ margin-end: 10;
+ margin-top: 15;
+ margin-bottom: 20;
+ orientation: vertical;
+ spacing: 10;
+
+ Grid timer_grid {
+ Scale timer_scale {
+ width-request: 205;
+ focusable: true;
+ tooltip-text: _("Timer duration");
+ halign: start;
+ margin-end: 10;
+ adjustment: timer_value;
+ restrict-to-fill-level: true;
+ fill-level: 120;
+ round-digits: 5;
+ digits: 0;
+ value-pos: right;
+
+ accessibility {
+ label: _("Set the sleep timer duration in minutes");
+ }
+
+ layout {
+ column: '0';
+ row: '0';
+ }
+ }
+
+ Label min_label {
+ halign: end;
+ valign: center;
+ margin-start: 6;
+ label: _("min");
+
+ layout {
+ column: '2';
+ row: '0';
+ }
+ }
+
+ Box {
+ width-request: 25;
+ valign: center;
+ orientation: vertical;
+
+ Label timer_label {
+ halign: end;
+ valign: center;
+ }
+
+ layout {
+ column: '1';
+ row: '0';
+ }
+ }
+ }
+
+ Box {
+ Label {
+ hexpand: true;
+ halign: start;
+ margin-end: 10;
+ label: _("Stop after current chapter");
+ }
+
+ Switch chapter_switch {
+ focusable: true;
+ halign: end;
+ valign: center;
+ }
+ }
+
+ Separator {}
+
+ Box {
+ Label {
+ hexpand: true;
+ halign: start;
+ label: _("Enable system power control");
+ }
+
+ Switch power_control_switch {
+ focusable: true;
+ halign: end;
+ valign: center;
+ }
+ }
+
+ Box power_control_options {
+ sensitive: false;
+
+ Label {
+ hexpand: true;
+ tooltip-markup: _("Type of the action when the timer finishes.\n“shutdown” will attempt to turn your system off (also known as power off)\n“suspend” will attempt to suspend your system (also known as sleep).");
+ halign: start;
+ label: _("System power action to perform");
+ }
+
+ Box {
+ orientation: vertical;
+
+ CheckButton system_suspend_radiob {
+ label: _("suspend");
+ active: true;
+ }
+
+ CheckButton system_shutdown_radiob {
+ label: _("shutdown");
+ group: system_suspend_radiob;
+ }
+ }
+ }
+ };
+}
diff --git a/data/ui/timer_popover.ui b/data/ui/timer_popover.ui
deleted file mode 100644
index 65661a58..00000000
--- a/data/ui/timer_popover.ui
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
-
-
- 0
- 10
-
-
- 120
- 1
- 5
-
-
- 180
-
-
- 270
- 10
- 10
- 15
- 20
- vertical
- 10
-
-
-
-
- 205
- true
- Timer duration
- start
- 10
- timer_value
- true
- 120
- 5
- 0
- right
-
- Set the sleep timer duration in minutes
-
-
- 0
- 0
-
-
-
-
-
- end
- center
- 6
- min
-
- 2
- 0
-
-
-
-
-
- 25
- center
- vertical
-
-
- end
- center
-
-
-
- 1
- 0
-
-
-
-
-
-
-
-
-
- true
- start
- 10
- Stop after current chapter
-
-
-
-
- true
- end
- center
-
-
-
-
-
-
-
-
-
-
-
- true
- start
- Enable system power control
-
-
-
-
- true
- end
- center
-
-
-
-
-
-
- false
-
-
- true
- Type of the action when the timer finishes.
-"shutdown" will attempt to turn your system off (also known as power off)
-"suspend" will attempt to suspend your system (also known as sleep).
- start
- System power action to perform
-
-
-
-
- vertical
-
-
- suspend
- true
-
-
-
-
- shutdown
- system_suspend_radiob
-
-
-
-
-
-
-
-
-
-
diff --git a/main.py b/main.py
index 00afe960..0ae6f8b2 100755
--- a/main.py
+++ b/main.py
@@ -52,7 +52,7 @@
# gresource must be registered before importing any Gtk.Template annotated classes
-resource = Gio.Resource.load(os.path.join(pkgdatadir, 'com.github.geigi.cozy.ui.gresource'))
+resource = Gio.Resource.load(os.path.join(pkgdatadir, 'com.github.geigi.cozy.gresource'))
resource._register()
old_except_hook = None
@@ -108,7 +108,7 @@ def main():
application = Application(pkgdatadir)
try:
- # Handle the debug option seperatly without the Glib stuff
+ # Handle the debug option separately without the Glib stuff
if "-d" in sys.argv:
sys.argv.remove("-d")
ret = application.run(sys.argv)
diff --git a/meson.build b/meson.build
index 2a5b4e87..c24fc502 100644
--- a/meson.build
+++ b/meson.build
@@ -13,7 +13,7 @@ else
endif
dependency('glib-2.0')
-dependency('libadwaita-1', version: '>= 1.4.0')
+dependency('libadwaita-1', version: '>= 1.5.0')
# from https://github.com/AsavarTzeth/pulseeffects/blob/master/meson.build
# Support Debian non-standard python paths
@@ -81,8 +81,8 @@ install_subdir(
)
configure_file(
- input: 'cozy/version.py',
- output: 'version.py',
+ input: 'cozy/__init__.py',
+ output: '__init__.py',
configuration: conf,
install_dir: python_dir + '/cozy'
)
diff --git a/po/POTFILES b/po/POTFILES
index 0c080d9c..c3520ed5 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -3,8 +3,10 @@ cozy/control/mpris.py
cozy/control/offline_cache.py
cozy/media/files.py
cozy/media/importer.py
+cozy/media/tag_reader.py
cozy/model/track.py
cozy/tools.py
+cozy/ui/about_window.py
cozy/ui/book_detail_view.py
cozy/ui/chapter_element.py
cozy/ui/db_migration_failed_view.py
@@ -12,8 +14,8 @@ cozy/ui/delete_book_view.py
cozy/ui/disk_element.py
cozy/ui/file_not_found_dialog.py
cozy/ui/import_failed_dialog.py
-cozy/ui/preferences_view.py
cozy/ui/main_view.py
+cozy/ui/preferences_window.py
cozy/ui/widgets/book_element.py
cozy/ui/widgets/book_row.py
cozy/ui/widgets/error_reporting.py
@@ -23,21 +25,21 @@ cozy/ui/widgets/sleep_timer.py
cozy/ui/widgets/storages.py
cozy/view_model/headerbar_view_model.py
cozy/view_model/library_view_model.py
-data/ui/album_element.ui
-data/ui/book_detail.ui
-data/ui/book_element.ui
-data/ui/chapter_element.ui
-data/ui/error_reporting.ui
-data/ui/first_import_button.ui
-data/ui/headerbar.ui
-data/ui/main_window.ui
-data/ui/media_controller.ui
-data/ui/playback_speed_popover.ui
-data/ui/preferences.ui
-data/ui/progress_popover.ui
-data/ui/search_page.ui
-data/ui/seek_bar.ui
-data/ui/storage_locations.ui
-data/ui/storage_row.ui
-data/ui/timer_popover.ui
-main.py
\ No newline at end of file
+data/ui/album_element.blp
+data/ui/book_detail.blp
+data/ui/book_element.blp
+data/ui/chapter_element.blp
+data/ui/error_reporting.blp
+data/ui/first_import_button.blp
+data/ui/headerbar.blp
+data/ui/main_window.blp
+data/ui/media_controller.blp
+data/ui/playback_speed_popover.blp
+data/ui/preferences.blp
+data/ui/progress_popover.blp
+data/ui/search_page.blp
+data/ui/seek_bar.blp
+data/ui/storage_locations.blp
+data/ui/storage_row.blp
+data/ui/timer_popover.blp
+main.py
diff --git a/po/de.po b/po/de.po
index 2ab508a2..e5f73d1a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -231,7 +231,7 @@ msgstr "Open Source Projekte"
#. line
#: cozy/ui/main_view.py:211
msgid "translator-credits"
-msgstr "translator-credits"
+msgstr "Julian Geywitz"
#: cozy/ui/widgets/book_element.py:70
msgid "Mark as read"
diff --git a/po/es.po b/po/es.po
index a93816b8..5ac4858c 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,41 +7,42 @@
# Julian Geywitz , 2019
# elgosz , 2020
# Adolfo Jayme-Barrientos, 2020
-# Jose Luis Tirado , 2021
-# Óscar Fernández Díaz , 2022
+# 3d8f3be0ee8144f79bb8d426275ac860_306eb54 <399766b5ab6702f5e3ef857abef0cf21_951974>, 2022
+# Jose Luis Tirado , 2024
+# Ezequiel Partida, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: com.github.geigi.cozy\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-04 16:30+0100\n"
+"POT-Creation-Date: 2024-02-17 20:33+0100\n"
"PO-Revision-Date: 2019-09-08 09:31+0000\n"
-"Last-Translator: Óscar Fernández Díaz , 2022\n"
-"Language-Team: Spanish (https://www.transifex.com/geigi/teams/78138/es/)\n"
+"Last-Translator: Ezequiel Partida, 2024\n"
+"Language-Team: Spanish (https://app.transifex.com/geigi/teams/78138/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
-#: cozy/application.py:101
+#: cozy/application.py:59
msgid "Audiobooks"
msgstr "Audiolibros"
-#: cozy/control/offline_cache.py:200
+#: cozy/control/offline_cache.py:197
msgid "Copying"
msgstr "Copiando"
-#: cozy/media/files.py:69
+#: cozy/media/files.py:67
msgid "Cannot copy: Audiobook directory is read only"
msgstr "No se pudo copiar: El directorio de audiolibros es de sólo lectura"
-#: cozy/media/files.py:71
+#: cozy/media/files.py:69
msgid "Cannot copy: Disk is full"
msgstr "No se pudo copiar: El disco está lleno"
-#: cozy/media/files.py:73 cozy/media/files.py:89
+#: cozy/media/files.py:71 cozy/media/files.py:87
msgid "Cannot copy: Permission denied"
msgstr "No se pudo copiar: Permiso denegado"
@@ -49,16 +50,13 @@ msgstr "No se pudo copiar: Permiso denegado"
msgid "Error while importing new files"
msgstr "Error al importar nuevos archivos"
-#: cozy/model/track.py:38
-msgid "Chapter"
-msgstr "Capítulo"
-
#: cozy/tools.py:92 cozy/tools.py:96
#, python-brace-format
msgid "{hours} hour"
msgid_plural "{hours} hours"
msgstr[0] "{hours} hora"
msgstr[1] "{hours} horas"
+msgstr[2] "{hours} horas"
#: cozy/tools.py:94 cozy/tools.py:98
#, python-brace-format
@@ -66,6 +64,7 @@ msgid "{minutes} minute"
msgid_plural "{minutes} minutes"
msgstr[0] "{minutes} minuto"
msgstr[1] "{minutes} minutos"
+msgstr[2] "{minutes} minutos"
#: cozy/tools.py:100
#, python-brace-format
@@ -73,6 +72,7 @@ msgid "{seconds} second"
msgid_plural "{seconds} seconds"
msgstr[0] "{seconds} segundo"
msgstr[1] "{seconds} segundos"
+msgstr[2] "{seconds} segundos"
#: cozy/tools.py:102
msgid "finished"
@@ -101,6 +101,7 @@ msgid "{weeks} week ago"
msgid_plural "{weeks} weeks ago"
msgstr[0] "Hace {weeks} semana"
msgstr[1] "Hace {weeks} semanas"
+msgstr[2] "Hace {weeks} semanas"
#: cozy/tools.py:136
#, python-brace-format
@@ -108,6 +109,7 @@ msgid "{months} month ago"
msgid_plural "{months} months ago"
msgstr[0] "Hace {months} mes"
msgstr[1] "Hace {months} meses"
+msgstr[2] "Hace {months} meses"
#: cozy/tools.py:138
#, python-brace-format
@@ -115,232 +117,292 @@ msgid "{years} year ago"
msgid_plural "{years} years ago"
msgstr[0] "Hace {years} año"
msgstr[1] "Hace {years} años"
+msgstr[2] "Hace {years} años"
-#: cozy/ui/book_detail_view.py:313
+#: cozy/ui/book_detail_view.py:299
msgid "Downloaded"
msgstr "Descargado"
-#: cozy/ui/book_detail_view.py:316 data/ui/book_detail.ui:152
+#: cozy/ui/book_detail_view.py:302 data/ui/book_detail.ui:116
msgid "Download"
msgstr "Descargar"
-#: cozy/ui/chapter_element.py:27
-msgid "Play this part"
-msgstr "Reproducir esta sección"
+#: cozy/ui/db_migration_failed_view.py:6
+msgid ""
+"During an update of the database an error occurred and Cozy will not be able"
+" to startup. A backup of the database was created before the update and has "
+"been restored now. Until this issue is resolved please use version 0.9.5 of "
+"Cozy. You can help resolve this problem by reporting an issue on GitHub."
+msgstr ""
+"Durante una actualización de la base de datos se produjo un error y Cozy no "
+"podrá iniciarse. Una copia de seguridad de la base de datos fué creada antes"
+" de la actualización y ha sido restaurada. Hasta que se resuelva este "
+"problema, utilice la versión 0.9.5 de Cozy. Puede ayudar a resolver este "
+"problema informando un problema en GitHub."
+
+#: cozy/ui/db_migration_failed_view.py:15
+msgid "Failed to Update Database"
+msgstr "No se pudo actualizar la base de datos"
+
+#: cozy/ui/db_migration_failed_view.py:22
+msgid "Close Cozy"
+msgstr "Cerrar Cozy"
+
+#: cozy/ui/db_migration_failed_view.py:23
+msgid "Receive help on GitHub"
+msgstr "Recibir ayuda en GitHub"
+
+#: cozy/ui/delete_book_view.py:13
+msgid "Delete Audiobook?"
+msgstr "Borrar Audiolibro?"
-#: cozy/ui/disk_element.py:27
+#: cozy/ui/delete_book_view.py:14
+msgid "The audiobook will be removed from your disk and from Cozy's library."
+msgstr "El audiolibro será eliminado de tu disco y de la biblioteca de Cozy."
+
+#: cozy/ui/delete_book_view.py:21 cozy/ui/file_not_found_dialog.py:26
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: cozy/ui/delete_book_view.py:22
+msgid "Remove Audiobook"
+msgstr "Remover Audiolibro"
+
+#: cozy/ui/disk_element.py:22
msgid "Disc"
msgstr "Disco"
-#: cozy/ui/file_not_found_dialog.py:56
-msgid "All files"
-msgstr "Todos los archivos"
+#: cozy/ui/file_not_found_dialog.py:18
+msgid "File not found"
+msgstr "Archivo no encontrado"
-#: cozy/ui/main_view.py:301 data/ui/main_window.ui:412
-msgid "Set Audiobooks Directory"
-msgstr "Establecer carpeta de audiolibros"
+#: cozy/ui/file_not_found_dialog.py:19
+msgid "This file could not be found. Do you want to locate it manually?"
+msgstr "El archivo no se ha encontrado. ¿Quiere localizarlo manualmente?"
-#: cozy/ui/warnings.py:27 cozy/ui/warnings.py:42
+#: cozy/ui/file_not_found_dialog.py:27
+msgid "Locate"
+msgstr "Localizar"
+
+#: cozy/ui/file_not_found_dialog.py:38
+msgid "Locate Missing File"
+msgstr "Localizar archivo faltante"
+
+#: cozy/ui/file_not_found_dialog.py:41
#, python-brace-format
-msgid "{storage} is offline."
-msgstr "{storage} no está disponible."
+msgid "{ext} files"
+msgstr "Archivos {ext}"
+
+#: cozy/ui/file_not_found_dialog.py:44
+msgid "Audio files"
+msgstr "Archivos de sonido"
+
+#: cozy/ui/import_failed_dialog.py:8
+msgid "This can have multiple reasons:"
+msgstr "Esto puede tener múltimples razones:"
+
+#: cozy/ui/import_failed_dialog.py:11
+msgid "The audio format is not supported"
+msgstr "El formato de audio no es compatible"
-#: cozy/ui/widgets/book_element.py:52
+#: cozy/ui/import_failed_dialog.py:12
+msgid "The path or filename contains non utf-8 characters"
+msgstr "La ruta o el nombre del archivo contiene caracteres que no son utf-8"
+
+#: cozy/ui/import_failed_dialog.py:13
+msgid "The file(s) are no valid audio files"
+msgstr "Los archivos no son archivos de audio válidos"
+
+#: cozy/ui/import_failed_dialog.py:14
+msgid "The file(s) are corrupt"
+msgstr "El archivo está corrupto"
+
+#: cozy/ui/import_failed_dialog.py:28
+msgid "Some files could not be imported"
+msgstr "Algunos archivos no pudieron importarse"
+
+#: cozy/ui/import_failed_dialog.py:35
+msgid "Ok"
+msgstr "Aceptar"
+
+#: cozy/ui/main_view.py:198
+msgid "Patreon Supporters"
+msgstr "Patrocinadores de Patreon"
+
+#: cozy/ui/main_view.py:202
+msgid "m4b chapter support in mutagen"
+msgstr "soporte de capítulos m4b en mutágeno"
+
+#: cozy/ui/main_view.py:206
+msgid "Open Source Projects"
+msgstr "Proyectos de código abierto"
+
+#. Translators: Replace "translator-credits" with your names, one name per
+#. line
+#: cozy/ui/main_view.py:211
+msgid "translator-credits"
+msgstr ""
+"Adolfo Jayme-Barrientos\n"
+"Jose Luis Tirado\n"
+"Ezequiel Partida"
+
+#: cozy/ui/widgets/book_element.py:70
msgid "Mark as read"
msgstr "Marcar como leído"
-#: cozy/ui/widgets/book_element.py:55
+#: cozy/ui/widgets/book_element.py:73
msgid "Open in file browser"
msgstr "Abrir en explorador de archivos"
-#: cozy/ui/widgets/book_element.py:58
+#: cozy/ui/widgets/book_element.py:76
msgid "Remove from library"
msgstr "Eliminar de la biblioteca"
-#: cozy/ui/widgets/error_reporting.py:12
+#: cozy/ui/widgets/book_row.py:25
+msgid "Play this book"
+msgstr "Reproducir este libro"
+
+#: cozy/ui/widgets/error_reporting.py:11
msgid "Disabled"
msgstr "Desactivado"
-#: cozy/ui/widgets/error_reporting.py:13
+#: cozy/ui/widgets/error_reporting.py:12
msgid "Basic error reporting"
msgstr "Informe de errores básico"
-#: cozy/ui/widgets/error_reporting.py:14
+#: cozy/ui/widgets/error_reporting.py:13
msgid "Detailed error reporting"
msgstr "Informe de errores detallado"
-#: cozy/ui/widgets/error_reporting.py:15 data/ui/error_reporting.ui:240
+#: cozy/ui/widgets/error_reporting.py:14 data/ui/error_reporting.ui:162
msgid "Detailed error reporting with import errors"
msgstr "Informe de errores detallado con errores de importación"
-#: cozy/ui/widgets/error_reporting.py:19
+#: cozy/ui/widgets/error_reporting.py:18
msgid "No error or crash reporting."
msgstr "Ningún informe de errores o cierres inesperados."
-#: cozy/ui/widgets/error_reporting.py:20 data/ui/error_reporting.ui:259
+#: cozy/ui/widgets/error_reporting.py:19 data/ui/error_reporting.ui:174
msgid "The following information will be sent in case of an error or crash:"
msgstr "La siguiente información será enviada en caso de fallo o error:"
-#: cozy/ui/widgets/error_reporting.py:25
+#: cozy/ui/widgets/error_reporting.py:24
msgid "Which type of error occurred"
msgstr "Que tipo de error se produjo"
-#: cozy/ui/widgets/error_reporting.py:26
+#: cozy/ui/widgets/error_reporting.py:25
msgid "Line of code where an error occurred"
msgstr "Línea de código donde se origino el error"
-#: cozy/ui/widgets/error_reporting.py:27
+#: cozy/ui/widgets/error_reporting.py:26
msgid "Cozy's version"
msgstr "Versión de Cozy"
-#: cozy/ui/widgets/error_reporting.py:28
+#: cozy/ui/widgets/error_reporting.py:27
msgid "Linux distribution"
msgstr "Distribución de Linux"
-#: cozy/ui/widgets/error_reporting.py:29
+#: cozy/ui/widgets/error_reporting.py:28
msgid "Desktop environment"
-msgstr "Ambiente de escritorio"
+msgstr "Entorno de escritorio"
-#: cozy/ui/widgets/error_reporting.py:30
+#: cozy/ui/widgets/error_reporting.py:29
msgid "Media type of files that Cozy couldn't import"
msgstr "Tipos de archivos de medios que Cozy no pudo importar"
-#: cozy/ui/widgets/filter_list_box.py:20
-#: cozy/view_model/library_view_model.py:54
-#: cozy/view_model/library_view_model.py:160
+#: cozy/ui/widgets/filter_list_box.py:18
+#: cozy/view_model/library_view_model.py:45
+#: cozy/view_model/library_view_model.py:135
msgid "All"
msgstr "Todos"
-#: cozy/ui/widgets/filter_list_box.py:21
+#: cozy/ui/widgets/filter_list_box.py:19
msgid "Display all books"
msgstr "Mostrar todos los libros"
-#: cozy/ui/widgets/search_results.py:73
-msgid "Jump to author "
-msgstr "Ir al autor"
-
-#: cozy/ui/widgets/search_results.py:76
-msgid "Jump to reader "
-msgstr "Ir al lector"
-
-#: cozy/ui/widgets/search_results.py:100
-msgid "Play this book"
-msgstr "Reproducir este libro"
+#: cozy/ui/widgets/search_results.py:13
+#, python-brace-format
+msgid "Jump to {artist_name}"
+msgstr "Saltar a {artist_name}"
-#: cozy/ui/widgets/sleep_timer.py:60 data/ui/timer_popover.ui:66
+#: cozy/ui/widgets/sleep_timer.py:57 data/ui/timer_popover.ui:53
msgid "min"
msgstr "min"
-#: cozy/ui/widgets/sleep_timer.py:65
+#: cozy/ui/widgets/sleep_timer.py:62
msgid "Off"
msgstr "Apagado"
-#: cozy/ui/widgets/storage_list_box_row.py:70 data/ui/preferences.ui:377
+#: cozy/ui/widgets/storages.py:11
+msgid "Set Audiobooks Directory"
+msgstr "Establecer carpeta de audiolibros"
+
+#: cozy/ui/widgets/storages.py:65 data/ui/storage_locations.ui:18
msgid "External drive"
msgstr "Disco externo"
-#: cozy/ui/widgets/storage_list_box_row.py:73
+#: cozy/ui/widgets/storages.py:68
msgid "Internal drive"
msgstr "Disco interno"
-#: cozy/view_model/headerbar_view_model.py:91
+#: cozy/view_model/headerbar_view_model.py:78
msgid "Refreshing audio book collection"
msgstr "Refrescando la colección de audiolibros"
-#: cozy/view_model/headerbar_view_model.py:100
-#: cozy/view_model/headerbar_view_model.py:116
+#: cozy/view_model/headerbar_view_model.py:87
+#: cozy/view_model/headerbar_view_model.py:103
msgid "Copying new files…"
msgstr "Copiando nuevos archivos…"
-#: cozy/view_model/headerbar_view_model.py:107
+#: cozy/view_model/headerbar_view_model.py:94
msgid "Changing audio book location…"
msgstr "Cambiando ubicación del audiolibro..."
-#: data/ui/about.ui:16
-msgid "GitHub"
-msgstr "GitHub"
-
-#: data/ui/album_element.ui:104
+#: data/ui/album_element.ui:47
msgid "Play"
msgstr "Reproducir"
-#: data/ui/book_detail.ui:219
+#: data/ui/book_detail.ui:149
msgid "Remaining"
msgstr "Restante"
-#: data/ui/book_detail.ui:274
+#: data/ui/book_detail.ui:195
msgid "Total"
msgstr "Total"
-#: data/ui/book_detail.ui:290
+#: data/ui/book_detail.ui:208
msgid "Last played"
msgstr "Última reproducción"
-#: data/ui/book_detail.ui:306
+#: data/ui/book_detail.ui:221
msgid "Published"
msgstr "Publicado"
-#: data/ui/book_detail.ui:341
+#: data/ui/book_detail.ui:246
msgid "Some or all files of this book cannot be found."
msgstr "No se pueden encontrar algunos o todos los archivos de este libro."
-#: data/ui/book_detail.ui:364
+#: data/ui/book_detail.ui:259
msgid "unavailable"
msgstr "no disponible"
-#: data/ui/book_detail.ui:533
+#: data/ui/book_detail.ui:363
msgid "Loading chapters, please wait..."
msgstr "Cargando capítulos, por favor espere..."
-#: data/ui/book_element.ui:36
+#: data/ui/book_element.ui:10
msgid "Open book overview"
msgstr "Abrir la sinopsis del libro"
-#: data/ui/db_migration_failed.ui:31
-msgid "Close Cozy"
-msgstr "Cerrar Cozy"
-
-#: data/ui/db_migration_failed.ui:47
-msgid "Receive help on GitHub"
-msgstr "Recibir ayuda en GitHub"
-
-#: data/ui/db_migration_failed.ui:108
-msgid "An error occured while updating the database"
-msgstr "Se ha producido un error al actualizar la base de datos"
-
-#: data/ui/db_migration_failed.ui:129
-msgid ""
-"During an update of the database an error occurred and Cozy will not be able to startup.\n"
-"A backup of the database was created before the update and has been restored now.\n"
-"Until this issue is resolved please use version 0.9.5 of Cozy.\n"
-"You can help resolve this problem by reporting an issue on GitHub."
-msgstr ""
-"Durante una actualización de la base de datos se ha producido un error y Cozy no podrá iniciarse.\n"
-"Se creó una copia de seguridad de la base de datos antes de la actualización y se ha restaurado ahora.\n"
-"Hasta que se resuelva este problema, por favor utilice la versión 0.9.5 de Cozy.\n"
-"Puede ayudar a resolver este problema reportando un problema en GitHub."
-
-#: data/ui/delete_book_dialog.ui:31 data/ui/file_not_found.ui:19
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: data/ui/delete_book_dialog.ui:45
-msgid "Delete Audiobook"
-msgstr "Eliminar audiolibro"
-
-#: data/ui/delete_book_dialog.ui:105
-msgid "Are you sure you want to delete the selected audiobook?"
-msgstr "¿Estás seguro de que quieres eliminar el audiolibro seleccionado?"
-
-#: data/ui/delete_book_dialog.ui:126
-msgid "The audiobook will be removed from your disk and from Cozy's library."
-msgstr "El audiolibro será eliminado de tu disco y de la biblioteca de Cozy."
+#: data/ui/chapter_element.ui:5
+msgid "Play this part"
+msgstr "Reproducir esta sección"
-#: data/ui/error_reporting.ui:29 data/ui/preferences.ui:455
+#: data/ui/error_reporting.ui:24 data/ui/preferences.ui:124
msgid "User feedback"
msgstr "Comentarios de usuario"
-#: data/ui/error_reporting.ui:98
+#: data/ui/error_reporting.ui:67
msgctxt "Error and crash reporting dialog"
msgid ""
"You can help improve Cozy by contributing information in case of errors and "
@@ -349,7 +411,7 @@ msgstr ""
"Puedes ayudar a mejorar Cozy aportando información en caso de fallos y "
"errores."
-#: data/ui/error_reporting.ui:112
+#: data/ui/error_reporting.ui:75
msgctxt "Error and crash reporting dialog"
msgid ""
"Contributing this information is optional and completely anonymous. We will "
@@ -360,386 +422,304 @@ msgstr ""
"recolectaremos información personal, archivos que importaste o ninguna otra "
"información que pudiera identificarte."
-#: data/ui/error_reporting.ui:127
+#: data/ui/error_reporting.ui:84
msgctxt "Error and crash reporting dialog"
msgid ""
"Cozy is opensource and the user feedback source code can be inspected here: "
msgstr ""
"Cozy es código libre, el código y los comentarios de pueden leer aquí:"
-#: data/ui/file_not_found.ui:32
-msgid "Locate"
-msgstr "Localizar"
+#. Translators: Don't touch the markup. Translate the text "Sourcecode on
+#. GitHub" only!
+#: data/ui/error_reporting.ui:94
+msgid ""
+"Sourcecode"
+" on GitHub"
+msgstr ""
+"Código "
+"abierto en GitHub"
-#: data/ui/file_not_found.ui:86
-msgid "File not found"
-msgstr "Archivo no encontrado"
+#: data/ui/first_import_button.ui:12
+msgid "Select Folder"
+msgstr "Seleccionar Carpeta"
-#: data/ui/file_not_found.ui:119
-msgid "This file could not be found. Do you want to locate it manually?"
-msgstr "El archivo no se ha encontrado. ¿Quiere localizarlo manualmente?"
+#: data/ui/headerbar.ui:17
+msgid "Toggle Filter Sidebar"
+msgstr "Alternar el filtro de barra lateral"
-#: data/ui/headerbar.ui:56
-msgid "Display background task progress"
-msgstr "Mostrar el progreso de la tarea en segundo plano"
+#: data/ui/headerbar.ui:22
+msgid "Options"
+msgstr "Opciones"
-#: data/ui/headerbar.ui:70
+#: data/ui/headerbar.ui:26
+msgid "Open the options popover"
+msgstr "Abrir el cuadro de opciones"
+
+#: data/ui/headerbar.ui:33
msgid "Search your library"
msgstr "Buscar en la biblioteca"
-#: data/ui/headerbar.ui:80
-msgid "Search menu button"
-msgstr "Botón de menú de búsqueda"
-
-#: data/ui/headerbar.ui:81
+#: data/ui/headerbar.ui:36
msgid "Open the search popover"
msgstr "Abrir el cuadro de búsqueda"
-#: data/ui/headerbar.ui:96
-msgid "Options"
-msgstr "Opciones"
+#: data/ui/headerbar.ui:44
+msgid "Display background task progress"
+msgstr "Mostrar el progreso de la tarea en segundo plano"
-#: data/ui/headerbar.ui:107
-msgid "Options menu button"
-msgstr "Botón de menú de opciones"
+#: data/ui/headerbar.ui:67
+msgid "Start typing..."
+msgstr "Empiece a teclear..."
-#: data/ui/headerbar.ui:108
-msgid "Open the options popover"
-msgstr "Abrir el cuadro de opciones"
+#: data/ui/headerbar.ui:80
+msgid "_Scan Library"
+msgstr "Anali_zar biblioteca"
-#: data/ui/import_failed.ui:27
-msgid "Ok"
-msgstr "Aceptar"
+#: data/ui/headerbar.ui:86
+msgid "_Hide unavailable books"
+msgstr "_Ocultar libros no disponibles"
-#: data/ui/import_failed.ui:81
-msgid "Some files could not be imported"
-msgstr "Algunos archivos no pudieron importarse"
+#: data/ui/headerbar.ui:92
+msgid "_Preferences"
+msgstr "_Preferencias"
-#: data/ui/import_failed.ui:134
-msgid ""
-"This can have multiple reasons:\n"
-"- The audio format is not supported\n"
-"- The path or filename contains non utf-8 characters\n"
-"- The file(s) are no valid audio files\n"
-"- The file(s) are corrupt"
-msgstr ""
-"Puede deberse a varios motivos:\n"
-"• No se admite el formato de audio\n"
-"• La ruta o el nombre de archivo contiene caracteres no UTF-8\n"
-"• Los archivos de audio no son válidos\n"
-"• Los archivos están dañados"
+#: data/ui/headerbar.ui:96
+msgid "_About Cozy"
+msgstr "_Acerca de Cozy"
+
+#: data/ui/headerbar.ui:102
+msgid "_Quit"
+msgstr "_Salir"
-#: data/ui/main_window.ui:68
+#: data/ui/main_window.ui:26
+msgid "Drop Audio Books Here to Add Them to Your Library"
+msgstr "Suelte aquí los audiolibros para añadirlos a su biblioteca"
+
+#: data/ui/main_window.ui:48
+msgid "Library"
+msgstr "Biblioteca"
+
+#: data/ui/main_window.ui:65
msgid "Recent"
msgstr "Reciente"
-#: data/ui/main_window.ui:90
-msgid "List of authors"
-msgstr "Lista de autores"
-
-#: data/ui/main_window.ui:106 data/ui/main_window.ui:250
-#: data/ui/search_popover.ui:107
+#: data/ui/main_window.ui:77 data/ui/search_page.ui:46
msgid "Author"
msgstr "Autor"
-#: data/ui/main_window.ui:128
-msgid "List of readers"
-msgstr "Lista de lectores"
+#: data/ui/main_window.ui:89
+msgid "List of authors"
+msgstr "Lista de autores"
-#: data/ui/main_window.ui:144 data/ui/search_popover.ui:201
+#: data/ui/main_window.ui:108 data/ui/search_page.ui:59
msgid "Reader"
msgstr "Lector"
-#: data/ui/main_window.ui:189
+#: data/ui/main_window.ui:120
+msgid "List of readers"
+msgstr "Lista de lectores"
+
+#: data/ui/main_window.ui:172
msgid "List of books"
msgstr "Lista de libros"
-#: data/ui/main_window.ui:222
-msgid ""
-"Start exploring your library by switching to the Author or Reader view."
-msgstr ""
-"Empiece a explorar su biblioteca cambiando a la vista de Autor o de Lector."
-
-#: data/ui/main_window.ui:280
-msgid "Stay tuned while Cozy is preparing your library…"
-msgstr "Está atento mientras Cozy prepara tu biblioteca…"
-
-#: data/ui/main_window.ui:334
-msgid "Import your Audiobooks"
-msgstr "Importe sus audiolibros"
-
-#: data/ui/main_window.ui:353
-msgid ""
-"Cozy automatically imports your audiobooks in one directory - your library"
-msgstr ""
-"Cozy importa automáticamente sus audiolibros a un directorio: su biblioteca."
+#: data/ui/main_window.ui:194
+msgid "No Recent Books Yet"
+msgstr "Aún no hay audiolibros recientes"
-#: data/ui/main_window.ui:385
-msgid "Drag & Drop"
-msgstr "Arrastrar y soltar"
+#: data/ui/main_window.ui:195
+msgid "Explore your library by switching to the Author or Reader view"
+msgstr "Explore su biblioteca cambiando a la vista Autor o Lector"
-#: data/ui/main_window.ui:387
-msgid "Drag your audiobooks into cozy and they will be automatically imported"
-msgstr "Arrastre sus audiolibros a Cozy y se importarán automáticamente."
+#: data/ui/media_controller.ui:48
+msgid "Currently playing"
+msgstr "Ahora en reproducción"
-#: data/ui/main_window.ui:414
-msgid "Load audiobooks from a directory, network drive or an external disk"
-msgstr ""
-"Cargar audiolibros desde un directorio, una unidad de red o un disco externo"
+#: data/ui/media_controller.ui:65
+msgid "Title of currently playing book"
+msgstr "Título del libro que se está reproduciendo"
-#: data/ui/main_window.ui:417
-msgid "Select"
-msgstr "Seleccionar"
+#: data/ui/media_controller.ui:82
+msgid "Title of the currently playing part"
+msgstr "Título de la sección que se está reproduciendo"
-#: data/ui/media_controller.ui:64 data/ui/media_controller.ui:482
-#: data/ui/media_controller_big.ui:189 data/ui/media_controller_small.ui:70
+#: data/ui/media_controller.ui:111
msgid "Rewind"
msgstr "Retroceder"
-#: data/ui/media_controller.ui:71 data/ui/media_controller.ui:489
-#: data/ui/media_controller_big.ui:197 data/ui/media_controller_small.ui:77
-msgid "Rewind button"
-msgstr "Retroceder"
-
-#: data/ui/media_controller.ui:72 data/ui/media_controller.ui:490
-#: data/ui/media_controller_big.ui:198 data/ui/media_controller_small.ui:78
+#: data/ui/media_controller.ui:116
msgid "Rewind playback"
msgstr "Retroceder la reproducción"
-#: data/ui/media_controller.ui:89 data/ui/media_controller.ui:507
-#: data/ui/media_controller_big.ui:220 data/ui/media_controller_small.ui:100
+#: data/ui/media_controller.ui:130
msgid "Start playback"
msgstr "Reproducir"
-#: data/ui/media_controller.ui:96 data/ui/media_controller.ui:514
-#: data/ui/media_controller_big.ui:228 data/ui/media_controller_small.ui:107
-msgid "Play/Pause Button"
-msgstr "Botón de reproducción/pausa"
-
-#: data/ui/media_controller.ui:97 data/ui/media_controller.ui:515
-#: data/ui/media_controller_big.ui:229 data/ui/media_controller_small.ui:108
+#: data/ui/media_controller.ui:135
msgid "Start or pause the playback"
msgstr "Iniciar o pausar la reproducción"
-#: data/ui/media_controller.ui:113 data/ui/media_controller.ui:531
-#: data/ui/media_controller_big.ui:252 data/ui/media_controller_small.ui:131
+#: data/ui/media_controller.ui:148
msgid "Forward"
msgstr "Avanzar"
-#: data/ui/media_controller.ui:120 data/ui/media_controller.ui:538
-#: data/ui/media_controller_big.ui:260 data/ui/media_controller_small.ui:138
-msgid "Forward button"
-msgstr "Botón de avance"
-
-#: data/ui/media_controller.ui:121 data/ui/media_controller.ui:539
-#: data/ui/media_controller_big.ui:261 data/ui/media_controller_small.ui:139
+#: data/ui/media_controller.ui:153
msgid "Forward Playback"
msgstr "Botón de retroceso"
-#: data/ui/media_controller.ui:175 data/ui/media_controller_big.ui:76
-msgid "Currently playing"
-msgstr "Ahora en reproducción"
-
-#: data/ui/media_controller.ui:190 data/ui/media_controller_big.ui:97
-msgid "Booktitle"
-msgstr "Título del libro"
-
-#: data/ui/media_controller.ui:191 data/ui/media_controller_big.ui:98
-msgid "Title of currently playing book"
-msgstr "Título del libro que se está reproduciendo"
-
-#: data/ui/media_controller.ui:217 data/ui/media_controller_big.ui:126
-msgid "Part name"
-msgstr "Nombre de la sección"
-
-#: data/ui/media_controller.ui:218 data/ui/media_controller_big.ui:127
-msgid "Title of the currently playing part"
-msgstr "Título de la sección que se está reproduciendo"
-
-#: data/ui/media_controller.ui:256 data/ui/seek_bar.ui:20
-msgid "Elapsed time"
-msgstr "Tiempo transcurrido"
-
-#: data/ui/media_controller.ui:264 data/ui/seek_bar.ui:28
-msgid "Time elapsed"
-msgstr "Tiempo transcurrido"
-
-#: data/ui/media_controller.ui:265 data/ui/seek_bar.ui:29
-msgid "Elapsed time of current part"
-msgstr "Tiempo transcurrido de la sección actual"
-
-#: data/ui/media_controller.ui:281 data/ui/seek_bar.ui:45
-msgid "Jump to position in current chapter"
-msgstr "Saltar a la posición en el capítulo actual"
-
-#: data/ui/media_controller.ui:290 data/ui/seek_bar.ui:56
-msgid "Position slider"
-msgstr "Deslizador de posición"
-
-#: data/ui/media_controller.ui:291 data/ui/seek_bar.ui:57
-msgid "Position of the current part in seconds"
-msgstr "Posición de la sección actual en segundos"
-
-#: data/ui/media_controller.ui:310 data/ui/seek_bar.ui:76
-msgid "Remaining time"
-msgstr "Tiempo restante"
-
-#: data/ui/media_controller.ui:317 data/ui/seek_bar.ui:83
-msgid "Time remaining"
-msgstr "Tiempo restante"
-
-#: data/ui/media_controller.ui:318 data/ui/seek_bar.ui:84
-msgid "Remaining time of current part"
-msgstr "Tiempo restante de la sección actual"
-
-#: data/ui/media_controller.ui:350 data/ui/media_controller_big.ui:324
+#: data/ui/media_controller.ui:179
msgid "Volume control"
msgstr "Control de volumen"
-#: data/ui/media_controller.ui:387 data/ui/media_controller.ui:572
-#: data/ui/media_controller_big.ui:367 data/ui/media_controller_small.ui:175
+#: data/ui/media_controller.ui:202
msgid "Playback speed"
msgstr "Velocidad de reproducción"
-#: data/ui/media_controller.ui:408 data/ui/media_controller_big.ui:394
-msgid "Sleep timer"
-msgstr "Temporizador de apagado"
-
-#: data/ui/media_controller.ui:418 data/ui/media_controller_big.ui:404
-msgid "Timer menu button"
-msgstr "Botón de temporizador de apagado"
+#: data/ui/media_controller.ui:213 data/ui/preferences.ui:80
+msgid "Sleep Timer"
+msgstr "Temporizador para dormir"
-#: data/ui/media_controller.ui:419 data/ui/media_controller_big.ui:405
+#: data/ui/media_controller.ui:220
msgid "Open the sleep timer popover"
msgstr "Abrir el cuadro del temporizador"
-#: data/ui/media_controller_big.ui:53
-msgid "Open book"
-msgstr "Abrir libro"
-
-#: data/ui/preferences.ui:55
+#: data/ui/preferences.ui:27
msgid "General"
msgstr "General"
-#: data/ui/preferences.ui:60
+#: data/ui/preferences.ui:30
msgid "Appearance"
msgstr "Apariencia"
-#: data/ui/preferences.ui:83
+#: data/ui/preferences.ui:33
+msgid "Dark Mode"
+msgstr "Modo oscuro"
+
+#: data/ui/preferences.ui:40
msgid "Tags"
msgstr "Etiquetas"
-#: data/ui/preferences.ui:90
+#: data/ui/preferences.ui:43
+msgid "Swap Author and Reader"
+msgstr "Intercambie entre autor y lector"
+
+#: data/ui/preferences.ui:44
msgid "Activate if author and reader are displayed the wrong way"
msgstr "Activar si el autor y el lector se muestran de forma incorrecta"
-#: data/ui/preferences.ui:107
+#: data/ui/preferences.ui:51
msgid "Playback"
msgstr "Reproducción"
-#: data/ui/preferences.ui:114
+#: data/ui/preferences.ui:54
+msgid "Replay"
+msgstr "Reproducir"
+
+#: data/ui/preferences.ui:55
msgid "Rewind 30 seconds of the current book when starting Cozy"
msgstr "Rebobinar 30 segundos del libro actual al iniciar Cozy"
-#: data/ui/preferences.ui:172
-msgid "Sleep Timer"
-msgstr "Temporizador para dormir"
+#: data/ui/preferences.ui:60
+msgid "Rewind Duration"
+msgstr "Duración de Rebobinado"
+
+#: data/ui/preferences.ui:69
+msgid "Forward Duration"
+msgstr "Duración hacia adelante"
+
+#: data/ui/preferences.ui:83
+msgid "Fadeout"
+msgstr "Desvanecimiento"
+
+#: data/ui/preferences.ui:88
+msgid "Fadeout Duration"
+msgstr "Duración del Desvanecimiento"
-#: data/ui/preferences.ui:218
+#: data/ui/preferences.ui:104
msgid "Storage"
msgstr "Almacenamiento"
-#: data/ui/preferences.ui:223
+#: data/ui/preferences.ui:107
msgid "Artwork"
msgstr "Material gráfico"
-#: data/ui/preferences.ui:230
+#: data/ui/preferences.ui:110
+msgid "Prefer External Images Over Embedded Cover"
+msgstr "Preferir imágenes externas sobre portada incrustada"
+
+#: data/ui/preferences.ui:111
msgid "Always use images (cover.jpg, *.png, …) when available"
msgstr "Use siempre imágenes (cover.jpg, *.png, …) cuando estén disponibles"
-#: data/ui/preferences.ui:247
-msgid "Storage locations"
-msgstr "Ubicaciones de almacenamiento"
-
-#: data/ui/preferences.ui:309
-msgid "Add location"
-msgstr "Añadir ubicación"
+#: data/ui/preferences.ui:121
+msgid "Feedback"
+msgstr "Comentarios"
-#: data/ui/preferences.ui:335
-msgid "Remove location"
-msgstr "Eliminar ubicación"
+#: data/ui/search_page.ui:9
+msgid "Search in your library"
+msgstr "Buscar en su biblioteca"
-#: data/ui/preferences.ui:373
-msgid "Toggle this storage location to be internal/external."
-msgstr "Alternar esta ubicación de almacenamiento entre interna y externa."
+#: data/ui/search_page.ui:15
+msgid "No results found"
+msgstr "No se encontraron resultados"
-#: data/ui/preferences.ui:402
-msgid "Set as default storage location for new audiobooks"
-msgstr ""
-"Establecer como ubicación de almacenamiento predeterminada para nuevos "
-"audiolibros"
-
-#: data/ui/preferences.ui:406
-msgid "Set as default"
-msgstr "Establecer como predeterminado"
+#: data/ui/search_page.ui:33
+msgid "Book"
+msgstr "Libro"
-#: data/ui/preferences.ui:450
-msgid "Feedback"
-msgstr "Comentarios"
+#: data/ui/seek_bar.ui:15
+msgid "Elapsed time"
+msgstr "Tiempo transcurrido"
-#: data/ui/preferences.ui:460
-msgid "User Feedback"
-msgstr "Comentarios de usuario"
+#: data/ui/seek_bar.ui:21
+msgid "Elapsed time of current part"
+msgstr "Tiempo transcurrido de la sección actual"
-#: data/ui/search_popover.ui:24
-msgid "Search"
-msgstr "Buscar"
+#: data/ui/seek_bar.ui:32
+msgid "Jump to position in current chapter"
+msgstr "Saltar a la posición en el capítulo actual"
-#: data/ui/search_popover.ui:36
-msgid "Search box"
-msgstr "Cuadro de búsqueda"
+#: data/ui/seek_bar.ui:39
+msgid "Position of the current part in seconds"
+msgstr "Posición de la sección actual en segundos"
-#: data/ui/search_popover.ui:37
-msgid "Search your audiobook library"
-msgstr "Buscar en su biblioteca de audiolibros"
+#: data/ui/seek_bar.ui:48
+msgid "Remaining time"
+msgstr "Tiempo restante"
-#: data/ui/search_popover.ui:67
-msgid "Which book are you looking for?"
-msgstr "¿Qué libro está buscando?"
+#: data/ui/seek_bar.ui:53
+msgid "Remaining time of current part"
+msgstr "Tiempo restante de la sección actual"
-#: data/ui/search_popover.ui:154
-msgid "Book"
-msgstr "Libro"
+#: data/ui/storage_locations.ui:5
+msgid "Storage locations"
+msgstr "Ubicaciones de almacenamiento"
-#: data/ui/search_popover.ui:248
-msgid "Part"
-msgstr "Sección"
+#: data/ui/storage_locations.ui:24
+msgid "Set as default"
+msgstr "Establecer como predeterminado"
-#: data/ui/search_popover.ui:295
-msgid "Nothing found :("
-msgstr "No se ha encontrado nada :("
+#: data/ui/storage_locations.ui:28
+msgid "Remove"
+msgstr "Remover"
-#: data/ui/timer_popover.ui:37
+#: data/ui/timer_popover.ui:30
msgid "Timer duration"
msgstr "Duración del temporizador"
-#: data/ui/timer_popover.ui:49
-msgid "Timer duration slider"
-msgstr "Deslizador del tiempo del temporizador"
-
-#: data/ui/timer_popover.ui:50
+#: data/ui/timer_popover.ui:40
msgid "Set the sleep timer duration in minutes"
msgstr "Ajustar el temporizador de apagado en minutos"
-#: data/ui/timer_popover.ui:116
+#: data/ui/timer_popover.ui:86
msgid "Stop after current chapter"
msgstr "Parar tras el capítulo actual"
-#: data/ui/timer_popover.ui:164
+#: data/ui/timer_popover.ui:107
msgid "Enable system power control"
msgstr "Activar control de encendido del sistema"
-#: data/ui/timer_popover.ui:201
+#: data/ui/timer_popover.ui:125
msgid ""
"Type of the action when the timer finishes.\n"
"\"shutdown\" will attempt to turn your system off (also known as power off)\n"
@@ -749,164 +729,14 @@ msgstr ""
"«apagar» intentará apagar el sistema.\n"
"«suspender» intentará suspender el sistema (también se conoce como «dormir»)."
-#: data/ui/timer_popover.ui:205
-msgid ""
-"System power action\n"
-"to perform"
-msgstr "Acción ha realizar"
+#: data/ui/timer_popover.ui:129
+msgid "System power action to perform"
+msgstr "Acción de encendido del sistema a realizar"
-#: data/ui/timer_popover.ui:221
+#: data/ui/timer_popover.ui:137
msgid "suspend"
msgstr "suspender"
-#: data/ui/timer_popover.ui:237
+#: data/ui/timer_popover.ui:143
msgid "shutdown"
msgstr "apagar"
-
-#: data/ui/titlebar_menu.ui:7
-msgid "_Scan Library"
-msgstr "Anali_zar biblioteca"
-
-#: data/ui/titlebar_menu.ui:13
-msgid "_Hide unavailable books"
-msgstr "_Ocultar libros no disponibles"
-
-#: data/ui/titlebar_menu.ui:19
-msgid "_Preferences"
-msgstr "_Preferencias"
-
-#: data/ui/titlebar_menu.ui:25
-msgid "_Help"
-msgstr "Ay_uda"
-
-#: data/ui/titlebar_menu.ui:29
-msgid "_About"
-msgstr "_Acerca de"
-
-#: data/ui/titlebar_menu.ui:33
-msgid "_Quit"
-msgstr "_Salir"
-
-#: data/ui/welcome.ui:29
-msgid "Welcome!"
-msgstr "¡Bienvenido/a!"
-
-#: data/ui/welcome.ui:46
-msgid "Add your audiobooks and let's get cozy."
-msgstr "Añada sus audiolibros y pongámonos cómodos."
-
-#: data/ui/whats_new.ui:9
-msgid "Whats new?"
-msgstr "¿Novedades?"
-
-#: data/ui/whats_new.ui:27
-msgid "Continue"
-msgstr "Continuación"
-
-#: data/ui/whats_new_importer.ui:17 data/ui/whats_new_library.ui:17
-#: data/ui/whats_new_m4b.ui:17 data/ui/whats_new_m4b_chapter.ui:17
-msgid "What's new in Cozy"
-msgstr "Novedades en Cozy"
-
-#: data/ui/whats_new_importer.ui:52
-msgid "A completely rewritten and far more reliable media importer."
-msgstr ""
-"Un importador de archivos completamente re-escrito y mucho más confiable."
-
-#: data/ui/whats_new_importer.ui:77
-msgid ""
-"Did you experience audio files that couldn't be imported? Drag & Drop those "
-"files onto Cozy or use the application menu in the titlebar to rescan your "
-"audiobook directories!"
-msgstr ""
-"¿Te encontraste con algún archivo que no pudiste importar? ¡Puedes arrastrar"
-" y soltar esos archivos en Cozy o usar el menú de la aplicación en la barra "
-"de título para re-escanear tus directorios de audiolibros!"
-
-#: data/ui/whats_new_importer.ui:92
-msgid "Supported media files currently are mp3, m4a, flac, ogg, opus and wav."
-msgstr ""
-"Los archivos soportados actualmente son mp3, m4a, flac, ogg, opus y wav."
-
-#: data/ui/whats_new_importer.ui:107
-msgid "More to come in a later update."
-msgstr "Más cosas en una actualización futura"
-
-#: data/ui/whats_new_library.ui:52
-msgid "An important change in library management"
-msgstr "Un cambio importante en la gestión de las bibliotecas"
-
-#: data/ui/whats_new_library.ui:77
-msgid ""
-"Previously every file which was imported in your library but couldn't be "
-"found anymore was removed from the library during a scan."
-msgstr ""
-"Anteriormente, todos los archivos que se importaban en la biblioteca, pero "
-"que ya no se podían encontrar, se eliminaban de la biblioteca durante una "
-"exploración."
-
-#: data/ui/whats_new_library.ui:92
-msgid ""
-"Now audiobooks are not removed from your library automatically anymore. This"
-" prevents accidentally loosing the progress of a audiobook when a file can't"
-" be found temporarily."
-msgstr ""
-"Ahora los audiolibros ya no se eliminan automáticamente de tu biblioteca. "
-"Esto evita perder accidentalmente el progreso de un audiolibro cuando un "
-"archivo no puede ser encontrado temporalmente."
-
-#: data/ui/whats_new_library.ui:107
-msgid ""
-"To remove an audiobook from the library simply right-click on it and choose "
-"the remove from library option."
-msgstr ""
-"Para eliminar un audiolibro de la biblioteca basta con hacer clic con el "
-"botón derecho del ratón sobre él y elegir la opción de eliminar de la "
-"biblioteca."
-
-#: data/ui/whats_new_m4b.ui:52
-msgid "Basic support for m4b audio books."
-msgstr "Soporte básico para libros de audio m4b."
-
-#: data/ui/whats_new_m4b.ui:77
-msgid ""
-"Many of you have been waiting for it: Support for m4b audio books! This "
-"version features basic support for m4b files without chapter support."
-msgstr ""
-"Muchos lo han estado esperando: ¡Soporte para los audio libros de m4b! Esta "
-"versión tiene soporte básico para archivos m4b sin soporte de capítulos."
-
-#: data/ui/whats_new_m4b.ui:92
-msgid ""
-"Drag & Drop your m4b files onto Cozy or use the application menu in the "
-"titlebar to rescan your audiobook directories."
-msgstr ""
-"Arrastra y suelta tus archivos m4b en Cozy o usa el menú de la aplicación en"
-" la barra de título para volver a explorar tus directorios de audiolibros."
-
-#: data/ui/whats_new_m4b.ui:107
-msgid "Chapter support will follow in a later update. Stay tuned!"
-msgstr ""
-"El soporte para los capítulos se presentará en una actualización posterior. "
-"¡Estén atentos!"
-
-#: data/ui/whats_new_m4b_chapter.ui:52
-msgid "Chapter support for m4b audio books."
-msgstr "Compatibilidad con capítulos de audiolibros m4b."
-
-#: data/ui/whats_new_m4b_chapter.ui:77
-msgid "This version of Cozy features chapter support for m4b audio books!"
-msgstr ""
-"¡Esta versión de Cozy incluye soporte de capítulos para audiolibros m4b!"
-
-#: data/ui/whats_new_m4b_chapter.ui:92
-msgid ""
-"If you already have m4b files imported you'll need to start a scan of your "
-"library from the app menu."
-msgstr ""
-"Si ya tiene archivos m4b importados, tendrá que iniciar un análisis de su "
-"biblioteca desde el menú de la aplicación."
-
-#: data/ui/whats_new_m4b_chapter.ui:107
-msgid "The chapters will then be detected."
-msgstr "Entonces se detectarán los capítulos."
diff --git a/po/extra/ru.po b/po/extra/ru.po
index 852705eb..8d99a92b 100644
--- a/po/extra/ru.po
+++ b/po/extra/ru.po
@@ -5,9 +5,10 @@
#
# Translators:
# Camellan , 2019
-# Dellon Zerus , 2020
+# a06b2f09006889fdcfe2748d6de9ffe6_1cb4257 <3c4467a30d3a7f297ca7238adcadbf50_945653>, 2020
# Julian Geywitz , 2021
# Victor, 2022
+# Dmitry Petruk, 2024
#
#, fuzzy
msgid ""
@@ -16,7 +17,7 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-16 15:04+0100\n"
"PO-Revision-Date: 2019-09-08 09:39+0000\n"
-"Last-Translator: Victor, 2022\n"
+"Last-Translator: Dmitry Petruk, 2024\n"
"Language-Team: Russian (https://app.transifex.com/geigi/teams/78138/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -42,7 +43,7 @@ msgstr "Слушайте аудиокниги"
#: data/com.github.geigi.cozy.appdata.xml:17
msgid "Do you like audio books? Then lets get cozy!"
-msgstr "Тебе нравятся аудиокниги? Тогда устраивайся поудобнее!"
+msgstr "Любите аудиокниги? Тогда устраивайтесь поудобнее!"
#: data/com.github.geigi.cozy.appdata.xml:18
msgid "Cozy is a audio book player. Here are some of the features:"
@@ -50,20 +51,19 @@ msgstr "Cozy — плеер для аудиокниг. Вот некоторые
#: data/com.github.geigi.cozy.appdata.xml:20
msgid "Import all your audio books into Cozy to browse them comfortably"
-msgstr ""
-"Импортируйте все свои аудиокниги в Cosy, чтобы обозревать их с комфортом"
+msgstr "Импортируйте все свои аудиокниги в Cozy для комфортного прослушивания"
#: data/com.github.geigi.cozy.appdata.xml:21
msgid ""
"Listen to your DRM free mp3, m4b, m4a (aac, ALAC, …), flac, ogg and wav "
"audio books"
msgstr ""
-"Слушайте ваши бесплатные mp3, m4a (aac, ALAC, ...), flac, ogg и wav аудио "
-"книги"
+"Слушайте свои аудиокниги без DRM в форматах mp3, m4a (aac, ALAC, …), flac, "
+"ogg и wav"
#: data/com.github.geigi.cozy.appdata.xml:22
msgid "Remembers your playback position"
-msgstr "Запоминает позицию воспроизведения"
+msgstr "Запоминает, где вы остановились"
#: data/com.github.geigi.cozy.appdata.xml:23
msgid "Sleep timer"
@@ -93,8 +93,8 @@ msgstr ""
#: data/com.github.geigi.cozy.appdata.xml:28
msgid "Drag and Drop to import new audio books"
-msgstr "Для импорта новых аудиокниг просто перетащите книги в окно программы"
+msgstr "Для импорта новых аудиокниг просто перетяните их в окно программы"
#: data/com.github.geigi.cozy.appdata.xml:29
msgid "Sort your audio books by author, reader and name"
-msgstr "Сортируйте ваши аудиокниги по автору, диктору и имени"
+msgstr "Сортируйте свои аудиокниги по автору, чтецу и названию"
diff --git a/po/fr.po b/po/fr.po
index fc5b6552..f6b60d78 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -5,44 +5,44 @@
#
# Translators:
# Charavner Louis , 2020
-# Thibault Martin , 2021
+# Thibault Martin, 2021
# e78dfa95e8487a60e89adc3a5c3879f2, 2021
# Trevor Clokie , 2021
-# Julian Geywitz , 2021
-# Irénée THIRION, 2022
+# Julian Geywitz , 2024
+# renecoty, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: com.github.geigi.cozy\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-01-04 16:30+0100\n"
+"POT-Creation-Date: 2024-02-17 20:33+0100\n"
"PO-Revision-Date: 2019-09-08 09:31+0000\n"
-"Last-Translator: Irénée THIRION, 2022\n"
-"Language-Team: French (https://www.transifex.com/geigi/teams/78138/fr/)\n"
+"Last-Translator: renecoty, 2024\n"
+"Language-Team: French (https://app.transifex.com/geigi/teams/78138/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
-#: cozy/application.py:101
+#: cozy/application.py:59
msgid "Audiobooks"
msgstr "Livres audio"
-#: cozy/control/offline_cache.py:200
+#: cozy/control/offline_cache.py:197
msgid "Copying"
msgstr "Copie en cours"
-#: cozy/media/files.py:69
+#: cozy/media/files.py:67
msgid "Cannot copy: Audiobook directory is read only"
msgstr "Copie impossible : le répertoire Audiobook est en lecture seule"
-#: cozy/media/files.py:71
+#: cozy/media/files.py:69
msgid "Cannot copy: Disk is full"
msgstr "Copie impossible : stockage plein"
-#: cozy/media/files.py:73 cozy/media/files.py:89
+#: cozy/media/files.py:71 cozy/media/files.py:87
msgid "Cannot copy: Permission denied"
msgstr "Copie impossible : permission refusée"
@@ -50,16 +50,13 @@ msgstr "Copie impossible : permission refusée"
msgid "Error while importing new files"
msgstr "Erreur dans l'importation de nouveaux fichiers"
-#: cozy/model/track.py:38
-msgid "Chapter"
-msgstr "Chapitre"
-
#: cozy/tools.py:92 cozy/tools.py:96
#, python-brace-format
msgid "{hours} hour"
msgid_plural "{hours} hours"
msgstr[0] "{hours} heure"
msgstr[1] "{hours} heures"
+msgstr[2] "{hours} heures"
#: cozy/tools.py:94 cozy/tools.py:98
#, python-brace-format
@@ -67,6 +64,7 @@ msgid "{minutes} minute"
msgid_plural "{minutes} minutes"
msgstr[0] "{minutes} minute"
msgstr[1] "{minutes} minutes"
+msgstr[2] "{minutes} minutes"
#: cozy/tools.py:100
#, python-brace-format
@@ -74,6 +72,7 @@ msgid "{seconds} second"
msgid_plural "{seconds} seconds"
msgstr[0] "{seconds} seconde"
msgstr[1] "{seconds} secondes"
+msgstr[2] "{seconds} secondes"
#: cozy/tools.py:102
msgid "finished"
@@ -102,6 +101,7 @@ msgid "{weeks} week ago"
msgid_plural "{weeks} weeks ago"
msgstr[0] "Il y a {weeks} semaine"
msgstr[1] "Il y a {weeks} semaines"
+msgstr[2] "Il y a {weeks} semaines"
#: cozy/tools.py:136
#, python-brace-format
@@ -109,6 +109,7 @@ msgid "{months} month ago"
msgid_plural "{months} months ago"
msgstr[0] "Il y a {months} mois"
msgstr[1] "Il y a {months} mois"
+msgstr[2] "Il y a {months} mois"
#: cozy/tools.py:138
#, python-brace-format
@@ -116,234 +117,291 @@ msgid "{years} year ago"
msgid_plural "{years} years ago"
msgstr[0] "Il y a {years} an"
msgstr[1] "Il y a {years} ans"
+msgstr[2] "Il y a {years} ans"
-#: cozy/ui/book_detail_view.py:313
+#: cozy/ui/book_detail_view.py:299
msgid "Downloaded"
msgstr "Téléchargement terminé"
-#: cozy/ui/book_detail_view.py:316 data/ui/book_detail.ui:152
+#: cozy/ui/book_detail_view.py:302 data/ui/book_detail.ui:116
msgid "Download"
msgstr "Télécharger"
-#: cozy/ui/chapter_element.py:27
-msgid "Play this part"
-msgstr "Lire cette partie"
+#: cozy/ui/db_migration_failed_view.py:6
+msgid ""
+"During an update of the database an error occurred and Cozy will not be able"
+" to startup. A backup of the database was created before the update and has "
+"been restored now. Until this issue is resolved please use version 0.9.5 of "
+"Cozy. You can help resolve this problem by reporting an issue on GitHub."
+msgstr ""
+"Lors d’une mise à jour de la base de données, une erreur s’est produite et "
+"Cozy ne pourra pas démarrer. Une sauvegarde de la base de données a été "
+"créée avant la mise à jour et a été restaurée. Jusqu’à ce que ce problème "
+"soit résolu, veuillez utiliser la version 0.9.5 de Cozy. Vous pouvez aider à"
+" résoudre ce problème en le signalant sur GitHub."
+
+#: cozy/ui/db_migration_failed_view.py:15
+msgid "Failed to Update Database"
+msgstr "Échec de la mise à jour de la base de données"
+
+#: cozy/ui/db_migration_failed_view.py:22
+msgid "Close Cozy"
+msgstr "Fermer Cozy"
+
+#: cozy/ui/db_migration_failed_view.py:23
+msgid "Receive help on GitHub"
+msgstr "Recevoir de l'aide sur GitHub"
+
+#: cozy/ui/delete_book_view.py:13
+msgid "Delete Audiobook?"
+msgstr "Supprimer le livre audio ?"
-#: cozy/ui/disk_element.py:27
+#: cozy/ui/delete_book_view.py:14
+msgid "The audiobook will be removed from your disk and from Cozy's library."
+msgstr ""
+"Le livre audio sera supprimé de votre disque et de la librairie de Cozy."
+
+#: cozy/ui/delete_book_view.py:21 cozy/ui/file_not_found_dialog.py:26
+msgid "Cancel"
+msgstr "Annuler"
+
+#: cozy/ui/delete_book_view.py:22
+msgid "Remove Audiobook"
+msgstr "Supprimer le livre audio"
+
+#: cozy/ui/disk_element.py:22
msgid "Disc"
msgstr "Disque"
-#: cozy/ui/file_not_found_dialog.py:56
-msgid "All files"
-msgstr "Tous les fichiers"
+#: cozy/ui/file_not_found_dialog.py:18
+msgid "File not found"
+msgstr "Fichier introuvable"
-#: cozy/ui/main_view.py:301 data/ui/main_window.ui:412
-msgid "Set Audiobooks Directory"
-msgstr "Définir le répertoire des livres audio"
+#: cozy/ui/file_not_found_dialog.py:19
+msgid "This file could not be found. Do you want to locate it manually?"
+msgstr "Ce fichier est introuvable. Voulez-vous le rechercher manuellement ?"
-#: cozy/ui/warnings.py:27 cozy/ui/warnings.py:42
+#: cozy/ui/file_not_found_dialog.py:27
+msgid "Locate"
+msgstr "Voir l’emplacement"
+
+#: cozy/ui/file_not_found_dialog.py:38
+msgid "Locate Missing File"
+msgstr "Localiser le fichier manquant"
+
+#: cozy/ui/file_not_found_dialog.py:41
#, python-brace-format
-msgid "{storage} is offline."
-msgstr "{storage} est inaccessible."
+msgid "{ext} files"
+msgstr "{ext} fichiers"
+
+#: cozy/ui/file_not_found_dialog.py:44
+msgid "Audio files"
+msgstr "Fichiers audio"
+
+#: cozy/ui/import_failed_dialog.py:8
+msgid "This can have multiple reasons:"
+msgstr "Il peut y avoir plusieurs raisons à cela :"
+
+#: cozy/ui/import_failed_dialog.py:11
+msgid "The audio format is not supported"
+msgstr "Le format audio n’est pas pris en charge"
+
+#: cozy/ui/import_failed_dialog.py:12
+msgid "The path or filename contains non utf-8 characters"
+msgstr "Le chemin ou le nom du fichier contient des caractères non UTF-8"
+
+#: cozy/ui/import_failed_dialog.py:13
+msgid "The file(s) are no valid audio files"
+msgstr "Le(s) fichier(s) n’est/ne sont pas un/des fichier(s) audio valide(s)"
+
+#: cozy/ui/import_failed_dialog.py:14
+msgid "The file(s) are corrupt"
+msgstr "Le(s) fichier(s) est/sont corrompu(s)"
-#: cozy/ui/widgets/book_element.py:52
+#: cozy/ui/import_failed_dialog.py:28
+msgid "Some files could not be imported"
+msgstr "Certains fichiers n’ont pas pu être importés"
+
+#: cozy/ui/import_failed_dialog.py:35
+msgid "Ok"
+msgstr "Ok"
+
+#: cozy/ui/main_view.py:198
+msgid "Patreon Supporters"
+msgstr "Supporters Patreon"
+
+#: cozy/ui/main_view.py:202
+msgid "m4b chapter support in mutagen"
+msgstr "Prise en charge des chapitres m4b dans mutagen"
+
+#: cozy/ui/main_view.py:206
+msgid "Open Source Projects"
+msgstr "Projets open source"
+
+#. Translators: Replace "translator-credits" with your names, one name per
+#. line
+#: cozy/ui/main_view.py:211
+msgid "translator-credits"
+msgstr "Irénée Thirion"
+
+#: cozy/ui/widgets/book_element.py:70
msgid "Mark as read"
msgstr "Marquer comme lu"
-#: cozy/ui/widgets/book_element.py:55
+#: cozy/ui/widgets/book_element.py:73
msgid "Open in file browser"
msgstr "Ouvrir dans l’explorateur de fichiers"
-#: cozy/ui/widgets/book_element.py:58
+#: cozy/ui/widgets/book_element.py:76
msgid "Remove from library"
msgstr "Supprimer"
-#: cozy/ui/widgets/error_reporting.py:12
+#: cozy/ui/widgets/book_row.py:25
+msgid "Play this book"
+msgstr "Lire ce livre"
+
+#: cozy/ui/widgets/error_reporting.py:11
msgid "Disabled"
msgstr "Désactivé"
-#: cozy/ui/widgets/error_reporting.py:13
+#: cozy/ui/widgets/error_reporting.py:12
msgid "Basic error reporting"
msgstr "Rapport d’erreurs simple"
-#: cozy/ui/widgets/error_reporting.py:14
+#: cozy/ui/widgets/error_reporting.py:13
msgid "Detailed error reporting"
msgstr "Rapport d’erreurs détaillé"
-#: cozy/ui/widgets/error_reporting.py:15 data/ui/error_reporting.ui:240
+#: cozy/ui/widgets/error_reporting.py:14 data/ui/error_reporting.ui:162
msgid "Detailed error reporting with import errors"
msgstr "Rapport d’erreurs détaillé avec erreurs d’import"
-#: cozy/ui/widgets/error_reporting.py:19
+#: cozy/ui/widgets/error_reporting.py:18
msgid "No error or crash reporting."
msgstr "Pas de rapport d’erreur ou de plantage."
-#: cozy/ui/widgets/error_reporting.py:20 data/ui/error_reporting.ui:259
+#: cozy/ui/widgets/error_reporting.py:19 data/ui/error_reporting.ui:174
msgid "The following information will be sent in case of an error or crash:"
msgstr ""
"Les informations suivantes seront envoyées en cas d’erreur ou de plantage :"
-#: cozy/ui/widgets/error_reporting.py:25
+#: cozy/ui/widgets/error_reporting.py:24
msgid "Which type of error occurred"
msgstr "Quel type d’erreur est survenu"
-#: cozy/ui/widgets/error_reporting.py:26
+#: cozy/ui/widgets/error_reporting.py:25
msgid "Line of code where an error occurred"
msgstr "Ligne de code où l’erreur est survenue"
-#: cozy/ui/widgets/error_reporting.py:27
+#: cozy/ui/widgets/error_reporting.py:26
msgid "Cozy's version"
msgstr "Version de Cozy"
-#: cozy/ui/widgets/error_reporting.py:28
+#: cozy/ui/widgets/error_reporting.py:27
msgid "Linux distribution"
msgstr "Distribution de Linux"
-#: cozy/ui/widgets/error_reporting.py:29
+#: cozy/ui/widgets/error_reporting.py:28
msgid "Desktop environment"
msgstr "Environnement de bureau"
-#: cozy/ui/widgets/error_reporting.py:30
+#: cozy/ui/widgets/error_reporting.py:29
msgid "Media type of files that Cozy couldn't import"
msgstr "Type de fichiers média que Cozy n’a pas pu importer"
-#: cozy/ui/widgets/filter_list_box.py:20
-#: cozy/view_model/library_view_model.py:54
-#: cozy/view_model/library_view_model.py:160
+#: cozy/ui/widgets/filter_list_box.py:18
+#: cozy/view_model/library_view_model.py:45
+#: cozy/view_model/library_view_model.py:135
msgid "All"
msgstr "Tous"
-#: cozy/ui/widgets/filter_list_box.py:21
+#: cozy/ui/widgets/filter_list_box.py:19
msgid "Display all books"
msgstr "Afficher tous les livres"
-#: cozy/ui/widgets/search_results.py:73
-msgid "Jump to author "
-msgstr "Aller à l’auteur"
-
-#: cozy/ui/widgets/search_results.py:76
-msgid "Jump to reader "
-msgstr "Aller au narrateur"
-
-#: cozy/ui/widgets/search_results.py:100
-msgid "Play this book"
-msgstr "Lire ce livre"
+#: cozy/ui/widgets/search_results.py:13
+#, python-brace-format
+msgid "Jump to {artist_name}"
+msgstr "Aller à {artist_name}"
-#: cozy/ui/widgets/sleep_timer.py:60 data/ui/timer_popover.ui:66
+#: cozy/ui/widgets/sleep_timer.py:57 data/ui/timer_popover.ui:53
msgid "min"
msgstr "min"
-#: cozy/ui/widgets/sleep_timer.py:65
+#: cozy/ui/widgets/sleep_timer.py:62
msgid "Off"
msgstr "Désactivée"
-#: cozy/ui/widgets/storage_list_box_row.py:70 data/ui/preferences.ui:377
+#: cozy/ui/widgets/storages.py:11
+msgid "Set Audiobooks Directory"
+msgstr "Définir le répertoire des livres audio"
+
+#: cozy/ui/widgets/storages.py:65 data/ui/storage_locations.ui:18
msgid "External drive"
msgstr "Stockage externe"
-#: cozy/ui/widgets/storage_list_box_row.py:73
+#: cozy/ui/widgets/storages.py:68
msgid "Internal drive"
msgstr "Stockage interne"
-#: cozy/view_model/headerbar_view_model.py:91
+#: cozy/view_model/headerbar_view_model.py:78
msgid "Refreshing audio book collection"
msgstr "Rafraîchissement de la collection de livres audio"
-#: cozy/view_model/headerbar_view_model.py:100
-#: cozy/view_model/headerbar_view_model.py:116
+#: cozy/view_model/headerbar_view_model.py:87
+#: cozy/view_model/headerbar_view_model.py:103
msgid "Copying new files…"
msgstr "Copiant les fichiers..."
-#: cozy/view_model/headerbar_view_model.py:107
+#: cozy/view_model/headerbar_view_model.py:94
msgid "Changing audio book location…"
msgstr "Modifier l'emplacement des livres audio…"
-#: data/ui/about.ui:16
-msgid "GitHub"
-msgstr "GitHub"
-
-#: data/ui/album_element.ui:104
+#: data/ui/album_element.ui:47
msgid "Play"
msgstr "Jouer"
-#: data/ui/book_detail.ui:219
+#: data/ui/book_detail.ui:149
msgid "Remaining"
msgstr "Restant"
-#: data/ui/book_detail.ui:274
+#: data/ui/book_detail.ui:195
msgid "Total"
msgstr "Total"
-#: data/ui/book_detail.ui:290
+#: data/ui/book_detail.ui:208
msgid "Last played"
msgstr "Dernière lecture"
-#: data/ui/book_detail.ui:306
+#: data/ui/book_detail.ui:221
msgid "Published"
msgstr "Publié"
-#: data/ui/book_detail.ui:341
+#: data/ui/book_detail.ui:246
msgid "Some or all files of this book cannot be found."
msgstr "Tout ou partie des fichiers de ce livre ne peuvent être trouvés."
-#: data/ui/book_detail.ui:364
+#: data/ui/book_detail.ui:259
msgid "unavailable"
msgstr "indisponible"
-#: data/ui/book_detail.ui:533
+#: data/ui/book_detail.ui:363
msgid "Loading chapters, please wait..."
msgstr "Chargement des chapitres, merci de patienter..."
-#: data/ui/book_element.ui:36
+#: data/ui/book_element.ui:10
msgid "Open book overview"
msgstr "Voir le résumé"
-#: data/ui/db_migration_failed.ui:31
-msgid "Close Cozy"
-msgstr "Fermer Cozy"
-
-#: data/ui/db_migration_failed.ui:47
-msgid "Receive help on GitHub"
-msgstr "Recevoir de l'aide sur GitHub"
-
-#: data/ui/db_migration_failed.ui:108
-msgid "An error occured while updating the database"
-msgstr "Une erreur a eu lieu lors du chargement de la base de données"
-
-#: data/ui/db_migration_failed.ui:129
-msgid ""
-"During an update of the database an error occurred and Cozy will not be able to startup.\n"
-"A backup of the database was created before the update and has been restored now.\n"
-"Until this issue is resolved please use version 0.9.5 of Cozy.\n"
-"You can help resolve this problem by reporting an issue on GitHub."
-msgstr ""
-"Durant une mise à jour de la base de données une erreur est survenue et Cozy ne sera pas capable de démarrer.\n"
-"Une sauvegarde de la base de données a été créée avant la mise à jour et a désormais été restaurée.\n"
-"Jusqu'à ce que ce problème soit résolu, merci d'utiliser la version 0.9.5 de Cozy.\n"
-"Vous pouvez aider à résoudre ce problème en rapportant l'erreur sur GitHub."
-
-#: data/ui/delete_book_dialog.ui:31 data/ui/file_not_found.ui:19
-msgid "Cancel"
-msgstr "Annuler"
-
-#: data/ui/delete_book_dialog.ui:45
-msgid "Delete Audiobook"
-msgstr "Supprimez ce livre audio"
-
-#: data/ui/delete_book_dialog.ui:105
-msgid "Are you sure you want to delete the selected audiobook?"
-msgstr "Êtes-vous certain que vous voulez supprimer le livre audio choisi ?"
-
-#: data/ui/delete_book_dialog.ui:126
-msgid "The audiobook will be removed from your disk and from Cozy's library."
-msgstr ""
-"Le livre audio sera supprimé de votre disque et de la librairie de Cozy."
+#: data/ui/chapter_element.ui:5
+msgid "Play this part"
+msgstr "Lire cette partie"
-#: data/ui/error_reporting.ui:29 data/ui/preferences.ui:455
+#: data/ui/error_reporting.ui:24 data/ui/preferences.ui:124
msgid "User feedback"
msgstr "Rapports utilisateur"
-#: data/ui/error_reporting.ui:98
+#: data/ui/error_reporting.ui:67
msgctxt "Error and crash reporting dialog"
msgid ""
"You can help improve Cozy by contributing information in case of errors and "
@@ -352,7 +410,7 @@ msgstr ""
"Vous pouvez aider à améliorer Cozy en envoyant des rapports d’erreur ou de "
"plantage."
-#: data/ui/error_reporting.ui:112
+#: data/ui/error_reporting.ui:75
msgctxt "Error and crash reporting dialog"
msgid ""
"Contributing this information is optional and completely anonymous. We will "
@@ -363,7 +421,7 @@ msgstr ""
"collectons aucune donnée personnelle, fichier que vous importez ou "
"informations permettant de vous identifier."
-#: data/ui/error_reporting.ui:127
+#: data/ui/error_reporting.ui:84
msgctxt "Error and crash reporting dialog"
msgid ""
"Cozy is opensource and the user feedback source code can be inspected here: "
@@ -371,380 +429,297 @@ msgstr ""
"Cozy est open source, et le code d’envoi de rapports d’erreur peut être "
"inspecté ici :"
-#: data/ui/file_not_found.ui:32
-msgid "Locate"
-msgstr "Voir l’emplacement"
+#. Translators: Don't touch the markup. Translate the text "Sourcecode on
+#. GitHub" only!
+#: data/ui/error_reporting.ui:94
+msgid ""
+"Sourcecode"
+" on GitHub"
+msgstr ""
+"Code "
+"source sur GitHub"
-#: data/ui/file_not_found.ui:86
-msgid "File not found"
-msgstr "Fichier introuvable"
+#: data/ui/first_import_button.ui:12
+msgid "Select Folder"
+msgstr "Sélectionner un dossier"
-#: data/ui/file_not_found.ui:119
-msgid "This file could not be found. Do you want to locate it manually?"
-msgstr "Ce fichier est introuvable. Voulez-vous le rechercher manuellement ?"
+#: data/ui/headerbar.ui:17
+msgid "Toggle Filter Sidebar"
+msgstr "Basculer la barre latérale des filtres"
-#: data/ui/headerbar.ui:56
-msgid "Display background task progress"
-msgstr "Afficher la progression des tâches en arrière-plan"
+#: data/ui/headerbar.ui:22
+msgid "Options"
+msgstr "Options"
-#: data/ui/headerbar.ui:70
+#: data/ui/headerbar.ui:26
+msgid "Open the options popover"
+msgstr "Ouvrir les options"
+
+#: data/ui/headerbar.ui:33
msgid "Search your library"
msgstr "Rechercher dans votre bibliothèque"
-#: data/ui/headerbar.ui:80
-msgid "Search menu button"
-msgstr "Bouton du menu de recherche"
-
-#: data/ui/headerbar.ui:81
+#: data/ui/headerbar.ui:36
msgid "Open the search popover"
msgstr "Ouvrir la boîte de recherche"
-#: data/ui/headerbar.ui:96
-msgid "Options"
-msgstr "Options"
+#: data/ui/headerbar.ui:44
+msgid "Display background task progress"
+msgstr "Afficher la progression des tâches en arrière-plan"
-#: data/ui/headerbar.ui:107
-msgid "Options menu button"
-msgstr "Bouton du menu options"
+#: data/ui/headerbar.ui:67
+msgid "Start typing..."
+msgstr "Commencez à taper…"
-#: data/ui/headerbar.ui:108
-msgid "Open the options popover"
-msgstr "Ouvrir les options"
+#: data/ui/headerbar.ui:80
+msgid "_Scan Library"
+msgstr "_Scanner la bibliothèque"
-#: data/ui/import_failed.ui:27
-msgid "Ok"
-msgstr "Ok"
+#: data/ui/headerbar.ui:86
+msgid "_Hide unavailable books"
+msgstr "_Masquer les livres non disponibles"
-#: data/ui/import_failed.ui:81
-msgid "Some files could not be imported"
-msgstr "Certains fichiers n’ont pas pu être importés"
+#: data/ui/headerbar.ui:92
+msgid "_Preferences"
+msgstr "_Préférences"
-#: data/ui/import_failed.ui:134
-msgid ""
-"This can have multiple reasons:\n"
-"- The audio format is not supported\n"
-"- The path or filename contains non utf-8 characters\n"
-"- The file(s) are no valid audio files\n"
-"- The file(s) are corrupt"
-msgstr ""
-"Ceci peut se produire pour diverses raisons :\n"
-"- L'encodage audio n’est pas pris en charge\n"
-"- Le chemin d’accès contient des caractères non utf-8\n"
-"- Il ne s’agit pas de fichier(s) audio valide(s)\n"
-"- Il s’agit de fichier(s) corrompu(s)"
+#: data/ui/headerbar.ui:96
+msgid "_About Cozy"
+msgstr "À _propos de Cozy"
+
+#: data/ui/headerbar.ui:102
+msgid "_Quit"
+msgstr "_Quitter"
-#: data/ui/main_window.ui:68
+#: data/ui/main_window.ui:26
+msgid "Drop Audio Books Here to Add Them to Your Library"
+msgstr "Déposez des livres audio ici pour les ajou"
+
+#: data/ui/main_window.ui:48
+msgid "Library"
+msgstr "Bibliothèque"
+
+#: data/ui/main_window.ui:65
msgid "Recent"
msgstr "Récent"
-#: data/ui/main_window.ui:90
-msgid "List of authors"
-msgstr "Liste des auteurs"
-
-#: data/ui/main_window.ui:106 data/ui/main_window.ui:250
-#: data/ui/search_popover.ui:107
+#: data/ui/main_window.ui:77 data/ui/search_page.ui:46
msgid "Author"
msgstr "Auteur"
-#: data/ui/main_window.ui:128
-msgid "List of readers"
-msgstr "Liste des narrateurs"
+#: data/ui/main_window.ui:89
+msgid "List of authors"
+msgstr "Liste des auteurs"
-#: data/ui/main_window.ui:144 data/ui/search_popover.ui:201
+#: data/ui/main_window.ui:108 data/ui/search_page.ui:59
msgid "Reader"
msgstr "Narrateur"
-#: data/ui/main_window.ui:189
+#: data/ui/main_window.ui:120
+msgid "List of readers"
+msgstr "Liste des narrateurs"
+
+#: data/ui/main_window.ui:172
msgid "List of books"
msgstr "Liste des livres"
-#: data/ui/main_window.ui:222
-msgid ""
-"Start exploring your library by switching to the Author or Reader view."
-msgstr ""
-"Commencez à explorer votre librairie en passant à la vue Auteur ou Lecteur."
-
-#: data/ui/main_window.ui:280
-msgid "Stay tuned while Cozy is preparing your library…"
-msgstr "Attendez pendant que Cozy prépare votre bibliothèque..."
-
-#: data/ui/main_window.ui:334
-msgid "Import your Audiobooks"
-msgstr "Importer vos livres audios"
-
-#: data/ui/main_window.ui:353
-msgid ""
-"Cozy automatically imports your audiobooks in one directory - your library"
-msgstr ""
-"Cozy va automatiquement importer vos livres audios dans un répertoire unique"
-" - votre bibliothèque"
+#: data/ui/main_window.ui:194
+msgid "No Recent Books Yet"
+msgstr "Aucun livre récent pour le moment"
-#: data/ui/main_window.ui:385
-msgid "Drag & Drop"
-msgstr "Glisser & Déposer"
+#: data/ui/main_window.ui:195
+msgid "Explore your library by switching to the Author or Reader view"
+msgstr "Parcourez votre bibliothèque en passant à la vue Auteur ou Lecteur"
-#: data/ui/main_window.ui:387
-msgid "Drag your audiobooks into cozy and they will be automatically imported"
-msgstr ""
-"Faites glisser vos livres audio directement dans Cozy pour les importer"
+#: data/ui/media_controller.ui:48
+msgid "Currently playing"
+msgstr "Lecture en cours"
-#: data/ui/main_window.ui:414
-msgid "Load audiobooks from a directory, network drive or an external disk"
-msgstr ""
-"Charger les livres audio depuis un répertoire, un stockage en ligne ou un "
-"disque externe"
+#: data/ui/media_controller.ui:65
+msgid "Title of currently playing book"
+msgstr "Titre du livre en cours de lecture"
-#: data/ui/main_window.ui:417
-msgid "Select"
-msgstr "Sélectionner"
+#: data/ui/media_controller.ui:82
+msgid "Title of the currently playing part"
+msgstr "Titre du chapitre en cours de lecture"
-#: data/ui/media_controller.ui:64 data/ui/media_controller.ui:482
-#: data/ui/media_controller_big.ui:189 data/ui/media_controller_small.ui:70
+#: data/ui/media_controller.ui:111
msgid "Rewind"
msgstr "Rembobinage"
-#: data/ui/media_controller.ui:71 data/ui/media_controller.ui:489
-#: data/ui/media_controller_big.ui:197 data/ui/media_controller_small.ui:77
-msgid "Rewind button"
-msgstr "Bouton de rembobinage"
-
-#: data/ui/media_controller.ui:72 data/ui/media_controller.ui:490
-#: data/ui/media_controller_big.ui:198 data/ui/media_controller_small.ui:78
+#: data/ui/media_controller.ui:116
msgid "Rewind playback"
msgstr "Rembobinage de la lecture"
-#: data/ui/media_controller.ui:89 data/ui/media_controller.ui:507
-#: data/ui/media_controller_big.ui:220 data/ui/media_controller_small.ui:100
+#: data/ui/media_controller.ui:130
msgid "Start playback"
msgstr "Démarrer la lecture"
-#: data/ui/media_controller.ui:96 data/ui/media_controller.ui:514
-#: data/ui/media_controller_big.ui:228 data/ui/media_controller_small.ui:107
-msgid "Play/Pause Button"
-msgstr "Bouton Marche/Arrêt"
-
-#: data/ui/media_controller.ui:97 data/ui/media_controller.ui:515
-#: data/ui/media_controller_big.ui:229 data/ui/media_controller_small.ui:108
+#: data/ui/media_controller.ui:135
msgid "Start or pause the playback"
msgstr "Démarrer ou interrompre la lecture"
-#: data/ui/media_controller.ui:113 data/ui/media_controller.ui:531
-#: data/ui/media_controller_big.ui:252 data/ui/media_controller_small.ui:131
+#: data/ui/media_controller.ui:148
msgid "Forward"
msgstr "Avancer"
-#: data/ui/media_controller.ui:120 data/ui/media_controller.ui:538
-#: data/ui/media_controller_big.ui:260 data/ui/media_controller_small.ui:138
-msgid "Forward button"
-msgstr "Bouton d'avancement"
-
-#: data/ui/media_controller.ui:121 data/ui/media_controller.ui:539
-#: data/ui/media_controller_big.ui:261 data/ui/media_controller_small.ui:139
+#: data/ui/media_controller.ui:153
msgid "Forward Playback"
msgstr "Avancer la lecture"
-#: data/ui/media_controller.ui:175 data/ui/media_controller_big.ui:76
-msgid "Currently playing"
-msgstr "Lecture en cours"
-
-#: data/ui/media_controller.ui:190 data/ui/media_controller_big.ui:97
-msgid "Booktitle"
-msgstr "Titre"
-
-#: data/ui/media_controller.ui:191 data/ui/media_controller_big.ui:98
-msgid "Title of currently playing book"
-msgstr "Titre du livre en cours de lecture"
-
-#: data/ui/media_controller.ui:217 data/ui/media_controller_big.ui:126
-msgid "Part name"
-msgstr "Nom du chapitre"
-
-#: data/ui/media_controller.ui:218 data/ui/media_controller_big.ui:127
-msgid "Title of the currently playing part"
-msgstr "Titre du chapitre en cours de lecture"
-
-#: data/ui/media_controller.ui:256 data/ui/seek_bar.ui:20
-msgid "Elapsed time"
-msgstr "Temps écoulé"
-
-#: data/ui/media_controller.ui:264 data/ui/seek_bar.ui:28
-msgid "Time elapsed"
-msgstr "Temps écoulé"
-
-#: data/ui/media_controller.ui:265 data/ui/seek_bar.ui:29
-msgid "Elapsed time of current part"
-msgstr "Temps écoulé depuis le début du chapitre"
-
-#: data/ui/media_controller.ui:281 data/ui/seek_bar.ui:45
-msgid "Jump to position in current chapter"
-msgstr "Se déplacer dans le chapitre courant"
-
-#: data/ui/media_controller.ui:290 data/ui/seek_bar.ui:56
-msgid "Position slider"
-msgstr "Indicateur de position"
-
-#: data/ui/media_controller.ui:291 data/ui/seek_bar.ui:57
-msgid "Position of the current part in seconds"
-msgstr "Position dans le chapitre courant en secondes"
-
-#: data/ui/media_controller.ui:310 data/ui/seek_bar.ui:76
-msgid "Remaining time"
-msgstr "Temps restant"
-
-#: data/ui/media_controller.ui:317 data/ui/seek_bar.ui:83
-msgid "Time remaining"
-msgstr "Temps restant"
-
-#: data/ui/media_controller.ui:318 data/ui/seek_bar.ui:84
-msgid "Remaining time of current part"
-msgstr "Temps restant du chapitre actuel"
-
-#: data/ui/media_controller.ui:350 data/ui/media_controller_big.ui:324
+#: data/ui/media_controller.ui:179
msgid "Volume control"
msgstr "Volume"
-#: data/ui/media_controller.ui:387 data/ui/media_controller.ui:572
-#: data/ui/media_controller_big.ui:367 data/ui/media_controller_small.ui:175
+#: data/ui/media_controller.ui:202
msgid "Playback speed"
msgstr "Vitesse de lecture"
-#: data/ui/media_controller.ui:408 data/ui/media_controller_big.ui:394
-msgid "Sleep timer"
-msgstr "Minuterie"
-
-#: data/ui/media_controller.ui:418 data/ui/media_controller_big.ui:404
-msgid "Timer menu button"
-msgstr "Bouton du chronomètre"
+#: data/ui/media_controller.ui:213 data/ui/preferences.ui:80
+msgid "Sleep Timer"
+msgstr "Minuterie de veille"
-#: data/ui/media_controller.ui:419 data/ui/media_controller_big.ui:405
+#: data/ui/media_controller.ui:220
msgid "Open the sleep timer popover"
msgstr "Ouvrir le chronomètre"
-#: data/ui/media_controller_big.ui:53
-msgid "Open book"
-msgstr "Ouvrir le livre"
-
-#: data/ui/preferences.ui:55
+#: data/ui/preferences.ui:27
msgid "General"
msgstr "Général"
-#: data/ui/preferences.ui:60
+#: data/ui/preferences.ui:30
msgid "Appearance"
msgstr "Apparence"
-#: data/ui/preferences.ui:83
+#: data/ui/preferences.ui:33
+msgid "Dark Mode"
+msgstr "Mode sombre"
+
+#: data/ui/preferences.ui:40
msgid "Tags"
msgstr "Étiquettes"
-#: data/ui/preferences.ui:90
+#: data/ui/preferences.ui:43
+msgid "Swap Author and Reader"
+msgstr "Échanger Auteur et Lecteur"
+
+#: data/ui/preferences.ui:44
msgid "Activate if author and reader are displayed the wrong way"
msgstr "Activer si l'auteur et le lecteur sont mal affichés"
-#: data/ui/preferences.ui:107
+#: data/ui/preferences.ui:51
msgid "Playback"
msgstr "Lecture"
-#: data/ui/preferences.ui:114
+#: data/ui/preferences.ui:54
+msgid "Replay"
+msgstr "Rejouer"
+
+#: data/ui/preferences.ui:55
msgid "Rewind 30 seconds of the current book when starting Cozy"
msgstr "Rembobiner 30 secondes du livre en cours lors du démarrage de Cozy"
-#: data/ui/preferences.ui:172
-msgid "Sleep Timer"
-msgstr "Minuterie de veille"
+#: data/ui/preferences.ui:60
+msgid "Rewind Duration"
+msgstr "Durée du rembobinage"
+
+#: data/ui/preferences.ui:69
+msgid "Forward Duration"
+msgstr "Durée de l’avancement"
+
+#: data/ui/preferences.ui:83
+msgid "Fadeout"
+msgstr "Fondu de transition"
-#: data/ui/preferences.ui:218
+#: data/ui/preferences.ui:88
+msgid "Fadeout Duration"
+msgstr "Durée du fondu enchaîné"
+
+#: data/ui/preferences.ui:104
msgid "Storage"
msgstr "Stockage"
-#: data/ui/preferences.ui:223
+#: data/ui/preferences.ui:107
msgid "Artwork"
msgstr "Couverture"
-#: data/ui/preferences.ui:230
+#: data/ui/preferences.ui:110
+msgid "Prefer External Images Over Embedded Cover"
+msgstr "Préférer les images externes à la place de la couverture incluse"
+
+#: data/ui/preferences.ui:111
msgid "Always use images (cover.jpg, *.png, …) when available"
msgstr "Toujours utiliser des images (couverture.jpg, *.png, ...) si possible"
-#: data/ui/preferences.ui:247
-msgid "Storage locations"
-msgstr "Emplacements de stockage"
-
-#: data/ui/preferences.ui:309
-msgid "Add location"
-msgstr "Ajouter un emplacement"
-
-#: data/ui/preferences.ui:335
-msgid "Remove location"
-msgstr "Retirer l’emplacement"
+#: data/ui/preferences.ui:121
+msgid "Feedback"
+msgstr "Retours"
-#: data/ui/preferences.ui:373
-msgid "Toggle this storage location to be internal/external."
-msgstr "Basculer l’état interne/externe pour cet emplacement"
+#: data/ui/search_page.ui:9
+msgid "Search in your library"
+msgstr "Rechercher dans votre bibliothèque"
-#: data/ui/preferences.ui:402
-msgid "Set as default storage location for new audiobooks"
-msgstr "Définir comme emplacement par défaut pour les nouveaux livres audio"
+#: data/ui/search_page.ui:15
+msgid "No results found"
+msgstr "Aucun résultat"
-#: data/ui/preferences.ui:406
-msgid "Set as default"
-msgstr "Définir par défaut"
+#: data/ui/search_page.ui:33
+msgid "Book"
+msgstr "Livre"
-#: data/ui/preferences.ui:450
-msgid "Feedback"
-msgstr "Retours"
+#: data/ui/seek_bar.ui:15
+msgid "Elapsed time"
+msgstr "Temps écoulé"
-#: data/ui/preferences.ui:460
-msgid "User Feedback"
-msgstr "Retour Utilisateur"
+#: data/ui/seek_bar.ui:21
+msgid "Elapsed time of current part"
+msgstr "Temps écoulé depuis le début du chapitre"
-#: data/ui/search_popover.ui:24
-msgid "Search"
-msgstr "Recherche"
+#: data/ui/seek_bar.ui:32
+msgid "Jump to position in current chapter"
+msgstr "Se déplacer dans le chapitre courant"
-#: data/ui/search_popover.ui:36
-msgid "Search box"
-msgstr "Boîte de recherche"
+#: data/ui/seek_bar.ui:39
+msgid "Position of the current part in seconds"
+msgstr "Position dans le chapitre courant en secondes"
-#: data/ui/search_popover.ui:37
-msgid "Search your audiobook library"
-msgstr "Recherchez dans votre bibliothèque de livres audio"
+#: data/ui/seek_bar.ui:48
+msgid "Remaining time"
+msgstr "Temps restant"
-#: data/ui/search_popover.ui:67
-msgid "Which book are you looking for?"
-msgstr "Quel livre recherchez-vous ?"
+#: data/ui/seek_bar.ui:53
+msgid "Remaining time of current part"
+msgstr "Temps restant du chapitre actuel"
-#: data/ui/search_popover.ui:154
-msgid "Book"
-msgstr "Livre"
+#: data/ui/storage_locations.ui:5
+msgid "Storage locations"
+msgstr "Emplacements de stockage"
-#: data/ui/search_popover.ui:248
-msgid "Part"
-msgstr "Chapitre"
+#: data/ui/storage_locations.ui:24
+msgid "Set as default"
+msgstr "Définir par défaut"
-#: data/ui/search_popover.ui:295
-msgid "Nothing found :("
-msgstr "Rien n’a été trouvé :("
+#: data/ui/storage_locations.ui:28
+msgid "Remove"
+msgstr "Supprimer"
-#: data/ui/timer_popover.ui:37
+#: data/ui/timer_popover.ui:30
msgid "Timer duration"
msgstr "Durée du décompte"
-#: data/ui/timer_popover.ui:49
-msgid "Timer duration slider"
-msgstr "Indicateur du décompte"
-
-#: data/ui/timer_popover.ui:50
+#: data/ui/timer_popover.ui:40
msgid "Set the sleep timer duration in minutes"
msgstr "Ajuster la durée du chronomètre"
-#: data/ui/timer_popover.ui:116
+#: data/ui/timer_popover.ui:86
msgid "Stop after current chapter"
msgstr "Arrêter la lecture à la fin de ce chapitre"
-#: data/ui/timer_popover.ui:164
+#: data/ui/timer_popover.ui:107
msgid "Enable system power control"
msgstr "Activer la gestion d'énergie"
-#: data/ui/timer_popover.ui:201
+#: data/ui/timer_popover.ui:125
msgid ""
"Type of the action when the timer finishes.\n"
"\"shutdown\" will attempt to turn your system off (also known as power off)\n"
@@ -754,167 +729,14 @@ msgstr ""
"« éteindre » éteindra votre ordinateur.\n"
"« mettre en veille » mettra votre ordinateur en veille"
-#: data/ui/timer_popover.ui:205
-msgid ""
-"System power action\n"
-"to perform"
-msgstr ""
-"Action d’état du système\n"
-"à effectuer"
+#: data/ui/timer_popover.ui:129
+msgid "System power action to perform"
+msgstr "Action d’alimentation du système à effectuer"
-#: data/ui/timer_popover.ui:221
+#: data/ui/timer_popover.ui:137
msgid "suspend"
msgstr "mettre en veille"
-#: data/ui/timer_popover.ui:237
+#: data/ui/timer_popover.ui:143
msgid "shutdown"
msgstr "éteindre"
-
-#: data/ui/titlebar_menu.ui:7
-msgid "_Scan Library"
-msgstr "_Scanner la bibliothèque"
-
-#: data/ui/titlebar_menu.ui:13
-msgid "_Hide unavailable books"
-msgstr "_Masquer les livres non disponibles"
-
-#: data/ui/titlebar_menu.ui:19
-msgid "_Preferences"
-msgstr "_Préférences"
-
-#: data/ui/titlebar_menu.ui:25
-msgid "_Help"
-msgstr "_Aide"
-
-#: data/ui/titlebar_menu.ui:29
-msgid "_About"
-msgstr "_À propos"
-
-#: data/ui/titlebar_menu.ui:33
-msgid "_Quit"
-msgstr "_Quitter"
-
-#: data/ui/welcome.ui:29
-msgid "Welcome!"
-msgstr "Bienvenue !"
-
-#: data/ui/welcome.ui:46
-msgid "Add your audiobooks and let's get cozy."
-msgstr "Ajoutez vos livres audio et soyez cozy."
-
-#: data/ui/whats_new.ui:9
-msgid "Whats new?"
-msgstr "Nouveautés"
-
-#: data/ui/whats_new.ui:27
-msgid "Continue"
-msgstr "Continuer"
-
-#: data/ui/whats_new_importer.ui:17 data/ui/whats_new_library.ui:17
-#: data/ui/whats_new_m4b.ui:17 data/ui/whats_new_m4b_chapter.ui:17
-msgid "What's new in Cozy"
-msgstr "Ce qui est nouveau avec Cozy"
-
-#: data/ui/whats_new_importer.ui:52
-msgid "A completely rewritten and far more reliable media importer."
-msgstr ""
-"Un assistant d’importation complètement réécrit et beaucoup plus fiable"
-
-#: data/ui/whats_new_importer.ui:77
-msgid ""
-"Did you experience audio files that couldn't be imported? Drag & Drop those "
-"files onto Cozy or use the application menu in the titlebar to rescan your "
-"audiobook directories!"
-msgstr ""
-"Avez-vous fait face à des fichiers qui ne pouvaient pas être importés ? "
-"Glissez & déposez ces fichiers sur Cozy ou utilisez le menu dans la barre "
-"d’en-tête pour scanner à nouveau vos répertoires de livres audio !"
-
-#: data/ui/whats_new_importer.ui:92
-msgid "Supported media files currently are mp3, m4a, flac, ogg, opus and wav."
-msgstr ""
-"Les fichiers média pris en charge actuellement son mp3, m4a, flac, off, opus"
-" et wav."
-
-#: data/ui/whats_new_importer.ui:107
-msgid "More to come in a later update."
-msgstr "Plus de nouveautés dans une prochaine mises à jour."
-
-#: data/ui/whats_new_library.ui:52
-msgid "An important change in library management"
-msgstr "Un changement important au management des bibliothèques"
-
-#: data/ui/whats_new_library.ui:77
-msgid ""
-"Previously every file which was imported in your library but couldn't be "
-"found anymore was removed from the library during a scan."
-msgstr ""
-"Auparavant, tous les fichiers dans votre bibliothèque qui Cozy ne peut pas "
-"trouver étaient supprimés de votre bibliothèque pendant les scans."
-
-#: data/ui/whats_new_library.ui:92
-msgid ""
-"Now audiobooks are not removed from your library automatically anymore. This"
-" prevents accidentally loosing the progress of a audiobook when a file can't"
-" be found temporarily."
-msgstr ""
-"Désormais les livres audio ne sont plus supprimés automatiquement de votre "
-"librairie. Cela évite de perdre accidentellement la progression d'un livre "
-"audio quand un fichier ne peut pas être trouvé temporairement."
-
-#: data/ui/whats_new_library.ui:107
-msgid ""
-"To remove an audiobook from the library simply right-click on it and choose "
-"the remove from library option."
-msgstr ""
-"Pour supprimer un livre audio de votre bibliothèque, faites un clic droit "
-"sur le livre et choisissez l'option de le supprimer de votre bibliothèque."
-
-#: data/ui/whats_new_m4b.ui:52
-msgid "Basic support for m4b audio books."
-msgstr "Prise en charge élémentaire des livres audio m4b."
-
-#: data/ui/whats_new_m4b.ui:77
-msgid ""
-"Many of you have been waiting for it: Support for m4b audio books! This "
-"version features basic support for m4b files without chapter support."
-msgstr ""
-"Beaucoup d’entre vous l’attendaient : la prise en charge des livres audio "
-"m4b ! Cette version introduit la prise en charge élémentaire des fichiers "
-"m4b sans prise en charge du chapitrage."
-
-#: data/ui/whats_new_m4b.ui:92
-msgid ""
-"Drag & Drop your m4b files onto Cozy or use the application menu in the "
-"titlebar to rescan your audiobook directories."
-msgstr ""
-"Glissez et déposez vos fichiers m4b sur Cozy, ou utilisez le menu dans la "
-"barre d’en-tête pour scanner à nouveau vos répertoires de livres audio."
-
-#: data/ui/whats_new_m4b.ui:107
-msgid "Chapter support will follow in a later update. Stay tuned!"
-msgstr ""
-"La prise en charge du chapitrage sera pour une prochaine mise à jour. Gardez"
-" un œil sur les mises à jour !"
-
-#: data/ui/whats_new_m4b_chapter.ui:52
-msgid "Chapter support for m4b audio books."
-msgstr "Prise en charge des chapitres pour les livres audio m4b."
-
-#: data/ui/whats_new_m4b_chapter.ui:77
-msgid "This version of Cozy features chapter support for m4b audio books!"
-msgstr ""
-"Cette version de Cozy apporte une prise en charge des chapitres pour les "
-"livres audio m4b !"
-
-#: data/ui/whats_new_m4b_chapter.ui:92
-msgid ""
-"If you already have m4b files imported you'll need to start a scan of your "
-"library from the app menu."
-msgstr ""
-"Si vous avez déjà des fichiers m4b importés vous aurez besoin de démarrer un"
-" scan de votre librairie depuis le menu de l'application. "
-
-#: data/ui/whats_new_m4b_chapter.ui:107
-msgid "The chapters will then be detected."
-msgstr "Les chapitres seront alors détectés."
diff --git a/po/ru.po b/po/ru.po
index fd4e5c00..22e660a3 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -4,33 +4,32 @@
# FIRST AUTHOR , YEAR.
#
# Translators:
-# Lapunov Yegor , 2020
-# Nikolai Oplachko , 2020
# Caarmi, 2021
-# Dellon Zerus , 2021
+# a06b2f09006889fdcfe2748d6de9ffe6_1cb4257 <3c4467a30d3a7f297ca7238adcadbf50_945653>, 2021
# Jan Lyakhovsky , 2021
-# Julian Geywitz , 2021
# Camellan , 2021
# h h , 2021
# Aleksey Aleksey , 2021
-# Виктор, 2022
+# Victor, 2022
+# Julian Geywitz , 2024
+# Dmitry Petruk, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: com.github.geigi.cozy\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-08-09 20:31+0200\n"
+"POT-Creation-Date: 2024-02-17 20:33+0100\n"
"PO-Revision-Date: 2019-09-08 09:31+0000\n"
-"Last-Translator: Виктор, 2022\n"
-"Language-Team: Russian (https://www.transifex.com/geigi/teams/78138/ru/)\n"
+"Last-Translator: Dmitry Petruk, 2024\n"
+"Language-Team: Russian (https://app.transifex.com/geigi/teams/78138/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\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"
-#: cozy/application.py:106
+#: cozy/application.py:59
msgid "Audiobooks"
msgstr "Аудиокниги"
@@ -38,16 +37,16 @@ msgstr "Аудиокниги"
msgid "Copying"
msgstr "Копирование"
-#: cozy/media/files.py:69
+#: cozy/media/files.py:67
msgid "Cannot copy: Audiobook directory is read only"
msgstr ""
"Не удалось скопировать: папка с аудиокнигами доступна только для чтения"
-#: cozy/media/files.py:71
+#: cozy/media/files.py:69
msgid "Cannot copy: Disk is full"
-msgstr "Не удалось скопировать: диск переполнен"
+msgstr "Не удалось скопировать: диск заполнен"
-#: cozy/media/files.py:73 cozy/media/files.py:89
+#: cozy/media/files.py:71 cozy/media/files.py:87
msgid "Cannot copy: Permission denied"
msgstr "Не удалось скопировать: в доступе отказано"
@@ -55,36 +54,32 @@ msgstr "Не удалось скопировать: в доступе отказ
msgid "Error while importing new files"
msgstr "Ошибка при импортировании новых файлов"
-#: cozy/model/track.py:38
-msgid "Chapter"
-msgstr "Глава"
-
#: cozy/tools.py:92 cozy/tools.py:96
#, python-brace-format
msgid "{hours} hour"
msgid_plural "{hours} hours"
msgstr[0] "{hours} час"
-msgstr[1] "{hours} часов"
+msgstr[1] "{hours} часа"
msgstr[2] "{hours} часов"
-msgstr[3] "{hours} часов"
+msgstr[3] "{hours} часа"
#: cozy/tools.py:94 cozy/tools.py:98
#, python-brace-format
msgid "{minutes} minute"
msgid_plural "{minutes} minutes"
msgstr[0] "{minutes} минута"
-msgstr[1] "{minutes} минут"
+msgstr[1] "{minutes} минуты"
msgstr[2] "{minutes} минут"
-msgstr[3] "{minutes} минут"
+msgstr[3] "{minutes} минуты"
#: cozy/tools.py:100
#, python-brace-format
msgid "{seconds} second"
msgid_plural "{seconds} seconds"
msgstr[0] "{seconds} секунда"
-msgstr[1] "{seconds} секунд"
+msgstr[1] "{seconds} секунды"
msgstr[2] "{seconds} секунд"
-msgstr[3] "{seconds} секунд"
+msgstr[3] "{seconds} секунды"
#: cozy/tools.py:102
msgid "finished"
@@ -105,25 +100,25 @@ msgstr "вчера"
#: cozy/tools.py:132
#, python-format
msgid "%s days ago"
-msgstr "%s дней(я) назад"
+msgstr "%s д. назад"
#: cozy/tools.py:134
#, python-brace-format
msgid "{weeks} week ago"
msgid_plural "{weeks} weeks ago"
-msgstr[0] "{weeks} неделя назад"
+msgstr[0] "{weeks} неделю назад"
msgstr[1] "{weeks} недели назад"
msgstr[2] "{weeks} недель назад"
-msgstr[3] "{weeks} недель назад"
+msgstr[3] "{weeks} недели назад"
#: cozy/tools.py:136
#, python-brace-format
msgid "{months} month ago"
msgid_plural "{months} months ago"
msgstr[0] "{months} месяц назад"
-msgstr[1] "{months} месяцев назад"
+msgstr[1] "{months} месяца назад"
msgstr[2] "{months} месяцев назад"
-msgstr[3] "{months} месяцев назад"
+msgstr[3] "{months} месяца назад"
#: cozy/tools.py:138
#, python-brace-format
@@ -132,252 +127,307 @@ msgid_plural "{years} years ago"
msgstr[0] "{years} год назад"
msgstr[1] "{years} года назад"
msgstr[2] "{years} лет назад"
-msgstr[3] "{years} лет назад"
+msgstr[3] "{years} года назад"
-#: cozy/ui/book_detail_view.py:313
+#: cozy/ui/book_detail_view.py:299
msgid "Downloaded"
-msgstr "Загружено"
+msgstr "Скачано"
-#: cozy/ui/book_detail_view.py:316 data/ui/book_detail.ui:152
+#: cozy/ui/book_detail_view.py:302 data/ui/book_detail.ui:116
msgid "Download"
-msgstr "Загрузить"
+msgstr "Скачать"
-#: cozy/ui/chapter_element.py:27
-msgid "Play this part"
-msgstr "Слушать эту часть"
+#: cozy/ui/db_migration_failed_view.py:6
+msgid ""
+"During an update of the database an error occurred and Cozy will not be able"
+" to startup. A backup of the database was created before the update and has "
+"been restored now. Until this issue is resolved please use version 0.9.5 of "
+"Cozy. You can help resolve this problem by reporting an issue on GitHub."
+msgstr ""
+"Во время обновления базы данных произошла ошибка, и Cozy не сможет "
+"запуститься. Сейчас восстановлена резервная копия базы данных, которая была "
+"создана перед обновлением. Пока эта проблема не будет решена, пожалуйста, "
+"используйте версию Cozy 0.9.5. Вы можете помочь решить эту проблему, сообщив"
+" о ней на GitHub."
+
+#: cozy/ui/db_migration_failed_view.py:15
+msgid "Failed to Update Database"
+msgstr "Не удалось обновить базу данных"
-#: cozy/ui/disk_element.py:27
+#: cozy/ui/db_migration_failed_view.py:22
+msgid "Close Cozy"
+msgstr "Закрыть Cozy"
+
+#: cozy/ui/db_migration_failed_view.py:23
+msgid "Receive help on GitHub"
+msgstr "Получить помощь на GitHub"
+
+#: cozy/ui/delete_book_view.py:13
+msgid "Delete Audiobook?"
+msgstr "Удалить аудиокнигу?"
+
+#: cozy/ui/delete_book_view.py:14
+msgid "The audiobook will be removed from your disk and from Cozy's library."
+msgstr "Аудиокнига будет удалена с вашего диска и из библиотеки Cozy."
+
+#: cozy/ui/delete_book_view.py:21 cozy/ui/file_not_found_dialog.py:26
+msgid "Cancel"
+msgstr "Отмена"
+
+#: cozy/ui/delete_book_view.py:22
+msgid "Remove Audiobook"
+msgstr "Удалить аудиокнигу"
+
+#: cozy/ui/disk_element.py:22
msgid "Disc"
msgstr "Диск"
-#: cozy/ui/file_not_found_dialog.py:56
-msgid "All files"
-msgstr "Все файлы"
+#: cozy/ui/file_not_found_dialog.py:18
+msgid "File not found"
+msgstr "Файл не найден"
-#: cozy/ui/main_view.py:301 data/ui/main_window.ui:412
-msgid "Set Audiobooks Directory"
-msgstr "Указать каталог аудиокниг"
+#: cozy/ui/file_not_found_dialog.py:19
+msgid "This file could not be found. Do you want to locate it manually?"
+msgstr "Файл не найден. Вы хотите найти его самостоятельно?"
+
+#: cozy/ui/file_not_found_dialog.py:27
+msgid "Locate"
+msgstr "Расположение"
+
+#: cozy/ui/file_not_found_dialog.py:38
+msgid "Locate Missing File"
+msgstr "Найти недостающий файл"
-#: cozy/ui/warnings.py:27 cozy/ui/warnings.py:42
+#: cozy/ui/file_not_found_dialog.py:41
#, python-brace-format
-msgid "{storage} is offline."
-msgstr "{storage} в автономном режиме."
+msgid "{ext} files"
+msgstr "Файлы: {ext}"
+
+#: cozy/ui/file_not_found_dialog.py:44
+msgid "Audio files"
+msgstr "Аудиофайлы"
+
+#: cozy/ui/import_failed_dialog.py:8
+msgid "This can have multiple reasons:"
+msgstr "У этого может быть несколько причин:"
+
+#: cozy/ui/import_failed_dialog.py:11
+msgid "The audio format is not supported"
+msgstr "Аудиоформат не поддерживается"
+
+#: cozy/ui/import_failed_dialog.py:12
+msgid "The path or filename contains non utf-8 characters"
+msgstr "Путь или название файла содержат символы не в utf-8"
-#: cozy/ui/widgets/book_element.py:52
+#: cozy/ui/import_failed_dialog.py:13
+msgid "The file(s) are no valid audio files"
+msgstr "Файлы не являются корректными аудиофайлами"
+
+#: cozy/ui/import_failed_dialog.py:14
+msgid "The file(s) are corrupt"
+msgstr "Файлы повреждены"
+
+#: cozy/ui/import_failed_dialog.py:28
+msgid "Some files could not be imported"
+msgstr "Некоторые файлы не могут быть импортированы"
+
+#: cozy/ui/import_failed_dialog.py:35
+msgid "Ok"
+msgstr "Ок"
+
+#: cozy/ui/main_view.py:198
+msgid "Patreon Supporters"
+msgstr "Поддержали нас на Patreon"
+
+#: cozy/ui/main_view.py:202
+msgid "m4b chapter support in mutagen"
+msgstr "Поддержка глав m4b в mutagen"
+
+#: cozy/ui/main_view.py:206
+msgid "Open Source Projects"
+msgstr "Проекты с открытым исходным кодом"
+
+#. Translators: Replace "translator-credits" with your names, one name per
+#. line
+#: cozy/ui/main_view.py:211
+msgid "translator-credits"
+msgstr "Dmitry Petruk"
+
+#: cozy/ui/widgets/book_element.py:70
msgid "Mark as read"
msgstr "Отметить как прочитанное"
-#: cozy/ui/widgets/book_element.py:55
+#: cozy/ui/widgets/book_element.py:73
msgid "Open in file browser"
msgstr "Открыть в файловом менеджере"
-#: cozy/ui/widgets/book_element.py:58
+#: cozy/ui/widgets/book_element.py:76
msgid "Remove from library"
msgstr "Удалить из библиотеки"
-#: cozy/ui/widgets/error_reporting.py:12
+#: cozy/ui/widgets/book_row.py:25
+msgid "Play this book"
+msgstr "Слушать эту аудиокнигу"
+
+#: cozy/ui/widgets/error_reporting.py:11
msgid "Disabled"
msgstr "Отключено"
-#: cozy/ui/widgets/error_reporting.py:13
+#: cozy/ui/widgets/error_reporting.py:12
msgid "Basic error reporting"
-msgstr "Докладывать об основных ошибках"
+msgstr "Сообщать об основных ошибках"
-#: cozy/ui/widgets/error_reporting.py:14
+#: cozy/ui/widgets/error_reporting.py:13
msgid "Detailed error reporting"
-msgstr "Детально докладывать об ошибках"
+msgstr "Подробно сообщать об ошибках"
-#: cozy/ui/widgets/error_reporting.py:15 data/ui/error_reporting.ui:240
+#: cozy/ui/widgets/error_reporting.py:14 data/ui/error_reporting.ui:162
msgid "Detailed error reporting with import errors"
-msgstr "Детально докладывать об ошибках, включая ошибки во время импортации"
+msgstr "Подробно сообщать об ошибках, включая ошибки импорта"
-#: cozy/ui/widgets/error_reporting.py:19
+#: cozy/ui/widgets/error_reporting.py:18
msgid "No error or crash reporting."
-msgstr "Не докладывать об ошибках и сбоях."
+msgstr "Не сообщать об ошибках и сбоях."
-#: cozy/ui/widgets/error_reporting.py:20 data/ui/error_reporting.ui:259
+#: cozy/ui/widgets/error_reporting.py:19 data/ui/error_reporting.ui:174
msgid "The following information will be sent in case of an error or crash:"
msgstr "Данная информация будет отправлена в случае сбоя или ошибки:"
-#: cozy/ui/widgets/error_reporting.py:25
+#: cozy/ui/widgets/error_reporting.py:24
msgid "Which type of error occurred"
msgstr "Вид произошедшей ошибки"
-#: cozy/ui/widgets/error_reporting.py:26
+#: cozy/ui/widgets/error_reporting.py:25
msgid "Line of code where an error occurred"
-msgstr "Линия на которой произошла ошибка"
+msgstr "Строка кода, на которой появилась ошибка"
-#: cozy/ui/widgets/error_reporting.py:27
+#: cozy/ui/widgets/error_reporting.py:26
msgid "Cozy's version"
msgstr "Версия Cozy"
-#: cozy/ui/widgets/error_reporting.py:28
+#: cozy/ui/widgets/error_reporting.py:27
msgid "Linux distribution"
msgstr "Дистрибутив Linux"
-#: cozy/ui/widgets/error_reporting.py:29
+#: cozy/ui/widgets/error_reporting.py:28
msgid "Desktop environment"
msgstr "Среда рабочего стола"
-#: cozy/ui/widgets/error_reporting.py:30
+#: cozy/ui/widgets/error_reporting.py:29
msgid "Media type of files that Cozy couldn't import"
msgstr "Формат файлов, которые Cozy не смог импортировать"
-#: cozy/ui/widgets/filter_list_box.py:20
-#: cozy/view_model/library_view_model.py:54
-#: cozy/view_model/library_view_model.py:160
+#: cozy/ui/widgets/filter_list_box.py:18
+#: cozy/view_model/library_view_model.py:45
+#: cozy/view_model/library_view_model.py:135
msgid "All"
msgstr "Все"
-#: cozy/ui/widgets/filter_list_box.py:21
+#: cozy/ui/widgets/filter_list_box.py:19
msgid "Display all books"
msgstr "Отобразить все книги"
-#: cozy/ui/widgets/search_results.py:73
-msgid "Jump to author "
-msgstr "Перейти к автору "
-
-#: cozy/ui/widgets/search_results.py:76
-msgid "Jump to reader "
-msgstr "Перейти к диктору "
-
-#: cozy/ui/widgets/search_results.py:100
-msgid "Play this book"
-msgstr "Слушать эту аудиокнигу"
+#: cozy/ui/widgets/search_results.py:13
+#, python-brace-format
+msgid "Jump to {artist_name}"
+msgstr "Перейти к {artist_name}"
-#: cozy/ui/widgets/sleep_timer.py:60 data/ui/timer_popover.ui:66
+#: cozy/ui/widgets/sleep_timer.py:57 data/ui/timer_popover.ui:53
msgid "min"
msgstr "мин"
-#: cozy/ui/widgets/sleep_timer.py:65
+#: cozy/ui/widgets/sleep_timer.py:62
msgid "Off"
msgstr "Отключено"
-#: cozy/ui/widgets/storage_list_box_row.py:70 data/ui/preferences.ui:380
+#: cozy/ui/widgets/storages.py:11
+msgid "Set Audiobooks Directory"
+msgstr "Указать каталог аудиокниг"
+
+#: cozy/ui/widgets/storages.py:65 data/ui/storage_locations.ui:18
msgid "External drive"
msgstr "Внешний диск"
-#: cozy/ui/widgets/storage_list_box_row.py:73
+#: cozy/ui/widgets/storages.py:68
msgid "Internal drive"
-msgstr "Внутрення память"
+msgstr "Внутренняя память"
-#: cozy/view_model/headerbar_view_model.py:91
+#: cozy/view_model/headerbar_view_model.py:78
msgid "Refreshing audio book collection"
msgstr "Обновление коллекции аудиокниг"
-#: cozy/view_model/headerbar_view_model.py:100
-#: cozy/view_model/headerbar_view_model.py:116
+#: cozy/view_model/headerbar_view_model.py:87
+#: cozy/view_model/headerbar_view_model.py:103
msgid "Copying new files…"
msgstr "Копирование новых файлов…"
-#: cozy/view_model/headerbar_view_model.py:107
+#: cozy/view_model/headerbar_view_model.py:94
msgid "Changing audio book location…"
msgstr "Изменение каталога аудиокниг…"
-#: data/ui/about.ui:16
-msgid "GitHub"
-msgstr "GitHub"
-
-#: data/ui/album_element.ui:104
+#: data/ui/album_element.ui:47
msgid "Play"
msgstr "Воспроизвести"
-#: data/ui/book_detail.ui:219
+#: data/ui/book_detail.ui:149
msgid "Remaining"
-msgstr "Оставшиеся"
+msgstr "Осталось"
-#: data/ui/book_detail.ui:274
+#: data/ui/book_detail.ui:195
msgid "Total"
-msgstr "Общие"
+msgstr "Всего"
-#: data/ui/book_detail.ui:290
+#: data/ui/book_detail.ui:208
msgid "Last played"
msgstr "Последний раз воспроизводилось"
-#: data/ui/book_detail.ui:306
+#: data/ui/book_detail.ui:221
msgid "Published"
msgstr "Опубликовано"
-#: data/ui/book_detail.ui:341
+#: data/ui/book_detail.ui:246
msgid "Some or all files of this book cannot be found."
-msgstr "Не удалось найти один или из более файлов этой книги."
+msgstr "Не удалось найти некоторые или все файлы этой книги."
-#: data/ui/book_detail.ui:364
+#: data/ui/book_detail.ui:259
msgid "unavailable"
-msgstr "не доступно"
+msgstr "недоступно"
-#: data/ui/book_detail.ui:533
+#: data/ui/book_detail.ui:363
msgid "Loading chapters, please wait..."
-msgstr "Загрузка глав, пожалуйста, подождите..."
+msgstr "Загрузка глав. Пожалуйста, подождите…"
-#: data/ui/book_element.ui:36
+#: data/ui/book_element.ui:10
msgid "Open book overview"
msgstr "Открыть обзор книги"
-#: data/ui/db_migration_failed.ui:31
-msgid "Close Cozy"
-msgstr "Закрыть Cozy"
-
-#: data/ui/db_migration_failed.ui:47
-msgid "Receive help on GitHub"
-msgstr "Получить помощь на GitHub"
-
-#: data/ui/db_migration_failed.ui:108
-msgid "An error occured while updating the database"
-msgstr "Произошла ошибка во время обновления базы данных"
-
-#: data/ui/db_migration_failed.ui:129
-msgid ""
-"During an update of the database an error occurred and Cozy will not be able to startup.\n"
-"A backup of the database was created before the update and has been restored now.\n"
-"Until this issue is resolved please use version 0.9.5 of Cozy.\n"
-"You can help resolve this problem by reporting an issue on GitHub."
-msgstr ""
-"Во время обновления базы данных произошла ошибка, и Cozy не сможет запуститься.\n"
-"Перед обновлением была создана резервная копия базы данных и сейчас она восстановлена.\n"
-"Пока эта проблема не будет решена, используйте версию Cozy 0.9.5.\n"
-"Вы можете помочь решить эту проблему, сообщив о проблеме на GitHub."
-
-#: data/ui/delete_book_dialog.ui:31 data/ui/file_not_found.ui:19
-msgid "Cancel"
-msgstr "Отмена"
-
-#: data/ui/delete_book_dialog.ui:45
-msgid "Delete Audiobook"
-msgstr "Удалить аудиокнигу"
-
-#: data/ui/delete_book_dialog.ui:105
-msgid "Are you sure you want to delete the selected audiobook?"
-msgstr "Вы уверены что хотите удалить выбраную аудиокнигу?"
-
-#: data/ui/delete_book_dialog.ui:126
-msgid "The audiobook will be removed from your disk and from Cozy's library."
-msgstr "Аудиокнига будет удалена с вашего диска и из библиотеки Cozy."
+#: data/ui/chapter_element.ui:5
+msgid "Play this part"
+msgstr "Слушать эту часть"
-#: data/ui/error_reporting.ui:29 data/ui/preferences.ui:458
+#: data/ui/error_reporting.ui:24 data/ui/preferences.ui:124
msgid "User feedback"
-msgstr "Пользовательские отзывы"
+msgstr "Обратная связь пользователей"
-#: data/ui/error_reporting.ui:98
+#: data/ui/error_reporting.ui:67
msgctxt "Error and crash reporting dialog"
msgid ""
"You can help improve Cozy by contributing information in case of errors and "
"crashes. "
-msgstr ""
-"Вы можете помочь Cozy, отправляя информацию в случае ошибок или сбоев."
+msgstr "Вы можете помочь Cozy, отправляя отчёты об ошибка или сбоях."
-#: data/ui/error_reporting.ui:112
+#: data/ui/error_reporting.ui:75
msgctxt "Error and crash reporting dialog"
msgid ""
"Contributing this information is optional and completely anonymous. We will "
"never collect personal data, files you import or any information that could "
"identify you."
msgstr ""
-"Отправление этой информации необязательно, и совершенно анонимно. Мы не "
-"никогда не используем информацию о вас, о ваших файлах, или о ваших личных "
-"данных."
+"Отправление этой информации необязательно и совершенно анонимно. Мы никогда "
+"не собираем ваши личные данные, импротируемые файлы или любую информацию о "
+"вас."
-#: data/ui/error_reporting.ui:127
+#: data/ui/error_reporting.ui:84
msgctxt "Error and crash reporting dialog"
msgid ""
"Cozy is opensource and the user feedback source code can be inspected here: "
@@ -385,380 +435,298 @@ msgstr ""
"Cozy является программой с открытым исходным кодом, а отзывы пользователей "
"можно найти здесь: "
-#: data/ui/file_not_found.ui:32
-msgid "Locate"
-msgstr "Расположение"
+#. Translators: Don't touch the markup. Translate the text "Sourcecode on
+#. GitHub" only!
+#: data/ui/error_reporting.ui:94
+msgid ""
+"Sourcecode"
+" on GitHub"
+msgstr ""
+"Исходный "
+"код на GitHub"
-#: data/ui/file_not_found.ui:86
-msgid "File not found"
-msgstr "Файл не найден"
+#: data/ui/first_import_button.ui:12
+msgid "Select Folder"
+msgstr "Выбрать папку"
-#: data/ui/file_not_found.ui:119
-msgid "This file could not be found. Do you want to locate it manually?"
-msgstr "Файл не найден. Вы хотите найти его самостоятельно?"
+#: data/ui/headerbar.ui:17
+msgid "Toggle Filter Sidebar"
+msgstr "Переключить боковую панель фильтра"
-#: data/ui/headerbar.ui:56
-msgid "Display background task progress"
-msgstr "Отображение выполнения фоновой задачи"
+#: data/ui/headerbar.ui:22
+msgid "Options"
+msgstr "Настройки"
-#: data/ui/headerbar.ui:70
-msgid "Search your library"
-msgstr "Поиск в вашей аудиобиблиотеке"
+#: data/ui/headerbar.ui:26
+msgid "Open the options popover"
+msgstr "Открыть окно настроек"
-#: data/ui/headerbar.ui:80
-msgid "Search menu button"
-msgstr "Кнопка меню поиска"
+#: data/ui/headerbar.ui:33
+msgid "Search your library"
+msgstr "Поиск в аудиобиблиотеке"
-#: data/ui/headerbar.ui:81
+#: data/ui/headerbar.ui:36
msgid "Open the search popover"
msgstr "Откройте поисковый запрос"
-#: data/ui/headerbar.ui:96
-msgid "Options"
-msgstr "Настройки"
+#: data/ui/headerbar.ui:44
+msgid "Display background task progress"
+msgstr "Отображать выполнение фоновой задачи"
-#: data/ui/headerbar.ui:107
-msgid "Options menu button"
-msgstr "Кнопка меню настроек"
+#: data/ui/headerbar.ui:67
+msgid "Start typing..."
+msgstr "Начните вводить…"
-#: data/ui/headerbar.ui:108
-msgid "Open the options popover"
-msgstr "Открыть окно настроек"
+#: data/ui/headerbar.ui:80
+msgid "_Scan Library"
+msgstr "_Сканировать библиотеку"
-#: data/ui/import_failed.ui:27
-msgid "Ok"
-msgstr "Да"
+#: data/ui/headerbar.ui:86
+msgid "_Hide unavailable books"
+msgstr "_Скрыть недоступные книги"
-#: data/ui/import_failed.ui:81
-msgid "Some files could not be imported"
-msgstr "Некоторые файлы не могут быть импортированы"
+#: data/ui/headerbar.ui:92
+msgid "_Preferences"
+msgstr "_Параметры"
-#: data/ui/import_failed.ui:134
-msgid ""
-"This can have multiple reasons:\n"
-"- The audio format is not supported\n"
-"- The path or filename contains non utf-8 characters\n"
-"- The file(s) are no valid audio files\n"
-"- The file(s) are corrupt"
-msgstr ""
-"Это может иметь следующие причины:\n"
-"- Аудиоформат не поддерживается\n"
-"- Путь или имя файла содержит символы не из utf-8\n"
-"- Файл(ы) не являются валидными аудиофайлами\n"
-"- Файл(ы) повреждены"
+#: data/ui/headerbar.ui:96
+msgid "_About Cozy"
+msgstr "_О Cozy"
-#: data/ui/main_window.ui:68
-msgid "Recent"
-msgstr "Предыдущие"
+#: data/ui/headerbar.ui:102
+msgid "_Quit"
+msgstr "_Выход"
-#: data/ui/main_window.ui:90
-msgid "List of authors"
-msgstr "Список авторов"
+#: data/ui/main_window.ui:26
+msgid "Drop Audio Books Here to Add Them to Your Library"
+msgstr "Перетяните аудиокниги сюда, чтобы добавить их в библиотеку"
+
+#: data/ui/main_window.ui:48
+msgid "Library"
+msgstr "Библиотека"
+
+#: data/ui/main_window.ui:65
+msgid "Recent"
+msgstr "Недавние"
-#: data/ui/main_window.ui:106 data/ui/main_window.ui:250
-#: data/ui/search_popover.ui:107
+#: data/ui/main_window.ui:77 data/ui/search_page.ui:46
msgid "Author"
msgstr "Автор"
-#: data/ui/main_window.ui:128
-msgid "List of readers"
-msgstr "Список дикторов"
+#: data/ui/main_window.ui:89
+msgid "List of authors"
+msgstr "Список авторов"
-#: data/ui/main_window.ui:144 data/ui/search_popover.ui:201
+#: data/ui/main_window.ui:108 data/ui/search_page.ui:59
msgid "Reader"
-msgstr "Диктор"
+msgstr "Чтец"
-#: data/ui/main_window.ui:189
+#: data/ui/main_window.ui:120
+msgid "List of readers"
+msgstr "Список чтецов"
+
+#: data/ui/main_window.ui:172
msgid "List of books"
msgstr "Список книг"
-#: data/ui/main_window.ui:222
-msgid ""
-"Start exploring your library by switching to the Author or Reader view."
-msgstr ""
-"Начните изучать свою библиотеку, переключившись на просмотр «Автор» или "
-"«Диктор»."
-
-#: data/ui/main_window.ui:280
-msgid "Stay tuned while Cozy is preparing your library…"
-msgstr "Подождите, пока Cozy подготавливает библиотеку…"
+#: data/ui/main_window.ui:194
+msgid "No Recent Books Yet"
+msgstr "Недавних книг пока нет"
-#: data/ui/main_window.ui:334
-msgid "Import your Audiobooks"
-msgstr "Импорт аудиокниг"
-
-#: data/ui/main_window.ui:353
-msgid ""
-"Cozy automatically imports your audiobooks in one directory - your library"
+#: data/ui/main_window.ui:195
+msgid "Explore your library by switching to the Author or Reader view"
msgstr ""
-"Cozy автоматически импортирует аудиокниги из указанного каталога в "
-"библиотеку"
-
-#: data/ui/main_window.ui:385
-msgid "Drag & Drop"
-msgstr "Перетаскивание"
+"Изучайте свою библиотеку, переключившись на просмотр «Автор» или «Чтец»"
-#: data/ui/main_window.ui:387
-msgid "Drag your audiobooks into cozy and they will be automatically imported"
-msgstr ""
-"Перенесите ваши аудиокниги в уютное местечко — Cozy, и они автоматически "
-"импортируются"
+#: data/ui/media_controller.ui:48
+msgid "Currently playing"
+msgstr "Сейчас воспроизводится"
-#: data/ui/main_window.ui:414
-msgid "Load audiobooks from a directory, network drive or an external disk"
-msgstr "Загружайте аудиокниги из каталога, сетевого или внешнего диска"
+#: data/ui/media_controller.ui:65
+msgid "Title of currently playing book"
+msgstr "Название текущей аудиокниги"
-#: data/ui/main_window.ui:417
-msgid "Select"
-msgstr "Выбрать"
+#: data/ui/media_controller.ui:82
+msgid "Title of the currently playing part"
+msgstr "Название текущей части"
-#: data/ui/media_controller.ui:64 data/ui/media_controller.ui:482
-#: data/ui/media_controller_big.ui:189 data/ui/media_controller_small.ui:70
+#: data/ui/media_controller.ui:111
msgid "Rewind"
msgstr "Перемотать"
-#: data/ui/media_controller.ui:71 data/ui/media_controller.ui:489
-#: data/ui/media_controller_big.ui:197 data/ui/media_controller_small.ui:77
-msgid "Rewind button"
-msgstr "Кнопка перемотки"
-
-#: data/ui/media_controller.ui:72 data/ui/media_controller.ui:490
-#: data/ui/media_controller_big.ui:198 data/ui/media_controller_small.ui:78
+#: data/ui/media_controller.ui:116
msgid "Rewind playback"
msgstr "Обратное воспроизведение"
-#: data/ui/media_controller.ui:89 data/ui/media_controller.ui:507
-#: data/ui/media_controller_big.ui:220 data/ui/media_controller_small.ui:100
+#: data/ui/media_controller.ui:130
msgid "Start playback"
msgstr "Начать воспроизведение"
-#: data/ui/media_controller.ui:96 data/ui/media_controller.ui:514
-#: data/ui/media_controller_big.ui:228 data/ui/media_controller_small.ui:107
-msgid "Play/Pause Button"
-msgstr "Кнопка воспр./паузы"
-
-#: data/ui/media_controller.ui:97 data/ui/media_controller.ui:515
-#: data/ui/media_controller_big.ui:229 data/ui/media_controller_small.ui:108
+#: data/ui/media_controller.ui:135
msgid "Start or pause the playback"
-msgstr "Запуск или приостановка воспроизведения"
+msgstr "Воспроизведение или пауза"
-#: data/ui/media_controller.ui:113 data/ui/media_controller.ui:531
-#: data/ui/media_controller_big.ui:252 data/ui/media_controller_small.ui:131
+#: data/ui/media_controller.ui:148
msgid "Forward"
msgstr "Вперёд"
-#: data/ui/media_controller.ui:120 data/ui/media_controller.ui:538
-#: data/ui/media_controller_big.ui:260 data/ui/media_controller_small.ui:138
-msgid "Forward button"
-msgstr "Кнопка вперёд"
-
-#: data/ui/media_controller.ui:121 data/ui/media_controller.ui:539
-#: data/ui/media_controller_big.ui:261 data/ui/media_controller_small.ui:139
+#: data/ui/media_controller.ui:153
msgid "Forward Playback"
msgstr "Воспроизведение вперёд"
-#: data/ui/media_controller.ui:175 data/ui/media_controller_big.ui:76
-msgid "Currently playing"
-msgstr "Сейчас воспроизводится"
-
-#: data/ui/media_controller.ui:190 data/ui/media_controller_big.ui:97
-msgid "Booktitle"
-msgstr "Заголовок аудиокниги"
-
-#: data/ui/media_controller.ui:191 data/ui/media_controller_big.ui:98
-msgid "Title of currently playing book"
-msgstr "Название текущей аудиокниги"
-
-#: data/ui/media_controller.ui:217 data/ui/media_controller_big.ui:126
-msgid "Part name"
-msgstr "Название части"
-
-#: data/ui/media_controller.ui:218 data/ui/media_controller_big.ui:127
-msgid "Title of the currently playing part"
-msgstr "Название текущей части"
-
-#: data/ui/media_controller.ui:256 data/ui/seek_bar.ui:20
-msgid "Elapsed time"
-msgstr "Пройденное время"
-
-#: data/ui/media_controller.ui:264 data/ui/seek_bar.ui:28
-msgid "Time elapsed"
-msgstr "Прошло времени"
-
-#: data/ui/media_controller.ui:265 data/ui/seek_bar.ui:29
-msgid "Elapsed time of current part"
-msgstr "Истекшее время текущей части"
-
-#: data/ui/media_controller.ui:281 data/ui/seek_bar.ui:45
-msgid "Jump to position in current chapter"
-msgstr "Перейти на позицию в текущей главе"
-
-#: data/ui/media_controller.ui:290 data/ui/seek_bar.ui:56
-msgid "Position slider"
-msgstr "Ползунок положения"
-
-#: data/ui/media_controller.ui:291 data/ui/seek_bar.ui:57
-msgid "Position of the current part in seconds"
-msgstr "Положение текущей части в секундах"
-
-#: data/ui/media_controller.ui:310 data/ui/seek_bar.ui:76
-msgid "Remaining time"
-msgstr "Оставшееся время"
-
-#: data/ui/media_controller.ui:317 data/ui/seek_bar.ui:83
-msgid "Time remaining"
-msgstr "Времени осталось"
-
-#: data/ui/media_controller.ui:318 data/ui/seek_bar.ui:84
-msgid "Remaining time of current part"
-msgstr "Оставшееся время текущей части"
-
-#: data/ui/media_controller.ui:350 data/ui/media_controller_big.ui:324
+#: data/ui/media_controller.ui:179
msgid "Volume control"
msgstr "Регулятор громкости"
-#: data/ui/media_controller.ui:387 data/ui/media_controller.ui:572
-#: data/ui/media_controller_big.ui:367 data/ui/media_controller_small.ui:175
+#: data/ui/media_controller.ui:202
msgid "Playback speed"
msgstr "Скорость воспроизведения"
-#: data/ui/media_controller.ui:408 data/ui/media_controller_big.ui:394
-msgid "Sleep timer"
+#: data/ui/media_controller.ui:213 data/ui/preferences.ui:80
+msgid "Sleep Timer"
msgstr "Таймер сна"
-#: data/ui/media_controller.ui:418 data/ui/media_controller_big.ui:404
-msgid "Timer menu button"
-msgstr "Кнопка меню таймера"
-
-#: data/ui/media_controller.ui:419 data/ui/media_controller_big.ui:405
+#: data/ui/media_controller.ui:220
msgid "Open the sleep timer popover"
msgstr "Открыть окно таймера сна"
-#: data/ui/media_controller_big.ui:53
-msgid "Open book"
-msgstr "Открыть книгу"
-
-#: data/ui/preferences.ui:55
+#: data/ui/preferences.ui:27
msgid "General"
msgstr "Общие"
-#: data/ui/preferences.ui:60
+#: data/ui/preferences.ui:30
msgid "Appearance"
msgstr "Внешний вид"
-#: data/ui/preferences.ui:83
+#: data/ui/preferences.ui:33
+msgid "Dark Mode"
+msgstr "Тёмная тема"
+
+#: data/ui/preferences.ui:40
msgid "Tags"
msgstr "Метки"
-#: data/ui/preferences.ui:90
+#: data/ui/preferences.ui:43
+msgid "Swap Author and Reader"
+msgstr "Поменять местами автора и чтеца"
+
+#: data/ui/preferences.ui:44
msgid "Activate if author and reader are displayed the wrong way"
-msgstr "Активируйте, если автор и диктор отображаются неправильно"
+msgstr "Включите, если автор и чтец отображаются неправильно"
-#: data/ui/preferences.ui:107
+#: data/ui/preferences.ui:51
msgid "Playback"
-msgstr "Проигрывание"
+msgstr "Воспроизведение"
-#: data/ui/preferences.ui:114
+#: data/ui/preferences.ui:54
+msgid "Replay"
+msgstr "Повтор"
+
+#: data/ui/preferences.ui:55
msgid "Rewind 30 seconds of the current book when starting Cozy"
msgstr "Перемотка текущей книги на 30 секунд назад при запуске Cozy"
-#: data/ui/preferences.ui:172
-msgid "Sleep Timer"
-msgstr "Таймер сна"
+#: data/ui/preferences.ui:60
+msgid "Rewind Duration"
+msgstr "Период перемотки назад"
-#: data/ui/preferences.ui:218
+#: data/ui/preferences.ui:69
+msgid "Forward Duration"
+msgstr "Период перемотки вперёд"
+
+#: data/ui/preferences.ui:83
+msgid "Fadeout"
+msgstr "Затухание"
+
+#: data/ui/preferences.ui:88
+msgid "Fadeout Duration"
+msgstr "Продолжительность затухания"
+
+#: data/ui/preferences.ui:104
msgid "Storage"
msgstr "Хранилище"
-#: data/ui/preferences.ui:223
+#: data/ui/preferences.ui:107
msgid "Artwork"
msgstr "Произведение"
-#: data/ui/preferences.ui:230
+#: data/ui/preferences.ui:110
+msgid "Prefer External Images Over Embedded Cover"
+msgstr "Предпочитать внешние изображения встроенной обложке"
+
+#: data/ui/preferences.ui:111
msgid "Always use images (cover.jpg, *.png, …) when available"
msgstr "Всегда использовать изображения (cover.jpg, *.png, …), когда доступно"
-#: data/ui/preferences.ui:247 data/ui/preferences.ui:253
-msgid "Storage locations"
-msgstr "Места хранения "
-
-#: data/ui/preferences.ui:312
-msgid "Add location"
-msgstr "Добавить расположение"
-
-#: data/ui/preferences.ui:338
-msgid "Remove location"
-msgstr "Удалить расположение"
+#: data/ui/preferences.ui:121
+msgid "Feedback"
+msgstr "Обратная связь"
-#: data/ui/preferences.ui:376
-msgid "Toggle this storage location to be internal/external."
-msgstr "Изменить память на внутреннюю/внешнюю"
+#: data/ui/search_page.ui:9
+msgid "Search in your library"
+msgstr "Поиск в библиотеке"
-#: data/ui/preferences.ui:405
-msgid "Set as default storage location for new audiobooks"
-msgstr "Установить как место хранения по умолчанию для новых аудиокниг"
+#: data/ui/search_page.ui:15
+msgid "No results found"
+msgstr "Ничего не найдено"
-#: data/ui/preferences.ui:409
-msgid "Set as default"
-msgstr "Установить по умолчанию"
+#: data/ui/search_page.ui:33
+msgid "Book"
+msgstr "Книга"
-#: data/ui/preferences.ui:453
-msgid "Feedback"
-msgstr "Обратная связь"
+#: data/ui/seek_bar.ui:15
+msgid "Elapsed time"
+msgstr "Пройденное время"
-#: data/ui/preferences.ui:463
-msgid "User Feedback"
-msgstr "Обратная связь пользователей"
+#: data/ui/seek_bar.ui:21
+msgid "Elapsed time of current part"
+msgstr "Истекшее время текущей части"
-#: data/ui/search_popover.ui:24
-msgid "Search"
-msgstr "Поиск"
+#: data/ui/seek_bar.ui:32
+msgid "Jump to position in current chapter"
+msgstr "Перейти на позицию в текущей главе"
-#: data/ui/search_popover.ui:36
-msgid "Search box"
-msgstr "Поисковая строка"
+#: data/ui/seek_bar.ui:39
+msgid "Position of the current part in seconds"
+msgstr "Положение текущей части в секундах"
-#: data/ui/search_popover.ui:37
-msgid "Search your audiobook library"
-msgstr "Поиск в вашей аудиобиблиотеке"
+#: data/ui/seek_bar.ui:48
+msgid "Remaining time"
+msgstr "Оставшееся время"
-#: data/ui/search_popover.ui:67
-msgid "Which book are you looking for?"
-msgstr "Какую книгу вы ищите?"
+#: data/ui/seek_bar.ui:53
+msgid "Remaining time of current part"
+msgstr "Оставшееся время текущей части"
-#: data/ui/search_popover.ui:154
-msgid "Book"
-msgstr "Книга"
+#: data/ui/storage_locations.ui:5
+msgid "Storage locations"
+msgstr "Места хранения"
-#: data/ui/search_popover.ui:248
-msgid "Part"
-msgstr "Часть"
+#: data/ui/storage_locations.ui:24
+msgid "Set as default"
+msgstr "Установить по умолчанию"
-#: data/ui/search_popover.ui:295
-msgid "Nothing found :("
-msgstr "Ничего не найдено :("
+#: data/ui/storage_locations.ui:28
+msgid "Remove"
+msgstr "Убрать"
-#: data/ui/timer_popover.ui:37
+#: data/ui/timer_popover.ui:30
msgid "Timer duration"
msgstr "Продолжительность таймера"
-#: data/ui/timer_popover.ui:49
-msgid "Timer duration slider"
-msgstr "Ползунок длительности таймера"
-
-#: data/ui/timer_popover.ui:50
+#: data/ui/timer_popover.ui:40
msgid "Set the sleep timer duration in minutes"
msgstr "Установить таймер сна в минутах"
-#: data/ui/timer_popover.ui:116
+#: data/ui/timer_popover.ui:86
msgid "Stop after current chapter"
msgstr "Остановить после текущей главы"
-#: data/ui/timer_popover.ui:164
+#: data/ui/timer_popover.ui:107
msgid "Enable system power control"
msgstr "Задействовать управление питанием"
-#: data/ui/timer_popover.ui:201
+#: data/ui/timer_popover.ui:125
msgid ""
"Type of the action when the timer finishes.\n"
"\"shutdown\" will attempt to turn your system off (also known as power off)\n"
@@ -768,163 +736,14 @@ msgstr ""
"«Выключение» попробует выключить ваш компьютер (также «отключение питания»)\n"
"«Спящий режим» попробует приостановить работу компьютера (также «сон»)."
-#: data/ui/timer_popover.ui:205
-msgid ""
-"System power action\n"
-"to perform"
-msgstr ""
-"Выполнить действие\n"
-"по управлению питанием"
+#: data/ui/timer_popover.ui:129
+msgid "System power action to perform"
+msgstr "Действие с питанием системы"
-#: data/ui/timer_popover.ui:221
+#: data/ui/timer_popover.ui:137
msgid "suspend"
msgstr "спящий режим"
-#: data/ui/timer_popover.ui:237
+#: data/ui/timer_popover.ui:143
msgid "shutdown"
msgstr "выключение"
-
-#: data/ui/titlebar_menu.ui:7
-msgid "_Scan Library"
-msgstr "_Сканировать библиотеку"
-
-#: data/ui/titlebar_menu.ui:13
-msgid "_Hide unavailable books"
-msgstr "_Скрыть недоступные книги"
-
-#: data/ui/titlebar_menu.ui:19
-msgid "_Preferences"
-msgstr "_Параметры"
-
-#: data/ui/titlebar_menu.ui:25
-msgid "_Help"
-msgstr "_Справка"
-
-#: data/ui/titlebar_menu.ui:29
-msgid "_About"
-msgstr "_О программе"
-
-#: data/ui/titlebar_menu.ui:33
-msgid "_Quit"
-msgstr "_Выход"
-
-#: data/ui/welcome.ui:29
-msgid "Welcome!"
-msgstr "Добро пожаловать!"
-
-#: data/ui/welcome.ui:46
-msgid "Add your audiobooks and let's get cozy."
-msgstr "Добавьте свои аудиокниги и устраивайтесь поудобнее."
-
-#: data/ui/whats_new.ui:9
-msgid "Whats new?"
-msgstr "Что нового?"
-
-#: data/ui/whats_new.ui:27
-msgid "Continue"
-msgstr "Продолжить"
-
-#: data/ui/whats_new_importer.ui:17 data/ui/whats_new_library.ui:17
-#: data/ui/whats_new_m4b.ui:17 data/ui/whats_new_m4b_chapter.ui:17
-msgid "What's new in Cozy"
-msgstr "Что нового в Cozy"
-
-#: data/ui/whats_new_importer.ui:52
-msgid "A completely rewritten and far more reliable media importer."
-msgstr ""
-"Переписанный с нуля и намного более надёжный метод импортирования файлов. "
-
-#: data/ui/whats_new_importer.ui:77
-msgid ""
-"Did you experience audio files that couldn't be imported? Drag & Drop those "
-"files onto Cozy or use the application menu in the titlebar to rescan your "
-"audiobook directories!"
-msgstr ""
-"Были ли у вас проблемы с импортом аудиофайлов? Можно перетащить эти файлы в "
-"окно Cozy, или воспользоваться меню приложения для нового сканирования "
-"каталогов ваших аудиокниг!"
-
-#: data/ui/whats_new_importer.ui:92
-msgid "Supported media files currently are mp3, m4a, flac, ogg, opus and wav."
-msgstr ""
-"На данный момент, программа поддерживает форматы mp3, m4a, flac, ogg, opus и"
-" wav."
-
-#: data/ui/whats_new_importer.ui:107
-msgid "More to come in a later update."
-msgstr "Мы добавим больше в следующем обновлении."
-
-#: data/ui/whats_new_library.ui:52
-msgid "An important change in library management"
-msgstr "Важные изменения в управлении библиотекой"
-
-#: data/ui/whats_new_library.ui:77
-msgid ""
-"Previously every file which was imported in your library but couldn't be "
-"found anymore was removed from the library during a scan."
-msgstr ""
-"Раньше каждый файл, который был импортирован в вашу библиотеку, но который "
-"не удавалось найти, удалялся из библиотеки во время сканирования."
-
-#: data/ui/whats_new_library.ui:92
-msgid ""
-"Now audiobooks are not removed from your library automatically anymore. This"
-" prevents accidentally loosing the progress of a audiobook when a file can't"
-" be found temporarily."
-msgstr ""
-"Теперь аудиокниги больше не удаляются из вашей библиотеки автоматически. Это"
-" предотвращает случайную потерю прогресса чтения аудиокниги, когда файл "
-"временно не может быть найден."
-
-#: data/ui/whats_new_library.ui:107
-msgid ""
-"To remove an audiobook from the library simply right-click on it and choose "
-"the remove from library option."
-msgstr ""
-"Чтобы удалить аудиокнигу из библиотеки, просто нажмите на нее правой кнопкой"
-" мыши и выберите параметр «Удалить из библиотеки»."
-
-#: data/ui/whats_new_m4b.ui:52
-msgid "Basic support for m4b audio books."
-msgstr "Поддержка аудиокниг формата m4b."
-
-#: data/ui/whats_new_m4b.ui:77
-msgid ""
-"Many of you have been waiting for it: Support for m4b audio books! This "
-"version features basic support for m4b files without chapter support."
-msgstr ""
-"По многочисленным просьбам, мы добавили поддержку книг формата m4b. Эта "
-"версия включает в себя базовую поддержку формата m4b, но не поддерживает "
-"использование глав."
-
-#: data/ui/whats_new_m4b.ui:92
-msgid ""
-"Drag & Drop your m4b files onto Cozy or use the application menu in the "
-"titlebar to rescan your audiobook directories."
-msgstr ""
-"Перетащите файлы m4b в окно Cozy или используйте меню приложения чтобы ещё "
-"раз сканировать папку с вашими аудиокнигами."
-
-#: data/ui/whats_new_m4b.ui:107
-msgid "Chapter support will follow in a later update. Stay tuned!"
-msgstr "Поддержка глав будет добавлена в будущем обновлении."
-
-#: data/ui/whats_new_m4b_chapter.ui:52
-msgid "Chapter support for m4b audio books."
-msgstr "Поддержка глав аудиокниг формата m4b."
-
-#: data/ui/whats_new_m4b_chapter.ui:77
-msgid "This version of Cozy features chapter support for m4b audio books!"
-msgstr "Эта версия Cozy поддерживает главы для аудиокниг в формате m4b!"
-
-#: data/ui/whats_new_m4b_chapter.ui:92
-msgid ""
-"If you already have m4b files imported you'll need to start a scan of your "
-"library from the app menu."
-msgstr ""
-"Если у вас уже есть импортированные файлы m4b, вам нужно запустить "
-"сканирование вашей библиотеки из меню приложения."
-
-#: data/ui/whats_new_m4b_chapter.ui:107
-msgid "The chapters will then be detected."
-msgstr "После этого главы будут удалены."
diff --git a/pyproject.toml b/pyproject.toml
index 10591275..e705a7eb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -6,9 +6,14 @@ skip-magic-trailing-comma = true
line_length = 100
profile = "black"
multi_line_output = 3
+skip = ["cozy/ext/inject/"]
[tool.ruff]
line-length = 100
builtins = ["_"]
-output-format = "github"
+output-format = "grouped"
+
+[tool.ruff.lint]
extend-select = ["B", "SIM", "PIE", "C4", "INT", "LOG"]
+extend-ignore = ["E402", "E731"]
+exclude = ["cozy/ext/inject/*"]
diff --git a/test/cozy/extensions/test_set.py b/test/cozy/extensions/test_set.py
index bf6b3033..3acd5e05 100644
--- a/test/cozy/extensions/test_set.py
+++ b/test/cozy/extensions/test_set.py
@@ -2,7 +2,7 @@
def test_split_strings_does_nothing_for_non_seperated_element():
- test = "This is a nice test. Nothing should be splitted."
+ test = "This is a nice test. Nothing should be split."
result = split_strings_to_set({test})
assert {test} == result
diff --git a/test/cozy/media/test_importer.py b/test/cozy/media/test_importer.py
index fe599f62..dbc2025d 100644
--- a/test/cozy/media/test_importer.py
+++ b/test/cozy/media/test_importer.py
@@ -33,7 +33,7 @@ def test_external_paths_are_excluded_when_offline(mocker):
internal_storages_in_db = Storage.select().where(Storage.external is not False)
internal_storage_paths = [storage.path for storage in internal_storages_in_db]
assert len(internal_storage_paths) == len(paths_to_import)
- assert all([a == b for a, b in zip(internal_storage_paths, paths_to_import)])
+ assert all(a == b for a, b in zip(internal_storage_paths, paths_to_import))
def test_paths_not_existing_are_excluded(mocker):
@@ -60,7 +60,7 @@ def test_all_existing_paths_are_included(mocker):
internal_storage_paths = [storage.path for storage in internal_storages_in_db]
assert len(internal_storage_paths) == len(paths_to_import)
- assert all([a == b for a, b in zip(internal_storage_paths, paths_to_import)])
+ assert all(a == b for a, b in zip(internal_storage_paths, paths_to_import))
def test_import_file_returns_false_for_directory(mocker):
@@ -76,12 +76,11 @@ def test_import_file_returns_false_for_directory(mocker):
def test_filter_unchanged_files_returns_only_new_or_changed_files(mocker):
from cozy.media.importer import Importer
- example_chapters = []
mocker.patch("cozy.model.library.Library.chapters")
mocker.patch("os.path.getmtime", return_value=100)
- importer = Importer()
+ Importer()
def test_scan_emits_start_event(mocker):
@@ -200,4 +199,4 @@ def iterator(self):
importer = Importer()
imported, _ = importer._execute_import(["a", "b"])
- assert all([a == b for a, b in zip(imported, ["path", "path2"])])
+ assert all(a == b for a, b in zip(imported, ["path", "path2"]))
diff --git a/test/cozy/model/test_book.py b/test/cozy/model/test_book.py
index 5c894514..1c22c141 100644
--- a/test/cozy/model/test_book.py
+++ b/test/cozy/model/test_book.py
@@ -116,7 +116,7 @@ def test_cover_returns_default_value(peewee_database):
from cozy.db.book import Book as BookDB
book = Book(peewee_database, BookDB.get(1))
- assert book.cover == None
+ assert book.cover is None
def test_setting_cover_updates_in_book_object_and_database(peewee_database):
@@ -170,7 +170,7 @@ def test_offline_returns_default_value(peewee_database):
from cozy.db.book import Book as BookDB
book = Book(peewee_database, BookDB.get(1))
- assert book.offline == False
+ assert not book.offline
def test_setting_offline_updates_in_book_object_and_database(peewee_database):
@@ -179,8 +179,8 @@ def test_setting_offline_updates_in_book_object_and_database(peewee_database):
book = Book(peewee_database, BookDB.get(1))
book.offline = True
- assert book.offline is True
- assert BookDB.get_by_id(1).offline is True
+ assert book.offline
+ assert BookDB.get_by_id(1).offline
def test_downloaded_returns_default_value(peewee_database):
@@ -188,7 +188,7 @@ def test_downloaded_returns_default_value(peewee_database):
from cozy.db.book import Book as BookDB
book = Book(peewee_database, BookDB.get(1))
- assert book.downloaded == False
+ assert not book.downloaded
def test_setting_downloaded_updates_in_book_object_and_database(peewee_database):
@@ -218,7 +218,7 @@ def test_tracks_are_ordered_by_disk_number_name(peewee_database):
chapters_manually_sorted = book.chapters.copy()
chapters_manually_sorted.sort(key=lambda chapter: (chapter.disk, chapter.number, chapter.name))
- assert all([a == b for a, b in zip(book.chapters, chapters_manually_sorted)])
+ assert all(a == b for a, b in zip(book.chapters, chapters_manually_sorted))
def test_current_track_is_actually_current_track(peewee_database):
@@ -274,7 +274,7 @@ def test_deleted_book_removed_from_last_played_book_if_necessary(peewee_database
settings.last_played_book = book
book._on_chapter_event("chapter-deleted", book.chapters[0])
- assert settings.last_played_book == None
+ assert settings.last_played_book is None
def test_skipping_removing_a_non_existing_chapter(peewee_database):
diff --git a/test/cozy/model/test_database_importer.py b/test/cozy/model/test_database_importer.py
index d5c28278..3afcf41a 100644
--- a/test/cozy/model/test_database_importer.py
+++ b/test/cozy/model/test_database_importer.py
@@ -65,7 +65,7 @@ def test_update_files_db_objects_updates_modified_field():
database_importer = DatabaseImporter()
file = File.select().where(File.path == "test.mp3").get()
- file_objects = database_importer._update_files_in_db(file, media_file)
+ database_importer._update_files_in_db(file, media_file)
assert File.select().where(File.path == "test.mp3").get().modified == 12345678
diff --git a/test/cozy/model/test_library.py b/test/cozy/model/test_library.py
index 34556bf9..2fcc0d03 100644
--- a/test/cozy/model/test_library.py
+++ b/test/cozy/model/test_library.py
@@ -83,7 +83,7 @@ def test_rebase_path():
from cozy.model.library import Library
library = Library()
- chapters = {chapter for chapter in library.chapters if chapter.file.startswith("20.000 Meilen unter dem Meer")}
+ chapters = {chapter for chapter in library.chapters if chapter.file.startswith("20.000 Meilen unter dem Meer")} # noqa: F841
library.rebase_path("20.000 Meilen unter dem Meer", "new path")
@@ -96,7 +96,7 @@ def test_empty_last_book_returns_none():
assert library.last_played_book is None
-def test_empty_last_book_returns_none():
+def test_library_last_book_returns_the_book_it_was_set_to():
from cozy.model.library import Library
library = Library()
diff --git a/test/cozy/model/test_settings.py b/test/cozy/model/test_settings.py
index 8cf0639b..7d467973 100644
--- a/test/cozy/model/test_settings.py
+++ b/test/cozy/model/test_settings.py
@@ -33,10 +33,10 @@ def test_external_storage_locations_contain_only_external_storages(peewee_databa
from cozy.db.storage import Storage
settings = Settings()
- storage_locations = Storage.select().where(Storage.external == True)
+ storage_locations = Storage.select().where(Storage.external)
assert len(settings.external_storage_locations) == len(storage_locations)
- assert all([storage.external for storage in settings.external_storage_locations])
+ assert all(storage.external for storage in settings.external_storage_locations)
def test_last_played_book_returns_correct_value(peewee_database):
@@ -55,8 +55,8 @@ def test_setting_last_played_book_to_none_updates_in_settings_object_and_databas
settings = Settings()
settings.last_played_book = None
- assert settings.last_played_book == None
- assert SettingsModel.get().last_played_book == None
+ assert settings.last_played_book is None
+ assert SettingsModel.get().last_played_book is None
def test_fetching_non_existent_last_played_book_returns_none(peewee_database):
@@ -81,8 +81,8 @@ def test_fetching_non_existent_last_played_book_sets_it_to_none(peewee_database)
db_object.save(only=db_object.dirty_fields)
settings = Settings()
- dummy = settings.last_played_book
+ assert hasattr(settings, "last_played_book")
assert SettingsModel.get().last_played_book is None
diff --git a/test/cozy/model/test_storage.py b/test/cozy/model/test_storage.py
index 30109c17..46d0e87b 100644
--- a/test/cozy/model/test_storage.py
+++ b/test/cozy/model/test_storage.py
@@ -53,7 +53,7 @@ def test_default_returns_correct_default_value(peewee_database_storage):
from cozy.model.storage import Storage
storage = Storage(peewee_database_storage, 1)
- assert storage.default == False
+ assert not storage.default
def test_setting_default_updates_in_track_object_and_database(peewee_database_storage):
@@ -72,7 +72,7 @@ def test_external_returns_correct_default_value(peewee_database_storage):
from cozy.model.storage import Storage
storage = Storage(peewee_database_storage, 1)
- assert storage.external == False
+ assert not storage.external
def test_setting_external_updates_in_track_object_and_database(peewee_database_storage):