Compare commits

...

38 Commits

Author SHA1 Message Date
c513959461 chore(i18n): Translated using Weblate (Serbian)
Currently translated at 100.0% (433 of 433 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/sr/
2025-07-29 17:15:56 +02:00
66e414dd64 chore(i18n): Translated using Weblate (Hindi)
Currently translated at 86.6% (375 of 433 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/hi/
2025-07-29 17:15:55 +02:00
454d2a1d4e chore(i18n): Translated using Weblate (Lithuanian)
Currently translated at 76.4% (331 of 433 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/lt/
2025-07-29 17:15:54 +02:00
ca3372d7f5 chore(i18n): Translated using Weblate (Thai)
Currently translated at 100.0% (433 of 433 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/th/
2025-07-29 17:15:53 +02:00
5bcbab1fac chore(i18n): Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (433 of 433 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/zh_Hans/
2025-07-29 17:15:52 +02:00
47656c08fd chore(i18n): Translated using Weblate (Polish)
Currently translated at 100.0% (433 of 433 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pl/
2025-07-29 17:15:51 +02:00
6374ff4a41 fix: fix #3661 2025-07-28 23:55:55 +09:00
86e7c84e43 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2025-07-28 16:32:22 +02:00
d554fa34b2 chore(i18n): Translated using Weblate (Spanish)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/es/
2025-07-28 16:32:21 +02:00
1bec276c8b fix: fix #3613, fix #3651 2025-07-28 23:29:46 +09:00
17153eacf0 Fixes the error 500 for /auth/ endpoint (#3627)
Co-authored-by: rewhex <gitea@cluser.local>
2025-07-28 23:19:22 +09:00
20d25ca953 feat: add custom window title option (#3656) 2025-07-28 23:16:47 +09:00
b3b3d45b96 fix(downloader): fix for getBasicInfo 2025-07-28 23:09:25 +09:00
5ba65ea122 fix: bump dependencies 2025-07-28 23:02:17 +09:00
0108e3f603 fix: rollback electron version to v37 2025-07-28 22:53:15 +09:00
8d23b13f70 fix(deps): update dependency zod to v4.0.10 (#3686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-28 22:40:12 +09:00
a8f9505255 chore(deps): update dependency @babel/runtime to v7.28.2 (#3687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-28 22:39:56 +09:00
cd0509eb06 chore(deps): update dependency rollup to v4.46.1 (#3632)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-28 22:39:42 +09:00
23504408ec chore(deps): update dependency electron to v38.0.0-alpha.10 (#3681)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-28 22:37:39 +09:00
AZE
ba8282881d chore(i18n): Translated using Weblate (Azerbaijani)
Currently translated at 10.0% (43 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/az/
2025-07-28 07:03:06 +02:00
ad1ac79fdb chore(i18n): Translated using Weblate (Bengali)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/bn/
2025-07-28 07:03:04 +02:00
54736256a4 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2025-07-28 07:02:56 +02:00
0d77ac096d chore(i18n): Translated using Weblate (English)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/en/
2025-07-28 07:02:44 +02:00
6a2b27bfcb chore(i18n): Translated using Weblate (Greek)
Currently translated at 98.3% (423 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/el/
2025-07-26 21:08:10 +00:00
2a0aeac89b chore(deps): update dependency eslint-config-prettier to v10.1.8 (#3676)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 23:35:26 +09:00
5dc11e2bdc chore(deps): update dependency eslint-plugin-prettier to v5.5.3 (#3678)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 23:15:44 +09:00
fba48dcd55 fix(deps): update dependency @ghostery/adblocker-electron to v2.11.3 (#3679)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 23:12:57 +09:00
832c3103c7 chore(deps): update dependency discord-api-types to v0.38.17 (#3620)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 23:04:24 +09:00
49d9bf9859 chore(deps): update dependency esbuild to v0.25.8 (#3675)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 23:04:13 +09:00
ef5d0c1222 chore(deps): update dependency @stylistic/eslint-plugin to v5.2.2 (#3636)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 23:03:41 +09:00
1cb666d7dd fix(deps): update dependency @hono/node-server to v1.17.1 (#3625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 23:02:29 +09:00
45ca896bef chore(i18n): Translated using Weblate (Portuguese)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/pt/
2025-07-25 14:48:21 +02:00
624d5102a5 fix(deps): update dependency hono to v4.8.7 (#3567)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 18:03:03 +09:00
2e9e5cc51f chore(deps): update dependency typescript-eslint to v8.38.0 (#3628)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 18:00:31 +09:00
c5f755bfcf chore(deps): update dependency electron to v38.0.0-alpha.9 (#3626)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 18:00:24 +09:00
0d1cadd650 fix(Skip Disliked Song): updated querySelector (#3667)
Co-authored-by: Joel Carlos <joel.carlos@merkle.com>
2025-07-25 18:00:13 +09:00
4cc7ffe74d chore(deps): update dependency vite to v7.0.11 (#3624)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-25 17:59:39 +09:00
7f59ca18b0 chore(i18n): Translated using Weblate (Vietnamese)
Currently translated at 100.0% (430 of 430 strings)

Translation: th-ch/youtube-music/i18n
Translate-URL: https://hosted.weblate.org/projects/youtube-music/i18n/vi/
2025-07-25 08:03:56 +02:00
23 changed files with 929 additions and 721 deletions

View File

@ -45,12 +45,12 @@
},
"pnpm": {
"overrides": {
"vite": "npm:rolldown-vite@7.0.8",
"vite": "npm:rolldown-vite@7.0.11",
"node-gyp": "11.2.0",
"xml2js": "0.6.2",
"node-fetch": "3.3.2",
"@electron/universal": "3.0.0",
"@babel/runtime": "7.27.6",
"@babel/runtime": "7.28.2",
"vitefu": "1.1.1"
},
"patchedDependencies": {
@ -68,18 +68,18 @@
"@ffmpeg.wasm/main": "0.12.0",
"@floating-ui/dom": "1.7.2",
"@foobar404/wave": "2.0.5",
"@ghostery/adblocker-electron": "2.11.1",
"@ghostery/adblocker-electron-preload": "2.11.1",
"@hono/node-server": "1.15.0",
"@ghostery/adblocker-electron": "2.11.3",
"@ghostery/adblocker-electron-preload": "2.11.3",
"@hono/node-server": "1.17.1",
"@hono/swagger-ui": "0.5.2",
"@hono/zod-openapi": "1.0.0-beta.1",
"@hono/zod-validator": "0.7.1",
"@hono/zod-openapi": "1.0.2",
"@hono/zod-validator": "0.7.2",
"@jellybrick/dbus-next": "0.10.3",
"@jellybrick/electron-better-web-request": "1.0.4",
"@jellybrick/mpris-service": "2.1.5",
"@jimp/plugin-color": "1.6.0",
"@skyra/jaro-winkler": "1.1.1",
"@xhayper/discord-rpc": "1.2.2",
"@xhayper/discord-rpc": "1.3.0",
"async-mutex": "0.5.0",
"bgutils-js": "3.2.0",
"butterchurn": "3.0.0-beta.5",
@ -102,7 +102,7 @@
"filenamify": "6.0.0",
"hanja": "1.1.4",
"happy-dom": "18.0.1",
"hono": "4.8.4",
"hono": "4.8.9",
"howler": "2.2.4",
"html-to-text": "9.0.5",
"i18next": "25.3.2",
@ -132,14 +132,14 @@
"virtua": "0.41.5",
"vudio": "2.1.1",
"x11": "2.3.0",
"youtubei.js": "14.0.0",
"zod": "4.0.5"
"youtubei.js": "15.0.1",
"zod": "4.0.10"
},
"devDependencies": {
"@eslint/js": "9.31.0",
"@eslint/js": "9.32.0",
"@malept/flatpak-bundler": "0.4.0",
"@playwright/test": "1.54.1",
"@stylistic/eslint-plugin": "5.1.0",
"@stylistic/eslint-plugin": "5.2.2",
"@total-typescript/ts-reset": "0.6.1",
"@types/electron-localshortcut": "3.1.3",
"@types/howler": "2.2.12",
@ -148,31 +148,31 @@
"@types/trusted-types": "2.0.7",
"bufferutil": "4.0.9",
"builtin-modules": "5.0.0",
"cross-env": "7.0.3",
"cross-env": "10.0.0",
"del-cli": "6.0.0",
"discord-api-types": "0.38.15",
"electron": "38.0.0-alpha.5",
"discord-api-types": "0.38.17",
"electron": "37.2.4",
"electron-builder": "26.0.12",
"electron-builder-squirrel-windows": "26.0.12",
"electron-devtools-installer": "4.0.0",
"electron-vite": "4.0.0",
"esbuild": "0.25.6",
"eslint": "9.31.0",
"eslint-config-prettier": "10.1.5",
"esbuild": "0.25.8",
"eslint": "9.32.0",
"eslint-config-prettier": "10.1.8",
"eslint-import-resolver-exports": "1.0.0-beta.5",
"eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-prettier": "5.5.1",
"eslint-plugin-prettier": "5.5.3",
"eslint-plugin-solid": "0.14.5",
"glob": "11.0.3",
"node-gyp": "11.2.0",
"playwright": "1.54.1",
"rollup": "4.45.0",
"rollup": "4.46.1",
"typescript": "5.8.3",
"typescript-eslint": "8.36.0",
"typescript-eslint": "8.38.0",
"utf-8-validate": "6.0.5",
"vite": "npm:rolldown-vite@7.0.8",
"vite-plugin-inspect": "11.3.0",
"vite": "npm:rolldown-vite@7.0.11",
"vite-plugin-inspect": "11.3.2",
"vite-plugin-resolve": "2.5.2",
"vite-plugin-solid": "2.11.7",
"ws": "8.18.3"

1228
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -34,6 +34,7 @@ export interface DefaultConfig {
overrideUserAgent: boolean;
usePodcastParticipantAsArtist: boolean;
themes: string[];
customWindowTitle?: string;
};
'plugins': Record<string, unknown>;
}

View File

@ -1,7 +1,91 @@
{
"common": {
"console": {
"plugins": {
"execute-failed": "Plagini icra etmək mümkün olmadı {{pluginName}}::{{contextName}}",
"executed-at-ms": "Plagin {{pluginName}}::{{contextName}} {{ms}} millisaniyədə icra edildi",
"initialize-failed": "\"{{pluginName}}\" plaginini başlatmaq mümkün olmadı",
"load-all": "Bütün plaginlər yüklənir",
"load-failed": "\"{{pluginName}}\" plaginini yükləmək mümkün olmadı",
"loaded": "\"{{pluginName}}\" plagini yükləndi"
}
}
},
"language": {
"code": "az",
"local-name": "Azərbaycan dili",
"name": "Azerbaijani"
},
"main": {
"console": {
"when-ready": {
"clearing-cache-after-20s": "Proqram keşi təmizlənir"
},
"window": {
"tried-to-render-offscreen": "Pəncərə ekran kənarında göstərilməyə çalışıldı, PəncərəÖlçüsü={{windowSize}}, EkranÖlçüsü={{displaySize}}, Vəziyyət={{position}}"
}
},
"dialog": {
"hide-menu-enabled": {
"detail": "Menu gizlədildi, yenidən göstərmək üçün 'Alt' istifadə edin (Proqramiçi menu üçün 'Esc')",
"message": "Gizlət menusu aktivləşdirildi",
"title": "Gizlət menusu aktivləşdirildi"
},
"need-to-restart": {
"buttons": {
"later": "Sonra",
"restart-now": "Yenidən başlat"
},
"detail": "\"{{pluginName}}\" plaginin işləməsi üçün proqramı yenidən başladın",
"message": "\"{{pluginName}}\" üçün proqram yenidən başlamalıdır",
"title": "Yenidən başlatmaq tələb edilir"
},
"unresponsive": {
"buttons": {
"quit": "Tərk et",
"relaunch": "Yenidən işə sal",
"wait": "Gözləyin"
},
"detail": "Narahatçılıq üçün üzr istəyirik! Nə etməli olduğumuzu seçin:",
"message": "Proqram cavab vermir",
"title": "Pəncərə Cavab vermir"
},
"update-available": {
"buttons": {
"disable": "Yeniləmələri deaktiv et",
"download": "Yüklə",
"ok": "Oldu"
},
"detail": "Yeni versiya mövcuddur və bu linkdən yüklənə bilər {{downloadLink}}",
"message": "Yeni versiya mövcuddur",
"title": "Yeniləmə mövcuddur"
}
},
"menu": {
"about": "Haqqında",
"navigation": {
"label": "İstiqamət",
"submenu": {
"copy-current-url": "Hazırkı linki kopyala",
"go-back": "Geri qayıt",
"go-forward": "İrəli get",
"quit": ıx",
"restart": "Proqramı Yenidən Başlat"
}
},
"options": {
"label": "Seçimlər",
"submenu": {
"advanced-options": {
"label": "Əlavə seçimlər",
"submenu": {
"auto-reset-app-cache": "Proqram başlayanda keşi təmizlə",
"disable-hardware-acceleration": "Aparat təminatı sürətlənməsini deaktiv et",
"edit-config-json": "Config.json dəyiş"
}
}
}
}
}
}
}

View File

@ -381,6 +381,11 @@
},
"templates": {
"title": "ক্যাপশন নির্বাচক খুলুন"
},
"toast": {
"caption-changed": "ক্যাপশন {{language}} ভাষায় পরিবর্তিত হয়েছে",
"caption-disabled": "ক্যাপশন বন্ধ করা হয়েছে",
"no-captions": "এই গানটির জন্য কোনো ক্যাপশন উপলব্ধ নেই"
}
},
"compact-sidebar": {
@ -600,7 +605,15 @@
},
"navigation": {
"description": "পরবর্তী/পূর্ববর্তী নেভিগেশন তীরগুলি আপনার প্রিয় ব্রাউজারের মতো সরাসরি ইন্টারফেসে অন্তর্ভুক্ত করা হয়েছে",
"name": "নেভিগেশন"
"name": "নেভিগেশন",
"templates": {
"back": {
"title": "আগের পাতায় যান"
},
"forward": {
"title": "পরের পাতায় যান"
}
}
},
"no-google-login": {
"description": "ইন্টারফেস থেকে Google লগইন বাটন এবং লিঙ্কগুলি সরান",
@ -692,7 +705,12 @@
}
},
"description": "ভিডিও ওভারলেতে একটি বাটনের মাধ্যমে ভিডিও কোয়ালিটি পরিবর্তন করতে দেয়",
"name": "ভিডিও কোয়ালিটি পরিবর্তক"
"name": "ভিডিও কোয়ালিটি পরিবর্তক",
"renderer": {
"quality-settings-button": {
"label": "প্লেয়ারের মান পরিবর্তনের অপশন খুলুন"
}
}
},
"scrobbler": {
"description": "স্ক্রবলিং সমর্থন যোগ করুন (যেমন last.fm, Listenbrainz)",
@ -857,7 +875,11 @@
}
}
},
"name": "ভিডিও টগল"
"name": "ভিডিও টগল",
"templates": {
"button-song": "গান",
"button-video": "ভিডিও"
}
},
"visualizer": {
"description": "প্লেয়ারে একটি ভিজ্যুয়ালাইজার যোগ করে",

View File

@ -73,7 +73,7 @@
"download": "Λήψη",
"ok": "OK"
},
"detail": "Μια νέα έκδοση είναι διαθέσιμη και μπορεί να ληφθεί από τον σύνδεσμο {{downloadLink}}",
"detail": "Μια νέα έκδοση είναι διαθέσιμη και μπορεί να ληφθεί από το {{downloadLink}}",
"message": "Μια νέα έκδοση είναι διαθέσιμη",
"title": "Διατίθεται ενημέρωση"
}
@ -132,14 +132,14 @@
}
},
"resume-on-start": "Συνέχιση τελευταίου τραγουδιού όταν η εφαρμογή ξεκινά",
"single-instance-lock": "Κλείδωμα Μοναδικής Εκδοχής",
"start-at-login": "Έναρξη κατά την σύνδεση",
"single-instance-lock": "Κλείδωμα μοναδικής εκδοχής",
"start-at-login": "Έναρξη κατά τη σύνδεση",
"starting-page": {
"label": "Σελίδα έναρξης",
"label": "Αρχική σελίδα",
"unset": "Κατάργηση ορισμού"
},
"tray": {
"label": "Δίσκος",
"label": "Περιοχή συστήματος",
"submenu": {
"disabled": "Απενεργοποιημένο",
"enabled-and-hide-app": "Ενεργοποιημένο και απόκρυψη της εφαρμογής",
@ -148,7 +148,7 @@
}
},
"visual-tweaks": {
"label": "Τροποποιήσεις εμφάνισης",
"label": "Οπτικές προσαρμογές",
"submenu": {
"like-buttons": {
"default": "Προεπιλογή",
@ -169,7 +169,7 @@
"label": "Θέμα",
"submenu": {
"import-css-file": "Εισαγωγή προσαρμοσμένου αρχείου CSS",
"no-theme": "Κανένα θέμα"
"no-theme": "Χωρίς θέμα"
}
}
}
@ -208,11 +208,11 @@
},
"plugins": {
"ad-speedup": {
"description": "Εάν παίξει διαφήμιση κάνει σίγαση του ήχου και θέτει την ταχύτητα αναπαραγωγής στο 16x",
"name": "Γρήγορη προώθηση διαφημίσεων"
"description": "Εάν ξεκινήσει διαφήμιση, ο ήχος απενεργοποιείται και η ταχύτητα αναπαραγωγής ορίζεται σε 16x",
"name": "Επιτάχυνση διαφημίσεων"
},
"adblocker": {
"description": "Αποκλεισμός όλων των διαφημίσεων και tracker",
"description": "Αποκλεισμός όλων των διαφημίσεων και της παρακολούθησης από προεπιλογή",
"menu": {
"blocker": "Πρόγραμμα αποκλεισμού"
},
@ -223,28 +223,28 @@
"name": "Ενέργειες σε Άλμπουμ"
},
"album-color-theme": {
"description": "Εφαρμόζει ένα δυναμικό θέμα και οπτικά εφέ με βάση τη χρωματική παλέτα του άλμπουμ",
"description": "Εφαρμόζει ένα δυναμικό θέμα και οπτικά εφέ βάσει της παλέτας χρωμάτων του άλμπουμ",
"menu": {
"color-mix-ratio": {
"label": "Αναλογία μίξης χρωμάτων",
"label": "Αναλογία ανάμειξης χρωμάτων",
"submenu": {
"percent": "{{ratio}}%"
}
}
},
"name": "Θέμα χρώματος άλμπουμ"
"name": "Θέμα χρωμάτων άλμπουμ"
},
"ambient-mode": {
"description": "Εφαρμόζει ένα εφέ φωτισμού ρίχνοντας απαλά χρώματα από το βίντεο στο φόντο της οθόνης σας",
"menu": {
"blur-amount": {
"label": "Ένταση θαμπώματος",
"label": "Ποσότητα θολώματος",
"submenu": {
"pixels": "{{blurAmount}} pixels"
}
},
"buffer": {
"label": "Buffer",
"label": "Ενδιάμεση μνήμη",
"submenu": {
"buffer": "{{buffer}}"
}
@ -270,18 +270,18 @@
"smoothness-transition": {
"label": "Ομαλή μετάβαση",
"submenu": {
"during": "Σε {{interpolationTime}} δευτερόλεπτα"
"during": "Για {{interpolationTime}} δευτερόλεπτα"
}
},
"use-fullscreen": {
"label": "Χρήση πλήρους οθόνης"
"label": "Σε πλήρη οθόνη"
}
},
"name": "Λειτουργία περιβάλλοντος"
},
"amuse": {
"description": "Προσθέτει υποστήριξη μουσικής YouTube για το widget Amuse now playing από την 6K Labs",
"name": "Διασκέδαση",
"description": "Προσθέτει υποστήριξη YouTube Music στο widget Amuse now playing από την 6K Labs",
"name": "Amuse",
"response": {
"query": "Ο διακομιστής Amuse API εκτελείται. GET /query για να λάβετε πληροφορίες για το τραγούδι."
}

View File

@ -156,6 +156,13 @@
"hide": "Hide",
"label": "Like buttons"
},
"custom-window-title": {
"label": "Custom window title",
"prompt": {
"label": "Enter custom window title: (leave empty to disable)",
"placeholder": "Example: YouTube Music"
}
},
"remove-upgrade-button": "Remove upgrade button",
"theme": {
"dialog": {
@ -334,7 +341,6 @@
"name": "Audio Compressor"
},
"auth-proxy-adapter": {
"name": "Auth Proxy Adapter",
"description": "Support for the use of authentication proxy services",
"menu": {
"disable": "Disable Proxy Adapter",
@ -346,14 +352,15 @@
"label": "Port"
}
},
"name": "Auth Proxy Adapter",
"prompt": {
"hostname": {
"title": "Proxy Hostname",
"label": "Enter hostname for local proxy server (requires restart):"
"label": "Enter hostname for local proxy server (requires restart):"
},
"port": {
"title": "Proxy Port",
"label": "Enter port for local proxy server (requires restart):"
"label": "Enter port for local proxy server (requires restart):"
}
}
},
@ -704,13 +711,13 @@
}
}
},
"description": "Allows changing the video quality with a button on the video overlay",
"name": "Video Quality Changer",
"renderer": {
"quality-settings-button": {
"label": "Open player quality changer"
}
},
"description": "Allows changing the video quality with a button on the video overlay",
"name": "Video Quality Changer"
}
},
"scrobbler": {
"description": "Add scrobbling support (etc. last.fm, Listenbrainz)",

View File

@ -835,7 +835,7 @@
"warnings": {
"duration-mismatch": "⚠️ - La letra puede estar desincronizada debido a un desajuste en la duración.",
"inexact": "⚠️ - La letra de esta canción puede no ser exacta",
"instrumental": "⚠️ - Se trata de una canción instrumental"
"instrumental": "⚠️ - Esta es una canción instrumental"
}
},
"taskbar-mediacontrol": {

View File

@ -150,6 +150,11 @@
"visual-tweaks": {
"label": "दृश्य परिवर्तन",
"submenu": {
"custom-window-title": {
"prompt": {
"placeholder": "उदाहरण: यूट्यूब संगीत"
}
},
"like-buttons": {
"default": "डिफॉल्ट",
"force-show": "बल पूर्वक दिखाएं",
@ -482,7 +487,7 @@
"playlist-has-only-one-song": "प्लेलिस्ट में केवल एक आइटम है, इसे सीधे डाउनलोड करें",
"playlist-id-not-found": "कोई प्लेलिस्ट आईडी नहीं मिली",
"playlist-is-empty": "प्लेलिस्ट ख़ाली है",
"playlist-is-mix-or-private": "प्लेलिस्ट जानकारी प्राप्त करने में दिक्कत: सुनिश्चित करें कि यह निजी या \"आपके लिए मिश्रित\" प्लेलिस्ट नहीं है\n\n{{त्रुटि}}",
"playlist-is-mix-or-private": "प्लेलिस्ट जानकारी प्राप्त करने में दिक्कत: सुनिश्चित करें कि यह निजी या \"आपके लिए मिश्रित\" प्लेलिस्ट नहीं है\n\n{{error}}",
"preparing-file": "फ़ाइल तैयार की जा रही है…",
"saving": "सेव जा रहा है…",
"trying-to-get-playlist-id": "प्लेलिस्ट आईडी प्राप्त करने का प्रयास किया जा रहा है: {{playlistId}}",

View File

@ -638,6 +638,17 @@
"description": "Automatiškai praleidžia ne muzikines dalis, pvz., įžangą/užvedimą arba muzikinių vaizdo įrašų dalis, kuriose daina negrojama",
"name": "Rėmėjų blokuotojas"
},
"synced-lyrics": {
"refetch-btn": {
"fetching": "Gaunama...",
"normal": "Atgauti dainos žodžius"
},
"warnings": {
"duration-mismatch": "⚠️ - Dainos žodžiai gali būti nesinchronizuoti dėl trukmės nesutikimo.",
"inexact": "⚠️ - Dainos žodžiai gali šiek tiek skirtis",
"instrumental": "⚠️ Tai instrumentinė daina"
}
},
"taskbar-mediacontrol": {
"description": "Valdykite atkūrimą iš „Windows“ užduočių juostos",
"name": "Užduočių juostos medijos valdymas"

View File

@ -150,6 +150,13 @@
"visual-tweaks": {
"label": "Poprawki wizualne",
"submenu": {
"custom-window-title": {
"label": "Niestandardowy tytuł okna",
"prompt": {
"label": "Podaj niestandardowy tytuł okna (zostaw puste, aby to wyłączyć):",
"placeholder": "Przykład: YouTube Music"
}
},
"like-buttons": {
"default": "Domyślne",
"force-show": "Wymuś pokazywanie",
@ -383,9 +390,9 @@
"title": "Otwórz selektor napisów"
},
"toast": {
"caption-changed": "Napisy zmienione na {{language}}",
"caption-disabled": "Napisy wyłączone",
"no-captions": "Niestety nie posiadamy napisów dla tej piosenki"
"caption-changed": "Zmieniono napisy na {{language}}",
"caption-disabled": "Napisy zostały wyłączone",
"no-captions": "Nie znaleziono napisów dla tego utworu"
}
},
"compact-sidebar": {

View File

@ -381,6 +381,11 @@
},
"templates": {
"title": "Abrir o seletor de legendas"
},
"toast": {
"caption-changed": "Idioma das legendas alterado para {{language}}",
"caption-disabled": "Legendas desativadas",
"no-captions": "Não existem legendas disponíveis para esta música"
}
},
"compact-sidebar": {
@ -600,7 +605,15 @@
},
"navigation": {
"description": "Setas de navegação Avançar/Retroceder integradas diretamente na interface, como no seu navegador favorito",
"name": "Navegação"
"name": "Navegação",
"templates": {
"back": {
"title": "Retroceder a página"
},
"forward": {
"title": "Avançar para a próxima página"
}
}
},
"no-google-login": {
"description": "Remove os botões de login do Google e links da interface",
@ -692,7 +705,12 @@
}
},
"description": "Permite alterar a qualidade do vídeo com um botão sobreposto ao vídeo",
"name": "Alterador de qualidade de vídeo"
"name": "Alterador de qualidade de vídeo",
"renderer": {
"quality-settings-button": {
"label": "Selecionar a qualidade de reprodução"
}
}
},
"scrobbler": {
"description": "Adicionar suporte para scrobbling (last.fm, Listenbrainz, etc.)",
@ -859,7 +877,8 @@
},
"name": "Botão de Alternar Vídeo",
"templates": {
"button-song": "Música"
"button-song": "Música",
"button-video": "Vídeo"
}
},
"visualizer": {

View File

@ -150,6 +150,13 @@
"visual-tweaks": {
"label": "Vizuelna podešavanja",
"submenu": {
"custom-window-title": {
"label": "Prilagođeni naziv prozora",
"prompt": {
"label": "Unesite prilagođeni naslov prozora: (ostavite prazno da onemogućite)",
"placeholder": "Primer: YouTube Muzika"
}
},
"like-buttons": {
"default": "Podrazumevano",
"force-show": "Prinudno prikaži",
@ -281,7 +288,7 @@
},
"amuse": {
"description": "Dodaje podršku za 'Amuse now' vidžet (6K Labs) u YouTube Muziku",
"name": "Amuse",
"name": "Zabavi",
"response": {
"query": "Amuse API server je pokrenut. Koristite GET /query da biste dobili informacije o numeri."
}
@ -439,7 +446,7 @@
"play-on-youtube-music": "Reprodukuj na YouTube Muzici",
"set-inactivity-timeout": "Podesi tajmer za neaktivnost"
},
"name": "Discord Rich Presence",
"name": "Discord Bogato Prisustvo",
"prompt": {
"set-inactivity-timeout": {
"label": "Unesi vreme za tajmer neaktivnosti u sekundama:",

View File

@ -150,6 +150,13 @@
"visual-tweaks": {
"label": "ปรับแต่งหน้าตาแอป",
"submenu": {
"custom-window-title": {
"label": "ชื่อหน้าต่างกำหนดเอง",
"prompt": {
"label": "กำหนดชื่อหน้าต่างที่ต้องการ: (ปล่อยว่างเพื่อปิดใช้งาน)",
"placeholder": "ตัวอย่าง: Youtube Music"
}
},
"like-buttons": {
"default": "ค่าเริ่มต้น",
"force-show": "บังคับให้แสดง",

View File

@ -317,7 +317,7 @@
"label": "Cổng"
}
},
"name": "Máy chủ API [Beta]",
"name": "Máy chủ API [Thử nghiệm]",
"prompt": {
"hostname": {
"label": "Điền tên máy chủ (như 0.0.0.0) cho máy chủ API:",
@ -415,9 +415,9 @@
}
},
"disable-autoplay": {
"description": "Làm nhạc tạm dừng khi được phát",
"description": "Làm nhạc bắt đầu ở chế độ \"tạm dừng\"\nNgoài ra có thể dừng nhạc khi khởi động ứng dụng (nếu có bật tính năng \"Tiếp tục bài hát cuối cùng khi ứng dụng khởi động\")",
"menu": {
"apply-once": "Áp dụng khi khởi động"
"apply-once": "Chỉ áp dụng khi khởi động"
},
"name": "Tắt tự động phát"
},
@ -482,8 +482,8 @@
"playlist-has-only-one-song": "Danh sách phát chỉ có một mục, tải trực tiếp",
"playlist-id-not-found": "Không tìm thấy ID danh sách phát",
"playlist-is-empty": "Danh sách phát trống",
"playlist-is-mix-or-private": "Lỗi lấy thông tin danh sách phát: đảm bảo danh sách phát không ở chế độ riêng tư hoặc danh sách phát \"Dành cho bạn\"\n\n{{error}}",
"preparing-file": "Đang chuẩn bị thư mục…",
"playlist-is-mix-or-private": "Lỗi lấy thông tin danh sách phát: hãy đảm bảo danh sách phát không ở chế độ riêng tư hoặc danh sách phát \"Dành cho bạn\"\n\n{{error}}",
"preparing-file": "Đang chuẩn bị tệp…",
"saving": "Đang lưu…",
"trying-to-get-playlist-id": "Đang lấy ID danh sách phát: {{playlistId}}",
"video-id-not-found": "Không tìm thấy video",
@ -509,8 +509,8 @@
}
},
"download-playlist": "Tải danh sách phát",
"presets": "Cài đặt sẵn",
"skip-existing": "Bỏ qua các tập tin hiện có"
"presets": "Tùy chọn định dạng",
"skip-existing": "Bỏ qua các tập tin đã có"
},
"name": "Trình tải xuống",
"renderer": {
@ -521,7 +521,7 @@
}
},
"equalizer": {
"description": "Thêm bộ lọc xì vào trình phát nhạc\nP.S: Bộ lọc xì (Equalizer), là một thiết bị được thiết kế để phân chia, tăng, giảm, cắt các dải tần số âm thanh để mang tới sự cân bằng và làm thay đổi các tín hiệu âm thanh đi qua nó",
"description": "Thêm bộ chỉnh âm để điều chỉnh âm thanh cho trình phát nhạc",
"menu": {
"presets": {
"label": "Thiết lập có sẵn",
@ -530,7 +530,7 @@
}
}
},
"name": "Bộ lọc xì (EQ)"
"name": "Bộ chỉnh âm"
},
"exponential-volume": {
"description": "Làm cho thanh trượt âm lượng theo cấp số nhân để dễ dàng chọn âm lượng thấp hơn.",

View File

@ -150,6 +150,13 @@
"visual-tweaks": {
"label": "视觉调整",
"submenu": {
"custom-window-title": {
"label": "自定义窗口标题",
"prompt": {
"label": "输入自定义窗口标题:(留空表示停用)",
"placeholder": "示例YouTube Music"
}
},
"like-buttons": {
"default": "默认",
"force-show": "强制显示",

View File

@ -599,6 +599,15 @@ app.once('browser-window-created', (_event, win) => {
win.webContents.on('will-prevent-unload', (event) => {
event.preventDefault();
});
const customWindowTitle = config.get('options.customWindowTitle');
if (customWindowTitle) {
win.on('page-title-updated', (event) => {
event.preventDefault();
win.setTitle(customWindowTitle);
});
}
});
app.on('window-all-closed', () => {

View File

@ -216,6 +216,37 @@ export const mainMenuTemplate = async (
);
},
},
{
label: t(
'main.menu.options.submenu.visual-tweaks.submenu.custom-window-title.label',
),
async click() {
const output = await prompt(
{
title: t(
'main.menu.options.submenu.visual-tweaks.submenu.custom-window-title.label',
),
label: t(
'main.menu.options.submenu.visual-tweaks.submenu.custom-window-title.prompt.label',
),
value: config.get('options.customWindowTitle') || '',
type: 'input',
inputAttrs: {
type: 'text',
placeholder: t(
'main.menu.options.submenu.visual-tweaks.submenu.custom-window-title.prompt.placeholder',
),
},
width: 500,
...promptOptions(),
},
win,
);
if (typeof output === 'string') {
config.setMenuOption('options.customWindowTitle', output);
}
},
},
{
label: t(
'main.menu.options.submenu.visual-tweaks.submenu.like-buttons.label',

View File

@ -75,9 +75,11 @@ export const register = (
// SKIP CHECK
}
setConfig({
authorizedClients: [...config.authorizedClients, id],
});
if (!config.authorizedClients.includes(id)) {
setConfig({
authorizedClients: [...config.authorizedClients, id],
});
}
const token = await sign(
{

View File

@ -848,5 +848,7 @@ const getMetadata = (info: TrackInfo): CustomSongInfo => ({
const getAndroidTvInfo = async (id: string): Promise<VideoInfo> => {
// GetInfo 404s with the bypass, so we use getBasicInfo instead
// that's fine as we only need the streaming data
return await yt.getBasicInfo(id, 'TV_EMBEDDED');
return await yt.getBasicInfo(id, {
client: 'TV_EMBEDDED',
});
};

View File

@ -1,4 +1,5 @@
import { extractToken, getAuthorizationHeader, getClient } from './client';
import type { YouTubeMusicAppElement } from '@/types/youtube-music-app-element';
import type { QueueElement } from '@/types/queue';
type QueueRendererResponse = {
queueDatas: {
@ -11,40 +12,15 @@ type QueueRendererResponse = {
export const getMusicQueueRenderer = async (
videoIds: string[],
): Promise<QueueRendererResponse | null> => {
const token = extractToken();
if (!token) return null;
const queue = document.querySelector<QueueElement>('#queue');
const app = document.querySelector<YouTubeMusicAppElement>('ytmusic-app');
if (!app) return null;
const response = await fetch(
'https://music.youtube.com/youtubei/v1/music/get_queue?key=AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30&prettyPrint=false',
{
method: 'POST',
credentials: 'include',
body: JSON.stringify({
context: {
client: getClient(),
request: {
useSsl: true,
internalExperimentFlags: [],
consistencyTokenJars: [],
},
user: {
lockedSafetyMode: false,
},
},
videoIds,
}),
headers: {
'Content-Type': 'application/json',
'Origin': 'https://music.youtube.com',
'Authorization': await getAuthorizationHeader(token),
},
},
);
const store = queue?.queue.store.store;
if (!store) return null;
const text = await response.text();
try {
return JSON.parse(text) as QueueRendererResponse;
} catch {}
return null;
return (await app.networkManager.fetch('/music/get_queue', {
queueContextParams: store.getState().queue.queueContextParams,
videoIds,
})) as QueueRendererResponse | null;
};

View File

@ -21,9 +21,7 @@ export default createPlugin<
this.observer = new MutationObserver(() => {
if (dislikeBtn?.getAttribute('like-status') == 'DISLIKE') {
document
.querySelector<HTMLButtonElement>(
'tp-yt-paper-icon-button.next-button',
)
.querySelector<HTMLButtonElement>('yt-icon-button.next-button')
?.click();
}
});

View File

@ -171,6 +171,7 @@ export default createPlugin({
const video = document.querySelector<HTMLVideoElement>('video');
const switchButtonContainer = document.createElement('div');
switchButtonContainer.id = 'ytmd-video-toggle-switch-button-container';
switchButtonContainer.style.display = 'flex';
render(
() => (