Compare commits
30 commits
pre-1.6-me
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ee781bfc2 | |||
| cfdeaa3ae1 | |||
|
|
66b3f34335 | ||
|
|
3d8af19ac4 | ||
| 78b806a347 | |||
| 45c9b1aa19 | |||
|
|
a297c24a96 | ||
|
|
f0365d411b | ||
|
|
e040f7fbc7 | ||
| 89dd5e1f10 | |||
| 3171217e5a | |||
|
|
c9cba75c84 | ||
|
|
23254703eb | ||
| 7f22e7ce73 | |||
|
|
b5f2fffe65 | ||
|
|
55ecae4644 | ||
|
|
12b82dee7f | ||
|
|
7019204d92 | ||
|
|
23d59445af | ||
|
|
ea17341561 | ||
|
|
b5519754cf | ||
|
|
2d8aa63da3 | ||
|
|
7550c300c4 | ||
|
|
bfbf2a1387 | ||
|
|
d910353b6f | ||
|
|
c33c3e97cd | ||
|
|
8eb774ebca | ||
|
|
e3b610271f | ||
|
|
b8000c5fff | ||
|
|
54ed6b0a93 |
34 changed files with 1128 additions and 704 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -10,4 +10,4 @@
|
||||||
!/vendor/iced_video_player/
|
!/vendor/iced_video_player/
|
||||||
!/vendor/iced_video_player/**
|
!/vendor/iced_video_player/**
|
||||||
/vendor.tar
|
/vendor.tar
|
||||||
.idea/
|
.idea/
|
||||||
1432
Cargo.lock
generated
1432
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "cosmic-player"
|
name = "cosmic-player"
|
||||||
version = "1.3.0"
|
version = "1.8.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.93"
|
rust-version = "1.93"
|
||||||
|
|
||||||
|
|
|
||||||
36
debian/changelog
vendored
36
debian/changelog
vendored
|
|
@ -1,3 +1,39 @@
|
||||||
|
cosmic-player (1.8.0) noble; urgency=medium
|
||||||
|
|
||||||
|
* Epoch 1.8.0 version update
|
||||||
|
|
||||||
|
-- Jeremy Soller <jeremy@system76.com> Wed, 02 Sep 2026 08:15:23 -0600
|
||||||
|
|
||||||
|
cosmic-player (1.7.0) noble; urgency=medium
|
||||||
|
|
||||||
|
* Epoch 1.7.0 version update
|
||||||
|
|
||||||
|
-- Jeremy Soller <jeremy@system76.com> Tue, 25 Aug 2026 09:20:51 -0600
|
||||||
|
|
||||||
|
cosmic-player (1.6.0) noble; urgency=medium
|
||||||
|
|
||||||
|
* Epoch 1.6.0 version update
|
||||||
|
|
||||||
|
-- Jeremy Soller <jeremy@system76.com> Tue, 18 Aug 2026 07:14:20 -0600
|
||||||
|
|
||||||
|
cosmic-player (1.5.0) noble; urgency=medium
|
||||||
|
|
||||||
|
* Epoch 1.5.0 version update
|
||||||
|
|
||||||
|
-- Jeremy Soller <jeremy@system76.com> Tue, 28 Jul 2026 09:14:34 -0600
|
||||||
|
|
||||||
|
cosmic-player (1.4.0) noble; urgency=medium
|
||||||
|
|
||||||
|
* Epoch 1.4.0 version update
|
||||||
|
|
||||||
|
-- Jeremy Soller <jeremy@system76.com> Mon, 20 Jul 2026 14:36:34 -0600
|
||||||
|
|
||||||
|
cosmic-player (1.3.0) noble; urgency=medium
|
||||||
|
|
||||||
|
* Epoch 1.3.0 version update
|
||||||
|
|
||||||
|
-- Jeremy Soller <jeremy@system76.com> Sun, 12 Jul 2026 13:21:52 -0600
|
||||||
|
|
||||||
cosmic-player (1.2.0) noble; urgency=medium
|
cosmic-player (1.2.0) noble; urgency=medium
|
||||||
|
|
||||||
* Epoch 1.2.0 version update
|
* Epoch 1.2.0 version update
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ settings = الإعدادات
|
||||||
### Appearance
|
### Appearance
|
||||||
|
|
||||||
appearance = المظهر
|
appearance = المظهر
|
||||||
theme = النسق
|
theme = السمة
|
||||||
match-desktop = طابق سطح المكتب
|
match-desktop = طابق سطح المكتب
|
||||||
dark = داكن
|
dark = داكن
|
||||||
light = فاتح
|
light = فاتح
|
||||||
|
|
@ -34,7 +34,7 @@ close-file = أغلِق الملف
|
||||||
open-media-folder = افتح مجلَّد الوسائط...
|
open-media-folder = افتح مجلَّد الوسائط...
|
||||||
open-recent-media-folder = افتح مجلِّد الوسائط الحديثة
|
open-recent-media-folder = افتح مجلِّد الوسائط الحديثة
|
||||||
close-media-folder = أغلِق مجلد الوسائط
|
close-media-folder = أغلِق مجلد الوسائط
|
||||||
quit = أنهِ
|
quit = إنهِ
|
||||||
off = معطّل
|
off = معطّل
|
||||||
clear-recent = امحُ القائمة الحديثة
|
clear-recent = امحُ القائمة الحديثة
|
||||||
repeat-disabled = التكرار مُعطَّل
|
repeat-disabled = التكرار مُعطَّل
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
quit = Surt
|
quit = Surt
|
||||||
settings = Configuració
|
settings = Configuració
|
||||||
|
open-file = Obre el fitxer
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
quit = Afslut
|
||||||
|
appearance = Udseende
|
||||||
|
theme = Tema
|
||||||
|
match-desktop = Følg skrivebordets indstillinger
|
||||||
|
dark = Mørkt
|
||||||
|
light = Lyst
|
||||||
|
close-file = Luk fil
|
||||||
|
settings = Indstillinger
|
||||||
|
open-file = Åbn fil
|
||||||
|
open-folder = Åbn mappe
|
||||||
|
file = Fil
|
||||||
|
album = Album: { $album }
|
||||||
|
audio = Lyd
|
||||||
|
no-video-or-audio-file-open = Ingen video- eller lydfil åben
|
||||||
|
off = Fra
|
||||||
|
subtitles = Undertekster
|
||||||
|
unknown-author = Ukendt Forfatter
|
||||||
|
untitled = Utituleret
|
||||||
|
open-media = Åbn medie...
|
||||||
|
open-recent-media = Åbn seneste medie
|
||||||
|
clear-recent = Ryd seneste-liste
|
||||||
|
open-media-folder = Åbn mediemappe...
|
||||||
|
open-recent-media-folder = Åbn seneste mediemappe
|
||||||
|
close-media-folder = Luk mediemappe
|
||||||
|
repeat-disabled = Gentagelse deaktiveret
|
||||||
|
repeat-track = Gentag nummer
|
||||||
|
playback = Afspilning
|
||||||
|
next-frame = Næste billede
|
||||||
|
previous-frame = Forrige billede
|
||||||
|
ab-repeat = A-B-gentagelse
|
||||||
|
ab-repeat-set-a = A-B-gentagelse (A)
|
||||||
|
ab-repeat-set-b = A-B-gentagelse (B)
|
||||||
|
ab-repeat-clear = Ryd A-B-gentagelse
|
||||||
|
xdg-name = COSMIC Medieafspiller
|
||||||
|
xdg-comment = Medieafspiller til COSMIC-skrivebordet
|
||||||
|
xdg-keywords = Lyd;Film;Film;Musik;Lyd;Video;
|
||||||
|
|
@ -28,10 +28,10 @@ light = Hell
|
||||||
## Datei
|
## Datei
|
||||||
|
|
||||||
file = Datei
|
file = Datei
|
||||||
open-media = Medium öffnen...
|
open-media = Medium öffnen ...
|
||||||
open-recent-media = Zuletzt verwendetes Medium öffnen
|
open-recent-media = Zuletzt verwendetes Medium öffnen
|
||||||
close-file = Datei schließen
|
close-file = Datei schließen
|
||||||
open-media-folder = Medienordner öffnen...
|
open-media-folder = Medienordner öffnen ...
|
||||||
open-recent-media-folder = Ordner der zuletzt verwendeten Medien öffnen
|
open-recent-media-folder = Ordner der zuletzt verwendeten Medien öffnen
|
||||||
close-media-folder = Medienordner schließen
|
close-media-folder = Medienordner schließen
|
||||||
quit = Beenden
|
quit = Beenden
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ untitled = Χωρίς τίτλο
|
||||||
theme = Θέμα
|
theme = Θέμα
|
||||||
repeat-track = Επανάληψη κομματιού
|
repeat-track = Επανάληψη κομματιού
|
||||||
appearance = Εμφάνιση
|
appearance = Εμφάνιση
|
||||||
quit = Έξοδος
|
quit = Τερματισμός
|
||||||
album = Άλμπουμ: { $album }
|
album = Άλμπουμ: { $album }
|
||||||
playback = Αναπαραγωγή
|
playback = Αναπαραγωγή
|
||||||
next-frame = Επόμενο καρέ
|
next-frame = Επόμενο καρέ
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
quit = Quit
|
||||||
|
settings = Settings
|
||||||
|
appearance = Appearance
|
||||||
|
theme = Theme
|
||||||
|
match-desktop = Match desktop
|
||||||
|
dark = Dark
|
||||||
|
light = Light
|
||||||
|
file = File
|
||||||
|
close-file = Close file
|
||||||
|
open-file = Open file
|
||||||
|
open-folder = Open folder
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
quit = خروج
|
||||||
|
|
@ -11,7 +11,7 @@ unknown-author = Tuntematon tekijä
|
||||||
untitled = Nimetön
|
untitled = Nimetön
|
||||||
appearance = Ulkoasu
|
appearance = Ulkoasu
|
||||||
theme = Teema
|
theme = Teema
|
||||||
match-desktop = Sovita työpöytään
|
match-desktop = Sama kuin työpöytä
|
||||||
dark = Tumma
|
dark = Tumma
|
||||||
light = Vaalea
|
light = Vaalea
|
||||||
file = Tiedosto
|
file = Tiedosto
|
||||||
|
|
|
||||||
0
i18n/fil/cosmic_player.ftl
Normal file
0
i18n/fil/cosmic_player.ftl
Normal file
|
|
@ -2,7 +2,7 @@ album = Album : { $album }
|
||||||
audio = Audio
|
audio = Audio
|
||||||
no-video-or-audio-file-open = Aucun média sélectionné
|
no-video-or-audio-file-open = Aucun média sélectionné
|
||||||
open-file = Ouvrir le fichier
|
open-file = Ouvrir le fichier
|
||||||
open-folder = Ouvrir dossier
|
open-folder = Ouvrir le dossier
|
||||||
subtitles = Sous-titres
|
subtitles = Sous-titres
|
||||||
unknown-author = Auteur Inconnu
|
unknown-author = Auteur Inconnu
|
||||||
untitled = Sans titre
|
untitled = Sans titre
|
||||||
|
|
|
||||||
36
i18n/gl/cosmic_player.ftl
Normal file
36
i18n/gl/cosmic_player.ftl
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
settings = Axustes
|
||||||
|
appearance = Apariencia
|
||||||
|
theme = Tema
|
||||||
|
match-desktop = Axustar ao escritorio
|
||||||
|
dark = Escuro
|
||||||
|
light = Claro
|
||||||
|
file = Ficheiro
|
||||||
|
close-file = Pechar ficheiro
|
||||||
|
quit = Pechar
|
||||||
|
open-file = Abrir ficheiro
|
||||||
|
open-folder = Abrir cartafol
|
||||||
|
album = Álbum: { $album }
|
||||||
|
audio = Audio
|
||||||
|
no-video-or-audio-file-open = Non hai ningún ficheiro de vídeo ou audio aberto
|
||||||
|
off = Desactivado
|
||||||
|
subtitles = Subtitulos
|
||||||
|
unknown-author = Autor descoñecido
|
||||||
|
untitled = Sen titulo
|
||||||
|
open-media = Abrir multimedia..
|
||||||
|
open-recent-media = Abrir multimedia recente
|
||||||
|
clear-recent = Limpar lista de recentes
|
||||||
|
open-media-folder = Abrir cartafol multimedia...
|
||||||
|
open-recent-media-folder = Abrir o cartafol de medios recentes
|
||||||
|
close-media-folder = Pechar carpeta multimedia
|
||||||
|
repeat-disabled = Repetición desactivada
|
||||||
|
repeat-track = Repetir pista
|
||||||
|
playback = Reprodución
|
||||||
|
next-frame = Seguinte fotograma
|
||||||
|
previous-frame = Fotograma anterior
|
||||||
|
ab-repeat = Repetición A-B
|
||||||
|
ab-repeat-set-a = Repetición A-B (A)
|
||||||
|
ab-repeat-set-b = Repetición A-B (B)
|
||||||
|
ab-repeat-clear = Limpar repetición A-B
|
||||||
|
xdg-name = Reproductor Multimedia COSMIC
|
||||||
|
xdg-comment = Reprodutor multimedia para o escritorio COSMIC
|
||||||
|
xdg-keywords = Audio;Película;Filme;Música;Son;Vídeo;
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
|
|
||||||
## Settings
|
## Settings
|
||||||
|
|
||||||
settings = सेटिंग
|
settings = सेटिंग्स
|
||||||
|
|
||||||
### Appearance
|
### Appearance
|
||||||
|
|
||||||
appearance = उपस्थिति
|
appearance = रुप-रंग
|
||||||
theme = थीम
|
theme = प्रसंग
|
||||||
match-desktop = डेस्कटॉप से मिलाएं
|
match-desktop = डेस्कटॉप से मेल खाएँ
|
||||||
dark = डार्क
|
dark = डार्क
|
||||||
light = लाइट
|
light = लाइट
|
||||||
album = एल्बम: { $album }
|
album = एल्बम: { $album }
|
||||||
|
|
@ -24,7 +24,7 @@ close-file = फ़ाइल बंद करें
|
||||||
open-media-folder = मीडिया फ़ोल्डर खोलें…
|
open-media-folder = मीडिया फ़ोल्डर खोलें…
|
||||||
open-recent-media-folder = हाल का मीडिया फ़ोल्डर खोलें
|
open-recent-media-folder = हाल का मीडिया फ़ोल्डर खोलें
|
||||||
close-media-folder = मीडिया फ़ोल्डर बंद करें
|
close-media-folder = मीडिया फ़ोल्डर बंद करें
|
||||||
quit = बंद करें
|
quit = बाहर जाएँ
|
||||||
no-video-or-audio-file-open = कोई वीडियो या ऑडियो फ़ाइल खुली नहीं है
|
no-video-or-audio-file-open = कोई वीडियो या ऑडियो फ़ाइल खुली नहीं है
|
||||||
open-media = मीडिया खोलें…
|
open-media = मीडिया खोलें…
|
||||||
open-recent-media = हाल का मीडिया खोलें
|
open-recent-media = हाल का मीडिया खोलें
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ settings = Pengaturan
|
||||||
untitled = Tidak Berjudul
|
untitled = Tidak Berjudul
|
||||||
appearance = Tampilan
|
appearance = Tampilan
|
||||||
theme = Tema
|
theme = Tema
|
||||||
match-desktop = Cocokkan desktop
|
match-desktop = Cocok desktop
|
||||||
dark = Gelap
|
dark = Gelap
|
||||||
light = Terang
|
light = Terang
|
||||||
file = Berkas
|
file = Berkas
|
||||||
|
|
@ -31,3 +31,6 @@ ab-repeat = Pengulangan A-B
|
||||||
playback = Pemutaran
|
playback = Pemutaran
|
||||||
next-frame = Bagian Selanjutnya
|
next-frame = Bagian Selanjutnya
|
||||||
previous-frame = Bagian Sebelumnya
|
previous-frame = Bagian Sebelumnya
|
||||||
|
xdg-name = Pemutar Media COSMIC
|
||||||
|
xdg-comment = Pemutar Media untuk desktop COSMIC
|
||||||
|
xdg-keywords = Audio;Film;Film;Musik;Suara;Video;
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ settings = Impostazioni
|
||||||
|
|
||||||
appearance = Aspetto
|
appearance = Aspetto
|
||||||
theme = Tema
|
theme = Tema
|
||||||
match-desktop = Sistema
|
match-desktop = Abbina al desktop
|
||||||
dark = Scuro
|
dark = Scuro
|
||||||
light = Chiaro
|
light = Chiaro
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@ open-file = Ldi afaylu
|
||||||
open-folder = Ldi akaram
|
open-folder = Ldi akaram
|
||||||
repeat-disabled = Allus yensa
|
repeat-disabled = Allus yensa
|
||||||
repeat-track = Ales tazribt
|
repeat-track = Ales tazribt
|
||||||
quit = Tuffɣa
|
quit = Ffeɣ
|
||||||
settings = Iɣewwaṛen
|
settings = Iɣewwaṛen
|
||||||
appearance = Timeẓri
|
appearance = Timeẓri
|
||||||
theme = Asentel
|
theme = Asentel
|
||||||
dark = Aɣmayan
|
dark = Aɣmayan
|
||||||
light = Aceɛlal
|
light = Aceɛlal
|
||||||
match-desktop = Amṣada d tnarit
|
match-desktop = Semṣada akked tnarit
|
||||||
file = Afaylu
|
file = Afaylu
|
||||||
close-file = Mdel afaylu
|
close-file = Mdel afaylu
|
||||||
album = Album: { $album }
|
album = Album: { $album }
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
open-file = Файлды ашу
|
open-file = Файлды ашу
|
||||||
open-folder = Буманы ашу
|
open-folder = Буманы ашу
|
||||||
settings = Баптаулар
|
settings = Баптаулар
|
||||||
appearance = Сыртқы түрі
|
appearance = Сыртқы көрініс
|
||||||
theme = Тақырып
|
theme = Тема
|
||||||
match-desktop = Жұмыс үстеліне сәйкес келу
|
match-desktop = Жұмыс үстеліне сәйкес болу
|
||||||
dark = Қараңғы
|
dark = Қою
|
||||||
light = Жарық
|
light = Ашық
|
||||||
file = Файл
|
file = Файл
|
||||||
quit = Шығу
|
quit = Шығу
|
||||||
close-file = Файлды жабу
|
close-file = Файлды жабу
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
settings = Sazkarî
|
||||||
|
appearance = Xuyang
|
||||||
|
theme = Rûkar
|
||||||
|
dark = Tarî
|
||||||
|
light = Ronî
|
||||||
|
quit = Biqedîne
|
||||||
|
open-file = Pelê veke
|
||||||
|
open-folder = Peldankê veke
|
||||||
|
match-desktop = Bi sermaseyê re li hev bîne
|
||||||
|
album = Elbum: { $album }
|
||||||
|
audio = Deng
|
||||||
|
no-video-or-audio-file-open = Tu pelê vîdiyo yan jî dengê vekirî tune ne
|
||||||
|
off = Vemirî
|
||||||
|
subtitles = Jêrnivîs
|
||||||
|
unknown-author = Hunermendê nenas
|
||||||
|
untitled = Bê sernav
|
||||||
|
file = Pel
|
||||||
|
open-media = Mediyayê veke...
|
||||||
|
close-file = Pelê bigire
|
||||||
|
ab-repeat = A-B dûbare bike
|
||||||
|
open-recent-media = Mediyayên dawî veke
|
||||||
|
clear-recent = Lîsteya dawî pak bike
|
||||||
|
open-media-folder = Peldanka mediyayê veke...
|
||||||
|
open-recent-media-folder = Peldanka mediyayê ya dawî veke
|
||||||
|
close-media-folder = Peldanka mediyayê bigire
|
||||||
|
repeat-disabled = Dûbarekirin neçalak e
|
||||||
|
repeat-track = Stranê dûbare bike
|
||||||
|
playback = Lîstin
|
||||||
|
next-frame = Wêneya pêş
|
||||||
|
previous-frame = Wêneya paş
|
||||||
|
ab-repeat-set-a = A-B (A) dûbare bike
|
||||||
|
ab-repeat-set-b = A-B (B) dûbare bike
|
||||||
|
ab-repeat-clear = Dûbarekirina A-B pak bike
|
||||||
|
xdg-name = Lîstikvanê mediyayê ya COSMIC
|
||||||
|
xdg-comment = Lîstikvanê mediyayê ji bo sermaseya COSMIC
|
||||||
|
xdg-keywords = Deng;Fîlm;Fîlm;Muzîk;Deng;Vîdiyo;
|
||||||
|
|
@ -25,3 +25,11 @@ close-file = 파일 닫기
|
||||||
repeat-disabled = 반복 비활성화
|
repeat-disabled = 반복 비활성화
|
||||||
previous-frame = 이전 프레임
|
previous-frame = 이전 프레임
|
||||||
next-frame = 다음 프레임
|
next-frame = 다음 프레임
|
||||||
|
ab-repeat = A-B 반복
|
||||||
|
ab-repeat-set-a = A-B 반복 (A)
|
||||||
|
ab-repeat-set-b = A-B 반복 (B)
|
||||||
|
ab-repeat-clear = A-B 반복 취소
|
||||||
|
xdg-name = COSMIC 미디어 플레이어
|
||||||
|
xdg-comment = COSMIC 데스크톱을 위한 미디어 플레이어
|
||||||
|
playback = 재생
|
||||||
|
repeat-track = 트랙 반복
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
quit = Išeiti
|
quit = Išjungti
|
||||||
settings = Nuostatos
|
settings = Nuostatai
|
||||||
close-file = Uždaryti failą
|
close-file = Uždaryti failą
|
||||||
match-desktop = Pagal darbalaukio temą
|
match-desktop = Pagal darbalaukio temą
|
||||||
appearance = Išvaizda
|
appearance = Išvaizda
|
||||||
|
|
|
||||||
|
|
@ -1 +1,34 @@
|
||||||
settings = Paramètres
|
settings = Configuracion
|
||||||
|
album = Album : { $album }
|
||||||
|
audio = Àudio
|
||||||
|
no-video-or-audio-file-open = Cap de fichièr vidèo o àudio pas dobèrt
|
||||||
|
off = Desactivat
|
||||||
|
subtitles = Sostítols
|
||||||
|
unknown-author = Autor desconegut
|
||||||
|
untitled = Sens títol
|
||||||
|
appearance = Aparéncia
|
||||||
|
theme = Tèma
|
||||||
|
match-desktop = Assortir al burèu
|
||||||
|
dark = Escur
|
||||||
|
light = Clar
|
||||||
|
file = Fichièr
|
||||||
|
open-media = Dorbir mèdia...
|
||||||
|
open-recent-media = Dobrir un mèdia recent
|
||||||
|
clear-recent = Escafar la lista recenta
|
||||||
|
close-file = Tampar lo fichièr
|
||||||
|
open-media-folder = Dobrir un dossièr multimèdia...
|
||||||
|
open-recent-media-folder = Dobrir lo dossièr del mèdia recent
|
||||||
|
close-media-folder = Tampar lo dossièr del mèdia
|
||||||
|
repeat-disabled = Repeticion desactivada
|
||||||
|
repeat-track = Repetir la pista
|
||||||
|
playback = Lectura
|
||||||
|
next-frame = Imatge seguent
|
||||||
|
previous-frame = Imatge precedent
|
||||||
|
ab-repeat = Repetir la seccion A-B
|
||||||
|
ab-repeat-set-a = Repeticion A-B (A)
|
||||||
|
ab-repeat-set-b = Repeticion A-B (B)
|
||||||
|
ab-repeat-clear = Escafar la repeticion A-B
|
||||||
|
xdg-name = Lector multimèdia COSMIC
|
||||||
|
xdg-comment = Lector multimèdia pel burèu COSMIC
|
||||||
|
xdg-keywords = Àudio;Musica;Vidèo;Film;Son;
|
||||||
|
quit = Quitar
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
settings = ਸੈਟਿੰਗਾਂ
|
settings = ਸੈਟਿੰਗਾਂ
|
||||||
appearance = ਦਿੱਖ
|
appearance = ਦਿੱਖ
|
||||||
theme = ਥੀਮ
|
theme = ਥੀਮ
|
||||||
match-desktop = ਡੈਸਕਟਾਪ ਨਾਲ ਮਿਲਦਾ
|
match-desktop = ਡੈਸਕਟਾਪ ਨਾਲ ਮਿਲਾਓ
|
||||||
dark = ਗੂੜ੍ਹਾ
|
dark = ਗੂੜ੍ਹਾ
|
||||||
light = ਹਲਕਾ
|
light = ਫਿੱਕਾ
|
||||||
quit = ਬਾਹਰ
|
quit = ਸਮਾਪਤ
|
||||||
open-file = ਫ਼ਾਇਲ ਨੂੰ ਖੋਲ੍ਹੋ
|
open-file = ਫ਼ਾਇਲ ਨੂੰ ਖੋਲ੍ਹੋ
|
||||||
file = ਫ਼ਾਇਲ
|
file = ਫ਼ਾਇਲ
|
||||||
open-folder = ਫੋਲਡਰ ਨੂੰ ਖੋਲ੍ਹੋ
|
open-folder = ਫੋਲਡਰ ਨੂੰ ਖੋਲ੍ਹੋ
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ close-file = Zamknij plik
|
||||||
open-media-folder = Otwórz katalog z nośnikami…
|
open-media-folder = Otwórz katalog z nośnikami…
|
||||||
open-recent-media-folder = Otwórz poprzedni katalog z nośnikami
|
open-recent-media-folder = Otwórz poprzedni katalog z nośnikami
|
||||||
close-media-folder = Zamknij katalog z nośnikami
|
close-media-folder = Zamknij katalog z nośnikami
|
||||||
quit = Zamknij
|
quit = Zakończ
|
||||||
off = Wyłączone
|
off = Wyłączone
|
||||||
clear-recent = Wyczyść listę poprzednich
|
clear-recent = Wyczyść listę poprzednich
|
||||||
repeat-disabled = Powtarzanie wyłączone
|
repeat-disabled = Powtarzanie wyłączone
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ close-file = Fechar arquivo
|
||||||
open-media-folder = Abrir pasta de mídias...
|
open-media-folder = Abrir pasta de mídias...
|
||||||
open-recent-media-folder = Abrir pasta recente de mídias
|
open-recent-media-folder = Abrir pasta recente de mídias
|
||||||
close-media-folder = Fechar pasta de mídias
|
close-media-folder = Fechar pasta de mídias
|
||||||
quit = Sair
|
quit = Encerrar
|
||||||
off = Desligado
|
off = Desligado
|
||||||
clear-recent = Limpar lista de recentes
|
clear-recent = Limpar lista de recentes
|
||||||
repeat-track = Repetir faixa
|
repeat-track = Repetir faixa
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ light = Светлая
|
||||||
open-file = Открыть файл
|
open-file = Открыть файл
|
||||||
album = Альбом: { $album }
|
album = Альбом: { $album }
|
||||||
audio = Аудио
|
audio = Аудио
|
||||||
no-video-or-audio-file-open = Нет открытых видео или аудио файлов
|
no-video-or-audio-file-open = Нет открытых медиафайлов
|
||||||
open-folder = Открыть папку
|
open-folder = Открыть папку
|
||||||
subtitles = Субтитры
|
subtitles = Субтитры
|
||||||
unknown-author = Неизвестный автор
|
unknown-author = Неизвестный автор
|
||||||
|
|
@ -27,7 +27,7 @@ close-file = Закрыть файл
|
||||||
open-media-folder = Открыть папку медиафайлов...
|
open-media-folder = Открыть папку медиафайлов...
|
||||||
open-recent-media-folder = Открыть папку недавних медиафайлов
|
open-recent-media-folder = Открыть папку недавних медиафайлов
|
||||||
close-media-folder = Закрыть папку медиафайлов
|
close-media-folder = Закрыть папку медиафайлов
|
||||||
quit = Выйти
|
quit = Завершить
|
||||||
off = Выкл.
|
off = Выкл.
|
||||||
clear-recent = Очистить список недавних
|
clear-recent = Очистить список недавних
|
||||||
repeat-disabled = Повтор отключён
|
repeat-disabled = Повтор отключён
|
||||||
|
|
|
||||||
0
i18n/sat/cosmic_player.ftl
Normal file
0
i18n/sat/cosmic_player.ftl
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
settings = การตั้งค่า
|
||||||
|
dark = มืด
|
||||||
|
light = สว่าง
|
||||||
|
appearance = ลักษณะ
|
||||||
|
|
@ -19,7 +19,7 @@ close-file = Закрити файл
|
||||||
open-media-folder = Відкрити теку...
|
open-media-folder = Відкрити теку...
|
||||||
open-recent-media-folder = Відкрити попередню теку
|
open-recent-media-folder = Відкрити попередню теку
|
||||||
close-media-folder = Закрити теку
|
close-media-folder = Закрити теку
|
||||||
quit = Вийти
|
quit = Завершити
|
||||||
off = Вимк.
|
off = Вимк.
|
||||||
clear-recent = Очистити список
|
clear-recent = Очистити список
|
||||||
repeat-disabled = Не повторювати
|
repeat-disabled = Не повторювати
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ close-file = 關閉檔案
|
||||||
open-media-folder = 開啟媒體資料夾...
|
open-media-folder = 開啟媒體資料夾...
|
||||||
open-recent-media-folder = 開啟最近使用的媒體資料夾
|
open-recent-media-folder = 開啟最近使用的媒體資料夾
|
||||||
close-media-folder = 關閉媒體資料夾
|
close-media-folder = 關閉媒體資料夾
|
||||||
quit = 退出
|
quit = 結束
|
||||||
off = 關閉
|
off = 關閉
|
||||||
clear-recent = 清除最近使用清單
|
clear-recent = 清除最近使用清單
|
||||||
repeat-disabled = 重複已經停用
|
repeat-disabled = 重複已經停用
|
||||||
|
|
|
||||||
56
src/main.rs
56
src/main.rs
|
|
@ -82,7 +82,32 @@ fn get_framerate(video: &Video) -> Option<f64> {
|
||||||
let caps = pad.current_caps()?;
|
let caps = pad.current_caps()?;
|
||||||
let structure = caps.structure(0)?;
|
let structure = caps.structure(0)?;
|
||||||
let framerate = structure.get::<gst::Fraction>("framerate").ok()?;
|
let framerate = structure.get::<gst::Fraction>("framerate").ok()?;
|
||||||
Some(framerate.numer() as f64 / framerate.denom() as f64)
|
positive_framerate(framerate)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn positive_framerate(framerate: gst::Fraction) -> Option<f64> {
|
||||||
|
if framerate.numer() <= 0 || framerate.denom() <= 0 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
let fps = framerate.numer() as f64 / framerate.denom() as f64;
|
||||||
|
fps.is_finite().then_some(fps)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::positive_framerate;
|
||||||
|
use iced_video_player::gst;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn variable_framerate_uses_fallback() {
|
||||||
|
assert_eq!(positive_framerate(gst::Fraction::new(0, 1)), None);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn fixed_framerate_is_preserved() {
|
||||||
|
assert_eq!(positive_framerate(gst::Fraction::new(30, 1)), Some(30.0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Runs application with these settings
|
/// Runs application with these settings
|
||||||
|
|
@ -901,7 +926,7 @@ impl Application for App {
|
||||||
|
|
||||||
/// Creates the application, and optionally emits command on initialize.
|
/// Creates the application, and optionally emits command on initialize.
|
||||||
fn init(mut core: Core, flags: Self::Flags) -> (Self, Task<Self::Message>) {
|
fn init(mut core: Core, flags: Self::Flags) -> (Self, Task<Self::Message>) {
|
||||||
core.window.content_container = false;
|
core.window.border_padding = Some(0);
|
||||||
|
|
||||||
#[cfg(feature = "xdg-portal")]
|
#[cfg(feature = "xdg-portal")]
|
||||||
let inhibit = {
|
let inhibit = {
|
||||||
|
|
@ -1062,18 +1087,6 @@ impl Application for App {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn style(&self) -> Option<cosmic::iced::core::theme::Style> {
|
|
||||||
// This ensures we have a solid background color even when using no content container
|
|
||||||
|
|
||||||
let theme = self.core.system_theme();
|
|
||||||
|
|
||||||
Some(cosmic::iced::core::theme::Style {
|
|
||||||
background_color: theme.cosmic().bg_color().into(),
|
|
||||||
icon_color: theme.cosmic().on_bg_color().into(),
|
|
||||||
text_color: theme.cosmic().on_bg_color().into(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Handle application events here.
|
/// Handle application events here.
|
||||||
fn update(&mut self, message: Self::Message) -> Task<Self::Message> {
|
fn update(&mut self, message: Self::Message) -> Task<Self::Message> {
|
||||||
match message {
|
match message {
|
||||||
|
|
@ -1740,7 +1753,7 @@ impl Application for App {
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(video) = &self.video_opt else {
|
let Some(video) = &self.video_opt else {
|
||||||
//TODO: use space variables
|
// TODO: use space variables
|
||||||
let column = widget::column::with_capacity(4)
|
let column = widget::column::with_capacity(4)
|
||||||
.align_x(Alignment::Center)
|
.align_x(Alignment::Center)
|
||||||
.spacing(24)
|
.spacing(24)
|
||||||
|
|
@ -1757,11 +1770,7 @@ impl Application for App {
|
||||||
.push(widget::button::suggested(fl!("open-file")).on_press(Message::FileOpen))
|
.push(widget::button::suggested(fl!("open-file")).on_press(Message::FileOpen))
|
||||||
.push(widget::space::vertical());
|
.push(widget::space::vertical());
|
||||||
|
|
||||||
return widget::container(column)
|
return column.into();
|
||||||
.width(Length::Fill)
|
|
||||||
.height(Length::Fill)
|
|
||||||
.class(theme::Container::WindowBackground)
|
|
||||||
.into();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let muted = video.muted();
|
let muted = video.muted();
|
||||||
|
|
@ -1781,8 +1790,9 @@ impl Application for App {
|
||||||
let mut background_color = Color::BLACK;
|
let mut background_color = Color::BLACK;
|
||||||
let mut text_color_opt = None;
|
let mut text_color_opt = None;
|
||||||
if !video.has_video() {
|
if !video.has_video() {
|
||||||
background_color = theme.cosmic().bg_component_color().into();
|
let bg = theme.cosmic().background(theme.transparent);
|
||||||
text_color_opt = Some(Color::from(theme.cosmic().on_bg_component_color()));
|
background_color = Color::TRANSPARENT;
|
||||||
|
text_color_opt = Some(Color::from(bg.on));
|
||||||
|
|
||||||
let mut col = widget::column::with_capacity(10);
|
let mut col = widget::column::with_capacity(10);
|
||||||
col = col.push(widget::space::vertical());
|
col = col.push(widget::space::vertical());
|
||||||
|
|
@ -1974,7 +1984,7 @@ impl Application for App {
|
||||||
//TODO: move style to libcosmic
|
//TODO: move style to libcosmic
|
||||||
.class(theme::Container::custom(|theme| {
|
.class(theme::Container::custom(|theme| {
|
||||||
let cosmic = theme.cosmic();
|
let cosmic = theme.cosmic();
|
||||||
let component = &cosmic.background(false).component;
|
let component = &cosmic.background(theme.transparent).component;
|
||||||
widget::container::Style {
|
widget::container::Style {
|
||||||
icon_color: Some(component.on.into()),
|
icon_color: Some(component.on.into()),
|
||||||
text_color: Some(component.on.into()),
|
text_color: Some(component.on.into()),
|
||||||
|
|
|
||||||
69
src/video.rs
69
src/video.rs
|
|
@ -4,6 +4,40 @@ use iced_video_player::{Video, gst, gst_app, gst_pbutils};
|
||||||
use cosmic::action;
|
use cosmic::action;
|
||||||
use cosmic::app::Task;
|
use cosmic::app::Task;
|
||||||
|
|
||||||
|
const SUSPICIOUS_AUDIO_GAP_DURATION: gst::ClockTime = gst::ClockTime::SECOND;
|
||||||
|
|
||||||
|
fn is_suspicious_audio_gap(duration: Option<gst::ClockTime>) -> bool {
|
||||||
|
duration.is_some_and(|duration| duration >= SUSPICIOUS_AUDIO_GAP_DURATION)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn suppress_suspicious_audio_gaps(audio_filter: &gst::Element) {
|
||||||
|
let Some(src_pad) = audio_filter.static_pad("src") else {
|
||||||
|
log::warn!("audio filter has no source pad; malformed audio gaps will not be suppressed");
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
let _ = src_pad.add_probe(gst::PadProbeType::EVENT_DOWNSTREAM, |_, info| {
|
||||||
|
let Some(event) = info.event() else {
|
||||||
|
return gst::PadProbeReturn::Ok;
|
||||||
|
};
|
||||||
|
let gst::EventView::Gap(gap) = event.view() else {
|
||||||
|
return gst::PadProbeReturn::Ok;
|
||||||
|
};
|
||||||
|
let (timestamp, duration) = gap.get();
|
||||||
|
if !is_suspicious_audio_gap(duration) {
|
||||||
|
return gst::PadProbeReturn::Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Some malformed MP4 edit lists cause streamsynchronizer to emit a
|
||||||
|
// long GAP before almost every audio buffer. The next buffer's PTS is
|
||||||
|
// still continuous, so forwarding those events makes audio sinks
|
||||||
|
// repeatedly wait or resynchronise and produces choppy playback.
|
||||||
|
log::debug!("suppressing audio GAP at {timestamp} with duration {duration:?}");
|
||||||
|
drop(info.take_event());
|
||||||
|
gst::PadProbeReturn::Handled
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct VideoSettings {
|
pub struct VideoSettings {
|
||||||
pub mute: bool,
|
pub mute: bool,
|
||||||
|
|
@ -33,11 +67,14 @@ pub fn new_video(
|
||||||
.downcast::<gst::Pipeline>()
|
.downcast::<gst::Pipeline>()
|
||||||
.map_err(|_| iced_video_player::Error::Cast)
|
.map_err(|_| iced_video_player::Error::Cast)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
if let Ok(scaletempo) = gst::ElementFactory::make("scaletempo").build() {
|
let audio_filter = gst::ElementFactory::make("scaletempo")
|
||||||
pipeline.set_property("audio-filter", &scaletempo);
|
.build()
|
||||||
} else {
|
.unwrap_or_else(|_| {
|
||||||
log::warn!("scaletempo element not available; speed changes will affect pitch");
|
log::warn!("scaletempo element not available; speed changes will affect pitch");
|
||||||
}
|
gst::ElementFactory::make("identity").build().unwrap()
|
||||||
|
});
|
||||||
|
suppress_suspicious_audio_gaps(&audio_filter);
|
||||||
|
pipeline.set_property("audio-filter", &audio_filter);
|
||||||
pipeline.connect("element-setup", false, |vals| {
|
pipeline.connect("element-setup", false, |vals| {
|
||||||
let Ok(elem) = vals[1].get::<gst::Element>() else {
|
let Ok(elem) = vals[1].get::<gst::Element>() else {
|
||||||
return None;
|
return None;
|
||||||
|
|
@ -111,3 +148,25 @@ fn disable_broken_hardware_decoders() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::is_suspicious_audio_gap;
|
||||||
|
use iced_video_player::gst;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn long_audio_gap_is_suspicious() {
|
||||||
|
assert!(is_suspicious_audio_gap(Some(gst::ClockTime::SECOND)));
|
||||||
|
assert!(is_suspicious_audio_gap(Some(
|
||||||
|
gst::ClockTime::from_seconds(3)
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn short_or_unknown_audio_gap_is_preserved() {
|
||||||
|
assert!(!is_suspicious_audio_gap(Some(
|
||||||
|
gst::ClockTime::from_mseconds(999)
|
||||||
|
)));
|
||||||
|
assert!(!is_suspicious_audio_gap(None));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue