Compare commits

..

No commits in common. "76f0f185929413414f181fbed40edab17c3c6ca0" and "b6c0926efc8a444aa38ec950a945f178af677d28" have entirely different histories.

79 changed files with 1049 additions and 5681 deletions

File diff suppressed because one or more lines are too long

View File

@ -15,7 +15,8 @@ class TextFormBuilderField extends StatelessWidget {
// final AlignmentGeometry? leadingAlignment; // final AlignmentGeometry? leadingAlignment;
// final AlignmentGeometry? trailingAlignment; // final AlignmentGeometry? trailingAlignment;
final bool border; final bool border;
final List<InputFeature> features; final Widget? leading;
final Widget? trailing;
final EdgeInsetsGeometry? padding; final EdgeInsetsGeometry? padding;
final ValueChanged<String>? onSubmitted; final ValueChanged<String>? onSubmitted;
final VoidCallback? onEditingComplete; final VoidCallback? onEditingComplete;
@ -62,6 +63,8 @@ class TextFormBuilderField extends StatelessWidget {
this.filled = false, this.filled = false,
this.placeholder, this.placeholder,
this.border = true, this.border = true,
this.leading,
this.trailing,
this.padding, this.padding,
this.onSubmitted, this.onSubmitted,
this.onEditingComplete, this.onEditingComplete,
@ -93,7 +96,6 @@ class TextFormBuilderField extends StatelessWidget {
// this.leadingAlignment, // this.leadingAlignment,
// this.trailingAlignment, // this.trailingAlignment,
this.statesController, this.statesController,
this.features = const [],
}); });
@override @override
@ -128,7 +130,10 @@ class TextFormBuilderField extends StatelessWidget {
filled: filled, filled: filled,
placeholder: placeholder, placeholder: placeholder,
border: border, border: border,
features: features, features: [
if (leading != null) InputFeature.leading(leading!),
if (trailing != null) InputFeature.trailing(trailing!),
],
padding: padding, padding: padding,
onSubmitted: (value) { onSubmitted: (value) {
field.validate(); field.validate();

View File

@ -426,9 +426,5 @@
"download": "تنزيل", "download": "تنزيل",
"file_not_found": "الملف غير موجود", "file_not_found": "الملف غير موجود",
"custom": "مخصص", "custom": "مخصص",
"add_custom_url": "إضافة URL مخصص", "add_custom_url": "إضافة URL مخصص"
"edit_port": "تعديل المنفذ",
"port_helper_msg": "القيمة الافتراضية هي -1 والتي تشير إلى رقم عشوائي. إذا كان لديك جدار ناري مُعد، يُوصى بتعيين هذا.",
"connect_request": "السماح لـ {client} بالاتصال؟",
"connection_request_denied": "تم رفض الاتصال. المستخدم رفض الوصول."
} }

View File

@ -426,9 +426,5 @@
"download": "ডাউনলোড", "download": "ডাউনলোড",
"file_not_found": "ফাইল পাওয়া যায়নি", "file_not_found": "ফাইল পাওয়া যায়নি",
"custom": "কাস্টম", "custom": "কাস্টম",
"add_custom_url": "কাস্টম URL যোগ করুন", "add_custom_url": "কাস্টম URL যোগ করুন"
"edit_port": "পোর্ট সম্পাদনা করুন",
"port_helper_msg": "ডিফল্ট হল -1 যা এলোমেলো সংখ্যা নির্দেশ করে। যদি আপনার ফায়ারওয়াল কনফিগার করা থাকে, তবে এটি সেট করা সুপারিশ করা হয়।",
"connect_request": "{client} কে সংযোগ করতে অনুমতি দেবেন?",
"connection_request_denied": "সংযোগ অস্বীকৃত। ব্যবহারকারী প্রবেশাধিকার অস্বীকার করেছে।"
} }

View File

@ -426,9 +426,5 @@
"download": "Descarregar", "download": "Descarregar",
"file_not_found": "Fitxer no trobat", "file_not_found": "Fitxer no trobat",
"custom": "Personalitzat", "custom": "Personalitzat",
"add_custom_url": "Afegir URL personalitzada", "add_custom_url": "Afegir URL personalitzada"
"edit_port": "Editar port",
"port_helper_msg": "El valor per defecte és -1, que indica un número aleatori. Si teniu un tallafoc configurat, es recomana establir-ho.",
"connect_request": "Permetre que {client} es connecti?",
"connection_request_denied": "Connexió denegada. L'usuari ha denegat l'accés."
} }

View File

@ -426,9 +426,5 @@
"download": "Stáhnout", "download": "Stáhnout",
"file_not_found": "Soubor nenalezen", "file_not_found": "Soubor nenalezen",
"custom": "Vlastní", "custom": "Vlastní",
"add_custom_url": "Přidat vlastní URL", "add_custom_url": "Přidat vlastní URL"
"edit_port": "Upravit port",
"port_helper_msg": "Výchozí hodnota je -1, což znamená náhodné číslo. Pokud máte nakonfigurován firewall, doporučuje se to nastavit.",
"connect_request": "Povolit {client} připojení?",
"connection_request_denied": "Připojení bylo zamítnuto. Uživatel odmítl přístup."
} }

View File

@ -426,9 +426,5 @@
"download": "Herunterladen", "download": "Herunterladen",
"file_not_found": "Datei nicht gefunden", "file_not_found": "Datei nicht gefunden",
"custom": "Benutzerdefiniert", "custom": "Benutzerdefiniert",
"add_custom_url": "Benutzerdefinierte URL hinzufügen", "add_custom_url": "Benutzerdefinierte URL hinzufügen"
"edit_port": "Port bearbeiten",
"port_helper_msg": "Der Standardwert ist -1, was eine zufällige Zahl bedeutet. Wenn Sie eine Firewall konfiguriert haben, wird empfohlen, dies einzustellen.",
"connect_request": "{client} die Verbindung erlauben?",
"connection_request_denied": "Verbindung abgelehnt. Benutzer hat den Zugriff verweigert."
} }

View File

@ -424,9 +424,5 @@
"download": "Download", "download": "Download",
"file_not_found": "File not found", "file_not_found": "File not found",
"custom": "Custom", "custom": "Custom",
"add_custom_url": "Add custom URL", "add_custom_url": "Add custom URL"
"edit_port": "Edit port",
"port_helper_msg": "Default is -1 which indicates random number. If you've firewall configured, setting this is recommended.",
"connect_request": "Allow {client} to connect?",
"connection_request_denied": "Connection denied. User denied access."
} }

View File

@ -426,9 +426,5 @@
"download": "Descargar", "download": "Descargar",
"file_not_found": "Archivo no encontrado", "file_not_found": "Archivo no encontrado",
"custom": "Personalizado", "custom": "Personalizado",
"add_custom_url": "Agregar URL personalizada", "add_custom_url": "Agregar URL personalizada"
"edit_port": "Editar puerto",
"port_helper_msg": "El valor predeterminado es -1, lo que indica un número aleatorio. Si tienes un firewall configurado, se recomienda establecer esto.",
"connect_request": "¿Permitir que {client} se conecte?",
"connection_request_denied": "Conexión denegada. El usuario denegó el acceso."
} }

View File

@ -426,9 +426,5 @@
"download": "Deskargatu", "download": "Deskargatu",
"file_not_found": "Fitxategia ez da aurkitu", "file_not_found": "Fitxategia ez da aurkitu",
"custom": "Pertsonalizatua", "custom": "Pertsonalizatua",
"add_custom_url": "Gehitu URL pertsonalizatua", "add_custom_url": "Gehitu URL pertsonalizatua"
"edit_port": "Editatu portua",
"port_helper_msg": "Lehenetsitako balioa -1 da, zenbaki aleatorioa adierazten duena. Su firewall konfiguratu baduzu, gomendatzen da hau ezartzea.",
"connect_request": "{client} konektatzea baimendu?",
"connection_request_denied": "Konektatzea ukatu da. Erabiltzaileak sarbidea ukatu du."
} }

View File

@ -426,9 +426,5 @@
"download": "دانلود", "download": "دانلود",
"file_not_found": "فایل پیدا نشد", "file_not_found": "فایل پیدا نشد",
"custom": "شخصی‌سازی شده", "custom": "شخصی‌سازی شده",
"add_custom_url": "اضافه کردن URL سفارشی", "add_custom_url": "اضافه کردن URL سفارشی"
"edit_port": "ویرایش پورت",
"port_helper_msg": "پیش‌فرض -1 است که نشان‌دهنده یک عدد تصادفی است. اگر فایروال شما پیکربندی شده است، توصیه می‌شود این را تنظیم کنید.",
"connect_request": "آیا اجازه می‌دهید {client} متصل شود؟",
"connection_request_denied": "اتصال رد شد. کاربر دسترسی را رد کرد."
} }

View File

@ -426,9 +426,5 @@
"download": "Lataa", "download": "Lataa",
"file_not_found": "Tiedostoa ei löydy", "file_not_found": "Tiedostoa ei löydy",
"custom": "Mukautettu", "custom": "Mukautettu",
"add_custom_url": "Lisää mukautettu URL", "add_custom_url": "Lisää mukautettu URL"
"edit_port": "Muokkaa porttia",
"port_helper_msg": "Oletusarvo on -1, mikä tarkoittaa satunnaista numeroa. Jos sinulla on palomuuri määritetty, tämän asettamista suositellaan.",
"connect_request": "Salli {client} yhdistää?",
"connection_request_denied": "Yhteys evätty. Käyttäjä eväsi pääsyn."
} }

View File

@ -426,9 +426,5 @@
"download": "Télécharger", "download": "Télécharger",
"file_not_found": "Fichier non trouvé", "file_not_found": "Fichier non trouvé",
"custom": "Personnalisé", "custom": "Personnalisé",
"add_custom_url": "Ajouter une URL personnalisée", "add_custom_url": "Ajouter une URL personnalisée"
"edit_port": "Modifier le port",
"port_helper_msg": "La valeur par défaut est -1, ce qui indique un nombre aléatoire. Si vous avez configuré un pare-feu, il est recommandé de le définir.",
"connect_request": "Autoriser {client} à se connecter ?",
"connection_request_denied ": "Connexion refusée. L'utilisateur a refusé l'accès."
} }

View File

@ -426,9 +426,5 @@
"download": "डाउनलोड करें", "download": "डाउनलोड करें",
"file_not_found": "फाइल नहीं मिली", "file_not_found": "फाइल नहीं मिली",
"custom": "कस्टम", "custom": "कस्टम",
"add_custom_url": "कस्टम URL जोड़ें", "add_custom_url": "कस्टम URL जोड़ें"
"edit_port": "पोर्ट संपादित करें",
"port_helper_msg": "डिफ़ॉल्ट -1 है जो यादृच्छिक संख्या को दर्शाता है। यदि आपने फ़ायरवॉल कॉन्फ़िगर किया है, तो इसे सेट करना अनुशंसित है।",
"connect_request": "{client} को कनेक्ट करने की अनुमति दें?",
"connection_request_denied": "कनेक्शन अस्वीकृत। उपयोगकर्ता ने पहुंच अस्वीकृत कर दी।"
} }

View File

@ -426,9 +426,5 @@
"download": "Download", "download": "Download",
"file_not_found": "File not found", "file_not_found": "File not found",
"custom": "Custom", "custom": "Custom",
"add_custom_url": "Add custom URL", "add_custom_url": "Add custom URL"
"edit_port": "Edit port",
"port_helper_msg": "Default adalah -1 yang menunjukkan angka acak. Jika Anda telah mengonfigurasi firewall, disarankan untuk mengatur ini.",
"connect_request": "Izinkan {client} untuk terhubung?",
"connection_request_denied": "Koneksi ditolak. Pengguna menolak akses."
} }

View File

@ -427,9 +427,5 @@
"download": "Scarica", "download": "Scarica",
"file_not_found": "File non trovato", "file_not_found": "File non trovato",
"custom": "Personalizzato", "custom": "Personalizzato",
"add_custom_url": "Aggiungi URL personalizzato", "add_custom_url": "Aggiungi URL personalizzato"
"edit_port": "Modifica porta",
"port_helper_msg": "Il valore predefinito è -1, che indica un numero casuale. Se hai configurato un firewall, si consiglia di impostarlo.",
"connect_request": "Consentire a {client} di connettersi?",
"connection_request_denied": "Connessione negata. L'utente ha negato l'accesso."
} }

View File

@ -426,9 +426,5 @@
"download": "ダウンロード", "download": "ダウンロード",
"file_not_found": "ファイルが見つかりません", "file_not_found": "ファイルが見つかりません",
"custom": "カスタム", "custom": "カスタム",
"add_custom_url": "カスタムURLを追加", "add_custom_url": "カスタムURLを追加"
"edit_port": "ポートを編集",
"port_helper_msg": "デフォルトは-1で、ランダムな番号を示します。ファイアウォールを設定している場合は、これを設定することをお勧めします。",
"connect_request": "{client}の接続を許可しますか?",
"connection_request_denied": "接続が拒否されました。ユーザーがアクセスを拒否しました。"
} }

View File

@ -426,9 +426,5 @@
"download": "ჩამოტვირთვა", "download": "ჩამოტვირთვა",
"file_not_found": "ფაილი ვერ მოიძებნა", "file_not_found": "ფაილი ვერ მოიძებნა",
"custom": "პერსონალიზირებული", "custom": "პერსონალიზირებული",
"add_custom_url": "დამატება პერსონალური URL", "add_custom_url": "დამატება პერსონალური URL"
"edit_port": "პორტის რედაქტირება",
"port_helper_msg": "ნაგულისხმევი არის -1, რაც შემთხვევითი ნომრის მითითებას ნიშნავს. თუ لديك firewall настроен, рекомендуется установить это.",
"connect_request": "{client}-ის დაკავშირების ნებართვა?",
"connection_request_denied": "კავშირი უარყოფილია. მომხმარებელმა უარყო წვდომა."
} }

View File

@ -427,9 +427,5 @@
"download": "다운로드", "download": "다운로드",
"file_not_found": "파일을 찾을 수 없습니다", "file_not_found": "파일을 찾을 수 없습니다",
"custom": "사용자 정의", "custom": "사용자 정의",
"add_custom_url": "사용자 정의 URL 추가", "add_custom_url": "사용자 정의 URL 추가"
"edit_port": "포트 편집",
"port_helper_msg": "기본값은 -1로 무작위 숫자를 나타냅니다. 방화벽이 구성된 경우 이를 설정하는 것이 좋습니다.",
"connect_request": "{client}의 연결을 허용하시겠습니까?",
"connection_request_denied": "연결이 거부되었습니다. 사용자가 액세스를 거부했습니다."
} }

View File

@ -426,9 +426,5 @@
"download": "डाउनलोड", "download": "डाउनलोड",
"file_not_found": "फ़ाइल नहीं मिली", "file_not_found": "फ़ाइल नहीं मिली",
"custom": "कस्टम", "custom": "कस्टम",
"add_custom_url": "कस्टम URL जोड़ें", "add_custom_url": "कस्टम URL जोड़ें"
"edit_port": "पोर्ट सम्पादन गर्नुहोस्",
"port_helper_msg": "डिफ़ॉल्ट -1 हो जुन यादृच्छिक संख्या जनाउँछ। यदि तपाईंले फायरवाल कन्फिगर गर्नुभएको छ भने, यसलाई सेट गर्न सिफारिस गरिन्छ।",
"connect_request": "{client} लाई जडान गर्न अनुमति दिनुहोस्?",
"connection_request_denied": "जडान अस्वीकृत। प्रयोगकर्ताले पहुँच अस्वीकृत गर्यो।"
} }

View File

@ -427,9 +427,5 @@
"download": "Downloaden", "download": "Downloaden",
"file_not_found": "Bestand niet gevonden", "file_not_found": "Bestand niet gevonden",
"custom": "Aangepast", "custom": "Aangepast",
"add_custom_url": "Voeg aangepaste URL toe", "add_custom_url": "Voeg aangepaste URL toe"
"edit_port": "Poort bewerken",
"port_helper_msg": "Standaard is -1, wat een willekeurig nummer aangeeft. Als je een firewall hebt geconfigureerd, wordt aanbevolen dit in te stellen.",
"connect_request": "Toestaan dat {client} verbinding maakt?",
"connection_request_denied": "Verbinding geweigerd. Gebruiker heeft toegang geweigerd."
} }

View File

@ -426,9 +426,5 @@
"download": "Pobierz", "download": "Pobierz",
"file_not_found": "Plik nie znaleziony", "file_not_found": "Plik nie znaleziony",
"custom": "Niestandardowy", "custom": "Niestandardowy",
"add_custom_url": "Dodaj niestandardowy URL", "add_custom_url": "Dodaj niestandardowy URL"
"edit_port": "Edytuj port",
"port_helper_msg": "Domyślna wartość to -1, co oznacza losową liczbę. Jeśli masz skonfigurowany zaporę, zaleca się jej ustawienie.",
"connect_request": "Zezwolić {client} na połączenie?",
"connection_request_denied": "Połączenie odrzucone. Użytkownik odmówił dostępu."
} }

View File

@ -426,9 +426,5 @@
"download": "Baixar", "download": "Baixar",
"file_not_found": "Arquivo não encontrado", "file_not_found": "Arquivo não encontrado",
"custom": "Personalizado", "custom": "Personalizado",
"add_custom_url": "Adicionar URL personalizada", "add_custom_url": "Adicionar URL personalizada"
"edit_port": "Editar porta",
"port_helper_msg": "O padrão é -1, que indica um número aleatório. Se você tiver um firewall configurado, é recomendável definir isso.",
"connect_request": "Permitir que {client} se conecte?",
"connection_request_denied": "Conexão negada. O usuário negou o acesso ."
} }

View File

@ -426,9 +426,5 @@
"download": "Скачать", "download": "Скачать",
"file_not_found": "Файл не найден", "file_not_found": "Файл не найден",
"custom": "Пользовательский", "custom": "Пользовательский",
"add_custom_url": "Добавить пользовательский URL", "add_custom_url": "Добавить пользовательский URL"
"edit_port": "Редактировать порт",
"port_helper_msg": "По умолчанию -1, что означает случайное число. Если у вас настроен брандмауэр, рекомендуется установить это.",
"connect_request": "Разрешить {client} подключение?",
"connection_request_denied": "Подключение отклонено. Пользователь отказал в доступе."
} }

View File

@ -1,432 +1,428 @@
{ {
"guest": "விருந்தினர்", "guest": "விருந்தினர்",
"browse": "உலாவு", "browse": "உலாவு",
"search": "தேடுக", "search": "தேடுக",
"library": "நூலகம்", "library": "நூலகம்",
"lyrics": "பாடல் வரிகள்", "lyrics": "பாடல் வரிகள்",
"settings": "அமைப்புகள்", "settings": "அமைப்புகள்",
"genre_categories_filter": "வகைகள் அல்லது பாணிகளை வடிகட்டுக...", "genre_categories_filter": "வகைகள் அல்லது பாணிகளை வடிகட்டுக...",
"genre": "பாணி", "genre": "பாணி",
"personalized": "தனிப்பயனாக்கப்பட்ட", "personalized": "தனிப்பயனாக்கப்பட்ட",
"featured": "சிறப்பிடம் பெற்ற", "featured": "சிறப்பிடம் பெற்ற",
"new_releases": "புதிய வெளியீடுகள்", "new_releases": "புதிய வெளியீடுகள்",
"songs": "பாடல்கள்", "songs": "பாடல்கள்",
"playing_track": "{track} இயங்குகிறது", "playing_track": "{track} இயங்குகிறது",
"queue_clear_alert": "இது தற்போதைய வரிசையை அழிக்கும். {track_length} பாடல்கள் நீக்கப்படும்\nதொடர விரும்புகிறீர்களா?", "queue_clear_alert": "இது தற்போதைய வரிசையை அழிக்கும். {track_length} பாடல்கள் நீக்கப்படும்\nதொடர விரும்புகிறீர்களா?",
"load_more": "மேலும் ஏற்றுக", "load_more": "மேலும் ஏற்றுக",
"playlists": "பாடல் பட்டியல்கள்", "playlists": "பாடல் பட்டியல்கள்",
"artists": "கலைஞர்கள்", "artists": "கலைஞர்கள்",
"albums": "ஆல்பங்கள்", "albums": "ஆல்பங்கள்",
"tracks": "பாடல்கள்", "tracks": "பாடல்கள்",
"downloads": "பதிவிறக்கங்கள்", "downloads": "பதிவிறக்கங்கள்",
"filter_playlists": "உங்கள் பாடல் பட்டியல்களை வடிகட்டுக...", "filter_playlists": "உங்கள் பாடல் பட்டியல்களை வடிகட்டுக...",
"liked_tracks": "விரும்பிய பாடல்கள்", "liked_tracks": "விரும்பிய பாடல்கள்",
"liked_tracks_description": "உங்கள் விரும்பிய பாடல்கள் அனைத்தும்", "liked_tracks_description": "உங்கள் விரும்பிய பாடல்கள் அனைத்தும்",
"playlist": "பாடல் பட்டியல்", "playlist": "பாடல் பட்டியல்",
"create_a_playlist": "பாடல் பட்டியலை உருவாக்குக", "create_a_playlist": "பாடல் பட்டியலை உருவாக்குக",
"update_playlist": "பாடல் பட்டியலைப் புதுப்பிக்க", "update_playlist": "பாடல் பட்டியலைப் புதுப்பிக்க",
"create": "உருவாக்கு", "create": "உருவாக்கு",
"cancel": "ரத்து செய்", "cancel": "ரத்து செய்",
"update": "புதுப்பி", "update": "புதுப்பி",
"playlist_name": "பாடல் பட்டியல் பெயர்", "playlist_name": "பாடல் பட்டியல் பெயர்",
"name_of_playlist": "பாடல் பட்டியலின் பெயர்", "name_of_playlist": "பாடல் பட்டியலின் பெயர்",
"description": "விளக்கம்", "description": "விளக்கம்",
"public": "பொது", "public": "பொது",
"collaborative": "கூட்டு", "collaborative": "கூட்டு",
"search_local_tracks": "உள்ளூர் பாடல்களைத் தேடுக...", "search_local_tracks": "உள்ளூர் பாடல்களைத் தேடுக...",
"play": "இயக்கு", "play": "இயக்கு",
"delete": "அழி", "delete": "அழி",
"none": "எதுவுமில்லை", "none": "எதுவுமில்லை",
"sort_a_z": "A-Z வரிசைப்படுத்து", "sort_a_z": "A-Z வரிசைப்படுத்து",
"sort_z_a": "Z-A வரிசைப்படுத்து", "sort_z_a": "Z-A வரிசைப்படுத்து",
"sort_artist": "கலைஞர் மூலம் வரிசைப்படுத்து", "sort_artist": "கலைஞர் மூலம் வரிசைப்படுத்து",
"sort_album": "ஆல்பம் மூலம் வரிசைப்படுத்து", "sort_album": "ஆல்பம் மூலம் வரிசைப்படுத்து",
"sort_duration": "கால அளவு மூலம் வரிசைப்படுத்து", "sort_duration": "கால அளவு மூலம் வரிசைப்படுத்து",
"sort_tracks": "பாடல்களை வரிசைப்படுத்து", "sort_tracks": "பாடல்களை வரிசைப்படுத்து",
"currently_downloading": "தற்போது பதிவிறக்குகிறது ({tracks_length})", "currently_downloading": "தற்போது பதிவிறக்குகிறது ({tracks_length})",
"cancel_all": "அனைத்தையும் ரத்து செய்", "cancel_all": "அனைத்தையும் ரத்து செய்",
"filter_artist": "கலைஞர்களை வடிகட்டுக...", "filter_artist": "கலைஞர்களை வடிகட்டுக...",
"followers": "{followers} பின்தொடர்பவர்கள்", "followers": "{followers} பின்தொடர்பவர்கள்",
"add_artist_to_blacklist": "கலைஞரை தடைப்பட்டியலில் சேர்க்க", "add_artist_to_blacklist": "கலைஞரை தடைப்பட்டியலில் சேர்க்க",
"top_tracks": "சிறந்த பாடல்கள்", "top_tracks": "சிறந்த பாடல்கள்",
"fans_also_like": "ரசிகர்கள் விரும்புவது", "fans_also_like": "ரசிகர்கள் விரும்புவது",
"loading": "ஏற்றுகிறது...", "loading": "ஏற்றுகிறது...",
"artist": "கலைஞர்", "artist": "கலைஞர்",
"blacklisted": "தடைப்பட்டியலில் உள்ளது", "blacklisted": "தடைப்பட்டியலில் உள்ளது",
"following": "பின்தொடர்கிறது", "following": "பின்தொடர்கிறது",
"follow": "பின்தொடர்", "follow": "பின்தொடர்",
"artist_url_copied": "கலைஞர் URL கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது", "artist_url_copied": "கலைஞர் URL கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது",
"added_to_queue": "{tracks} பாடல்கள் வரிசையில் சேர்க்கப்பட்டன", "added_to_queue": "{tracks} பாடல்கள் வரிசையில் சேர்க்கப்பட்டன",
"filter_albums": "ஆல்பங்களை வடிகட்டுக...", "filter_albums": "ஆல்பங்களை வடிகட்டுக...",
"synced": "ஒத்திசைக்கப்பட்டது", "synced": "ஒத்திசைக்கப்பட்டது",
"plain": "சாதாரண", "plain": "சாதாரண",
"shuffle": "கலக்கு", "shuffle": "கலக்கு",
"search_tracks": "பாடல்களைத் தேடுக...", "search_tracks": "பாடல்களைத் தேடுக...",
"released": "வெளியிடப்பட்டது", "released": "வெளியிடப்பட்டது",
"error": "பிழை {error}", "error": "பிழை {error}",
"title": "தலைப்பு", "title": "தலைப்பு",
"time": "நேரம்", "time": "நேரம்",
"more_actions": "மேலும் செயல்கள்", "more_actions": "மேலும் செயல்கள்",
"download_count": "பதிவிறக்கு ({count})", "download_count": "பதிவிறக்கு ({count})",
"add_count_to_playlist": "({count}) பாடல் பட்டியலில் சேர்", "add_count_to_playlist": "({count}) பாடல் பட்டியலில் சேர்",
"add_count_to_queue": "({count}) வரிசையில் சேர்", "add_count_to_queue": "({count}) வரிசையில் சேர்",
"play_count_next": "({count}) அடுத்து இயக்கு", "play_count_next": "({count}) அடுத்து இயக்கு",
"album": "ஆல்பம்", "album": "ஆல்பம்",
"copied_to_clipboard": "{data} கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது", "copied_to_clipboard": "{data} கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது",
"add_to_following_playlists": "{track} பின்வரும் பாடல் பட்டியல்களில் சேர்", "add_to_following_playlists": "{track} பின்வரும் பாடல் பட்டியல்களில் சேர்",
"add": "சேர்", "add": "சேர்",
"added_track_to_queue": "{track} வரிசையில் சேர்க்கப்பட்டது", "added_track_to_queue": "{track} வரிசையில் சேர்க்கப்பட்டது",
"add_to_queue": "வரிசையில் சேர்", "add_to_queue": "வரிசையில் சேர்",
"track_will_play_next": "{track} அடுத்து இயக்கப்படும்", "track_will_play_next": "{track} அடுத்து இயக்கப்படும்",
"play_next": "அடுத்து இயக்கு", "play_next": "அடுத்து இயக்கு",
"removed_track_from_queue": "{track} வரிசையிலிருந்து நீக்கப்பட்டது", "removed_track_from_queue": "{track} வரிசையிலிருந்து நீக்கப்பட்டது",
"remove_from_queue": "வரிசையிலிருந்து நீக்கு", "remove_from_queue": "வரிசையிலிருந்து நீக்கு",
"remove_from_favorites": "பிடித்தவையிலிருந்து நீக்கு", "remove_from_favorites": "பிடித்தவையிலிருந்து நீக்கு",
"save_as_favorite": "பிடித்தவையாக சேமி", "save_as_favorite": "பிடித்தவையாக சேமி",
"add_to_playlist": "பாடல் பட்டியலில் சேர்", "add_to_playlist": "பாடல் பட்டியலில் சேர்",
"remove_from_playlist": "பாடல் பட்டியலிலிருந்து நீக்கு", "remove_from_playlist": "பாடல் பட்டியலிலிருந்து நீக்கு",
"add_to_blacklist": "தடைப்பட்டியலில் சேர்", "add_to_blacklist": "தடைப்பட்டியலில் சேர்",
"remove_from_blacklist": "தடைப்பட்டியலிலிருந்து நீக்கு", "remove_from_blacklist": "தடைப்பட்டியலிலிருந்து நீக்கு",
"share": "பகிர்", "share": "பகிர்",
"mini_player": "சிறிய இயக்கி", "mini_player": "சிறிய இயக்கி",
"slide_to_seek": "முன்னோக்கி அல்லது பின்னோக்கி செல்ல சறுக்கவும்", "slide_to_seek": "முன்னோக்கி அல்லது பின்னோக்கி செல்ல சறுக்கவும்",
"shuffle_playlist": "பாடல் பட்டியலை கலக்கு", "shuffle_playlist": "பாடல் பட்டியலை கலக்கு",
"unshuffle_playlist": "பாடல் பட்டியலை கலக்காதே", "unshuffle_playlist": "பாடல் பட்டியலை கலக்காதே",
"previous_track": "முந்தைய பாடல்", "previous_track": "முந்தைய பாடல்",
"next_track": "அடுத்த பாடல்", "next_track": "அடுத்த பாடல்",
"pause_playback": "இயக்கத்தை நிறுத்து", "pause_playback": "இயக்கத்தை நிறுத்து",
"resume_playback": "இயக்கத்தை தொடர்", "resume_playback": "இயக்கத்தை தொடர்",
"loop_track": "பாடலை சுழற்று", "loop_track": "பாடலை சுழற்று",
"no_loop": "சுழற்சி இல்லை", "no_loop": "சுழற்சி இல்லை",
"repeat_playlist": "பாடல் பட்டியலை மீண்டும் இயக்கு", "repeat_playlist": "பாடல் பட்டியலை மீண்டும் இயக்கு",
"queue": "வரிசை", "queue": "வரிசை",
"alternative_track_sources": "மாற்று பாடல் மூலங்கள்", "alternative_track_sources": "மாற்று பாடல் மூலங்கள்",
"download_track": "பாடலைப் பதிவிறக்கு", "download_track": "பாடலைப் பதிவிறக்கு",
"tracks_in_queue": "வரிசையில் {tracks} பாடல்கள்", "tracks_in_queue": "வரிசையில் {tracks} பாடல்கள்",
"clear_all": "அனைத்தையும் அழி", "clear_all": "அனைத்தையும் அழி",
"show_hide_ui_on_hover": "மேலே வரும்போது UI ஐக் காட்டு/மறை", "show_hide_ui_on_hover": "மேலே வரும்போது UI ஐக் காட்டு/மறை",
"always_on_top": "எப்போதும் மேலே", "always_on_top": "எப்போதும் மேலே",
"exit_mini_player": "சிறிய இயக்கியிலிருந்து வெளியேறு", "exit_mini_player": "சிறிய இயக்கியிலிருந்து வெளியேறு",
"download_location": "பதிவிறக்க இடம்", "download_location": "பதிவிறக்க இடம்",
"local_library": "உள்ளூர் நூலகம்", "local_library": "உள்ளூர் நூலகம்",
"add_library_location": "நூலகத்தில் சேர்", "add_library_location": "நூலகத்தில் சேர்",
"remove_library_location": "நூலகத்திலிருந்து நீக்கு", "remove_library_location": "நூலகத்திலிருந்து நீக்கு",
"account": "கணக்கு", "account": "கணக்கு",
"login_with_spotify": "உங்கள் Spotify கணக்கில் உள்நுழைக", "login_with_spotify": "உங்கள் Spotify கணக்கில் உள்நுழைக",
"connect_with_spotify": "Spotify உடன் இணைக்கவும்", "connect_with_spotify": "Spotify உடன் இணைக்கவும்",
"logout": "வெளியேறு", "logout": "வெளியேறு",
"logout_of_this_account": "இந்த கணக்கிலிருந்து வெளியேறு", "logout_of_this_account": "இந்த கணக்கிலிருந்து வெளியேறு",
"language_region": "மொழி & பிராந்தியம்", "language_region": "மொழி & பிராந்தியம்",
"language": "மொழி", "language": "மொழி",
"system_default": "கணினி இயல்புநிலை", "system_default": "கணினி இயல்புநிலை",
"market_place_region": "சந்தை பிராந்தியம்", "market_place_region": "சந்தை பிராந்தியம்",
"recommendation_country": "பரிந்துரை நாடு", "recommendation_country": "பரிந்துரை நாடு",
"appearance": "தோற்றம்", "appearance": "தோற்றம்",
"layout_mode": "அமைப்பு முறை", "layout_mode": "அமைப்பு முறை",
"override_layout_settings": "தளவமைப்பு அமைப்புகளை மாற்றியமை", "override_layout_settings": "தளவமைப்பு அமைப்புகளை மாற்றியமை",
"adaptive": "தகவமைப்பு", "adaptive": "தகவமைப்பு",
"compact": "சுருக்கமான", "compact": "சுருக்கமான",
"extended": "விரிவான", "extended": "விரிவான",
"theme": "தீம்", "theme": "தீம்",
"dark": "இருள்", "dark": "இருள்",
"light": "வெளிர்", "light": "வெளிர்",
"system": "கணினி வழி", "system": "கணினி வழி",
"accent_color": "அழுத்த நிறம்", "accent_color": "அழுத்த நிறம்",
"sync_album_color": "ஆல்பம் நிறத்தை ஒத்திசை", "sync_album_color": "ஆல்பம் நிறத்தை ஒத்திசை",
"sync_album_color_description": "ஆல்பம் படத்தின் முக்கிய நிறத்தை அழுத்த நிறமாகப் பயன்படுத்துகிறது", "sync_album_color_description": "ஆல்பம் படத்தின் முக்கிய நிறத்தை அழுத்த நிறமாகப் பயன்படுத்துகிறது",
"playback": "பின்னணி", "playback": "பின்னணி",
"audio_quality": "ஒலி தரம்", "audio_quality": "ஒலி தரம்",
"high": "உயர்", "high": "உயர்",
"low": "குறைந்த", "low": "குறைந்த",
"pre_download_play": "முன்பதிவிறக்கம் மற்றும் இயக்கம்", "pre_download_play": "முன்பதிவிறக்கம் மற்றும் இயக்கம்",
"pre_download_play_description": "ஒலியை ஸ்ட்ரீம் செய்வதற்குப் பதிலாக, பைட்டுகளைப் பதிவிறக்கி இயக்கவும் (அதிக பேண்ட்விட்த் பயனர்களுக்கு பரிந்துரைக்கப்படுகிறது)", "pre_download_play_description": "ஒலியை ஸ்ட்ரீம் செய்வதற்குப் பதிலாக, பைட்டுகளைப் பதிவிறக்கி இயக்கவும் (அதிக பேண்ட்விட்த் பயனர்களுக்கு பரிந்துரைக்கப்படுகிறது)",
"skip_non_music": "இசையல்லாத பகுதிகளைத் தவிர் (SponsorBlock)", "skip_non_music": "இசையல்லாத பகுதிகளைத் தவிர் (SponsorBlock)",
"blacklist_description": "தடைசெய்யப்பட்ட பாடல்கள் மற்றும் கலைஞர்கள்", "blacklist_description": "தடைசெய்யப்பட்ட பாடல்கள் மற்றும் கலைஞர்கள்",
"wait_for_download_to_finish": "தற்போதைய பதிவிறக்கம் முடியும் வரை காத்திருக்கவும்", "wait_for_download_to_finish": "தற்போதைய பதிவிறக்கம் முடியும் வரை காத்திருக்கவும்",
"desktop": "கணினி", "desktop": "கணினி",
"close_behavior": "மூடும் நடத்தை", "close_behavior": "மூடும் நடத்தை",
"close": "மூடு", "close": "மூடு",
"minimize_to_tray": "ட்ரேயை குறைக்கவும்", "minimize_to_tray": "ட்ரேயை குறைக்கவும்",
"show_tray_icon": "ட்ரே ஐகானைக் காட்டு", "show_tray_icon": "ட்ரே ஐகானைக் காட்டு",
"about": "பற்றி", "about": "பற்றி",
"u_love_spotube": "நீங்கள் Spotube ஐ நேசிக்கிறீர்கள் என்பது எங்களுக்குத் தெரியும்", "u_love_spotube": "நீங்கள் Spotube ஐ நேசிக்கிறீர்கள் என்பது எங்களுக்குத் தெரியும்",
"check_for_updates": "புதுப்பிப்புகளைச் சரிபார்", "check_for_updates": "புதுப்பிப்புகளைச் சரிபார்",
"about_spotube": "Spotube பற்றி", "about_spotube": "Spotube பற்றி",
"blacklist": "தடைப்பட்டியல்", "blacklist": "தடைப்பட்டியல்",
"please_sponsor": "தயவுசெய்து ஆதரவு/நன்கொடை அளியுங்கள்", "please_sponsor": "தயவுசெய்து ஆதரவு/நன்கொடை அளியுங்கள்",
"spotube_description": "Spotube, ஒரு லேசான, பல தளங்களில் இயங்கும், அனைவருக்கும் இலவசமான spotify கிளையன்ட்", "spotube_description": "Spotube, ஒரு லேசான, பல தளங்களில் இயங்கும், அனைவருக்கும் இலவசமான spotify கிளையன்ட்",
"version": "பதிப்பு", "version": "பதிப்பு",
"build_number": "கட்டமைப்பு எண்", "build_number": "கட்டமைப்பு எண்",
"founder": "நிறுவனர்", "founder": "நிறுவனர்",
"repository": "களஞ்சியம்", "repository": "களஞ்சியம்",
"bug_issues": "பிழை_சிக்கல்கள்", "bug_issues": "பிழை_சிக்கல்கள்",
"made_with": "வங்காளதேசத்திலிருந்து🇧🇩 ❤️ உருவாக்கப்பட்டது", "made_with": "வங்காளதேசத்திலிருந்து🇧🇩 ❤️ உருவாக்கப்பட்டது",
"kingkor_roy_tirtho": "கிங்கர் ராய் திர்தோ", "kingkor_roy_tirtho": "கிங்கர் ராய் திர்தோ",
"copyright": "© 2021-{current_year} கிங்கர் ராய் திர்தோ", "copyright": "© 2021-{current_year} கிங்கர் ராய் திர்தோ",
"license": "உரிமம்", "license": "உரிமம்",
"add_spotify_credentials": "தொடங்குவதற்கு உங்கள் spotify சான்றுகளைச் சேர்க்கவும்", "add_spotify_credentials": "தொடங்குவதற்கு உங்கள் spotify சான்றுகளைச் சேர்க்கவும்",
"credentials_will_not_be_shared_disclaimer": "கவலைப்பட வேண்டாம், உங்கள் சான்றுகள் எதுவும் சேகரிக்கப்படாது அல்லது யாருடனும் பகிரப்படாது", "credentials_will_not_be_shared_disclaimer": "கவலைப்பட வேண்டாம், உங்கள் சான்றுகள் எதுவும் சேகரிக்கப்படாது அல்லது யாருடனும் பகிரப்படாது",
"know_how_to_login": "இதை எப்படி செய்வது என்று தெரியவில்லையா?", "know_how_to_login": "இதை எப்படி செய்வது என்று தெரியவில்லையா?",
"follow_step_by_step_guide": "படிப்படியான வழிகாட்டியைப் பின்பற்றவும்", "follow_step_by_step_guide": "படிப்படியான வழிகாட்டியைப் பின்பற்றவும்",
"spotify_cookie": "Spotify {name} நட்புநிரல்", "spotify_cookie": "Spotify {name} நட்புநிரல்",
"cookie_name_cookie": "{name} நட்புநிரல்", "cookie_name_cookie": "{name} நட்புநிரல்",
"fill_in_all_fields": "அனைத்து களங்களையும் நிரப்பவும்", "fill_in_all_fields": "அனைத்து களங்களையும் நிரப்பவும்",
"submit": "சமர்ப்பி", "submit": "சமர்ப்பி",
"exit": "வெளியேறு", "exit": "வெளியேறு",
"previous": "முந்தைய", "previous": "முந்தைய",
"next": "அடுத்து", "next": "அடுத்து",
"done": "முடிந்தது", "done": "முடிந்தது",
"step_1": "முதல் படி", "step_1": "முதல் படி",
"first_go_to": "முதலில், செல்லவேண்டியது", "first_go_to": "முதலில், செல்லவேண்டியது",
"login_if_not_logged_in": "நீங்கள் உள்நுழையவில்லை என்றால் உள்நுழைக/பதிவுசெய்க", "login_if_not_logged_in": "நீங்கள் உள்நுழையவில்லை என்றால் உள்நுழைக/பதிவுசெய்க",
"step_2": "இரண்டாம் படி", "step_2": "இரண்டாம் படி",
"step_2_steps": "1. நீங்கள் உள்நுழைந்தவுடன், F12 ஐ அழுத்தவும் அல்லது வலது கிளிக் செய்து > ஆய்வு செய்யவும் உலாவி டெவ்டூல்களைத் திறக்கவும்.\n2. பின்னர் \"பயன்பாடு\" தாவலுக்குச் செல்லவும் (Chrome, Edge, Brave போன்றவை) அல்லது \"சேமிப்பகம்\" தாவல் (Firefox, Palemoon போன்றவை)\n3. \"குக்கிகள்\" பிரிவுக்குச் சென்று பின்னர் \"https://accounts.spotify.com\" பிரிவுக்குச் செல்லவும்", "step_2_steps": "1. நீங்கள் உள்நுழைந்தவுடன், F12 ஐ அழுத்தவும் அல்லது வலது கிளிக் செய்து > ஆய்வு செய்யவும் உலாவி டெவ்டூல்களைத் திறக்கவும்.\n2. பின்னர் \"பயன்பாடு\" தாவலுக்குச் செல்லவும் (Chrome, Edge, Brave போன்றவை) அல்லது \"சேமிப்பகம்\" தாவல் (Firefox, Palemoon போன்றவை)\n3. \"குக்கிகள்\" பிரிவுக்குச் சென்று பின்னர் \"https://accounts.spotify.com\" பிரிவுக்குச் செல்லவும்",
"step_3": "மூன்றாம் படி", "step_3": "மூன்றாம் படி",
"step_3_steps": "\"sp_dc\" நட்புநிரலின் மதிப்பை நகலெடுக்கவும்", "step_3_steps": "\"sp_dc\" நட்புநிரலின் மதிப்பை நகலெடுக்கவும்",
"success_emoji": "வெற்றி🥳", "success_emoji": "வெற்றி🥳",
"success_message": "இப்போது நீங்கள் உங்கள் Spotify கணக்கில் வெற்றிகரமாக உள்நுழைந்துள்ளீர்கள். நல்லது, நண்பரே!", "success_message": "இப்போது நீங்கள் உங்கள் Spotify கணக்கில் வெற்றிகரமாக உள்நுழைந்துள்ளீர்கள். நல்லது, நண்பரே!",
"step_4": "நான்காம் படி", "step_4": "நான்காம் படி",
"step_4_steps": "நகலெடுக்கப்பட்ட \"sp_dc\" மதிப்பை ஒட்டவும்", "step_4_steps": "நகலெடுக்கப்பட்ட \"sp_dc\" மதிப்பை ஒட்டவும்",
"something_went_wrong": "ஏதோ தவறு நடந்துவிட்டது", "something_went_wrong": "ஏதோ தவறு நடந்துவிட்டது",
"piped_instance": "Piped சேவையகம் நிகழ்வு", "piped_instance": "Piped சேவையகம் நிகழ்வு",
"piped_description": "பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Piped சேவையகம் நிகழ்வு", "piped_description": "பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Piped சேவையகம் நிகழ்வு",
"piped_warning": "அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்", "piped_warning": "அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்",
"invidious_instance": "Invidious சேவையக நிகழ்வு", "invidious_instance": "Invidious சேவையக நிகழ்வு",
"invidious_description": "பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Invidious சேவையக நிகழ்வு", "invidious_description": "பாடல் பொருத்தத்திற்குப் பயன்படுத்த வேண்டிய Invidious சேவையக நிகழ்வு",
"invidious_warning": "அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்", "invidious_warning": "அவற்றில் சில நன்றாக வேலை செய்யாமல் இருக்கலாம். எனவே உங்கள் சொந்த ஆபத்தில் பயன்படுத்தவும்",
"generate": "உருவாக்கு", "generate": "உருவாக்கு",
"track_exists": "பாடல் {track} ஏற்கனவே உள்ளது", "track_exists": "பாடல் {track} ஏற்கனவே உள்ளது",
"replace_downloaded_tracks": "பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் மாற்றவும்", "replace_downloaded_tracks": "பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் மாற்றவும்",
"skip_download_tracks": "பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் தவிர்க்கவும்", "skip_download_tracks": "பதிவிறக்கம் செய்யப்பட்ட அனைத்து பாடல்களையும் தவிர்க்கவும்",
"do_you_want_to_replace": "ஏற்கனவே உள்ள பாடலை மாற்ற விரும்புகிறீர்களா?", "do_you_want_to_replace": "ஏற்கனவே உள்ள பாடலை மாற்ற விரும்புகிறீர்களா?",
"replace": "மாற்று", "replace": "மாற்று",
"skip": "தவிர்", "skip": "தவிர்",
"select_up_to_count_type": "{count} {type} வரை தேர்ந்தெடுக்கவும்", "select_up_to_count_type": "{count} {type} வரை தேர்ந்தெடுக்கவும்",
"select_genres": "வகைகளைத் தேர்ந்தெடுக்கவும்", "select_genres": "வகைகளைத் தேர்ந்தெடுக்கவும்",
"add_genres": "வகைகளைச் சேர்க்கவும்", "add_genres": "வகைகளைச் சேர்க்கவும்",
"country": "நாடு", "country": "நாடு",
"number_of_tracks_generate": "உருவாக்க வேண்டிய பாடல்களின் எண்ணிக்கை", "number_of_tracks_generate": "உருவாக்க வேண்டிய பாடல்களின் எண்ணிக்கை",
"acousticness": "அகவுஸ்டிக்னெஸ்", "acousticness": "அகவுஸ்டிக்னெஸ்",
"danceability": "நடனத்தன்மை", "danceability": "நடனத்தன்மை",
"energy": "ஆற்றல்", "energy": "ஆற்றல்",
"instrumentalness": "கருவித்தன்மை", "instrumentalness": "கருவித்தன்மை",
"liveness": "உயிர்ப்புத்தன்மை", "liveness": "உயிர்ப்புத்தன்மை",
"loudness": "ஒலி அளவு", "loudness": "ஒலி அளவு",
"speechiness": "பேச்சுத்தன்மை", "speechiness": "பேச்சுத்தன்மை",
"valence": "உணர்வு", "valence": "உணர்வு",
"popularity": "பிரபலம்", "popularity": "பிரபலம்",
"key": "இசை குறிப்பு", "key": "இசை குறிப்பு",
"duration": "கால அளவு (வினாடிகள்)", "duration": "கால அளவு (வினாடிகள்)",
"tempo": "வேகம் (BPM)", "tempo": "வேகம் (BPM)",
"mode": "முறை", "mode": "முறை",
"time_signature": "நேர கையொப்பம்", "time_signature": "நேர கையொப்பம்",
"short": "குறுகிய", "short": "குறுகிய",
"medium": "நடுத்தர", "medium": "நடுத்தர",
"long": "நீண்ட", "long": "நீண்ட",
"min": "குறைந்தபட்சம்", "min": "குறைந்தபட்சம்",
"max": "அதிகபட்சம்", "max": "அதிகபட்சம்",
"target": "இலக்கு", "target": "இலக்கு",
"moderate": "மிதமான", "moderate": "மிதமான",
"deselect_all": "அனைத்தையும் தேர்வுநீக்கு", "deselect_all": "அனைத்தையும் தேர்வுநீக்கு",
"select_all": "அனைத்தையும் தேர்ந்தெடு", "select_all": "அனைத்தையும் தேர்ந்தெடு",
"are_you_sure": "உறுதியாக இருக்கிறீர்களா?", "are_you_sure": "உறுதியாக இருக்கிறீர்களா?",
"generating_playlist": "உங்கள் தனிப்பயன்பாட்டிற்கான பாடல் பட்டியலை உருவாக்குகிறது...", "generating_playlist": "உங்கள் தனிப்பயன்பாட்டிற்கான பாடல் பட்டியலை உருவாக்குகிறது...",
"selected_count_tracks": "{count} பாடல்கள் தேர்ந்தெடுக்கப்பட்டன", "selected_count_tracks": "{count} பாடல்கள் தேர்ந்தெடுக்கப்பட்டன",
"download_warning": "நீங்கள் அனைத்து பாடல்களையும் மொத்தமாக பதிவிறக்கினால், நீங்கள் தெளிவாக இசையைத் திருடுகிறீர்கள் மற்றும் இசையின் படைப்பாற்றல் சமூகத்திற்கு சேதம் விளைவிக்கிறீர்கள். நீங்கள் இதை அறிந்திருக்கிறீர்கள் என்று நம்புகிறேன். எப்போதும், கலைஞரின் கடின உழைப்பை மதித்து ஆதரிக்க முயற்சி செய்யுங்கள்", "download_warning": "நீங்கள் அனைத்து பாடல்களையும் மொத்தமாக பதிவிறக்கினால், நீங்கள் தெளிவாக இசையைத் திருடுகிறீர்கள் மற்றும் இசையின் படைப்பாற்றல் சமூகத்திற்கு சேதம் விளைவிக்கிறீர்கள். நீங்கள் இதை அறிந்திருக்கிறீர்கள் என்று நம்புகிறேன். எப்போதும், கலைஞரின் கடின உழைப்பை மதித்து ஆதரிக்க முயற்சி செய்யுங்கள்",
"download_ip_ban_warning": "மேலும், அதிகப்படியான பதிவிறக்க கோரிக்கைகள் காரணமாக உங்கள் IP YouTube இல் தடைசெய்யப்படலாம். IP தடை என்பது குறைந்தது 2-3 மாதங்களுக்கு அந்த IP சாதனத்திலிருந்து YouTube ஐப் பயன்படுத்த முடியாது (நீங்கள் உள்நுழைந்திருந்தாலும் கூட). இது ஒருபோதும் நடந்தால் Spotube பொறுப்பேற்காது", "download_ip_ban_warning": "மேலும், அதிகப்படியான பதிவிறக்க கோரிக்கைகள் காரணமாக உங்கள் IP YouTube இல் தடைசெய்யப்படலாம். IP தடை என்பது குறைந்தது 2-3 மாதங்களுக்கு அந்த IP சாதனத்திலிருந்து YouTube ஐப் பயன்படுத்த முடியாது (நீங்கள் உள்நுழைந்திருந்தாலும் கூட). இது ஒருபோதும் நடந்தால் Spotube பொறுப்பேற்காது",
"by_clicking_accept_terms": "'ஏற்றுக்கொள்' என்பதைக் கிளிக் செய்வதன் மூலம் பின்வரும் விதிமுறைகளுக்கு நீங்கள் ஒப்புக்கொள்கிறீர்கள்:", "by_clicking_accept_terms": "'ஏற்றுக்கொள்' என்பதைக் கிளிக் செய்வதன் மூலம் பின்வரும் விதிமுறைகளுக்கு நீங்கள் ஒப்புக்கொள்கிறீர்கள்:",
"download_agreement_1": "நான் இசையைத் திருடுகிறேன் என்பது எனக்குத் தெரியும். நான் கெட்டவன்", "download_agreement_1": "நான் இசையைத் திருடுகிறேன் என்பது எனக்குத் தெரியும். நான் கெட்டவன்",
"download_agreement_2": "நான் கலைஞரை முடிந்தவரை ஆதரிப்பேன், அவர்களின் கலைக்கு பணம் செலுத்த எனக்கு பணம் இல்லாததால் மட்டுமே இதைச் செய்கிறேன்", "download_agreement_2": "நான் கலைஞரை முடிந்தவரை ஆதரிப்பேன், அவர்களின் கலைக்கு பணம் செலுத்த எனக்கு பணம் இல்லாததால் மட்டுமே இதைச் செய்கிறேன்",
"download_agreement_3": "என் IP YouTube இல் தடைசெய்யப்படலாம் என்பதை நான் முழுமையாக அறிவேன், மேலும் என் தற்போதைய செயலால் ஏற்படும் எந்த விபத்துகளுக்கும் Spotube அல்லது அதன் உரிமையாளர்கள்/பங்களிப்பாளர்களை பொறுப்பாக்க மாட்டேன்", "download_agreement_3": "என் IP YouTube இல் தடைசெய்யப்படலாம் என்பதை நான் முழுமையாக அறிவேன், மேலும் என் தற்போதைய செயலால் ஏற்படும் எந்த விபத்துகளுக்கும் Spotube அல்லது அதன் உரிமையாளர்கள்/பங்களிப்பாளர்களை பொறுப்பாக்க மாட்டேன்",
"decline": "மறு", "decline": "மறு",
"accept": "ஏற்றுக்கொள்", "accept": "ஏற்றுக்கொள்",
"details": "விவரங்கள்", "details": "விவரங்கள்",
"youtube": "YouTube", "youtube": "YouTube",
"channel": "சேனல்", "channel": "சேனல்",
"likes": "விருப்பங்கள்", "likes": "விருப்பங்கள்",
"dislikes": "விருப்பமில்லாதவை", "dislikes": "விருப்பமில்லாதவை",
"views": "பார்வைகள்", "views": "பார்வைகள்",
"streamUrl": "ஸ்ட்ரீம் URL", "streamUrl": "ஸ்ட்ரீம் URL",
"stop": "நிறுத்து", "stop": "நிறுத்து",
"sort_newest": "புதிதாக சேர்க்கப்பட்டவற்றை வரிசைப்படுத்து", "sort_newest": "புதிதாக சேர்க்கப்பட்டவற்றை வரிசைப்படுத்து",
"sort_oldest": "பழமையானவற்றை வரிசைப்படுத்து", "sort_oldest": "பழமையானவற்றை வரிசைப்படுத்து",
"sleep_timer": "உறக்க நேரம்", "sleep_timer": "உறக்க நேரம்",
"mins": "{minutes} நிமிடங்கள்", "mins": "{minutes} நிமிடங்கள்",
"hours": "{hours} மணிநேரங்கள்", "hours": "{hours} மணிநேரங்கள்",
"hour": "{hours} மணிநேரம்", "hour": "{hours} மணிநேரம்",
"custom_hours": "தனிப்பயன் மணிநேரங்கள்", "custom_hours": "தனிப்பயன் மணிநேரங்கள்",
"logs": "பதிவுகள்", "logs": "பதிவுகள்",
"developers": "உருவாக்குநர்கள்", "developers": "உருவாக்குநர்கள்",
"not_logged_in": "நீங்கள் உள்நுழையவில்லை", "not_logged_in": "நீங்கள் உள்நுழையவில்லை",
"search_mode": "தேடல் முறை", "search_mode": "தேடல் முறை",
"audio_source": "ஒலி மூலம்", "audio_source": "ஒலி மூலம்",
"ok": "சரி", "ok": "சரி",
"failed_to_encrypt": "குறியாக்கம் தோல்வியடைந்தது", "failed_to_encrypt": "குறியாக்கம் தோல்வியடைந்தது",
"encryption_failed_warning": "Spotube உங்கள் தரவை பாதுகாப்பாக சேமிக்க குறியாக்கத்தைப் பயன்படுத்துகிறது. ஆனால் அவ்வாறு செய்ய முடியவில்லை. எனவே இது பாதுகாப்பற்ற சேமிப்பகத்திற்கு மாறும்\nநீங்கள் லினக்ஸ் பயன்படுத்துகிறீர்கள் என்றால், எந்த ரகசிய சேவையும் (gnome-keyring, kde-wallet, keepassxc போன்றவை) நிறுவப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்", "encryption_failed_warning": "Spotube உங்கள் தரவை பாதுகாப்பாக சேமிக்க குறியாக்கத்தைப் பயன்படுத்துகிறது. ஆனால் அவ்வாறு செய்ய முடியவில்லை. எனவே இது பாதுகாப்பற்ற சேமிப்பகத்திற்கு மாறும்\nநீங்கள் லினக்ஸ் பயன்படுத்துகிறீர்கள் என்றால், எந்த ரகசிய சேவையும் (gnome-keyring, kde-wallet, keepassxc போன்றவை) நிறுவப்பட்டுள்ளதா என்பதை உறுதிப்படுத்தவும்",
"querying_info": "தகவலைக் கேட்கிறது...", "querying_info": "தகவலைக் கேட்கிறது...",
"piped_api_down": "Piped API செயலிழந்துள்ளது", "piped_api_down": "Piped API செயலிழந்துள்ளது",
"piped_down_error_instructions": "Piped நிகழ்வு {pipedInstance} தற்போது செயலிழந்துள்ளது\n\nநிகழ்வை மாற்றவும் அல்லது 'API வகை'யை அதிகாரப்பூர்வ YouTube API க்கு மாற்றவும்\n\nமாற்றத்திற்குப் பிறகு பயன்பாட்டை மறுதொடக்கம் செய்வதை உறுதிப்படுத்தவும்", "piped_down_error_instructions": "Piped நிகழ்வு {pipedInstance} தற்போது செயலிழந்துள்ளது\n\nநிகழ்வை மாற்றவும் அல்லது 'API வகை'யை அதிகாரப்பூர்வ YouTube API க்கு மாற்றவும்\n\nமாற்றத்திற்குப் பிறகு பயன்பாட்டை மறுதொடக்கம் செய்வதை உறுதிப்படுத்தவும்",
"you_are_offline": "நீங்கள் தற்போது ஆஃப்லைனில் உள்ளீர்கள்", "you_are_offline": "நீங்கள் தற்போது ஆஃப்லைனில் உள்ளீர்கள்",
"connection_restored": "உங்கள் இணைய இணைப்பு மீட்டெடுக்கப்பட்டது", "connection_restored": "உங்கள் இணைய இணைப்பு மீட்டெடுக்கப்பட்டது",
"use_system_title_bar": "கணினி தலைப்புப் பட்டியைப் பயன்படுத்தவும்", "use_system_title_bar": "கணினி தலைப்புப் பட்டியைப் பயன்படுத்தவும்",
"crunching_results": "முடிவுகளை செயலாக்குகிறது...", "crunching_results": "முடிவுகளை செயலாக்குகிறது...",
"search_to_get_results": "முடிவுகளைப் பெற தேடவும்", "search_to_get_results": "முடிவுகளைப் பெற தேடவும்",
"use_amoled_mode": "கருமை நிற இருண்ட தீம்", "use_amoled_mode": "கருமை நிற இருண்ட தீம்",
"pitch_dark_theme": "AMOLED முறை", "pitch_dark_theme": "AMOLED முறை",
"normalize_audio": "ஒலியை சீரமை", "normalize_audio": "ஒலியை சீரமை",
"change_cover": "அட்டையை மாற்று", "change_cover": "அட்டையை மாற்று",
"add_cover": "அட்டையைச் சேர்", "add_cover": "அட்டையைச் சேர்",
"restore_defaults": "இயல்புநிலைகளை மீட்டமை", "restore_defaults": "இயல்புநிலைகளை மீட்டமை",
"download_music_codec": "இசை கோடெக்கை பதிவிறக்கு", "download_music_codec": "இசை கோடெக்கை பதிவிறக்கு",
"streaming_music_codec": "இசை கோடெக்கை ஸ்ட்ரீம் செய்", "streaming_music_codec": "இசை கோடெக்கை ஸ்ட்ரீம் செய்",
"login_with_lastfm": "Last.fm உடன் உள்நுழைக", "login_with_lastfm": "Last.fm உடன் உள்நுழைக",
"connect": "இணை", "connect": "இணை",
"disconnect_lastfm": "Last.fm இலிருந்து துண்டி", "disconnect_lastfm": "Last.fm இலிருந்து துண்டி",
"disconnect": "துண்டி", "disconnect": "துண்டி",
"username": "பயனர்பெயர்", "username": "பயனர்பெயர்",
"password": "கடவுச்சொல்", "password": "கடவுச்சொல்",
"login": "உள்நுழைக", "login": "உள்நுழைக",
"login_with_your_lastfm": "உங்கள் Last.fm கணக்குடன் உள்நுழைக", "login_with_your_lastfm": "உங்கள் Last.fm கணக்குடன் உள்நுழைக",
"scrobble_to_lastfm": "Last.fm க்கு ஸ்க்ரோபிள் செய்", "scrobble_to_lastfm": "Last.fm க்கு ஸ்க்ரோபிள் செய்",
"go_to_album": "ஆல்பத்திற்குச் செல்", "go_to_album": "ஆல்பத்திற்குச் செல்",
"discord_rich_presence": "Discord செழுமையான தோற்றம்", "discord_rich_presence": "Discord செழுமையான தோற்றம்",
"browse_all": "அனைத்தையும் உலாவு", "browse_all": "அனைத்தையும் உலாவு",
"genres": "வகைகள்", "genres": "வகைகள்",
"explore_genres": "வகைகளை ஆராயுங்கள்", "explore_genres": "வகைகளை ஆராயுங்கள்",
"friends": "நண்பர்கள்", "friends": "நண்பர்கள்",
"no_lyrics_available": "மன்னிக்கவும், இந்தப் பாடலுக்கான பாடல் வரிகளைக் கண்டுபிடிக்க முடியவில்லை", "no_lyrics_available": "மன்னிக்கவும், இந்தப் பாடலுக்கான பாடல் வரிகளைக் கண்டுபிடிக்க முடியவில்லை",
"start_a_radio": "வானொலியைத் தொடங்கு", "start_a_radio": "வானொலியைத் தொடங்கு",
"how_to_start_radio": "வானொலியை எவ்வாறு தொடங்க விரும்புகிறீர்கள்?", "how_to_start_radio": "வானொலியை எவ்வாறு தொடங்க விரும்புகிறீர்கள்?",
"replace_queue_question": "தற்போதைய வரிசையை மாற்ற விரும்புகிறீர்களா அல்லது அதனுடன் சேர்க்க விரும்புகிறீர்களா?", "replace_queue_question": "தற்போதைய வரிசையை மாற்ற விரும்புகிறீர்களா அல்லது அதனுடன் சேர்க்க விரும்புகிறீர்களா?",
"endless_playback": "முடிவற்ற இயக்கம்", "endless_playback": "முடிவற்ற இயக்கம்",
"delete_playlist": "பாடல் பட்டியலை நீக்கு", "delete_playlist": "பாடல் பட்டியலை நீக்கு",
"delete_playlist_confirmation": "இந்த பாடல் பட்டியலை நீக்க விரும்புகிறீர்களா?", "delete_playlist_confirmation": "இந்த பாடல் பட்டியலை நீக்க விரும்புகிறீர்களா?",
"local_tracks": "உள்ளூர் பாடல்கள்", "local_tracks": "உள்ளூர் பாடல்கள்",
"local_tab": "உள்ளூர்", "local_tab": "உள்ளூர்",
"song_link": "பாடல் இணைப்பு", "song_link": "பாடல் இணைப்பு",
"skip_this_nonsense": "இந்த அர்த்தமற்றதைத் தவிர்", "skip_this_nonsense": "இந்த அர்த்தமற்றதைத் தவிர்",
"freedom_of_music": "\"இசையின் சுதந்திரம்\"", "freedom_of_music": "\"இசையின் சுதந்திரம்\"",
"freedom_of_music_palm": "\"உங்கள் கைகளில் இசையின் சுதந்திரம்\"", "freedom_of_music_palm": "\"உங்கள் கைகளில் இசையின் சுதந்திரம்\"",
"get_started": "தொடங்குவோம்", "get_started": "தொடங்குவோம்",
"youtube_source_description": "பரிந்துரைக்கப்படுகிறது மற்றும் சிறப்பாக செயல்படுகிறது.", "youtube_source_description": "பரிந்துரைக்கப்படுகிறது மற்றும் சிறப்பாக செயல்படுகிறது.",
"piped_source_description": "சுதந்திரமாக உணர்கிறீர்களா? YouTube போலவே ஆனால் மிகவும் சுதந்திரமானது.", "piped_source_description": "சுதந்திரமாக உணர்கிறீர்களா? YouTube போலவே ஆனால் மிகவும் சுதந்திரமானது.",
"jiosaavn_source_description": "தெற்காசியப் பிராந்தியத்திற்கு சிறந்தது.", "jiosaavn_source_description": "தெற்காசியப் பிராந்தியத்திற்கு சிறந்தது.",
"invidious_source_description": "Piped ஐப் போன்றது ஆனால் அதிக கிடைக்கும் தன்மையுடன்.", "invidious_source_description": "Piped ஐப் போன்றது ஆனால் அதிக கிடைக்கும் தன்மையுடன்.",
"highest_quality": "உயர்ந்த தரம்: {quality}", "highest_quality": "உயர்ந்த தரம்: {quality}",
"select_audio_source": "ஒலி மூலத்தைத் தேர்ந்தெடுக்கவும்", "select_audio_source": "ஒலி மூலத்தைத் தேர்ந்தெடுக்கவும்",
"endless_playback_description": "வரிசையின் இறுதியில் புதிய பாடல்களை\nதானாகவே சேர்க்கவும்", "endless_playback_description": "வரிசையின் இறுதியில் புதிய பாடல்களை\nதானாகவே சேர்க்கவும்",
"choose_your_region": "உங்கள் பிராந்தியத்தைத் தேர்ந்தெடுக்கவும்", "choose_your_region": "உங்கள் பிராந்தியத்தைத் தேர்ந்தெடுக்கவும்",
"choose_your_region_description": "இது உங்கள் இருப்பிடத்திற்கான சரியான உள்ளடக்கத்தை\nSpotube காட்ட உதவும்.", "choose_your_region_description": "இது உங்கள் இருப்பிடத்திற்கான சரியான உள்ளடக்கத்தை\nSpotube காட்ட உதவும்.",
"choose_your_language": "உங்கள் மொழியைத் தேர்ந்தெடுக்கவும்", "choose_your_language": "உங்கள் மொழியைத் தேர்ந்தெடுக்கவும்",
"help_project_grow": "இந்த திட்டம் வளர உதவுங்கள்", "help_project_grow": "இந்த திட்டம் வளர உதவுங்கள்",
"help_project_grow_description": "Spotube ஒரு திறந்த மூல திட்டம். திட்டத்திற்கு பங்களிப்பு செய்வதன் மூலம், பிழைகளைப் புகாரளிப்பதன் மூலம் அல்லது புதிய அம்சங்களைப் பரிந்துரைப்பதன் மூலம் இந்தத் திட்டம் வளர உதவலாம்.", "help_project_grow_description": "Spotube ஒரு திறந்த மூல திட்டம். திட்டத்திற்கு பங்களிப்பு செய்வதன் மூலம், பிழைகளைப் புகாரளிப்பதன் மூலம் அல்லது புதிய அம்சங்களைப் பரிந்துரைப்பதன் மூலம் இந்தத் திட்டம் வளர உதவலாம்.",
"contribute_on_github": "GitHub இல் பங்களியுங்கள்", "contribute_on_github": "GitHub இல் பங்களியுங்கள்",
"donate_on_open_collective": "Open Collective இல் நன்கொடை அளியுங்கள்", "donate_on_open_collective": "Open Collective இல் நன்கொடை அளியுங்கள்",
"browse_anonymously": "அநாமதேயமாக உலாவுக", "browse_anonymously": "அநாமதேயமாக உலாவுக",
"enable_connect": "இணைப்பை இயக்கு", "enable_connect": "இணைப்பை இயக்கு",
"enable_connect_description": "மற்ற சாதனங்களிலிருந்து Spotube ஐக் கட்டுப்படுத்தவும்", "enable_connect_description": "மற்ற சாதனங்களிலிருந்து Spotube ஐக் கட்டுப்படுத்தவும்",
"devices": "சாதனங்கள்", "devices": "சாதனங்கள்",
"select": "தேர்ந்தெடு", "select": "தேர்ந்தெடு",
"connect_client_alert": "நீங்கள் {client} ஆல் கட்டுப்படுத்தப்படுகிறீர்கள்", "connect_client_alert": "நீங்கள் {client} ஆல் கட்டுப்படுத்தப்படுகிறீர்கள்",
"this_device": "இந்த சாதனம்", "this_device": "இந்த சாதனம்",
"remote": "தொலைநிலை", "remote": "தொலைநிலை",
"stats": "புள்ளிவிவரங்கள்", "stats": "புள்ளிவிவரங்கள்",
"and_n_more": "மற்றும் {count} கூடுதலாக", "and_n_more": "மற்றும் {count} கூடுதலாக",
"recently_played": "சமீபத்தில் இயக்கியவை", "recently_played": "சமீபத்தில் இயக்கியவை",
"browse_more": "மேலும் உலாவு", "browse_more": "மேலும் உலாவு",
"no_title": "தலைப்பு இல்லை", "no_title": "தலைப்பு இல்லை",
"not_playing": "இயக்கப்படவில்லை", "not_playing": "இயக்கப்படவில்லை",
"epic_failure": "மோசமான தோல்வி!", "epic_failure": "மோசமான தோல்வி!",
"added_num_tracks_to_queue": "{tracks_length} பாடல்கள் வரிசையில் சேர்க்கப்பட்டன", "added_num_tracks_to_queue": "{tracks_length} பாடல்கள் வரிசையில் சேர்க்கப்பட்டன",
"spotube_has_an_update": "Spotube க்கு ஒரு புதுப்பிப்பு உள்ளது", "spotube_has_an_update": "Spotube க்கு ஒரு புதுப்பிப்பு உள்ளது",
"download_now": "இப்போது பதிவிறக்கு", "download_now": "இப்போது பதிவிறக்கு",
"nightly_version": "Spotube Nightly {nightlyBuildNum} வெளியிடப்பட்டுள்ளது", "nightly_version": "Spotube Nightly {nightlyBuildNum} வெளியிடப்பட்டுள்ளது",
"release_version": "Spotube v{version} வெளியிடப்பட்டுள்ளது", "release_version": "Spotube v{version} வெளியிடப்பட்டுள்ளது",
"read_the_latest": "சமீபத்திய ", "read_the_latest": "சமீபத்திய ",
"release_notes": "வெளியீட்டு குறிப்புகளைப் படிக்கவும்", "release_notes": "வெளியீட்டு குறிப்புகளைப் படிக்கவும்",
"pick_color_scheme": "வண்ணத் திட்டத்தைத் தேர்ந்தெடுக்கவும்", "pick_color_scheme": "வண்ணத் திட்டத்தைத் தேர்ந்தெடுக்கவும்",
"save": "சேமி", "save": "சேமி",
"choose_the_device": "சாதனத்தைத் தேர்ந்தெடுக்கவும்:", "choose_the_device": "சாதனத்தைத் தேர்ந்தெடுக்கவும்:",
"multiple_device_connected": "பல சாதனங்கள் இணைக்கப்பட்டுள்ளன.\nஇந்த செயல் நடைபெற வேண்டிய சாதனத்தைத் தேர்ந்தெடுக்கவும்", "multiple_device_connected": "பல சாதனங்கள் இணைக்கப்பட்டுள்ளன.\nஇந்த செயல் நடைபெற வேண்டிய சாதனத்தைத் தேர்ந்தெடுக்கவும்",
"nothing_found": "எதுவும் கிடைக்கவில்லை", "nothing_found": "எதுவும் கிடைக்கவில்லை",
"the_box_is_empty": "பெட்டி காலியாக உள்ளது", "the_box_is_empty": "பெட்டி காலியாக உள்ளது",
"top_artists": "சிறந்த கலைஞர்கள்", "top_artists": "சிறந்த கலைஞர்கள்",
"top_albums": "சிறந்த ஆல்பங்கள்", "top_albums": "சிறந்த ஆல்பங்கள்",
"this_week": "இந்த வாரம்", "this_week": "இந்த வாரம்",
"this_month": "இந்த மாதம்", "this_month": "இந்த மாதம்",
"last_6_months": "கடந்த 6 மாதங்கள்", "last_6_months": "கடந்த 6 மாதங்கள்",
"this_year": "இந்த ஆண்டு", "this_year": "இந்த ஆண்டு",
"last_2_years": "கடந்த 2 ஆண்டுகள்", "last_2_years": "கடந்த 2 ஆண்டுகள்",
"all_time": "எல்லா நேரமும்", "all_time": "எல்லா நேரமும்",
"powered_by_provider": "{providerName} ஆல் இயக்கப்படுகிறது", "powered_by_provider": "{providerName} ஆல் இயக்கப்படுகிறது",
"email": "மின்னஞ்சல்", "email": "மின்னஞ்சல்",
"profile_followers": "பின்தொடர்பவர்கள்", "profile_followers": "பின்தொடர்பவர்கள்",
"birthday": "பிறந்த நாள்", "birthday": "பிறந்த நாள்",
"subscription": "சந்தா", "subscription": "சந்தா",
"not_born": "பிறக்கவில்லை", "not_born": "பிறக்கவில்லை",
"hacker": "ஹேக்கர்", "hacker": "ஹேக்கர்",
"profile": "சுயவிவரம்", "profile": "சுயவிவரம்",
"no_name": "பெயர் இல்லை", "no_name": "பெயர் இல்லை",
"edit": "திருத்து", "edit": "திருத்து",
"user_profile": "பயனர் சுயவிவரம்", "user_profile": "பயனர் சுயவிவரம்",
"count_plays": "{count} முறை இசைக்கப்பட்டது", "count_plays": "{count} முறை இசைக்கப்பட்டது",
"streaming_fees_hypothetical": "ஸ்ட்ரீமிங் கட்டணங்கள் (கற்பனை)", "streaming_fees_hypothetical": "ஸ்ட்ரீமிங் கட்டணங்கள் (கற்பனை)",
"minutes_listened": "காலம் கேட்டது", "minutes_listened": "காலம் கேட்டது",
"streamed_songs": "ஸ்ட்ரீமிங் செய்யப்பட்ட பாடல்கள்", "streamed_songs": "ஸ்ட்ரீமிங் செய்யப்பட்ட பாடல்கள்",
"count_streams": "{count} ஸ்ட்ரீம்கள்", "count_streams": "{count} ஸ்ட்ரீம்கள்",
"owned_by_you": "உங்களால் கொண்டது", "owned_by_you": "உங்களால் கொண்டது",
"copied_shareurl_to_clipboard": "நகலெடுக்கப்பட்டது {shareUrl} கிளிப்போர்டுக்காக", "copied_shareurl_to_clipboard": "நகலெடுக்கப்பட்டது {shareUrl} கிளிப்போர்டுக்காக",
"spotify_hipotetical_calculation": "*இது Spotify இன் ஒவ்வொரு ஸ்ட்ரீமிற்கும்\n$0.003 முதல் $0.005 வரை அளவீடு அடிப்படையில் கணக்கிடப்படுகிறது. இது ஒரு கற்பனை\nகணக்கீடு ஆகும், பயனர் எந்த அளவிற்கு கலைஞர்களுக்கு\nஅதோர் பாடலை Spotify மென்பொருளில் கேட்டால் எவ்வளவு பணம் செலுத்தினார்கள் என்பதைக் கண்டுபிடிக்க.", "spotify_hipotetical_calculation": "*இது Spotify இன் ஒவ்வொரு ஸ்ட்ரீமிற்கும்\n$0.003 முதல் $0.005 வரை அளவீடு அடிப்படையில் கணக்கிடப்படுகிறது. இது ஒரு கற்பனை\nகணக்கீடு ஆகும், பயனர் எந்த அளவிற்கு கலைஞர்களுக்கு\nஅதோர் பாடலை Spotify மென்பொருளில் கேட்டால் எவ்வளவு பணம் செலுத்தினார்கள் என்பதைக் கண்டுபிடிக்க.",
"count_mins": "{minutes} நிமிடங்கள்", "count_mins": "{minutes} நிமிடங்கள்",
"summary_minutes": "நிமிடங்கள்", "summary_minutes": "நிமிடங்கள்",
"summary_listened_to_music": "இசை கேட்டது", "summary_listened_to_music": "இசை கேட்டது",
"summary_songs": "பாடல்கள்", "summary_songs": "பாடல்கள்",
"summary_streamed_overall": "மொத்தமாக ஸ்ட்ரீமிங்", "summary_streamed_overall": "மொத்தமாக ஸ்ட்ரீமிங்",
"summary_owed_to_artists": "கலைஞர்களுக்கு\nஇந்த மாதம் சொந்தமானது", "summary_owed_to_artists": "கலைஞர்களுக்கு\nஇந்த மாதம் சொந்தமானது",
"summary_artists": "கலைஞர்கள்", "summary_artists": "கலைஞர்கள்",
"summary_music_reached_you": "இசை உங்களுக்கு வந்தது", "summary_music_reached_you": "இசை உங்களுக்கு வந்தது",
"summary_full_albums": "முழு ஆல்பங்கள்", "summary_full_albums": "முழு ஆல்பங்கள்",
"summary_got_your_love": "உங்கள் அன்பை பெற்றுக்கொண்டேன்", "summary_got_your_love": "உங்கள் அன்பை பெற்றுக்கொண்டேன்",
"summary_playlists": "பாடல் பட்டியல்கள்", "summary_playlists": "பாடல் பட்டியல்கள்",
"summary_were_on_repeat": "மீண்டும் மீண்டும் இருந்தன", "summary_were_on_repeat": "மீண்டும் மீண்டும் இருந்தன",
"total_money": "மொத்தம் {money}", "total_money": "மொத்தம் {money}",
"webview_not_found": "வெப்வியூ கிடைக்கவில்லை", "webview_not_found": "வெப்வியூ கிடைக்கவில்லை",
"webview_not_found_description": "உங்கள் சாதனத்தில் எந்தவொரு வெப்வியூ இயக்கத்தை நிறுவவில்லை.\nஇது நிறுவப்பட்டிருந்தால், சுற்றுச்சூழல் பாதையில் PATH உள்ளது என்பதை உறுதிபடுத்தவும்\n\nநிறுவித்த பிறகு, செயலியை மறுதொடக்கம் செய்யவும்", "webview_not_found_description": "உங்கள் சாதனத்தில் எந்தவொரு வெப்வியூ இயக்கத்தை நிறுவவில்லை.\nஇது நிறுவப்பட்டிருந்தால், சுற்றுச்சூழல் பாதையில் PATH உள்ளது என்பதை உறுதிபடுத்தவும்\n\nநிறுவித்த பிறகு, செயலியை மறுதொடக்கம் செய்யவும்",
"unsupported_platform": "அதிர்ஷ்டகாத உருப்படியை ஆதரிக்கவில்லை", "unsupported_platform": "அதிர்ஷ்டகாத உருப்படியை ஆதரிக்கவில்லை",
"cache_music": "இசையை கேஷ் செய்", "cache_music": "இசையை கேஷ் செய்",
"open": "திறக்கவும்", "open": "திறக்கவும்",
"cache_folder": "கேஷ் அடைவு", "cache_folder": "கேஷ் அடைவு",
"export": "ஏற்றுமதி", "export": "ஏற்றுமதி",
"clear_cache": "கேஷ் அழிக்கவும்", "clear_cache": "கேஷ் அழிக்கவும்",
"clear_cache_confirmation": "கேஷைப் அழிக்க விரும்புகிறீர்களா?", "clear_cache_confirmation": "கேஷைப் அழிக்க விரும்புகிறீர்களா?",
"export_cache_files": "கேஷில் உள்ள கோப்புகளை ஏற்றுமதி செய்யவும்", "export_cache_files": "கேஷில் உள்ள கோப்புகளை ஏற்றுமதி செய்யவும்",
"found_n_files": "{count} கோப்புகள் கிடைத்தன", "found_n_files": "{count} கோப்புகள் கிடைத்தன",
"export_cache_confirmation": "இந்த கோப்புகளை ஏற்றுமதி செய்ய விரும்புகிறீர்களா?", "export_cache_confirmation": "இந்த கோப்புகளை ஏற்றுமதி செய்ய விரும்புகிறீர்களா?",
"exported_n_out_of_m_files": "{filesExported} கோப்புகள் ஏற்றுமதி செய்யப்பட்டன, {files} கோப்புகளில்", "exported_n_out_of_m_files": "{filesExported} கோப்புகள் ஏற்றுமதி செய்யப்பட்டன, {files} கோப்புகளில்",
"undo": "செயல்தவிர்", "undo": "செயல்தவிர்",
"download_all": "அனைத்தையும் பதிவிறக்குக", "download_all": "அனைத்தையும் பதிவிறக்குக",
"add_all_to_playlist": "அனைத்தையும் பாடல் பட்டியலில் சேர்க்கவும்", "add_all_to_playlist": "அனைத்தையும் பாடல் பட்டியலில் சேர்க்கவும்",
"add_all_to_queue": "அனைத்தையும் வரிசைப்படுத்து", "add_all_to_queue": "அனைத்தையும் வரிசைப்படுத்து",
"play_all_next": "அடுத்த உள்ள அனைத்தையும் இயக்கு", "play_all_next": "அடுத்த உள்ள அனைத்தையும் இயக்கு",
"pause": "நிறுத்து", "pause": "நிறுத்து",
"view_all": "அனைத்தையும் காண்க", "view_all": "அனைத்தையும் காண்க",
"no_tracks_added_yet": "உங்கள் பாடல்களை இன்னும் சேர்க்கவில்லை என்றால் தெரியாதே", "no_tracks_added_yet": "உங்கள் பாடல்களை இன்னும் சேர்க்கவில்லை என்றால் தெரியாதே",
"no_tracks": "இங்கு பாடல்கள் எதுவும் இல்லை", "no_tracks": "இங்கு பாடல்கள் எதுவும் இல்லை",
"no_tracks_listened_yet": "இன்னும் எதையும் கேள்வியில்லை", "no_tracks_listened_yet": "இன்னும் எதையும் கேள்வியில்லை",
"not_following_artists": "நீங்கள் எந்த கலைஞரையும் பின்தொடரவில்லை", "not_following_artists": "நீங்கள் எந்த கலைஞரையும் பின்தொடரவில்லை",
"no_favorite_albums_yet": "நீங்கள் இன்னும் எந்த ஆல்பங்களையும் பிடித்தவையாகச் சேர்க்கவில்லை", "no_favorite_albums_yet": "நீங்கள் இன்னும் எந்த ஆல்பங்களையும் பிடித்தவையாகச் சேர்க்கவில்லை",
"no_logs_found": "பதிவுகள் எதுவும் கிடைக்கவில்லை", "no_logs_found": "பதிவுகள் எதுவும் கிடைக்கவில்லை",
"youtube_engine": "YouTube இயந்திரம்", "youtube_engine": "YouTube இயந்திரம்",
"youtube_engine_not_installed_title": "{engine} நிறுவியதில்லை", "youtube_engine_not_installed_title": "{engine} நிறுவியதில்லை",
"youtube_engine_not_installed_message": "{engine} உங்கள் கணினியில் நிறுவியதில்லை.", "youtube_engine_not_installed_message": "{engine} உங்கள் கணினியில் நிறுவியதில்லை.",
"youtube_engine_set_path": "PATH மாறியில் கிடைக்கிறதா என்பதை உறுதிப்படுத்தவும் அல்லது\n{engine} செயல் செய்யக்கூடிய முறையை கீழே அமைக்கவும்", "youtube_engine_set_path": "PATH மாறியில் கிடைக்கிறதா என்பதை உறுதிப்படுத்தவும் அல்லது\n{engine} செயல் செய்யக்கூடிய முறையை கீழே அமைக்கவும்",
"youtube_engine_unix_issue_message": "macOS/Linux/unix போல் OS இல், .zshrc/.bashrc/.bash_profile போன்றவை அமைப்பில் பாதையை PATH அமைப்பது இயலாது.\nநீங்கள்.shell configuration file இல் பாதையை அமைக்க வேண்டும்", "youtube_engine_unix_issue_message": "macOS/Linux/unix போல் OS இல், .zshrc/.bashrc/.bash_profile போன்றவை அமைப்பில் பாதையை PATH அமைப்பது இயலாது.\nநீங்கள்.shell configuration file இல் பாதையை அமைக்க வேண்டும்",
"download": "பதிவிறக்கு", "download": "பதிவிறக்கு",
"file_not_found": "கோப்பு கிடைக்கவில்லை", "file_not_found": "கோப்பு கிடைக்கவில்லை",
"custom": "தனிப்பயன்", "custom": "தனிப்பயன்",
"add_custom_url": "தனிப்பயன் URL ஐச் சேர்க்கவும்", "add_custom_url": "தனிப்பயன் URL ஐச் சேர்க்கவும்"
"edit_port": "போர்டு திருத்தவும்",
"port_helper_msg": "இயல்புநிலை -1 ஆகும், இது சீரற்ற எண்ணை குறிக்கிறது. நீங்கள் தீயணைப்பு அமைக்கப்பட்டிருந்தால், இதை அமைப்பது பரிந்துரைக்கப்படுகிறது.",
"connect_request": "{client} க்கு இணைக்க அனுமதிக்கவா?",
"connection_request_denied": "இணைப்பு மறுக்கப்பட்டது. பயனர் அணுகலை மறுத்தார்."
} }

View File

@ -427,9 +427,5 @@
"download": "ดาวน์โหลด", "download": "ดาวน์โหลด",
"file_not_found": "ไม่พบไฟล์", "file_not_found": "ไม่พบไฟล์",
"custom": "กำหนดเอง", "custom": "กำหนดเอง",
"add_custom_url": "เพิ่ม URL แบบกำหนดเอง", "add_custom_url": "เพิ่ม URL แบบกำหนดเอง"
"edit_port": "แก้ไขพอร์ต",
"port_helper_msg": "ค่าเริ่มต้นคือ -1 ซึ่งหมายถึงหมายเลขสุ่ม หากคุณได้กำหนดค่าไฟร์วอลล์แล้ว แนะนำให้ตั้งค่านี้",
"connect_request": "อนุญาตให้ {client} เชื่อมต่อหรือไม่?",
"connection_request_denied": "การเชื่อมต่อล้มเหลว ผู้ใช้ปฏิเสธการเข้าถึง"
} }

View File

@ -1,432 +1,428 @@
{ {
"guest": "Bisita", "guest": "Bisita",
"browse": "Mag-browse", "browse": "Mag-browse",
"search": "Maghanap", "search": "Maghanap",
"library": "Silid-aklatan", "library": "Silid-aklatan",
"lyrics": "Mga Liriko", "lyrics": "Mga Liriko",
"settings": "Mga Setting", "settings": "Mga Setting",
"genre_categories_filter": "I-filter ang mga kategorya o genre...", "genre_categories_filter": "I-filter ang mga kategorya o genre...",
"genre": "Genre", "genre": "Genre",
"personalized": "Naka-personalize", "personalized": "Naka-personalize",
"featured": "Tampok", "featured": "Tampok",
"new_releases": "Mga Bagong Paglabas", "new_releases": "Mga Bagong Paglabas",
"songs": "Mga Kanta", "songs": "Mga Kanta",
"playing_track": "Tumutugtog ang {track}", "playing_track": "Tumutugtog ang {track}",
"queue_clear_alert": "Ito ay magbubura ng kasalukuyang pila. {track_length} na mga track ang tatanggalin\nGusto mo bang magpatuloy?", "queue_clear_alert": "Ito ay magbubura ng kasalukuyang pila. {track_length} na mga track ang tatanggalin\nGusto mo bang magpatuloy?",
"load_more": "Mag-load pa", "load_more": "Mag-load pa",
"playlists": "Mga Playlist", "playlists": "Mga Playlist",
"artists": "Mga Artista", "artists": "Mga Artista",
"albums": "Mga Album", "albums": "Mga Album",
"tracks": "Mga Track", "tracks": "Mga Track",
"downloads": "Mga Download", "downloads": "Mga Download",
"filter_playlists": "I-filter ang iyong mga playlist...", "filter_playlists": "I-filter ang iyong mga playlist...",
"liked_tracks": "Mga Nagustuhang Track", "liked_tracks": "Mga Nagustuhang Track",
"liked_tracks_description": "Lahat ng mga track na iyong nagustuhan", "liked_tracks_description": "Lahat ng mga track na iyong nagustuhan",
"playlist": "Playlist", "playlist": "Playlist",
"create_a_playlist": "Gumawa ng playlist", "create_a_playlist": "Gumawa ng playlist",
"update_playlist": "I-update ang playlist", "update_playlist": "I-update ang playlist",
"create": "Lumikha", "create": "Lumikha",
"cancel": "Ikansela", "cancel": "Ikansela",
"update": "I-update", "update": "I-update",
"playlist_name": "Pangalan ng Playlist", "playlist_name": "Pangalan ng Playlist",
"name_of_playlist": "Pangalan ng playlist", "name_of_playlist": "Pangalan ng playlist",
"description": "Paglalarawan", "description": "Paglalarawan",
"public": "Pampubliko", "public": "Pampubliko",
"collaborative": "Pakikipagtulungan", "collaborative": "Pakikipagtulungan",
"search_local_tracks": "Maghanap ng mga lokal na track...", "search_local_tracks": "Maghanap ng mga lokal na track...",
"play": "I-play", "play": "I-play",
"delete": "Burahin", "delete": "Burahin",
"none": "Wala", "none": "Wala",
"sort_a_z": "Ayusin ayon sa A-Z", "sort_a_z": "Ayusin ayon sa A-Z",
"sort_z_a": "Ayusin ayon sa Z-A", "sort_z_a": "Ayusin ayon sa Z-A",
"sort_artist": "Ayusin ayon sa Artista", "sort_artist": "Ayusin ayon sa Artista",
"sort_album": "Ayusin ayon sa Album", "sort_album": "Ayusin ayon sa Album",
"sort_duration": "Ayusin ayon sa Tagal", "sort_duration": "Ayusin ayon sa Tagal",
"sort_tracks": "Ayusin ang mga Track", "sort_tracks": "Ayusin ang mga Track",
"currently_downloading": "Kasalukuyang Nagda-download ({tracks_length})", "currently_downloading": "Kasalukuyang Nagda-download ({tracks_length})",
"cancel_all": "Kanselahin Lahat", "cancel_all": "Kanselahin Lahat",
"filter_artist": "I-filter ang mga artista...", "filter_artist": "I-filter ang mga artista...",
"followers": "{followers} na mga Tagasunod", "followers": "{followers} na mga Tagasunod",
"add_artist_to_blacklist": "Idagdag ang artista sa blacklist", "add_artist_to_blacklist": "Idagdag ang artista sa blacklist",
"top_tracks": "Mga Nangungunang Track", "top_tracks": "Mga Nangungunang Track",
"fans_also_like": "Gusto rin ng mga tagahanga", "fans_also_like": "Gusto rin ng mga tagahanga",
"loading": "Naglo-load...", "loading": "Naglo-load...",
"artist": "Artista", "artist": "Artista",
"blacklisted": "Naka-blacklist", "blacklisted": "Naka-blacklist",
"following": "Sinusundan", "following": "Sinusundan",
"follow": "Sundan", "follow": "Sundan",
"artist_url_copied": "Na-copy sa clipboard ang URL ng artista", "artist_url_copied": "Na-copy sa clipboard ang URL ng artista",
"added_to_queue": "Idinagdag ang {tracks} na mga track sa pila", "added_to_queue": "Idinagdag ang {tracks} na mga track sa pila",
"filter_albums": "I-filter ang mga album...", "filter_albums": "I-filter ang mga album...",
"synced": "Naka-sync", "synced": "Naka-sync",
"plain": "Simpleng", "plain": "Simpleng",
"shuffle": "I-shuffle", "shuffle": "I-shuffle",
"search_tracks": "Maghanap ng mga track...", "search_tracks": "Maghanap ng mga track...",
"released": "Inilabas", "released": "Inilabas",
"error": "Error {error}", "error": "Error {error}",
"title": "Pamagat", "title": "Pamagat",
"time": "Oras", "time": "Oras",
"more_actions": "Higit pang mga aksyon", "more_actions": "Higit pang mga aksyon",
"download_count": "I-download ({count})", "download_count": "I-download ({count})",
"add_count_to_playlist": "Idagdag ({count}) sa Playlist", "add_count_to_playlist": "Idagdag ({count}) sa Playlist",
"add_count_to_queue": "Idagdag ({count}) sa Pila", "add_count_to_queue": "Idagdag ({count}) sa Pila",
"play_count_next": "I-play ({count}) kasunod", "play_count_next": "I-play ({count}) kasunod",
"album": "Album", "album": "Album",
"copied_to_clipboard": "Na-copy ang {data} sa clipboard", "copied_to_clipboard": "Na-copy ang {data} sa clipboard",
"add_to_following_playlists": "Idagdag ang {track} sa mga sumusunod na Playlist", "add_to_following_playlists": "Idagdag ang {track} sa mga sumusunod na Playlist",
"add": "Idagdag", "add": "Idagdag",
"added_track_to_queue": "Idinagdag ang {track} sa pila", "added_track_to_queue": "Idinagdag ang {track} sa pila",
"add_to_queue": "Idagdag sa pila", "add_to_queue": "Idagdag sa pila",
"track_will_play_next": "Ang {track} ay tutugtog susunod", "track_will_play_next": "Ang {track} ay tutugtog susunod",
"play_next": "I-play susunod", "play_next": "I-play susunod",
"removed_track_from_queue": "Tinanggal ang {track} mula sa pila", "removed_track_from_queue": "Tinanggal ang {track} mula sa pila",
"remove_from_queue": "Alisin mula sa pila", "remove_from_queue": "Alisin mula sa pila",
"remove_from_favorites": "Alisin mula sa mga paborito", "remove_from_favorites": "Alisin mula sa mga paborito",
"save_as_favorite": "I-save bilang paborito", "save_as_favorite": "I-save bilang paborito",
"add_to_playlist": "Idagdag sa playlist", "add_to_playlist": "Idagdag sa playlist",
"remove_from_playlist": "Alisin mula sa playlist", "remove_from_playlist": "Alisin mula sa playlist",
"add_to_blacklist": "Idagdag sa blacklist", "add_to_blacklist": "Idagdag sa blacklist",
"remove_from_blacklist": "Alisin mula sa blacklist", "remove_from_blacklist": "Alisin mula sa blacklist",
"share": "Ibahagi", "share": "Ibahagi",
"mini_player": "Mini Player", "mini_player": "Mini Player",
"slide_to_seek": "I-slide para mag-seek pasulong o pabalik", "slide_to_seek": "I-slide para mag-seek pasulong o pabalik",
"shuffle_playlist": "I-shuffle ang playlist", "shuffle_playlist": "I-shuffle ang playlist",
"unshuffle_playlist": "I-unshuffle ang playlist", "unshuffle_playlist": "I-unshuffle ang playlist",
"previous_track": "Nakaraang track", "previous_track": "Nakaraang track",
"next_track": "Susunod na track", "next_track": "Susunod na track",
"pause_playback": "I-pause ang Playback", "pause_playback": "I-pause ang Playback",
"resume_playback": "Ipagpatuloy ang Playback", "resume_playback": "Ipagpatuloy ang Playback",
"loop_track": "I-loop ang track", "loop_track": "I-loop ang track",
"no_loop": "Walang loop", "no_loop": "Walang loop",
"repeat_playlist": "Ulitin ang playlist", "repeat_playlist": "Ulitin ang playlist",
"queue": "Pila", "queue": "Pila",
"alternative_track_sources": "Alternatibong mga pinagmulan ng track", "alternative_track_sources": "Alternatibong mga pinagmulan ng track",
"download_track": "I-download ang track", "download_track": "I-download ang track",
"tracks_in_queue": "{tracks} na mga track sa pila", "tracks_in_queue": "{tracks} na mga track sa pila",
"clear_all": "Burahin lahat", "clear_all": "Burahin lahat",
"show_hide_ui_on_hover": "Ipakita/Itago ang UI sa hover", "show_hide_ui_on_hover": "Ipakita/Itago ang UI sa hover",
"always_on_top": "Palaging nasa ibabaw", "always_on_top": "Palaging nasa ibabaw",
"exit_mini_player": "Lumabas sa Mini player", "exit_mini_player": "Lumabas sa Mini player",
"download_location": "Lokasyon ng pag-download", "download_location": "Lokasyon ng pag-download",
"local_library": "Lokal na silid-aklatan", "local_library": "Lokal na silid-aklatan",
"add_library_location": "Idagdag sa silid-aklatan", "add_library_location": "Idagdag sa silid-aklatan",
"remove_library_location": "Alisin mula sa silid-aklatan", "remove_library_location": "Alisin mula sa silid-aklatan",
"account": "Account", "account": "Account",
"login_with_spotify": "Mag-login gamit ang iyong Spotify account", "login_with_spotify": "Mag-login gamit ang iyong Spotify account",
"connect_with_spotify": "Kumonekta sa Spotify", "connect_with_spotify": "Kumonekta sa Spotify",
"logout": "Mag-logout", "logout": "Mag-logout",
"logout_of_this_account": "Mag-logout sa account na ito", "logout_of_this_account": "Mag-logout sa account na ito",
"language_region": "Wika at Rehiyon", "language_region": "Wika at Rehiyon",
"language": "Wika", "language": "Wika",
"system_default": "Default ng Sistema", "system_default": "Default ng Sistema",
"market_place_region": "Rehiyon ng Marketplace", "market_place_region": "Rehiyon ng Marketplace",
"recommendation_country": "Bansang Inirerekomenda", "recommendation_country": "Bansang Inirerekomenda",
"appearance": "Hitsura", "appearance": "Hitsura",
"layout_mode": "Mode ng Layout", "layout_mode": "Mode ng Layout",
"override_layout_settings": "I-override ang mga setting ng responsive layout mode", "override_layout_settings": "I-override ang mga setting ng responsive layout mode",
"adaptive": "Umaangkop", "adaptive": "Umaangkop",
"compact": "Kompakto", "compact": "Kompakto",
"extended": "Pinalawig", "extended": "Pinalawig",
"theme": "Tema", "theme": "Tema",
"dark": "Madilim", "dark": "Madilim",
"light": "Maliwanag", "light": "Maliwanag",
"system": "Sistema", "system": "Sistema",
"accent_color": "Kulay ng Accent", "accent_color": "Kulay ng Accent",
"sync_album_color": "I-sync ang kulay ng album", "sync_album_color": "I-sync ang kulay ng album",
"sync_album_color_description": "Ginagamit ang pangunahing kulay ng album art bilang kulay ng accent", "sync_album_color_description": "Ginagamit ang pangunahing kulay ng album art bilang kulay ng accent",
"playback": "Playback", "playback": "Playback",
"audio_quality": "Kalidad ng Audio", "audio_quality": "Kalidad ng Audio",
"high": "Mataas", "high": "Mataas",
"low": "Mababa", "low": "Mababa",
"pre_download_play": "Mag-pre-download at i-play", "pre_download_play": "Mag-pre-download at i-play",
"pre_download_play_description": "Sa halip na mag-stream ng audio, mag-download ng bytes at i-play sa halip (Inirerekomenda para sa mga gumagamit ng mataas na bandwidth)", "pre_download_play_description": "Sa halip na mag-stream ng audio, mag-download ng bytes at i-play sa halip (Inirerekomenda para sa mga gumagamit ng mataas na bandwidth)",
"skip_non_music": "Laktawan ang mga segment na hindi musika (SponsorBlock)", "skip_non_music": "Laktawan ang mga segment na hindi musika (SponsorBlock)",
"blacklist_description": "Mga track at artista na nasa blacklist", "blacklist_description": "Mga track at artista na nasa blacklist",
"wait_for_download_to_finish": "Mangyaring maghintay para matapos ang kasalukuyang pag-download", "wait_for_download_to_finish": "Mangyaring maghintay para matapos ang kasalukuyang pag-download",
"desktop": "Desktop", "desktop": "Desktop",
"close_behavior": "Pag-uugali ng Pagsara", "close_behavior": "Pag-uugali ng Pagsara",
"close": "Isara", "close": "Isara",
"minimize_to_tray": "I-minimize sa tray", "minimize_to_tray": "I-minimize sa tray",
"show_tray_icon": "Ipakita ang icon ng System tray", "show_tray_icon": "Ipakita ang icon ng System tray",
"about": "Tungkol sa", "about": "Tungkol sa",
"u_love_spotube": "Alam naming gusto mo ang Spotube", "u_love_spotube": "Alam naming gusto mo ang Spotube",
"check_for_updates": "Maghanap ng mga update", "check_for_updates": "Maghanap ng mga update",
"about_spotube": "Tungkol sa Spotube", "about_spotube": "Tungkol sa Spotube",
"blacklist": "Blacklist", "blacklist": "Blacklist",
"please_sponsor": "Mangyaring Mag-sponsor/Mag-donate", "please_sponsor": "Mangyaring Mag-sponsor/Mag-donate",
"spotube_description": "Spotube, isang magaan, cross-platform, libreng-para-sa-lahat na spotify client", "spotube_description": "Spotube, isang magaan, cross-platform, libreng-para-sa-lahat na spotify client",
"version": "Bersyon", "version": "Bersyon",
"build_number": "Build Number", "build_number": "Build Number",
"founder": "Nagtatag", "founder": "Nagtatag",
"repository": "Repository", "repository": "Repository",
"bug_issues": "Bug+Mga Isyu", "bug_issues": "Bug+Mga Isyu",
"made_with": "Ginawa nang may ❤️ sa Bangladesh🇧🇩", "made_with": "Ginawa nang may ❤️ sa Bangladesh🇧🇩",
"kingkor_roy_tirtho": "Kingkor Roy Tirtho", "kingkor_roy_tirtho": "Kingkor Roy Tirtho",
"copyright": "© 2021-{current_year} Kingkor Roy Tirtho", "copyright": "© 2021-{current_year} Kingkor Roy Tirtho",
"license": "Lisensya", "license": "Lisensya",
"add_spotify_credentials": "Idagdag ang iyong mga kredensyal sa spotify para makapagsimula", "add_spotify_credentials": "Idagdag ang iyong mga kredensyal sa spotify para makapagsimula",
"credentials_will_not_be_shared_disclaimer": "Huwag mag-alala, ang alinman sa iyong mga kredensyal ay hindi kokolektahin o ibabahagi sa sinuman", "credentials_will_not_be_shared_disclaimer": "Huwag mag-alala, ang alinman sa iyong mga kredensyal ay hindi kokolektahin o ibabahagi sa sinuman",
"know_how_to_login": "Hindi mo alam kung paano gawin ito?", "know_how_to_login": "Hindi mo alam kung paano gawin ito?",
"follow_step_by_step_guide": "Sundin ang Hakbang-hakbang na gabay", "follow_step_by_step_guide": "Sundin ang Hakbang-hakbang na gabay",
"spotify_cookie": "Spotify {name} Cookie", "spotify_cookie": "Spotify {name} Cookie",
"cookie_name_cookie": "{name} Cookie", "cookie_name_cookie": "{name} Cookie",
"fill_in_all_fields": "Mangyaring punan ang lahat ng field", "fill_in_all_fields": "Mangyaring punan ang lahat ng field",
"submit": "Isumite", "submit": "Isumite",
"exit": "Lumabas", "exit": "Lumabas",
"previous": "Nakaraan", "previous": "Nakaraan",
"next": "Susunod", "next": "Susunod",
"done": "Tapos na", "done": "Tapos na",
"step_1": "Hakbang 1", "step_1": "Hakbang 1",
"first_go_to": "Una, Pumunta sa", "first_go_to": "Una, Pumunta sa",
"login_if_not_logged_in": "at Mag-login/Mag-signup kung hindi ka naka-log in", "login_if_not_logged_in": "at Mag-login/Mag-signup kung hindi ka naka-log in",
"step_2": "Hakbang 2", "step_2": "Hakbang 2",
"step_2_steps": "1. Kapag naka-log in ka na, pindutin ang F12 o i-right click ang Mouse > Inspect para Buksan ang Browser devtools.\n2. Pagkatapos ay pumunta sa \"Application\" Tab (Chrome, Edge, Brave atbp..) o \"Storage\" Tab (Firefox, Palemoon atbp..)\n3. Pumunta sa \"Cookies\" na seksyon at pagkatapos sa \"https://accounts.spotify.com\" na subseksyon", "step_2_steps": "1. Kapag naka-log in ka na, pindutin ang F12 o i-right click ang Mouse > Inspect para Buksan ang Browser devtools.\n2. Pagkatapos ay pumunta sa \"Application\" Tab (Chrome, Edge, Brave atbp..) o \"Storage\" Tab (Firefox, Palemoon atbp..)\n3. Pumunta sa \"Cookies\" na seksyon at pagkatapos sa \"https://accounts.spotify.com\" na subseksyon",
"step_3": "Hakbang 3", "step_3": "Hakbang 3",
"step_3_steps": "Kopyahin ang halaga ng \"sp_dc\" Cookie", "step_3_steps": "Kopyahin ang halaga ng \"sp_dc\" Cookie",
"success_emoji": "Tagumpay🥳", "success_emoji": "Tagumpay🥳",
"success_message": "Ngayon ay matagumpay kang Naka-log in gamit ang iyong Spotify account. Magaling, kaibigan!", "success_message": "Ngayon ay matagumpay kang Naka-log in gamit ang iyong Spotify account. Magaling, kaibigan!",
"step_4": "Hakbang 4", "step_4": "Hakbang 4",
"step_4_steps": "I-paste ang na-kopyang halaga ng \"sp_dc\"", "step_4_steps": "I-paste ang na-kopyang halaga ng \"sp_dc\"",
"something_went_wrong": "May nangyaring mali", "something_went_wrong": "May nangyaring mali",
"piped_instance": "Instance ng Piped Server", "piped_instance": "Instance ng Piped Server",
"piped_description": "Ang instance ng Piped server na gagamitin para sa pagtutugma ng track", "piped_description": "Ang instance ng Piped server na gagamitin para sa pagtutugma ng track",
"piped_warning": "Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro", "piped_warning": "Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro",
"invidious_instance": "Instance ng Invidious Server", "invidious_instance": "Instance ng Invidious Server",
"invidious_description": "Ang instance ng Invidious server na gagamitin para sa pagtutugma ng track", "invidious_description": "Ang instance ng Invidious server na gagamitin para sa pagtutugma ng track",
"invidious_warning": "Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro", "invidious_warning": "Maaaring hindi gumagana nang mabuti ang ilan sa mga ito. Kaya gamitin sa sarili mong peligro",
"generate": "Gumawa", "generate": "Gumawa",
"track_exists": "Ang Track na {track} ay umiiral na", "track_exists": "Ang Track na {track} ay umiiral na",
"replace_downloaded_tracks": "Palitan ang lahat ng na-download na mga track", "replace_downloaded_tracks": "Palitan ang lahat ng na-download na mga track",
"skip_download_tracks": "Laktawan ang pag-download ng lahat ng na-download na mga track", "skip_download_tracks": "Laktawan ang pag-download ng lahat ng na-download na mga track",
"do_you_want_to_replace": "Gusto mo bang palitan ang umiiral na track??", "do_you_want_to_replace": "Gusto mo bang palitan ang umiiral na track??",
"replace": "Palitan", "replace": "Palitan",
"skip": "Laktawan", "skip": "Laktawan",
"select_up_to_count_type": "Pumili ng hanggang {count} {type}", "select_up_to_count_type": "Pumili ng hanggang {count} {type}",
"select_genres": "Pumili ng mga Genre", "select_genres": "Pumili ng mga Genre",
"add_genres": "Magdagdag ng mga Genre", "add_genres": "Magdagdag ng mga Genre",
"country": "Bansa", "country": "Bansa",
"number_of_tracks_generate": "Bilang ng mga track na gagawin", "number_of_tracks_generate": "Bilang ng mga track na gagawin",
"acousticness": "Acoustic-ness", "acousticness": "Acoustic-ness",
"danceability": "Kakayahang Sayawin", "danceability": "Kakayahang Sayawin",
"energy": "Enerhiya", "energy": "Enerhiya",
"instrumentalness": "Instrumental-ness", "instrumentalness": "Instrumental-ness",
"liveness": "Liveness", "liveness": "Liveness",
"loudness": "Lakas", "loudness": "Lakas",
"speechiness": "Pagsasalita", "speechiness": "Pagsasalita",
"valence": "Valence", "valence": "Valence",
"popularity": "Popularidad", "popularity": "Popularidad",
"key": "Key", "key": "Key",
"duration": "Tagal (s)", "duration": "Tagal (s)",
"tempo": "Tempo (BPM)", "tempo": "Tempo (BPM)",
"mode": "Mode", "mode": "Mode",
"time_signature": "Time Signature", "time_signature": "Time Signature",
"short": "Maikli", "short": "Maikli",
"medium": "Katamtaman", "medium": "Katamtaman",
"long": "Mahaba", "long": "Mahaba",
"min": "Min", "min": "Min",
"max": "Max", "max": "Max",
"target": "Target", "target": "Target",
"moderate": "Katamtaman", "moderate": "Katamtaman",
"deselect_all": "Alisin ang Pagkakapili sa Lahat", "deselect_all": "Alisin ang Pagkakapili sa Lahat",
"select_all": "Piliin Lahat", "select_all": "Piliin Lahat",
"are_you_sure": "Sigurado ka ba?", "are_you_sure": "Sigurado ka ba?",
"generating_playlist": "Gumagawa ng iyong custom na playlist...", "generating_playlist": "Gumagawa ng iyong custom na playlist...",
"selected_count_tracks": "Napili ang {count} na mga track", "selected_count_tracks": "Napili ang {count} na mga track",
"download_warning": "Kung nag-download ka ng lahat ng Track sa maramihan, malinaw na nagpa-pirate ka ng Musika at nagsasanhi ng pinsala sa creative society ng Musika. Sana ay alam mo ito. Palaging, subukang igalang at suportahan ang masipag na paggawa ng Artist", "download_warning": "Kung nag-download ka ng lahat ng Track sa maramihan, malinaw na nagpa-pirate ka ng Musika at nagsasanhi ng pinsala sa creative society ng Musika. Sana ay alam mo ito. Palaging, subukang igalang at suportahan ang masipag na paggawa ng Artist",
"download_ip_ban_warning": "Sa nga pala, ang iyong IP ay maaaring ma-block sa YouTube dahil sa sobrang mga kahilingan sa pag-download kaysa sa karaniwan. Ang IP block ay nangangahulugang hindi mo magagamit ang YouTube (kahit na naka-log in ka) sa loob ng hindi bababa sa 2-3 buwan mula sa device na may IP na iyon. At hindi pinanghahawakan ng Spotube ang anumang responsibilidad kung mangyayari ito", "download_ip_ban_warning": "Sa nga pala, ang iyong IP ay maaaring ma-block sa YouTube dahil sa sobrang mga kahilingan sa pag-download kaysa sa karaniwan. Ang IP block ay nangangahulugang hindi mo magagamit ang YouTube (kahit na naka-log in ka) sa loob ng hindi bababa sa 2-3 buwan mula sa device na may IP na iyon. At hindi pinanghahawakan ng Spotube ang anumang responsibilidad kung mangyayari ito",
"by_clicking_accept_terms": "Sa pamamagitan ng pag-click sa 'tanggapin', sumasang-ayon ka sa mga sumusunod na tuntunin:", "by_clicking_accept_terms": "Sa pamamagitan ng pag-click sa 'tanggapin', sumasang-ayon ka sa mga sumusunod na tuntunin:",
"download_agreement_1": "Alam kong nagpa-pirate ako ng Musika. Masama ako", "download_agreement_1": "Alam kong nagpa-pirate ako ng Musika. Masama ako",
"download_agreement_2": "Susuportahan ko ang Artist saan man ako maaari at ginagawa ko lang ito dahil wala akong pera para bumili ng kanilang sining", "download_agreement_2": "Susuportahan ko ang Artist saan man ako maaari at ginagawa ko lang ito dahil wala akong pera para bumili ng kanilang sining",
"download_agreement_3": "Lubos kong nauunawaan na ang aking IP ay maaaring ma-block sa YouTube at hindi ko pinanghahawakan ang Spotube o ang kanyang mga may-ari/nag-ambag na responsable para sa anumang aksidente na sanhi ng aking kasalukuyang aksyon", "download_agreement_3": "Lubos kong nauunawaan na ang aking IP ay maaaring ma-block sa YouTube at hindi ko pinanghahawakan ang Spotube o ang kanyang mga may-ari/nag-ambag na responsable para sa anumang aksidente na sanhi ng aking kasalukuyang aksyon",
"decline": "Tanggihan", "decline": "Tanggihan",
"accept": "Tanggapin", "accept": "Tanggapin",
"details": "Mga Detalye", "details": "Mga Detalye",
"youtube": "YouTube", "youtube": "YouTube",
"channel": "Channel", "channel": "Channel",
"likes": "Mga Like", "likes": "Mga Like",
"dislikes": "Mga Dislike", "dislikes": "Mga Dislike",
"views": "Mga View", "views": "Mga View",
"streamUrl": "Stream URL", "streamUrl": "Stream URL",
"stop": "Ihinto", "stop": "Ihinto",
"sort_newest": "Ayusin ayon sa pinakabagong idinagdag", "sort_newest": "Ayusin ayon sa pinakabagong idinagdag",
"sort_oldest": "Ayusin ayon sa pinakalumang idinagdag", "sort_oldest": "Ayusin ayon sa pinakalumang idinagdag",
"sleep_timer": "Sleep Timer", "sleep_timer": "Sleep Timer",
"mins": "{minutes} Minuto", "mins": "{minutes} Minuto",
"hours": "{hours} Oras", "hours": "{hours} Oras",
"hour": "{hours} Oras", "hour": "{hours} Oras",
"custom_hours": "Custom na Oras", "custom_hours": "Custom na Oras",
"logs": "Mga Log", "logs": "Mga Log",
"developers": "Mga Developer", "developers": "Mga Developer",
"not_logged_in": "Hindi ka naka-log in", "not_logged_in": "Hindi ka naka-log in",
"search_mode": "Mode ng Paghahanap", "search_mode": "Mode ng Paghahanap",
"audio_source": "Pinagmulan ng Audio", "audio_source": "Pinagmulan ng Audio",
"ok": "Ok", "ok": "Ok",
"failed_to_encrypt": "Nabigong i-encrypt", "failed_to_encrypt": "Nabigong i-encrypt",
"encryption_failed_warning": "Gumagamit ng encryption ang Spotube para ligtas na i-store ang iyong data. Ngunit nabigo. Kaya babalik ito sa hindi secure na storage\nKung gumagamit ka ng linux, mangyaring tiyakin na mayroon kang anumang secret-service na naka-install (gnome-keyring, kde-wallet, keepassxc atbp)", "encryption_failed_warning": "Gumagamit ng encryption ang Spotube para ligtas na i-store ang iyong data. Ngunit nabigo. Kaya babalik ito sa hindi secure na storage\nKung gumagamit ka ng linux, mangyaring tiyakin na mayroon kang anumang secret-service na naka-install (gnome-keyring, kde-wallet, keepassxc atbp)",
"querying_info": "Kinukuha ang impormasyon...", "querying_info": "Kinukuha ang impormasyon...",
"piped_api_down": "Ang Piped API ay hindi gumagana", "piped_api_down": "Ang Piped API ay hindi gumagana",
"piped_down_error_instructions": "Ang instance ng Piped na {pipedInstance} ay kasalukuyang hindi gumagana\n\nMaaari mong baguhin ang instance o baguhin ang 'Uri ng API' sa opisyal na YouTube API\n\nSiguraduhing i-restart ang app pagkatapos ng pagbabago", "piped_down_error_instructions": "Ang instance ng Piped na {pipedInstance} ay kasalukuyang hindi gumagana\n\nMaaari mong baguhin ang instance o baguhin ang 'Uri ng API' sa opisyal na YouTube API\n\nSiguraduhing i-restart ang app pagkatapos ng pagbabago",
"you_are_offline": "Kasalukuyan kang offline", "you_are_offline": "Kasalukuyan kang offline",
"connection_restored": "Naibalik na ang iyong koneksyon sa internet", "connection_restored": "Naibalik na ang iyong koneksyon sa internet",
"use_system_title_bar": "Gamitin ang title bar ng system", "use_system_title_bar": "Gamitin ang title bar ng system",
"crunching_results": "Pinaproseso ang mga resulta...", "crunching_results": "Pinaproseso ang mga resulta...",
"search_to_get_results": "Maghanap para makakuha ng mga resulta", "search_to_get_results": "Maghanap para makakuha ng mga resulta",
"use_amoled_mode": "Matingkad na itim na madilim na tema", "use_amoled_mode": "Matingkad na itim na madilim na tema",
"pitch_dark_theme": "AMOLED Mode", "pitch_dark_theme": "AMOLED Mode",
"normalize_audio": "I-normalize ang audio", "normalize_audio": "I-normalize ang audio",
"change_cover": "Baguhin ang cover", "change_cover": "Baguhin ang cover",
"add_cover": "Magdagdag ng cover", "add_cover": "Magdagdag ng cover",
"restore_defaults": "Ibalik ang mga default", "restore_defaults": "Ibalik ang mga default",
"download_music_codec": "Codec para sa pag-download ng musika", "download_music_codec": "Codec para sa pag-download ng musika",
"streaming_music_codec": "Codec para sa pag-stream ng musika", "streaming_music_codec": "Codec para sa pag-stream ng musika",
"login_with_lastfm": "Mag-login gamit ang Last.fm", "login_with_lastfm": "Mag-login gamit ang Last.fm",
"connect": "Kumonekta", "connect": "Kumonekta",
"disconnect_lastfm": "Idiskonekta ang Last.fm", "disconnect_lastfm": "Idiskonekta ang Last.fm",
"disconnect": "Idiskonekta", "disconnect": "Idiskonekta",
"username": "Username", "username": "Username",
"password": "Password", "password": "Password",
"login": "Mag-login", "login": "Mag-login",
"login_with_your_lastfm": "Mag-login gamit ang iyong Last.fm account", "login_with_your_lastfm": "Mag-login gamit ang iyong Last.fm account",
"scrobble_to_lastfm": "I-scrobble sa Last.fm", "scrobble_to_lastfm": "I-scrobble sa Last.fm",
"go_to_album": "Pumunta sa Album", "go_to_album": "Pumunta sa Album",
"discord_rich_presence": "Discord Rich Presence", "discord_rich_presence": "Discord Rich Presence",
"browse_all": "I-browse Lahat", "browse_all": "I-browse Lahat",
"genres": "Mga Genre", "genres": "Mga Genre",
"explore_genres": "Tuklasin ang mga Genre", "explore_genres": "Tuklasin ang mga Genre",
"friends": "Mga Kaibigan", "friends": "Mga Kaibigan",
"no_lyrics_available": "Paumanhin, hindi mahanap ang lyrics para sa track na ito", "no_lyrics_available": "Paumanhin, hindi mahanap ang lyrics para sa track na ito",
"start_a_radio": "Magsimula ng Radio", "start_a_radio": "Magsimula ng Radio",
"how_to_start_radio": "Paano mo gustong simulan ang radio?", "how_to_start_radio": "Paano mo gustong simulan ang radio?",
"replace_queue_question": "Gusto mo bang palitan ang kasalukuyang pila o idagdag dito?", "replace_queue_question": "Gusto mo bang palitan ang kasalukuyang pila o idagdag dito?",
"endless_playback": "Walang Hanggang Playback", "endless_playback": "Walang Hanggang Playback",
"delete_playlist": "Burahin ang Playlist", "delete_playlist": "Burahin ang Playlist",
"delete_playlist_confirmation": "Sigurado ka bang gusto mong burahin ang playlist na ito?", "delete_playlist_confirmation": "Sigurado ka bang gusto mong burahin ang playlist na ito?",
"local_tracks": "Mga Lokal na Track", "local_tracks": "Mga Lokal na Track",
"local_tab": "Lokal", "local_tab": "Lokal",
"song_link": "Link ng Kanta", "song_link": "Link ng Kanta",
"skip_this_nonsense": "Laktawan ang kalokohan na ito", "skip_this_nonsense": "Laktawan ang kalokohan na ito",
"freedom_of_music": "\"Kalayaan ng Musika\"", "freedom_of_music": "\"Kalayaan ng Musika\"",
"freedom_of_music_palm": "\"Kalayaan ng Musika sa iyong palad\"", "freedom_of_music_palm": "\"Kalayaan ng Musika sa iyong palad\"",
"get_started": "Magsimula na tayo", "get_started": "Magsimula na tayo",
"youtube_source_description": "Inirerekomenda at pinakamahusay na gumagana.", "youtube_source_description": "Inirerekomenda at pinakamahusay na gumagana.",
"piped_source_description": "Gusto ng kalayaan? Kapareho ng YouTube ngunit mas malaya.", "piped_source_description": "Gusto ng kalayaan? Kapareho ng YouTube ngunit mas malaya.",
"jiosaavn_source_description": "Pinakamahusay para sa rehiyon ng South Asia.", "jiosaavn_source_description": "Pinakamahusay para sa rehiyon ng South Asia.",
"invidious_source_description": "Katulad ng Piped ngunit may mas mataas na availability.", "invidious_source_description": "Katulad ng Piped ngunit may mas mataas na availability.",
"highest_quality": "Pinakamataas na Kalidad: {quality}", "highest_quality": "Pinakamataas na Kalidad: {quality}",
"select_audio_source": "Pumili ng Pinagmulan ng Audio", "select_audio_source": "Pumili ng Pinagmulan ng Audio",
"endless_playback_description": "Awtomatikong magdagdag ng mga bagong kanta\nsa dulo ng pila", "endless_playback_description": "Awtomatikong magdagdag ng mga bagong kanta\nsa dulo ng pila",
"choose_your_region": "Piliin ang iyong rehiyon", "choose_your_region": "Piliin ang iyong rehiyon",
"choose_your_region_description": "Ito ay tutulong sa Spotube na ipakita sa iyo ang tamang content\npara sa iyong lokasyon.", "choose_your_region_description": "Ito ay tutulong sa Spotube na ipakita sa iyo ang tamang content\npara sa iyong lokasyon.",
"choose_your_language": "Piliin ang iyong wika", "choose_your_language": "Piliin ang iyong wika",
"help_project_grow": "Tulungan ang proyektong ito na lumago", "help_project_grow": "Tulungan ang proyektong ito na lumago",
"help_project_grow_description": "Ang Spotube ay isang open-source na proyekto. Maaari mong tulungan ang proyektong ito na lumago sa pamamagitan ng pag-contribute sa proyekto, pag-ulat ng mga bug, o pagmungkahi ng mga bagong feature.", "help_project_grow_description": "Ang Spotube ay isang open-source na proyekto. Maaari mong tulungan ang proyektong ito na lumago sa pamamagitan ng pag-contribute sa proyekto, pag-ulat ng mga bug, o pagmungkahi ng mga bagong feature.",
"contribute_on_github": "Mag-contribute sa GitHub", "contribute_on_github": "Mag-contribute sa GitHub",
"donate_on_open_collective": "Mag-donate sa Open Collective", "donate_on_open_collective": "Mag-donate sa Open Collective",
"browse_anonymously": "Mag-browse nang Anonymous", "browse_anonymously": "Mag-browse nang Anonymous",
"enable_connect": "I-enable ang Connect", "enable_connect": "I-enable ang Connect",
"enable_connect_description": "Kontrolin ang Spotube mula sa ibang mga device", "enable_connect_description": "Kontrolin ang Spotube mula sa ibang mga device",
"devices": "Mga Device", "devices": "Mga Device",
"select": "Pumili", "select": "Pumili",
"connect_client_alert": "Ikaw ay kontrolado ng {client}", "connect_client_alert": "Ikaw ay kontrolado ng {client}",
"this_device": "Ang Device na ito", "this_device": "Ang Device na ito",
"remote": "Remote", "remote": "Remote",
"stats": "Mga Stat", "stats": "Mga Stat",
"and_n_more": "at {count} pa", "and_n_more": "at {count} pa",
"recently_played": "Kamakailan Lang na Ni-play", "recently_played": "Kamakailan Lang na Ni-play",
"browse_more": "Mag-browse pa", "browse_more": "Mag-browse pa",
"no_title": "Walang Pamagat", "no_title": "Walang Pamagat",
"not_playing": "Hindi tumutugtog", "not_playing": "Hindi tumutugtog",
"epic_failure": "Epic na pagkabigo!", "epic_failure": "Epic na pagkabigo!",
"added_num_tracks_to_queue": "Nagdagdag ng {tracks_length} na mga track sa pila", "added_num_tracks_to_queue": "Nagdagdag ng {tracks_length} na mga track sa pila",
"spotube_has_an_update": "Ang Spotube ay may update", "spotube_has_an_update": "Ang Spotube ay may update",
"download_now": "I-download Ngayon", "download_now": "I-download Ngayon",
"nightly_version": "Ang Spotube Nightly {nightlyBuildNum} ay inilabas na", "nightly_version": "Ang Spotube Nightly {nightlyBuildNum} ay inilabas na",
"release_version": "Ang Spotube v{version} ay inilabas na", "release_version": "Ang Spotube v{version} ay inilabas na",
"read_the_latest": "Basahin ang pinakabagong ", "read_the_latest": "Basahin ang pinakabagong ",
"release_notes": "release notes", "release_notes": "release notes",
"pick_color_scheme": "Pumili ng color scheme", "pick_color_scheme": "Pumili ng color scheme",
"save": "I-save", "save": "I-save",
"choose_the_device": "Piliin ang device:", "choose_the_device": "Piliin ang device:",
"multiple_device_connected": "Mayroong maraming device na nakakonekta.\nPiliin ang device kung saan mo gustong maganap ang aksyon na ito", "multiple_device_connected": "Mayroong maraming device na nakakonekta.\nPiliin ang device kung saan mo gustong maganap ang aksyon na ito",
"nothing_found": "Walang nahanap", "nothing_found": "Walang nahanap",
"the_box_is_empty": "Ang kahon ay walang laman", "the_box_is_empty": "Ang kahon ay walang laman",
"top_artists": "Nangungunang mga Artista", "top_artists": "Nangungunang mga Artista",
"top_albums": "Nangungunang mga Album", "top_albums": "Nangungunang mga Album",
"this_week": "Ngayong linggo", "this_week": "Ngayong linggo",
"this_month": "Ngayong buwan", "this_month": "Ngayong buwan",
"last_6_months": "Nakaraang 6 na buwan", "last_6_months": "Nakaraang 6 na buwan",
"this_year": "Ngayong taon", "this_year": "Ngayong taon",
"last_2_years": "Nakaraang 2 taon", "last_2_years": "Nakaraang 2 taon",
"all_time": "Lahat ng panahon", "all_time": "Lahat ng panahon",
"powered_by_provider": "Pinapagana ng {providerName}", "powered_by_provider": "Pinapagana ng {providerName}",
"email": "Email", "email": "Email",
"profile_followers": "Mga Tagasunod", "profile_followers": "Mga Tagasunod",
"birthday": "Kaarawan", "birthday": "Kaarawan",
"subscription": "Subscription", "subscription": "Subscription",
"not_born": "Hindi pa ipinanganak", "not_born": "Hindi pa ipinanganak",
"hacker": "Hacker", "hacker": "Hacker",
"profile": "Profile", "profile": "Profile",
"no_name": "Walang Pangalan", "no_name": "Walang Pangalan",
"edit": "I-edit", "edit": "I-edit",
"user_profile": "Profile ng User", "user_profile": "Profile ng User",
"count_plays": "{count} na mga play", "count_plays": "{count} na mga play",
"streaming_fees_hypothetical": "Mga bayarin sa streaming (hypothetical)", "streaming_fees_hypothetical": "Mga bayarin sa streaming (hypothetical)",
"minutes_listened": "Mga minutong pinapakinggan", "minutes_listened": "Mga minutong pinapakinggan",
"streamed_songs": "Mga na-stream na kanta", "streamed_songs": "Mga na-stream na kanta",
"count_streams": "{count} na mga stream", "count_streams": "{count} na mga stream",
"owned_by_you": "Pag-aari mo", "owned_by_you": "Pag-aari mo",
"copied_shareurl_to_clipboard": "Na-kopya ang {shareUrl} sa clipboard", "copied_shareurl_to_clipboard": "Na-kopya ang {shareUrl} sa clipboard",
"spotify_hipotetical_calculation": "*Ito ay kinalkula batay sa bawat stream\nna bayad ng Spotify na $0.003 hanggang $0.005. Ito ay isang hypothetical\nna pagkalkula para bigyan ang user ng ideya kung magkano\nang kanilang ibabayad sa mga artista kung sila ay nakikinig\nng kanilang kanta sa Spotify.", "spotify_hipotetical_calculation": "*Ito ay kinalkula batay sa bawat stream\nna bayad ng Spotify na $0.003 hanggang $0.005. Ito ay isang hypothetical\nna pagkalkula para bigyan ang user ng ideya kung magkano\nang kanilang ibabayad sa mga artista kung sila ay nakikinig\nng kanilang kanta sa Spotify.",
"count_mins": "{minutes} minuto", "count_mins": "{minutes} minuto",
"summary_minutes": "minuto", "summary_minutes": "minuto",
"summary_listened_to_music": "Nakinig sa musika", "summary_listened_to_music": "Nakinig sa musika",
"summary_songs": "mga kanta", "summary_songs": "mga kanta",
"summary_streamed_overall": "Na-stream sa kabuuan", "summary_streamed_overall": "Na-stream sa kabuuan",
"summary_owed_to_artists": "Utang sa mga artista\nngayong buwan", "summary_owed_to_artists": "Utang sa mga artista\nngayong buwan",
"summary_artists": "artista", "summary_artists": "artista",
"summary_music_reached_you": "Umabot sa iyo ang musika", "summary_music_reached_you": "Umabot sa iyo ang musika",
"summary_full_albums": "buong album", "summary_full_albums": "buong album",
"summary_got_your_love": "Nakuha ang iyong pagmamahal", "summary_got_your_love": "Nakuha ang iyong pagmamahal",
"summary_playlists": "mga playlist", "summary_playlists": "mga playlist",
"summary_were_on_repeat": "Pinu-playlst muli", "summary_were_on_repeat": "Pinu-playlst muli",
"total_money": "Kabuuang {money}", "total_money": "Kabuuang {money}",
"webview_not_found": "Hindi nahanap ang Webview", "webview_not_found": "Hindi nahanap ang Webview",
"webview_not_found_description": "Walang webview runtime na naka-install sa iyong device.\nKung naka-install ito, siguraduhing nasa Environment PATH\n\nPagkatapos mag-install, i-restart ang app", "webview_not_found_description": "Walang webview runtime na naka-install sa iyong device.\nKung naka-install ito, siguraduhing nasa Environment PATH\n\nPagkatapos mag-install, i-restart ang app",
"unsupported_platform": "Hindi suportadong platform", "unsupported_platform": "Hindi suportadong platform",
"cache_music": "I-cache ang musika", "cache_music": "I-cache ang musika",
"open": "Buksan", "open": "Buksan",
"cache_folder": "Folder ng cache", "cache_folder": "Folder ng cache",
"export": "I-export", "export": "I-export",
"clear_cache": "Burahin ang cache", "clear_cache": "Burahin ang cache",
"clear_cache_confirmation": "Gusto mo bang burahin ang cache?", "clear_cache_confirmation": "Gusto mo bang burahin ang cache?",
"export_cache_files": "I-export ang mga Naka-cache na File", "export_cache_files": "I-export ang mga Naka-cache na File",
"found_n_files": "Nahanap ang {count} na mga file", "found_n_files": "Nahanap ang {count} na mga file",
"export_cache_confirmation": "Gusto mo bang i-export ang mga file na ito sa", "export_cache_confirmation": "Gusto mo bang i-export ang mga file na ito sa",
"exported_n_out_of_m_files": "Na-export ang {filesExported} mula sa {files} na mga file", "exported_n_out_of_m_files": "Na-export ang {filesExported} mula sa {files} na mga file",
"undo": "I-undo", "undo": "I-undo",
"download_all": "I-download lahat", "download_all": "I-download lahat",
"add_all_to_playlist": "Idagdag lahat sa playlist", "add_all_to_playlist": "Idagdag lahat sa playlist",
"add_all_to_queue": "Idagdag lahat sa pila", "add_all_to_queue": "Idagdag lahat sa pila",
"play_all_next": "I-play lahat susunod", "play_all_next": "I-play lahat susunod",
"pause": "Pause", "pause": "Pause",
"view_all": "Tingnan lahat", "view_all": "Tingnan lahat",
"no_tracks_added_yet": "Mukhang wala ka pang idinaragdag na mga track", "no_tracks_added_yet": "Mukhang wala ka pang idinaragdag na mga track",
"no_tracks": "Mukhang walang mga track dito", "no_tracks": "Mukhang walang mga track dito",
"no_tracks_listened_yet": "Mukhang wala ka pang pinakikinggan", "no_tracks_listened_yet": "Mukhang wala ka pang pinakikinggan",
"not_following_artists": "Hindi ka sumusunod sa anumang mga artista", "not_following_artists": "Hindi ka sumusunod sa anumang mga artista",
"no_favorite_albums_yet": "Mukhang wala ka pang idinagdag na anumang mga album sa iyong mga paborito", "no_favorite_albums_yet": "Mukhang wala ka pang idinagdag na anumang mga album sa iyong mga paborito",
"no_logs_found": "Walang nahanap na mga log", "no_logs_found": "Walang nahanap na mga log",
"youtube_engine": "YouTube Engine", "youtube_engine": "YouTube Engine",
"youtube_engine_not_installed_title": "Hindi naka-install ang {engine}", "youtube_engine_not_installed_title": "Hindi naka-install ang {engine}",
"youtube_engine_not_installed_message": "Hindi naka-install ang {engine} sa iyong sistema.", "youtube_engine_not_installed_message": "Hindi naka-install ang {engine} sa iyong sistema.",
"youtube_engine_set_path": "Siguraduhing available ito sa PATH variable o\ni-set ang absolute path sa {engine} executable sa ibaba", "youtube_engine_set_path": "Siguraduhing available ito sa PATH variable o\ni-set ang absolute path sa {engine} executable sa ibaba",
"youtube_engine_unix_issue_message": "Sa macOS/Linux/unix tulad ng OS, ang pag-set ng path sa .zshrc/.bashrc/.bash_profile atbp. ay hindi gagana.\nKailangan mong i-set ang path sa configuration file ng shell", "youtube_engine_unix_issue_message": "Sa macOS/Linux/unix tulad ng OS, ang pag-set ng path sa .zshrc/.bashrc/.bash_profile atbp. ay hindi gagana.\nKailangan mong i-set ang path sa configuration file ng shell",
"download": "I-download", "download": "I-download",
"file_not_found": "Hindi nahanap ang file", "file_not_found": "Hindi nahanap ang file",
"custom": "Custom", "custom": "Custom",
"add_custom_url": "Magdagdag ng custom URL", "add_custom_url": "Magdagdag ng custom URL"
"edit_port": "I-edit ang port", }
"port_helper_msg": "Ang default ay -1 na nagpapahiwatig ng random na numero. Kung na-configure mo ang firewall, inirerekomenda na itakda ito.",
"connect_request": "Payagan ang {client} na kumonekta?",
"connection_request_denied": "Tanggihan ang koneksyon. Tinanggihan ng gumagamit ang pag-access."
}

View File

@ -426,9 +426,5 @@
"download": "İndir", "download": "İndir",
"file_not_found": "Dosya bulunamadı", "file_not_found": "Dosya bulunamadı",
"custom": "Özel", "custom": "Özel",
"add_custom_url": "Özel URL ekle", "add_custom_url": "Özel URL ekle"
"edit_port": "Portu düzenle",
"port_helper_msg": "Varsayılan -1'dir, bu da rastgele bir sayıyı gösterir. Bir güvenlik duvarınız varsa, bunu ayarlamanız önerilir.",
"connect_request": "{client} bağlantısına izin verilsin mi?",
"connection_request_denied": "Bağlantı reddedildi. Kullanıcı erişimi reddetti."
} }

View File

@ -426,9 +426,5 @@
"download": "Завантажити", "download": "Завантажити",
"file_not_found": "Файл не знайдено", "file_not_found": "Файл не знайдено",
"custom": "Користувацький", "custom": "Користувацький",
"add_custom_url": "Додати користувацький URL", "add_custom_url": "Додати користувацький URL"
"edit_port": "Редагувати порт",
"port_helper_msg": "За замовчуванням -1, що означає випадкове число. Якщо у вас налаштований брандмауер, рекомендується це налаштувати.",
"connect_request": "Дозволити {client} підключення?",
"connection_request_denied": "Підключення відхилено. Користувач відмовив у доступі."
} }

View File

@ -426,9 +426,5 @@
"download": "Tải xuống", "download": "Tải xuống",
"file_not_found": "Không tìm thấy tệp", "file_not_found": "Không tìm thấy tệp",
"custom": "Tùy chỉnh", "custom": "Tùy chỉnh",
"add_custom_url": "Thêm URL tùy chỉnh", "add_custom_url": "Thêm URL tùy chỉnh"
"edit_port": "Chỉnh sửa cổng",
"port_helper_msg": "Mặc định là -1, có nghĩa là số ngẫu nhiên. Nếu bạn đã cấu hình tường lửa, nên đặt điều này.",
"connect_request": "Cho phép {client} kết nối?",
"connection_request_denied": "Kết nối bị từ chối. Người dùng đã từ chối quyền truy cập."
} }

View File

@ -426,9 +426,5 @@
"download": "下载", "download": "下载",
"file_not_found": "文件未找到", "file_not_found": "文件未找到",
"custom": "自定义", "custom": "自定义",
"add_custom_url": "添加自定义 URL", "add_custom_url": "添加自定义 URL"
"edit_port": "编辑端口",
"port_helper_msg": "默认值为-1表示随机数。如果您已配置防火墙建议设置此项。",
"connect_request": "允许 {client} 连接吗?",
"connection_request_denied": "连接被拒绝。用户拒绝访问。"
} }

View File

@ -2704,30 +2704,6 @@ abstract class AppLocalizations {
/// In en, this message translates to: /// In en, this message translates to:
/// **'Add custom URL'** /// **'Add custom URL'**
String get add_custom_url; String get add_custom_url;
/// No description provided for @edit_port.
///
/// In en, this message translates to:
/// **'Edit port'**
String get edit_port;
/// No description provided for @port_helper_msg.
///
/// In en, this message translates to:
/// **'Default is -1 which indicates random number. If you\'ve firewall configured, setting this is recommended.'**
String get port_helper_msg;
/// No description provided for @connect_request.
///
/// In en, this message translates to:
/// **'Allow {client} to connect?'**
String connect_request(Object client);
/// No description provided for @connection_request_denied.
///
/// In en, this message translates to:
/// **'Connection denied. User denied access.'**
String get connection_request_denied;
} }
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> { class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsAr extends AppLocalizations {
@override @override
String get add_custom_url => 'إضافة URL مخصص'; String get add_custom_url => 'إضافة URL مخصص';
@override
String get edit_port => 'تعديل المنفذ';
@override
String get port_helper_msg => 'القيمة الافتراضية هي -1 والتي تشير إلى رقم عشوائي. إذا كان لديك جدار ناري مُعد، يُوصى بتعيين هذا.';
@override
String connect_request(Object client) {
return 'السماح لـ $client بالاتصال؟';
}
@override
String get connection_request_denied => 'تم رفض الاتصال. المستخدم رفض الوصول.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsBn extends AppLocalizations {
@override @override
String get add_custom_url => 'কাস্টম URL যোগ করুন'; String get add_custom_url => 'কাস্টম URL যোগ করুন';
@override
String get edit_port => 'পোর্ট সম্পাদনা করুন';
@override
String get port_helper_msg => 'ডিফল্ট হল -1 যা এলোমেলো সংখ্যা নির্দেশ করে। যদি আপনার ফায়ারওয়াল কনফিগার করা থাকে, তবে এটি সেট করা সুপারিশ করা হয়।';
@override
String connect_request(Object client) {
return '$client কে সংযোগ করতে অনুমতি দেবেন?';
}
@override
String get connection_request_denied => 'সংযোগ অস্বীকৃত। ব্যবহারকারী প্রবেশাধিকার অস্বীকার করেছে।';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsCa extends AppLocalizations {
@override @override
String get add_custom_url => 'Afegir URL personalitzada'; String get add_custom_url => 'Afegir URL personalitzada';
@override
String get edit_port => 'Editar port';
@override
String get port_helper_msg => 'El valor per defecte és -1, que indica un número aleatori. Si teniu un tallafoc configurat, es recomana establir-ho.';
@override
String connect_request(Object client) {
return 'Permetre que $client es connecti?';
}
@override
String get connection_request_denied => 'Connexió denegada. L\'usuari ha denegat l\'accés.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsCs extends AppLocalizations {
@override @override
String get add_custom_url => 'Přidat vlastní URL'; String get add_custom_url => 'Přidat vlastní URL';
@override
String get edit_port => 'Upravit port';
@override
String get port_helper_msg => 'Výchozí hodnota je -1, což znamená náhodné číslo. Pokud máte nakonfigurován firewall, doporučuje se to nastavit.';
@override
String connect_request(Object client) {
return 'Povolit $client připojení?';
}
@override
String get connection_request_denied => 'Připojení bylo zamítnuto. Uživatel odmítl přístup.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get add_custom_url => 'Benutzerdefinierte URL hinzufügen'; String get add_custom_url => 'Benutzerdefinierte URL hinzufügen';
@override
String get edit_port => 'Port bearbeiten';
@override
String get port_helper_msg => 'Der Standardwert ist -1, was eine zufällige Zahl bedeutet. Wenn Sie eine Firewall konfiguriert haben, wird empfohlen, dies einzustellen.';
@override
String connect_request(Object client) {
return '$client die Verbindung erlauben?';
}
@override
String get connection_request_denied => 'Verbindung abgelehnt. Benutzer hat den Zugriff verweigert.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get add_custom_url => 'Add custom URL'; String get add_custom_url => 'Add custom URL';
@override
String get edit_port => 'Edit port';
@override
String get port_helper_msg => 'Default is -1 which indicates random number. If you\'ve firewall configured, setting this is recommended.';
@override
String connect_request(Object client) {
return 'Allow $client to connect?';
}
@override
String get connection_request_denied => 'Connection denied. User denied access.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsEs extends AppLocalizations {
@override @override
String get add_custom_url => 'Agregar URL personalizada'; String get add_custom_url => 'Agregar URL personalizada';
@override
String get edit_port => 'Editar puerto';
@override
String get port_helper_msg => 'El valor predeterminado es -1, lo que indica un número aleatorio. Si tienes un firewall configurado, se recomienda establecer esto.';
@override
String connect_request(Object client) {
return '¿Permitir que $client se conecte?';
}
@override
String get connection_request_denied => 'Conexión denegada. El usuario denegó el acceso.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsEu extends AppLocalizations {
@override @override
String get add_custom_url => 'Gehitu URL pertsonalizatua'; String get add_custom_url => 'Gehitu URL pertsonalizatua';
@override
String get edit_port => 'Editatu portua';
@override
String get port_helper_msg => 'Lehenetsitako balioa -1 da, zenbaki aleatorioa adierazten duena. Su firewall konfiguratu baduzu, gomendatzen da hau ezartzea.';
@override
String connect_request(Object client) {
return '$client konektatzea baimendu?';
}
@override
String get connection_request_denied => 'Konektatzea ukatu da. Erabiltzaileak sarbidea ukatu du.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsFa extends AppLocalizations {
@override @override
String get add_custom_url => 'اضافه کردن URL سفارشی'; String get add_custom_url => 'اضافه کردن URL سفارشی';
@override
String get edit_port => 'ویرایش پورت';
@override
String get port_helper_msg => 'پیش‌فرض -1 است که نشان‌دهنده یک عدد تصادفی است. اگر فایروال شما پیکربندی شده است، توصیه می‌شود این را تنظیم کنید.';
@override
String connect_request(Object client) {
return 'آیا اجازه می‌دهید $client متصل شود؟';
}
@override
String get connection_request_denied => 'اتصال رد شد. کاربر دسترسی را رد کرد.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsFi extends AppLocalizations {
@override @override
String get add_custom_url => 'Lisää mukautettu URL'; String get add_custom_url => 'Lisää mukautettu URL';
@override
String get edit_port => 'Muokkaa porttia';
@override
String get port_helper_msg => 'Oletusarvo on -1, mikä tarkoittaa satunnaista numeroa. Jos sinulla on palomuuri määritetty, tämän asettamista suositellaan.';
@override
String connect_request(Object client) {
return 'Salli $client yhdistää?';
}
@override
String get connection_request_denied => 'Yhteys evätty. Käyttäjä eväsi pääsyn.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsFr extends AppLocalizations {
@override @override
String get add_custom_url => 'Ajouter une URL personnalisée'; String get add_custom_url => 'Ajouter une URL personnalisée';
@override
String get edit_port => 'Modifier le port';
@override
String get port_helper_msg => 'La valeur par défaut est -1, ce qui indique un nombre aléatoire. Si vous avez configuré un pare-feu, il est recommandé de le définir.';
@override
String connect_request(Object client) {
return 'Autoriser $client à se connecter ?';
}
@override
String get connection_request_denied => 'Connection denied. User denied access.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsHi extends AppLocalizations {
@override @override
String get add_custom_url => 'कस्टम URL जोड़ें'; String get add_custom_url => 'कस्टम URL जोड़ें';
@override
String get edit_port => 'पोर्ट संपादित करें';
@override
String get port_helper_msg => 'डिफ़ॉल्ट -1 है जो यादृच्छिक संख्या को दर्शाता है। यदि आपने फ़ायरवॉल कॉन्फ़िगर किया है, तो इसे सेट करना अनुशंसित है।';
@override
String connect_request(Object client) {
return '$client को कनेक्ट करने की अनुमति दें?';
}
@override
String get connection_request_denied => 'कनेक्शन अस्वीकृत। उपयोगकर्ता ने पहुंच अस्वीकृत कर दी।';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsId extends AppLocalizations {
@override @override
String get add_custom_url => 'Add custom URL'; String get add_custom_url => 'Add custom URL';
@override
String get edit_port => 'Edit port';
@override
String get port_helper_msg => 'Default adalah -1 yang menunjukkan angka acak. Jika Anda telah mengonfigurasi firewall, disarankan untuk mengatur ini.';
@override
String connect_request(Object client) {
return 'Izinkan $client untuk terhubung?';
}
@override
String get connection_request_denied => 'Koneksi ditolak. Pengguna menolak akses.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get add_custom_url => 'Aggiungi URL personalizzato'; String get add_custom_url => 'Aggiungi URL personalizzato';
@override
String get edit_port => 'Modifica porta';
@override
String get port_helper_msg => 'Il valore predefinito è -1, che indica un numero casuale. Se hai configurato un firewall, si consiglia di impostarlo.';
@override
String connect_request(Object client) {
return 'Consentire a $client di connettersi?';
}
@override
String get connection_request_denied => 'Connessione negata. L\'utente ha negato l\'accesso.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsJa extends AppLocalizations {
@override @override
String get add_custom_url => 'カスタムURLを追加'; String get add_custom_url => 'カスタムURLを追加';
@override
String get edit_port => 'ポートを編集';
@override
String get port_helper_msg => 'デフォルトは-1で、ランダムな番号を示します。ファイアウォールを設定している場合は、これを設定することをお勧めします。';
@override
String connect_request(Object client) {
return '$clientの接続を許可しますか';
}
@override
String get connection_request_denied => '接続が拒否されました。ユーザーがアクセスを拒否しました。';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsKa extends AppLocalizations {
@override @override
String get add_custom_url => 'დამატება პერსონალური URL'; String get add_custom_url => 'დამატება პერსონალური URL';
@override
String get edit_port => 'პორტის რედაქტირება';
@override
String get port_helper_msg => 'ნაგულისხმევი არის -1, რაც შემთხვევითი ნომრის მითითებას ნიშნავს. თუ لديك firewall настроен, рекомендуется установить это.';
@override
String connect_request(Object client) {
return '$client-ის დაკავშირების ნებართვა?';
}
@override
String get connection_request_denied => 'კავშირი უარყოფილია. მომხმარებელმა უარყო წვდომა.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsKo extends AppLocalizations {
@override @override
String get add_custom_url => '사용자 정의 URL 추가'; String get add_custom_url => '사용자 정의 URL 추가';
@override
String get edit_port => '포트 편집';
@override
String get port_helper_msg => '기본값은 -1로 무작위 숫자를 나타냅니다. 방화벽이 구성된 경우 이를 설정하는 것이 좋습니다.';
@override
String connect_request(Object client) {
return '$client의 연결을 허용하시겠습니까?';
}
@override
String get connection_request_denied => '연결이 거부되었습니다. 사용자가 액세스를 거부했습니다.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsNe extends AppLocalizations {
@override @override
String get add_custom_url => 'कस्टम URL जोड़ें'; String get add_custom_url => 'कस्टम URL जोड़ें';
@override
String get edit_port => 'पोर्ट सम्पादन गर्नुहोस्';
@override
String get port_helper_msg => 'डिफ़ॉल्ट -1 हो जुन यादृच्छिक संख्या जनाउँछ। यदि तपाईंले फायरवाल कन्फिगर गर्नुभएको छ भने, यसलाई सेट गर्न सिफारिस गरिन्छ।';
@override
String connect_request(Object client) {
return '$client लाई जडान गर्न अनुमति दिनुहोस्?';
}
@override
String get connection_request_denied => 'जडान अस्वीकृत। प्रयोगकर्ताले पहुँच अस्वीकृत गर्यो।';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get add_custom_url => 'Voeg aangepaste URL toe'; String get add_custom_url => 'Voeg aangepaste URL toe';
@override
String get edit_port => 'Poort bewerken';
@override
String get port_helper_msg => 'Standaard is -1, wat een willekeurig nummer aangeeft. Als je een firewall hebt geconfigureerd, wordt aanbevolen dit in te stellen.';
@override
String connect_request(Object client) {
return 'Toestaan dat $client verbinding maakt?';
}
@override
String get connection_request_denied => 'Verbinding geweigerd. Gebruiker heeft toegang geweigerd.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsPl extends AppLocalizations {
@override @override
String get add_custom_url => 'Dodaj niestandardowy URL'; String get add_custom_url => 'Dodaj niestandardowy URL';
@override
String get edit_port => 'Edytuj port';
@override
String get port_helper_msg => 'Domyślna wartość to -1, co oznacza losową liczbę. Jeśli masz skonfigurowany zaporę, zaleca się jej ustawienie.';
@override
String connect_request(Object client) {
return 'Zezwolić $client na połączenie?';
}
@override
String get connection_request_denied => 'Połączenie odrzucone. Użytkownik odmówił dostępu.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsPt extends AppLocalizations {
@override @override
String get add_custom_url => 'Adicionar URL personalizada'; String get add_custom_url => 'Adicionar URL personalizada';
@override
String get edit_port => 'Editar porta';
@override
String get port_helper_msg => 'O padrão é -1, que indica um número aleatório. Se você tiver um firewall configurado, é recomendável definir isso.';
@override
String connect_request(Object client) {
return 'Permitir que $client se conecte?';
}
@override
String get connection_request_denied => 'Conexão negada. O usuário negou o acesso .';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsRu extends AppLocalizations {
@override @override
String get add_custom_url => 'Добавить пользовательский URL'; String get add_custom_url => 'Добавить пользовательский URL';
@override
String get edit_port => 'Редактировать порт';
@override
String get port_helper_msg => 'По умолчанию -1, что означает случайное число. Если у вас настроен брандмауэр, рекомендуется установить это.';
@override
String connect_request(Object client) {
return 'Разрешить $client подключение?';
}
@override
String get connection_request_denied => 'Подключение отклонено. Пользователь отказал в доступе.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsTa extends AppLocalizations {
@override @override
String get add_custom_url => 'தனிப்பயன் URL ஐச் சேர்க்கவும்'; String get add_custom_url => 'தனிப்பயன் URL ஐச் சேர்க்கவும்';
@override
String get edit_port => 'போர்டு திருத்தவும்';
@override
String get port_helper_msg => 'இயல்புநிலை -1 ஆகும், இது சீரற்ற எண்ணை குறிக்கிறது. நீங்கள் தீயணைப்பு அமைக்கப்பட்டிருந்தால், இதை அமைப்பது பரிந்துரைக்கப்படுகிறது.';
@override
String connect_request(Object client) {
return '$client க்கு இணைக்க அனுமதிக்கவா?';
}
@override
String get connection_request_denied => 'இணைப்பு மறுக்கப்பட்டது. பயனர் அணுகலை மறுத்தார்.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsTh extends AppLocalizations {
@override @override
String get add_custom_url => 'เพิ่ม URL แบบกำหนดเอง'; String get add_custom_url => 'เพิ่ม URL แบบกำหนดเอง';
@override
String get edit_port => 'แก้ไขพอร์ต';
@override
String get port_helper_msg => 'ค่าเริ่มต้นคือ -1 ซึ่งหมายถึงหมายเลขสุ่ม หากคุณได้กำหนดค่าไฟร์วอลล์แล้ว แนะนำให้ตั้งค่านี้';
@override
String connect_request(Object client) {
return 'อนุญาตให้ $client เชื่อมต่อหรือไม่?';
}
@override
String get connection_request_denied => 'การเชื่อมต่อล้มเหลว ผู้ใช้ปฏิเสธการเข้าถึง';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsTl extends AppLocalizations {
@override @override
String get add_custom_url => 'Magdagdag ng custom URL'; String get add_custom_url => 'Magdagdag ng custom URL';
@override
String get edit_port => 'I-edit ang port';
@override
String get port_helper_msg => 'Ang default ay -1 na nagpapahiwatig ng random na numero. Kung na-configure mo ang firewall, inirerekomenda na itakda ito.';
@override
String connect_request(Object client) {
return 'Payagan ang $client na kumonekta?';
}
@override
String get connection_request_denied => 'Tanggihan ang koneksyon. Tinanggihan ng gumagamit ang pag-access.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsTr extends AppLocalizations {
@override @override
String get add_custom_url => 'Özel URL ekle'; String get add_custom_url => 'Özel URL ekle';
@override
String get edit_port => 'Portu düzenle';
@override
String get port_helper_msg => 'Varsayılan -1\'dir, bu da rastgele bir sayıyı gösterir. Bir güvenlik duvarınız varsa, bunu ayarlamanız önerilir.';
@override
String connect_request(Object client) {
return '$client bağlantısına izin verilsin mi?';
}
@override
String get connection_request_denied => 'Bağlantı reddedildi. Kullanıcı erişimi reddetti.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsUk extends AppLocalizations {
@override @override
String get add_custom_url => 'Додати користувацький URL'; String get add_custom_url => 'Додати користувацький URL';
@override
String get edit_port => 'Редагувати порт';
@override
String get port_helper_msg => 'За замовчуванням -1, що означає випадкове число. Якщо у вас налаштований брандмауер, рекомендується це налаштувати.';
@override
String connect_request(Object client) {
return 'Дозволити $client підключення?';
}
@override
String get connection_request_denied => 'Підключення відхилено. Користувач відмовив у доступі.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsVi extends AppLocalizations {
@override @override
String get add_custom_url => 'Thêm URL tùy chỉnh'; String get add_custom_url => 'Thêm URL tùy chỉnh';
@override
String get edit_port => 'Chỉnh sửa cổng';
@override
String get port_helper_msg => 'Mặc định là -1, có nghĩa là số ngẫu nhiên. Nếu bạn đã cấu hình tường lửa, nên đặt điều này.';
@override
String connect_request(Object client) {
return 'Cho phép $client kết nối?';
}
@override
String get connection_request_denied => 'Kết nối bị từ chối. Người dùng đã từ chối quyền truy cập.';
} }

View File

@ -1371,18 +1371,4 @@ class AppLocalizationsZh extends AppLocalizations {
@override @override
String get add_custom_url => '添加自定义 URL'; String get add_custom_url => '添加自定义 URL';
@override
String get edit_port => '编辑端口';
@override
String get port_helper_msg => '默认值为-1表示随机数。如果您已配置防火墙建议设置此项。';
@override
String connect_request(Object client) {
return '允许 $client 连接吗?';
}
@override
String get connection_request_denied => '连接被拒绝。用户拒绝访问。';
} }

View File

@ -62,7 +62,7 @@ class AppDatabase extends _$AppDatabase {
AppDatabase() : super(_openConnection()); AppDatabase() : super(_openConnection());
@override @override
int get schemaVersion => 6; int get schemaVersion => 5;
@override @override
MigrationStrategy get migration { MigrationStrategy get migration {
@ -114,13 +114,6 @@ class AppDatabase extends _$AppDatabase {
"SET $columnName = 'Orange:0xFFf97315' WHERE $columnName = 'Blue:0xFF2196F3'", "SET $columnName = 'Orange:0xFFf97315' WHERE $columnName = 'Blue:0xFF2196F3'",
); );
}, },
from5To6: (m, schema) async {
// Add new column to preferences table
await m.addColumn(
schema.preferencesTable,
schema.preferencesTable.connectPort,
);
},
), ),
); );
} }

View File

@ -823,14 +823,6 @@ class $PreferencesTableTable extends PreferencesTable
defaultConstraints: GeneratedColumn.constraintIsAlways( defaultConstraints: GeneratedColumn.constraintIsAlways(
'CHECK ("enable_connect" IN (0, 1))'), 'CHECK ("enable_connect" IN (0, 1))'),
defaultValue: const Constant(false)); defaultValue: const Constant(false));
static const VerificationMeta _connectPortMeta =
const VerificationMeta('connectPort');
@override
late final GeneratedColumn<int> connectPort = GeneratedColumn<int>(
'connect_port', aliasedName, false,
type: DriftSqlType.int,
requiredDuringInsert: false,
defaultValue: const Constant(-1));
static const VerificationMeta _cacheMusicMeta = static const VerificationMeta _cacheMusicMeta =
const VerificationMeta('cacheMusic'); const VerificationMeta('cacheMusic');
@override @override
@ -870,7 +862,6 @@ class $PreferencesTableTable extends PreferencesTable
discordPresence, discordPresence,
endlessPlayback, endlessPlayback,
enableConnect, enableConnect,
connectPort,
cacheMusic cacheMusic
]; ];
@override @override
@ -980,12 +971,6 @@ class $PreferencesTableTable extends PreferencesTable
enableConnect.isAcceptableOrUnknown( enableConnect.isAcceptableOrUnknown(
data['enable_connect']!, _enableConnectMeta)); data['enable_connect']!, _enableConnectMeta));
} }
if (data.containsKey('connect_port')) {
context.handle(
_connectPortMeta,
connectPort.isAcceptableOrUnknown(
data['connect_port']!, _connectPortMeta));
}
if (data.containsKey('cache_music')) { if (data.containsKey('cache_music')) {
context.handle( context.handle(
_cacheMusicMeta, _cacheMusicMeta,
@ -1069,8 +1054,6 @@ class $PreferencesTableTable extends PreferencesTable
.read(DriftSqlType.bool, data['${effectivePrefix}endless_playback'])!, .read(DriftSqlType.bool, data['${effectivePrefix}endless_playback'])!,
enableConnect: attachedDatabase.typeMapping enableConnect: attachedDatabase.typeMapping
.read(DriftSqlType.bool, data['${effectivePrefix}enable_connect'])!, .read(DriftSqlType.bool, data['${effectivePrefix}enable_connect'])!,
connectPort: attachedDatabase.typeMapping
.read(DriftSqlType.int, data['${effectivePrefix}connect_port'])!,
cacheMusic: attachedDatabase.typeMapping cacheMusic: attachedDatabase.typeMapping
.read(DriftSqlType.bool, data['${effectivePrefix}cache_music'])!, .read(DriftSqlType.bool, data['${effectivePrefix}cache_music'])!,
); );
@ -1143,7 +1126,6 @@ class PreferencesTableData extends DataClass
final bool discordPresence; final bool discordPresence;
final bool endlessPlayback; final bool endlessPlayback;
final bool enableConnect; final bool enableConnect;
final int connectPort;
final bool cacheMusic; final bool cacheMusic;
const PreferencesTableData( const PreferencesTableData(
{required this.id, {required this.id,
@ -1173,7 +1155,6 @@ class PreferencesTableData extends DataClass
required this.discordPresence, required this.discordPresence,
required this.endlessPlayback, required this.endlessPlayback,
required this.enableConnect, required this.enableConnect,
required this.connectPort,
required this.cacheMusic}); required this.cacheMusic});
@override @override
Map<String, Expression> toColumns(bool nullToAbsent) { Map<String, Expression> toColumns(bool nullToAbsent) {
@ -1249,7 +1230,6 @@ class PreferencesTableData extends DataClass
map['discord_presence'] = Variable<bool>(discordPresence); map['discord_presence'] = Variable<bool>(discordPresence);
map['endless_playback'] = Variable<bool>(endlessPlayback); map['endless_playback'] = Variable<bool>(endlessPlayback);
map['enable_connect'] = Variable<bool>(enableConnect); map['enable_connect'] = Variable<bool>(enableConnect);
map['connect_port'] = Variable<int>(connectPort);
map['cache_music'] = Variable<bool>(cacheMusic); map['cache_music'] = Variable<bool>(cacheMusic);
return map; return map;
} }
@ -1283,7 +1263,6 @@ class PreferencesTableData extends DataClass
discordPresence: Value(discordPresence), discordPresence: Value(discordPresence),
endlessPlayback: Value(endlessPlayback), endlessPlayback: Value(endlessPlayback),
enableConnect: Value(enableConnect), enableConnect: Value(enableConnect),
connectPort: Value(connectPort),
cacheMusic: Value(cacheMusic), cacheMusic: Value(cacheMusic),
); );
} }
@ -1331,7 +1310,6 @@ class PreferencesTableData extends DataClass
discordPresence: serializer.fromJson<bool>(json['discordPresence']), discordPresence: serializer.fromJson<bool>(json['discordPresence']),
endlessPlayback: serializer.fromJson<bool>(json['endlessPlayback']), endlessPlayback: serializer.fromJson<bool>(json['endlessPlayback']),
enableConnect: serializer.fromJson<bool>(json['enableConnect']), enableConnect: serializer.fromJson<bool>(json['enableConnect']),
connectPort: serializer.fromJson<int>(json['connectPort']),
cacheMusic: serializer.fromJson<bool>(json['cacheMusic']), cacheMusic: serializer.fromJson<bool>(json['cacheMusic']),
); );
} }
@ -1380,7 +1358,6 @@ class PreferencesTableData extends DataClass
'discordPresence': serializer.toJson<bool>(discordPresence), 'discordPresence': serializer.toJson<bool>(discordPresence),
'endlessPlayback': serializer.toJson<bool>(endlessPlayback), 'endlessPlayback': serializer.toJson<bool>(endlessPlayback),
'enableConnect': serializer.toJson<bool>(enableConnect), 'enableConnect': serializer.toJson<bool>(enableConnect),
'connectPort': serializer.toJson<int>(connectPort),
'cacheMusic': serializer.toJson<bool>(cacheMusic), 'cacheMusic': serializer.toJson<bool>(cacheMusic),
}; };
} }
@ -1413,7 +1390,6 @@ class PreferencesTableData extends DataClass
bool? discordPresence, bool? discordPresence,
bool? endlessPlayback, bool? endlessPlayback,
bool? enableConnect, bool? enableConnect,
int? connectPort,
bool? cacheMusic}) => bool? cacheMusic}) =>
PreferencesTableData( PreferencesTableData(
id: id ?? this.id, id: id ?? this.id,
@ -1443,7 +1419,6 @@ class PreferencesTableData extends DataClass
discordPresence: discordPresence ?? this.discordPresence, discordPresence: discordPresence ?? this.discordPresence,
endlessPlayback: endlessPlayback ?? this.endlessPlayback, endlessPlayback: endlessPlayback ?? this.endlessPlayback,
enableConnect: enableConnect ?? this.enableConnect, enableConnect: enableConnect ?? this.enableConnect,
connectPort: connectPort ?? this.connectPort,
cacheMusic: cacheMusic ?? this.cacheMusic, cacheMusic: cacheMusic ?? this.cacheMusic,
); );
PreferencesTableData copyWithCompanion(PreferencesTableCompanion data) { PreferencesTableData copyWithCompanion(PreferencesTableCompanion data) {
@ -1517,8 +1492,6 @@ class PreferencesTableData extends DataClass
enableConnect: data.enableConnect.present enableConnect: data.enableConnect.present
? data.enableConnect.value ? data.enableConnect.value
: this.enableConnect, : this.enableConnect,
connectPort:
data.connectPort.present ? data.connectPort.value : this.connectPort,
cacheMusic: cacheMusic:
data.cacheMusic.present ? data.cacheMusic.value : this.cacheMusic, data.cacheMusic.present ? data.cacheMusic.value : this.cacheMusic,
); );
@ -1554,7 +1527,6 @@ class PreferencesTableData extends DataClass
..write('discordPresence: $discordPresence, ') ..write('discordPresence: $discordPresence, ')
..write('endlessPlayback: $endlessPlayback, ') ..write('endlessPlayback: $endlessPlayback, ')
..write('enableConnect: $enableConnect, ') ..write('enableConnect: $enableConnect, ')
..write('connectPort: $connectPort, ')
..write('cacheMusic: $cacheMusic') ..write('cacheMusic: $cacheMusic')
..write(')')) ..write(')'))
.toString(); .toString();
@ -1589,7 +1561,6 @@ class PreferencesTableData extends DataClass
discordPresence, discordPresence,
endlessPlayback, endlessPlayback,
enableConnect, enableConnect,
connectPort,
cacheMusic cacheMusic
]); ]);
@override @override
@ -1623,7 +1594,6 @@ class PreferencesTableData extends DataClass
other.discordPresence == this.discordPresence && other.discordPresence == this.discordPresence &&
other.endlessPlayback == this.endlessPlayback && other.endlessPlayback == this.endlessPlayback &&
other.enableConnect == this.enableConnect && other.enableConnect == this.enableConnect &&
other.connectPort == this.connectPort &&
other.cacheMusic == this.cacheMusic); other.cacheMusic == this.cacheMusic);
} }
@ -1655,7 +1625,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
final Value<bool> discordPresence; final Value<bool> discordPresence;
final Value<bool> endlessPlayback; final Value<bool> endlessPlayback;
final Value<bool> enableConnect; final Value<bool> enableConnect;
final Value<int> connectPort;
final Value<bool> cacheMusic; final Value<bool> cacheMusic;
const PreferencesTableCompanion({ const PreferencesTableCompanion({
this.id = const Value.absent(), this.id = const Value.absent(),
@ -1685,7 +1654,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
this.discordPresence = const Value.absent(), this.discordPresence = const Value.absent(),
this.endlessPlayback = const Value.absent(), this.endlessPlayback = const Value.absent(),
this.enableConnect = const Value.absent(), this.enableConnect = const Value.absent(),
this.connectPort = const Value.absent(),
this.cacheMusic = const Value.absent(), this.cacheMusic = const Value.absent(),
}); });
PreferencesTableCompanion.insert({ PreferencesTableCompanion.insert({
@ -1716,7 +1684,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
this.discordPresence = const Value.absent(), this.discordPresence = const Value.absent(),
this.endlessPlayback = const Value.absent(), this.endlessPlayback = const Value.absent(),
this.enableConnect = const Value.absent(), this.enableConnect = const Value.absent(),
this.connectPort = const Value.absent(),
this.cacheMusic = const Value.absent(), this.cacheMusic = const Value.absent(),
}); });
static Insertable<PreferencesTableData> custom({ static Insertable<PreferencesTableData> custom({
@ -1747,7 +1714,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
Expression<bool>? discordPresence, Expression<bool>? discordPresence,
Expression<bool>? endlessPlayback, Expression<bool>? endlessPlayback,
Expression<bool>? enableConnect, Expression<bool>? enableConnect,
Expression<int>? connectPort,
Expression<bool>? cacheMusic, Expression<bool>? cacheMusic,
}) { }) {
return RawValuesInsertable({ return RawValuesInsertable({
@ -1782,7 +1748,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
if (discordPresence != null) 'discord_presence': discordPresence, if (discordPresence != null) 'discord_presence': discordPresence,
if (endlessPlayback != null) 'endless_playback': endlessPlayback, if (endlessPlayback != null) 'endless_playback': endlessPlayback,
if (enableConnect != null) 'enable_connect': enableConnect, if (enableConnect != null) 'enable_connect': enableConnect,
if (connectPort != null) 'connect_port': connectPort,
if (cacheMusic != null) 'cache_music': cacheMusic, if (cacheMusic != null) 'cache_music': cacheMusic,
}); });
} }
@ -1815,7 +1780,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
Value<bool>? discordPresence, Value<bool>? discordPresence,
Value<bool>? endlessPlayback, Value<bool>? endlessPlayback,
Value<bool>? enableConnect, Value<bool>? enableConnect,
Value<int>? connectPort,
Value<bool>? cacheMusic}) { Value<bool>? cacheMusic}) {
return PreferencesTableCompanion( return PreferencesTableCompanion(
id: id ?? this.id, id: id ?? this.id,
@ -1845,7 +1809,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
discordPresence: discordPresence ?? this.discordPresence, discordPresence: discordPresence ?? this.discordPresence,
endlessPlayback: endlessPlayback ?? this.endlessPlayback, endlessPlayback: endlessPlayback ?? this.endlessPlayback,
enableConnect: enableConnect ?? this.enableConnect, enableConnect: enableConnect ?? this.enableConnect,
connectPort: connectPort ?? this.connectPort,
cacheMusic: cacheMusic ?? this.cacheMusic, cacheMusic: cacheMusic ?? this.cacheMusic,
); );
} }
@ -1955,9 +1918,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
if (enableConnect.present) { if (enableConnect.present) {
map['enable_connect'] = Variable<bool>(enableConnect.value); map['enable_connect'] = Variable<bool>(enableConnect.value);
} }
if (connectPort.present) {
map['connect_port'] = Variable<int>(connectPort.value);
}
if (cacheMusic.present) { if (cacheMusic.present) {
map['cache_music'] = Variable<bool>(cacheMusic.value); map['cache_music'] = Variable<bool>(cacheMusic.value);
} }
@ -1994,7 +1954,6 @@ class PreferencesTableCompanion extends UpdateCompanion<PreferencesTableData> {
..write('discordPresence: $discordPresence, ') ..write('discordPresence: $discordPresence, ')
..write('endlessPlayback: $endlessPlayback, ') ..write('endlessPlayback: $endlessPlayback, ')
..write('enableConnect: $enableConnect, ') ..write('enableConnect: $enableConnect, ')
..write('connectPort: $connectPort, ')
..write('cacheMusic: $cacheMusic') ..write('cacheMusic: $cacheMusic')
..write(')')) ..write(')'))
.toString(); .toString();
@ -4667,7 +4626,6 @@ typedef $$PreferencesTableTableCreateCompanionBuilder
Value<bool> discordPresence, Value<bool> discordPresence,
Value<bool> endlessPlayback, Value<bool> endlessPlayback,
Value<bool> enableConnect, Value<bool> enableConnect,
Value<int> connectPort,
Value<bool> cacheMusic, Value<bool> cacheMusic,
}); });
typedef $$PreferencesTableTableUpdateCompanionBuilder typedef $$PreferencesTableTableUpdateCompanionBuilder
@ -4699,7 +4657,6 @@ typedef $$PreferencesTableTableUpdateCompanionBuilder
Value<bool> discordPresence, Value<bool> discordPresence,
Value<bool> endlessPlayback, Value<bool> endlessPlayback,
Value<bool> enableConnect, Value<bool> enableConnect,
Value<int> connectPort,
Value<bool> cacheMusic, Value<bool> cacheMusic,
}); });
@ -4829,9 +4786,6 @@ class $$PreferencesTableTableFilterComposer
ColumnFilters<bool> get enableConnect => $composableBuilder( ColumnFilters<bool> get enableConnect => $composableBuilder(
column: $table.enableConnect, builder: (column) => ColumnFilters(column)); column: $table.enableConnect, builder: (column) => ColumnFilters(column));
ColumnFilters<int> get connectPort => $composableBuilder(
column: $table.connectPort, builder: (column) => ColumnFilters(column));
ColumnFilters<bool> get cacheMusic => $composableBuilder( ColumnFilters<bool> get cacheMusic => $composableBuilder(
column: $table.cacheMusic, builder: (column) => ColumnFilters(column)); column: $table.cacheMusic, builder: (column) => ColumnFilters(column));
} }
@ -4945,9 +4899,6 @@ class $$PreferencesTableTableOrderingComposer
column: $table.enableConnect, column: $table.enableConnect,
builder: (column) => ColumnOrderings(column)); builder: (column) => ColumnOrderings(column));
ColumnOrderings<int> get connectPort => $composableBuilder(
column: $table.connectPort, builder: (column) => ColumnOrderings(column));
ColumnOrderings<bool> get cacheMusic => $composableBuilder( ColumnOrderings<bool> get cacheMusic => $composableBuilder(
column: $table.cacheMusic, builder: (column) => ColumnOrderings(column)); column: $table.cacheMusic, builder: (column) => ColumnOrderings(column));
} }
@ -5052,9 +5003,6 @@ class $$PreferencesTableTableAnnotationComposer
GeneratedColumn<bool> get enableConnect => $composableBuilder( GeneratedColumn<bool> get enableConnect => $composableBuilder(
column: $table.enableConnect, builder: (column) => column); column: $table.enableConnect, builder: (column) => column);
GeneratedColumn<int> get connectPort => $composableBuilder(
column: $table.connectPort, builder: (column) => column);
GeneratedColumn<bool> get cacheMusic => $composableBuilder( GeneratedColumn<bool> get cacheMusic => $composableBuilder(
column: $table.cacheMusic, builder: (column) => column); column: $table.cacheMusic, builder: (column) => column);
} }
@ -5115,7 +5063,6 @@ class $$PreferencesTableTableTableManager extends RootTableManager<
Value<bool> discordPresence = const Value.absent(), Value<bool> discordPresence = const Value.absent(),
Value<bool> endlessPlayback = const Value.absent(), Value<bool> endlessPlayback = const Value.absent(),
Value<bool> enableConnect = const Value.absent(), Value<bool> enableConnect = const Value.absent(),
Value<int> connectPort = const Value.absent(),
Value<bool> cacheMusic = const Value.absent(), Value<bool> cacheMusic = const Value.absent(),
}) => }) =>
PreferencesTableCompanion( PreferencesTableCompanion(
@ -5146,7 +5093,6 @@ class $$PreferencesTableTableTableManager extends RootTableManager<
discordPresence: discordPresence, discordPresence: discordPresence,
endlessPlayback: endlessPlayback, endlessPlayback: endlessPlayback,
enableConnect: enableConnect, enableConnect: enableConnect,
connectPort: connectPort,
cacheMusic: cacheMusic, cacheMusic: cacheMusic,
), ),
createCompanionCallback: ({ createCompanionCallback: ({
@ -5178,7 +5124,6 @@ class $$PreferencesTableTableTableManager extends RootTableManager<
Value<bool> discordPresence = const Value.absent(), Value<bool> discordPresence = const Value.absent(),
Value<bool> endlessPlayback = const Value.absent(), Value<bool> endlessPlayback = const Value.absent(),
Value<bool> enableConnect = const Value.absent(), Value<bool> enableConnect = const Value.absent(),
Value<int> connectPort = const Value.absent(),
Value<bool> cacheMusic = const Value.absent(), Value<bool> cacheMusic = const Value.absent(),
}) => }) =>
PreferencesTableCompanion.insert( PreferencesTableCompanion.insert(
@ -5209,7 +5154,6 @@ class $$PreferencesTableTableTableManager extends RootTableManager<
discordPresence: discordPresence, discordPresence: discordPresence,
endlessPlayback: endlessPlayback, endlessPlayback: endlessPlayback,
enableConnect: enableConnect, enableConnect: enableConnect,
connectPort: connectPort,
cacheMusic: cacheMusic, cacheMusic: cacheMusic,
), ),
withReferenceMapper: (p0) => p0 withReferenceMapper: (p0) => p0

View File

@ -1,11 +1,11 @@
// dart format width=80 // dart format width=80
import 'package:drift/internal/versioned_schema.dart' as i0; import 'package:drift/internal/versioned_schema.dart' as i0;
import 'package:drift/drift.dart' as i1; import 'package:drift/drift.dart' as i1;
import 'package:drift/drift.dart'; // ignore_for_file: type=lint,unused_import import 'package:drift/drift.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/models/database/database.dart'; import 'package:spotube/models/database/database.dart';
import 'package:spotube/services/sourced_track/enums.dart'; import 'package:spotube/services/sourced_track/enums.dart'; // ignore_for_file: type=lint,unused_import
// GENERATED BY drift_dev, DO NOT MODIFY. // GENERATED BY drift_dev, DO NOT MODIFY.
final class Schema2 extends i0.VersionedSchema { final class Schema2 extends i0.VersionedSchema {
@ -1409,295 +1409,11 @@ i1.GeneratedColumn<String> _column_55(String aliasedName) =>
i1.GeneratedColumn<String>('accent_color_scheme', aliasedName, false, i1.GeneratedColumn<String>('accent_color_scheme', aliasedName, false,
type: i1.DriftSqlType.string, type: i1.DriftSqlType.string,
defaultValue: const Constant("Orange:0xFFf97315")); defaultValue: const Constant("Orange:0xFFf97315"));
final class Schema6 extends i0.VersionedSchema {
Schema6({required super.database}) : super(version: 6);
@override
late final List<i1.DatabaseSchemaEntity> entities = [
authenticationTable,
blacklistTable,
preferencesTable,
scrobblerTable,
skipSegmentTable,
sourceMatchTable,
audioPlayerStateTable,
playlistTable,
playlistMediaTable,
historyTable,
lyricsTable,
uniqueBlacklist,
uniqTrackMatch,
];
late final Shape0 authenticationTable = Shape0(
source: i0.VersionedTable(
entityName: 'authentication_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_1,
_column_2,
_column_3,
],
attachedDatabase: database,
),
alias: null);
late final Shape1 blacklistTable = Shape1(
source: i0.VersionedTable(
entityName: 'blacklist_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_4,
_column_5,
_column_6,
],
attachedDatabase: database,
),
alias: null);
late final Shape13 preferencesTable = Shape13(
source: i0.VersionedTable(
entityName: 'preferences_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_7,
_column_8,
_column_9,
_column_10,
_column_11,
_column_12,
_column_13,
_column_14,
_column_15,
_column_55,
_column_17,
_column_18,
_column_19,
_column_20,
_column_21,
_column_22,
_column_23,
_column_24,
_column_25,
_column_26,
_column_54,
_column_27,
_column_28,
_column_29,
_column_30,
_column_31,
_column_56,
_column_53,
],
attachedDatabase: database,
),
alias: null);
late final Shape3 scrobblerTable = Shape3(
source: i0.VersionedTable(
entityName: 'scrobbler_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_32,
_column_33,
_column_34,
],
attachedDatabase: database,
),
alias: null);
late final Shape4 skipSegmentTable = Shape4(
source: i0.VersionedTable(
entityName: 'skip_segment_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_35,
_column_36,
_column_37,
_column_32,
],
attachedDatabase: database,
),
alias: null);
late final Shape5 sourceMatchTable = Shape5(
source: i0.VersionedTable(
entityName: 'source_match_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_37,
_column_38,
_column_39,
_column_32,
],
attachedDatabase: database,
),
alias: null);
late final Shape6 audioPlayerStateTable = Shape6(
source: i0.VersionedTable(
entityName: 'audio_player_state_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_40,
_column_41,
_column_42,
_column_43,
],
attachedDatabase: database,
),
alias: null);
late final Shape7 playlistTable = Shape7(
source: i0.VersionedTable(
entityName: 'playlist_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_44,
_column_45,
],
attachedDatabase: database,
),
alias: null);
late final Shape8 playlistMediaTable = Shape8(
source: i0.VersionedTable(
entityName: 'playlist_media_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_46,
_column_47,
_column_48,
_column_49,
],
attachedDatabase: database,
),
alias: null);
late final Shape9 historyTable = Shape9(
source: i0.VersionedTable(
entityName: 'history_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_32,
_column_50,
_column_51,
_column_52,
],
attachedDatabase: database,
),
alias: null);
late final Shape10 lyricsTable = Shape10(
source: i0.VersionedTable(
entityName: 'lyrics_table',
withoutRowId: false,
isStrict: false,
tableConstraints: [],
columns: [
_column_0,
_column_37,
_column_52,
],
attachedDatabase: database,
),
alias: null);
final i1.Index uniqueBlacklist = i1.Index('unique_blacklist',
'CREATE UNIQUE INDEX unique_blacklist ON blacklist_table (element_type, element_id)');
final i1.Index uniqTrackMatch = i1.Index('uniq_track_match',
'CREATE UNIQUE INDEX uniq_track_match ON source_match_table (track_id, source_id, source_type)');
}
class Shape13 extends i0.VersionedTable {
Shape13({required super.source, required super.alias}) : super.aliased();
i1.GeneratedColumn<int> get id =>
columnsByName['id']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<String> get audioQuality =>
columnsByName['audio_quality']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get albumColorSync =>
columnsByName['album_color_sync']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get amoledDarkTheme =>
columnsByName['amoled_dark_theme']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get checkUpdate =>
columnsByName['check_update']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get normalizeAudio =>
columnsByName['normalize_audio']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get showSystemTrayIcon =>
columnsByName['show_system_tray_icon']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get systemTitleBar =>
columnsByName['system_title_bar']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get skipNonMusic =>
columnsByName['skip_non_music']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<String> get closeBehavior =>
columnsByName['close_behavior']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get accentColorScheme =>
columnsByName['accent_color_scheme']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get layoutMode =>
columnsByName['layout_mode']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get locale =>
columnsByName['locale']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get market =>
columnsByName['market']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get searchMode =>
columnsByName['search_mode']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get downloadLocation =>
columnsByName['download_location']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get localLibraryLocation =>
columnsByName['local_library_location']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get pipedInstance =>
columnsByName['piped_instance']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get invidiousInstance =>
columnsByName['invidious_instance']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get themeMode =>
columnsByName['theme_mode']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get audioSource =>
columnsByName['audio_source']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get youtubeClientEngine =>
columnsByName['youtube_client_engine']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get streamMusicCodec =>
columnsByName['stream_music_codec']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<String> get downloadMusicCodec =>
columnsByName['download_music_codec']! as i1.GeneratedColumn<String>;
i1.GeneratedColumn<bool> get discordPresence =>
columnsByName['discord_presence']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get endlessPlayback =>
columnsByName['endless_playback']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<bool> get enableConnect =>
columnsByName['enable_connect']! as i1.GeneratedColumn<bool>;
i1.GeneratedColumn<int> get connectPort =>
columnsByName['connect_port']! as i1.GeneratedColumn<int>;
i1.GeneratedColumn<bool> get cacheMusic =>
columnsByName['cache_music']! as i1.GeneratedColumn<bool>;
}
i1.GeneratedColumn<int> _column_56(String aliasedName) =>
i1.GeneratedColumn<int>('connect_port', aliasedName, false,
type: i1.DriftSqlType.int, defaultValue: const Constant(-1));
i0.MigrationStepWithVersion migrationSteps({ i0.MigrationStepWithVersion migrationSteps({
required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2, required Future<void> Function(i1.Migrator m, Schema2 schema) from1To2,
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3, required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4, required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5, required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
}) { }) {
return (currentVersion, database) async { return (currentVersion, database) async {
switch (currentVersion) { switch (currentVersion) {
@ -1721,11 +1437,6 @@ i0.MigrationStepWithVersion migrationSteps({
final migrator = i1.Migrator(database, schema); final migrator = i1.Migrator(database, schema);
await from4To5(migrator, schema); await from4To5(migrator, schema);
return 5; return 5;
case 5:
final schema = Schema6(database: database);
final migrator = i1.Migrator(database, schema);
await from5To6(migrator, schema);
return 6;
default: default:
throw ArgumentError.value('Unknown migration from $currentVersion'); throw ArgumentError.value('Unknown migration from $currentVersion');
} }
@ -1737,7 +1448,6 @@ i1.OnUpgrade stepByStep({
required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3, required Future<void> Function(i1.Migrator m, Schema3 schema) from2To3,
required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4, required Future<void> Function(i1.Migrator m, Schema4 schema) from3To4,
required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5, required Future<void> Function(i1.Migrator m, Schema5 schema) from4To5,
required Future<void> Function(i1.Migrator m, Schema6 schema) from5To6,
}) => }) =>
i0.VersionedSchema.stepByStepHelper( i0.VersionedSchema.stepByStepHelper(
step: migrationSteps( step: migrationSteps(
@ -1745,5 +1455,4 @@ i1.OnUpgrade stepByStep({
from2To3: from2To3, from2To3: from2To3,
from3To4: from3To4, from3To4: from3To4,
from4To5: from4To5, from4To5: from4To5,
from5To6: from5To6,
)); ));

View File

@ -115,7 +115,6 @@ class PreferencesTable extends Table {
boolean().withDefault(const Constant(true))(); boolean().withDefault(const Constant(true))();
BoolColumn get enableConnect => BoolColumn get enableConnect =>
boolean().withDefault(const Constant(false))(); boolean().withDefault(const Constant(false))();
IntColumn get connectPort => integer().withDefault(const Constant(-1))();
BoolColumn get cacheMusic => boolean().withDefault(const Constant(true))(); BoolColumn get cacheMusic => boolean().withDefault(const Constant(true))();
// Default values as PreferencesTableData // Default values as PreferencesTableData
@ -149,7 +148,6 @@ class PreferencesTable extends Table {
endlessPlayback: true, endlessPlayback: true,
enableConnect: false, enableConnect: false,
cacheMusic: true, cacheMusic: true,
connectPort: -1,
); );
} }
} }

View File

@ -1,97 +0,0 @@
import 'package:flutter/services.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:form_builder_validators/form_builder_validators.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/components/form/text_form_field.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/hooks/controllers/use_shadcn_text_editing_controller.dart';
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
class SettingsPlaybackEditConnectPortDialog extends HookConsumerWidget {
const SettingsPlaybackEditConnectPortDialog({super.key});
@override
Widget build(BuildContext context, ref) {
final connectPort = ref.watch(
userPreferencesProvider.select((s) => s.connectPort),
);
final controller = useShadcnTextEditingController(
text: connectPort.toString(),
);
final formKey = useMemoized(() => GlobalKey<FormBuilderState>(), []);
return ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 400),
child: Alert(
title: Text(context.l10n.edit_port).h4(),
content: FormBuilder(
key: formKey,
child: Column(
children: [
const Gap(10),
TextFormBuilderField(
name: "port",
controller: controller,
placeholder: const Text("3000"),
validator: FormBuilderValidators.integer(radix: 10),
keyboardType: TextInputType.number,
inputFormatters: [
// Allow only signed integers
TextInputFormatter.withFunction(
(oldValue, newValue) {
if (newValue.text.isEmpty) {
return const TextEditingValue();
}
if (newValue.text.length == 1 && newValue.text == "-") {
return newValue;
}
final intValue = int.tryParse(newValue.text);
if (intValue == null) {
return oldValue;
}
return newValue;
},
),
],
),
const Gap(5),
Text(context.l10n.port_helper_msg).small.muted,
const Gap(20),
Row(
children: [
Expanded(
child: Button.secondary(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(context.l10n.cancel),
),
),
const Gap(10),
Expanded(
child: Button.primary(
onPressed: () {
if (!formKey.currentState!.saveAndValidate()) {
return;
}
final port = int.parse(controller.text);
ref
.read(userPreferencesProvider.notifier)
.setConnectPort(port);
Navigator.of(context).pop();
},
child: Text(context.l10n.save),
),
),
],
),
],
),
),
),
);
}
}

View File

@ -1,75 +0,0 @@
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:form_builder_validators/form_builder_validators.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/components/form/text_form_field.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/hooks/controllers/use_shadcn_text_editing_controller.dart';
class SettingsPlaybackEditInstanceUrlDialog extends HookConsumerWidget {
final String title;
final String? initialValue;
final ValueChanged<String> onSave;
const SettingsPlaybackEditInstanceUrlDialog({
super.key,
required this.title,
required this.onSave,
this.initialValue,
});
@override
Widget build(BuildContext context, ref) {
final controller = useShadcnTextEditingController(
text: initialValue,
);
final formKey = useMemoized(() => GlobalKey<FormBuilderState>(), []);
return Alert(
title: Text(title).h4(),
content: FormBuilder(
key: formKey,
child: Column(
children: [
const Gap(10),
TextFormBuilderField(
name: "url",
controller: controller,
placeholder: Text(title),
validator: FormBuilderValidators.url(),
),
const Gap(10),
Row(
children: [
Expanded(
child: Button.secondary(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(context.l10n.cancel),
),
),
const Gap(10),
Expanded(
child: Button.primary(
onPressed: () {
if (!formKey.currentState!.saveAndValidate()) {
return;
}
onSave(
controller.text,
);
Navigator.of(context).pop();
},
child: Text(context.l10n.save),
),
),
],
)
],
),
),
);
}
}

View File

@ -1,13 +1,9 @@
import 'dart:convert';
import 'package:auto_route/auto_route.dart'; import 'package:auto_route/auto_route.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart' hide Consumer; import 'package:shadcn_flutter/shadcn_flutter.dart' hide Consumer;
import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
import 'package:spotube/collections/routes.gr.dart'; import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/models/connect/connect.dart';
import 'package:spotube/modules/player/player_queue.dart'; import 'package:spotube/modules/player/player_queue.dart';
import 'package:spotube/modules/player/volume_slider.dart'; import 'package:spotube/modules/player/volume_slider.dart';
import 'package:spotube/components/image/universal_image.dart'; import 'package:spotube/components/image/universal_image.dart';
@ -61,7 +57,6 @@ class ConnectControlPage extends HookConsumerWidget {
final resolvedService = final resolvedService =
ref.watch(connectClientsProvider).asData?.value.resolvedService; ref.watch(connectClientsProvider).asData?.value.resolvedService;
final connect = ref.watch(connectProvider);
final connectNotifier = ref.read(connectProvider.notifier); final connectNotifier = ref.read(connectProvider.notifier);
final playlist = ref.watch(queueProvider); final playlist = ref.watch(queueProvider);
final playing = ref.watch(playingProvider); final playing = ref.watch(playingProvider);
@ -74,32 +69,12 @@ class ConnectControlPage extends HookConsumerWidget {
} }
}); });
useEffect(() {
if (connect.asData?.value == null) return null;
final subscription = connect.asData?.value?.stream.listen((message) {
final event = WebSocketEvent.fromJson(
jsonDecode(message),
(data) => data,
);
event.onError((event) {
if (event.data != "Connection denied") return;
if (!context.mounted) return;
context.back();
});
});
return () {
subscription?.cancel();
};
}, [connect.asData?.value]);
return SafeArea( return SafeArea(
bottom: false, bottom: false,
child: Scaffold( child: Scaffold(
headers: [ headers: [
TitleBar( TitleBar(
title: Text(resolvedService?.name ?? ""), title: Text(resolvedService!.name),
) )
], ],
child: LayoutBuilder(builder: (context, constrains) { child: LayoutBuilder(builder: (context, constrains) {
@ -272,8 +247,7 @@ class ConnectControlPage extends HookConsumerWidget {
), ),
Tooltip( Tooltip(
tooltip: TooltipContainer( tooltip: TooltipContainer(
child: Text(context.l10n.next_track)) child: Text(context.l10n.next_track)).call,
.call,
child: IconButton.ghost( child: IconButton.ghost(
icon: const Icon(SpotubeIcons.skipForward), icon: const Icon(SpotubeIcons.skipForward),
onPressed: playlist.activeTrack == null onPressed: playlist.activeTrack == null

View File

@ -4,6 +4,9 @@ import 'package:auto_route/auto_route.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart' show ListTile; import 'package:flutter/material.dart' show ListTile;
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:form_builder_validators/form_builder_validators.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
@ -11,9 +14,9 @@ import 'package:piped_client/piped_client.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart' hide Consumer; import 'package:shadcn_flutter/shadcn_flutter.dart' hide Consumer;
import 'package:spotube/collections/routes.gr.dart'; import 'package:spotube/collections/routes.gr.dart';
import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/components/form/text_form_field.dart';
import 'package:spotube/hooks/controllers/use_shadcn_text_editing_controller.dart';
import 'package:spotube/models/database/database.dart'; import 'package:spotube/models/database/database.dart';
import 'package:spotube/modules/settings/playback/edit_connect_port_dialog.dart';
import 'package:spotube/modules/settings/playback/edit_instance_url_dialog.dart';
import 'package:spotube/modules/settings/section_card_with_heading.dart'; import 'package:spotube/modules/settings/section_card_with_heading.dart';
import 'package:spotube/components/adaptive/adaptive_select_tile.dart'; import 'package:spotube/components/adaptive/adaptive_select_tile.dart';
import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/context.dart';
@ -111,12 +114,67 @@ class SettingsPlaybackSection extends HookConsumerWidget {
showDialog( showDialog(
context: context, context: context,
barrierColor: Colors.black.withValues(alpha: 0.5), barrierColor: Colors.black.withValues(alpha: 0.5),
builder: (context) => builder: (context) => HookBuilder(
SettingsPlaybackEditInstanceUrlDialog( builder: (context) {
title: context.l10n.piped_instance, final controller =
initialValue: preferences.pipedInstance, useShadcnTextEditingController(
onSave: (value) { text: preferences.pipedInstance,
preferencesNotifier.setPipedInstance(value); );
final formKey = useMemoized(
() => GlobalKey<FormBuilderState>(), []);
return Alert(
title:
Text(context.l10n.piped_instance).h4(),
content: FormBuilder(
key: formKey,
child: Column(
children: [
const Gap(10),
TextFormBuilderField(
name: "url",
controller: controller,
placeholder: Text(
context.l10n.piped_instance),
validator:
FormBuilderValidators.url(),
),
const Gap(10),
Row(
children: [
Expanded(
child: Button.secondary(
onPressed: () {
Navigator.of(context).pop();
},
child:
Text(context.l10n.cancel),
),
),
const Gap(10),
Expanded(
child: Button.primary(
onPressed: () {
if (!formKey.currentState!
.saveAndValidate()) {
return;
}
preferencesNotifier
.setPipedInstance(
controller.text,
);
Navigator.of(context).pop();
},
child:
Text(context.l10n.save),
),
),
],
)
],
),
),
);
}, },
), ),
); );
@ -211,13 +269,67 @@ class SettingsPlaybackSection extends HookConsumerWidget {
showDialog( showDialog(
context: context, context: context,
barrierColor: Colors.black.withValues(alpha: 0.5), barrierColor: Colors.black.withValues(alpha: 0.5),
builder: (context) => builder: (context) => HookBuilder(
SettingsPlaybackEditInstanceUrlDialog( builder: (context) {
title: context.l10n.invidious_instance, final controller =
initialValue: preferences.invidiousInstance, useShadcnTextEditingController(
onSave: (value) { text: preferences.invidiousInstance,
preferencesNotifier );
.setInvidiousInstance(value); final formKey = useMemoized(
() => GlobalKey<FormBuilderState>(), []);
return Alert(
title: Text(context.l10n.invidious_instance)
.h4(),
content: FormBuilder(
key: formKey,
child: Column(
children: [
const Gap(10),
TextFormBuilderField(
name: "url",
controller: controller,
placeholder: Text(context
.l10n.invidious_instance),
validator:
FormBuilderValidators.url(),
),
const Gap(10),
Row(
children: [
Expanded(
child: Button.secondary(
onPressed: () {
Navigator.of(context).pop();
},
child:
Text(context.l10n.cancel),
),
),
const Gap(10),
Expanded(
child: Button.primary(
onPressed: () {
if (!formKey.currentState!
.saveAndValidate()) {
return;
}
preferencesNotifier
.setInvidiousInstance(
controller.text,
);
Navigator.of(context).pop();
},
child:
Text(context.l10n.save),
),
),
],
)
],
),
),
);
}, },
), ),
); );
@ -449,32 +561,9 @@ class SettingsPlaybackSection extends HookConsumerWidget {
title: Text(context.l10n.enable_connect), title: Text(context.l10n.enable_connect),
subtitle: Text(context.l10n.enable_connect_description), subtitle: Text(context.l10n.enable_connect_description),
leading: const Icon(SpotubeIcons.connect), leading: const Icon(SpotubeIcons.connect),
trailing: Row( trailing: Switch(
mainAxisSize: MainAxisSize.min, value: preferences.enableConnect,
spacing: 10, onChanged: preferencesNotifier.setEnableConnect,
children: [
Tooltip(
tooltip: TooltipContainer(
child: Text(context.l10n.edit_port),
).call,
child: IconButton.outline(
icon: const Icon(SpotubeIcons.edit),
size: ButtonSize.small,
onPressed: () {
showDialog(
context: context,
barrierColor: Colors.black.withValues(alpha: 0.5),
builder: (context) =>
const SettingsPlaybackEditConnectPortDialog(),
);
},
),
),
Switch(
value: preferences.enableConnect,
onChanged: preferencesNotifier.setEnableConnect,
),
],
), ),
), ),
], ],

View File

@ -1,10 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:media_kit/media_kit.dart' hide Track; import 'package:media_kit/media_kit.dart' hide Track;
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:spotube/collections/routes.dart';
import 'package:spotube/collections/spotube_icons.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/provider/audio_player/state.dart'; import 'package:spotube/provider/audio_player/state.dart';
import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/services/logger/logger.dart'; import 'package:spotube/services/logger/logger.dart';
@ -50,17 +46,15 @@ final volumeProvider = StateProvider<double>(
(ref) => 1.0, (ref) => 1.0,
); );
typedef ConnectState = ({WebSocketChannel channel, Stream stream}); class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> {
class ConnectNotifier extends AsyncNotifier<ConnectState?> {
@override @override
build() async { build() async {
try { try {
final connectClients = await ref.watch(connectClientsProvider.future); final connectClients = ref.watch(connectClientsProvider);
if (connectClients.resolvedService == null) return null; if (connectClients.asData?.value.resolvedService == null) return null;
final service = connectClients.resolvedService!; final service = connectClients.asData!.value.resolvedService!;
AppLogger.log.t( AppLogger.log.t(
'♾️ Connecting to ${service.name}: ws://${service.host}:${service.port}/ws', '♾️ Connecting to ${service.name}: ws://${service.host}:${service.port}/ws',
@ -76,9 +70,7 @@ class ConnectNotifier extends AsyncNotifier<ConnectState?> {
'✅ Connected to ${service.name}: ws://${service.host}:${service.port}/ws', '✅ Connected to ${service.name}: ws://${service.host}:${service.port}/ws',
); );
final stream = channel.stream.asBroadcastStream(); final subscription = channel.stream.listen(
final subscription = stream.listen(
(message) { (message) {
final event = final event =
WebSocketEvent.fromJson(jsonDecode(message), (data) => data); WebSocketEvent.fromJson(jsonDecode(message), (data) => data);
@ -110,38 +102,6 @@ class ConnectNotifier extends AsyncNotifier<ConnectState?> {
event.onVolume((event) { event.onVolume((event) {
ref.read(volumeProvider.notifier).state = event.data; ref.read(volumeProvider.notifier).state = event.data;
}); });
event.onError((event) {
if (event.data == "Connection denied") {
ref.read(connectClientsProvider.notifier).clearResolvedService();
if (rootNavigatorKey.currentContext?.mounted == true) {
final theme = Theme.of(rootNavigatorKey.currentContext!);
showToast(
context: rootNavigatorKey.currentContext!,
location: ToastLocation.topRight,
dismissible: true,
builder: (context, overlay) {
return SurfaceCard(
fillColor: theme.colorScheme.destructive,
filled: true,
child: Basic(
leading: const Icon(SpotubeIcons.error),
title: Text(
context.l10n.connection_request_denied,
style: theme.typography.normal.copyWith(
color: theme.colorScheme.destructiveForeground,
),
),
leadingAlignment: Alignment.center,
),
);
},
);
}
}
});
}, },
onError: (error) { onError: (error) {
AppLogger.reportError(error, StackTrace.current); AppLogger.reportError(error, StackTrace.current);
@ -153,7 +113,7 @@ class ConnectNotifier extends AsyncNotifier<ConnectState?> {
channel.sink.close(status.goingAway); channel.sink.close(status.goingAway);
}); });
return (channel: channel, stream: stream); return channel;
} catch (e, stack) { } catch (e, stack) {
AppLogger.reportError(e, stack); AppLogger.reportError(e, stack);
rethrow; rethrow;
@ -162,7 +122,7 @@ class ConnectNotifier extends AsyncNotifier<ConnectState?> {
Future<void> emit(Object message) async { Future<void> emit(Object message) async {
if (state.value == null) return; if (state.value == null) return;
state.value?.channel.sink.add( state.value?.sink.add(
message is String ? message : (message as dynamic).toJson(), message is String ? message : (message as dynamic).toJson(),
); );
} }
@ -224,6 +184,7 @@ class ConnectNotifier extends AsyncNotifier<ConnectState?> {
} }
} }
final connectProvider = AsyncNotifierProvider<ConnectNotifier, ConnectState?>( final connectProvider =
AsyncNotifierProvider<ConnectNotifier, WebSocketChannel?>(
() => ConnectNotifier(), () => ConnectNotifier(),
); );

View File

@ -15,7 +15,6 @@ import 'package:spotube/models/local_track.dart';
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
// ignore: depend_on_referenced_packages // ignore: depend_on_referenced_packages
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart' show FrbException; import 'package:flutter_rust_bridge/flutter_rust_bridge.dart' show FrbException;
import 'package:spotube/utils/service_utils.dart';
const supportedAudioTypes = [ const supportedAudioTypes = [
"audio/webm", "audio/webm",
@ -91,15 +90,12 @@ final localTracksProvider =
try { try {
final metadata = await MetadataGod.readMetadata(file: file.path); final metadata = await MetadataGod.readMetadata(file: file.path);
final imageFile = File( final imageFile = File(join(
join( (await getTemporaryDirectory()).path,
(await getTemporaryDirectory()).path, "spotube",
"spotube", basenameWithoutExtension(file.path) +
ServiceUtils.sanitizeFilename( imgMimeToExt[metadata.picture?.mimeType ?? "image/jpeg"]!,
basenameWithoutExtension(file.path)) + ));
imgMimeToExt[metadata.picture?.mimeType ?? "image/jpeg"]!,
),
);
if (!await imageFile.exists() && metadata.picture != null) { if (!await imageFile.exists() && metadata.picture != null) {
await imageFile.create(recursive: true); await imageFile.create(recursive: true);
await imageFile.writeAsBytes( await imageFile.writeAsBytes(

View File

@ -3,12 +3,9 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shadcn_flutter/shadcn_flutter.dart';
import 'package:shelf/shelf.dart'; import 'package:shelf/shelf.dart';
import 'package:shelf_web_socket/shelf_web_socket.dart'; import 'package:shelf_web_socket/shelf_web_socket.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/collections/routes.dart';
import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/connect/connect.dart'; import 'package:spotube/models/connect/connect.dart';
import 'package:spotube/provider/history/history.dart'; import 'package:spotube/provider/history/history.dart';
@ -46,8 +43,6 @@ class ServerConnectRoutes {
Stream<String> get connectClientStream => Stream<String> get connectClientStream =>
_connectClientStreamController.stream; _connectClientStreamController.stream;
final List<String> _allowedConnections = [];
FutureOr<Response> websocket(Request req) { FutureOr<Response> websocket(Request req) {
return webSocketHandler( return webSocketHandler(
( (
@ -59,47 +54,6 @@ class ServerConnectRoutes {
final origin = "${context?.remoteAddress.host}:${context?.remotePort}"; final origin = "${context?.remoteAddress.host}:${context?.remotePort}";
_connectClientStreamController.add(origin); _connectClientStreamController.add(origin);
// Confirm whether user allows to connect
if (rootNavigatorKey.currentContext?.mounted == true &&
_allowedConnections.contains(origin) == false) {
final confirmed = await showDialog<bool>(
context: rootNavigatorKey.currentContext!,
builder: (context) {
return AlertDialog(
title: Text(context.l10n.connect),
content: Text(
context.l10n.connect_request(origin),
),
actions: [
Button.secondary(
onPressed: () {
Navigator.of(context).pop(false);
},
child: Text(context.l10n.decline),
),
Button.primary(
onPressed: () {
Navigator.of(context).pop(true);
},
child: Text(context.l10n.accept),
),
],
);
},
) ??
false;
if (confirmed) {
_allowedConnections.add(origin);
} else {
channel.sink.addEvent(
WebSocketErrorEvent("Connection denied"),
);
await channel.sink.close();
return;
}
}
ref.listen( ref.listen(
audioPlayerProvider, audioPlayerProvider,
(previous, next) { (previous, next) {
@ -152,7 +106,7 @@ class ServerConnectRoutes {
}, },
), ),
channel.stream.listen( channel.stream.listen(
(message) async { (message) {
try { try {
final event = WebSocketEvent.fromJson( final event = WebSocketEvent.fromJson(
jsonDecode(message), jsonDecode(message),

View File

@ -54,9 +54,7 @@ class ServerPlaybackRoutes {
final trackCacheFile = File( final trackCacheFile = File(
join( join(
await UserPreferencesNotifier.getMusicCacheDir(), await UserPreferencesNotifier.getMusicCacheDir(),
ServiceUtils.sanitizeFilename( '${track.name} - ${track.artists?.asString()} (${track.sourceInfo.id}).${track.codec.name}',
'${track.name} - ${track.artists?.asString()} (${track.sourceInfo.id}).${track.codec.name}',
),
), ),
); );
final trackPartialCacheFile = File("${trackCacheFile.path}.part"); final trackPartialCacheFile = File("${trackCacheFile.path}.part");

View File

@ -5,51 +5,30 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:shelf/shelf_io.dart'; import 'package:shelf/shelf_io.dart';
import 'package:spotube/provider/server/pipeline.dart'; import 'package:spotube/provider/server/pipeline.dart';
import 'package:spotube/provider/server/router.dart'; import 'package:spotube/provider/server/router.dart';
import 'package:spotube/provider/user_preferences/user_preferences_provider.dart';
import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/services/logger/logger.dart'; import 'package:spotube/services/logger/logger.dart';
final serverProvider = FutureProvider( final serverProvider = FutureProvider(
(ref) async { (ref) async {
final enabledRemoteConnect = ref.watch(
userPreferencesProvider.select((value) => value.enableConnect),
);
final connectPort = ref.watch(
userPreferencesProvider.select((value) => value.connectPort),
);
final pipeline = ref.watch(pipelineProvider); final pipeline = ref.watch(pipelineProvider);
final router = ref.watch(serverRouterProvider); final router = ref.watch(serverRouterProvider);
final port = Random().nextInt(17500) + 5000;
// When connect port is -1, we need to generate a random port SpotubeMedia.serverPort = port;
// but we shouldn't reset it if it's already been set (caused by a state change)
if (connectPort == -1) {
if (SpotubeMedia.serverPort == 0) {
final port = Random().nextInt(17500) + 5000;
SpotubeMedia.serverPort = port;
}
} else {
SpotubeMedia.serverPort = connectPort;
}
final server = await serve( final server = await serve(
pipeline.addHandler(router.call), pipeline.addHandler(router.call),
enabledRemoteConnect InternetAddress.anyIPv4,
? InternetAddress.anyIPv4 port,
: InternetAddress.loopbackIPv4,
SpotubeMedia.serverPort,
); );
AppLogger.log.t( AppLogger.log
'Playback server at http://${server.address.host}:${server.port}', .t('Playback server at http://${server.address.host}:${server.port}');
);
ref.onDispose(() { ref.onDispose(() {
server.close(); server.close();
}); });
return ( return (server: server, port: port);
server: server,
port: SpotubeMedia.serverPort,
);
}, },
); );

View File

@ -240,14 +240,6 @@ class UserPreferencesNotifier extends Notifier<PreferencesTableData> {
setData(PreferencesTableCompanion(enableConnect: Value(enable))); setData(PreferencesTableCompanion(enableConnect: Value(enable)));
} }
void setConnectPort(int port) {
assert(
port >= -1 && port <= 65535,
"Port must be between -1 and 65535, got $port",
);
setData(PreferencesTableCompanion(connectPort: Value(port)));
}
void setCacheMusic(bool cache) { void setCacheMusic(bool cache) {
setData(PreferencesTableCompanion(cacheMusic: Value(cache))); setData(PreferencesTableCompanion(cacheMusic: Value(cache)));
} }

View File

@ -434,37 +434,4 @@ abstract class ServiceUtils {
return "Mozilla/5.0 (Linux; Android ${randomNumber(8, 13)}) AppleWebKit/${randomNumber(530, 537)}.${randomNumber(30, 36)} (KHTML, like Gecko) Chrome/${randomNumber(101, 116)}.0.${randomNumber(3000, 6000)}.${randomNumber(60, 125)} Mobile Safari/${randomNumber(530, 537)}.${randomNumber(30, 36)}"; return "Mozilla/5.0 (Linux; Android ${randomNumber(8, 13)}) AppleWebKit/${randomNumber(530, 537)}.${randomNumber(30, 36)} (KHTML, like Gecko) Chrome/${randomNumber(101, 116)}.0.${randomNumber(3000, 6000)}.${randomNumber(60, 125)} Mobile Safari/${randomNumber(530, 537)}.${randomNumber(30, 36)}";
} }
} }
static String sanitizeFilename(String input, {String replacement = ''}) {
final result = input
// illegalRe
.replaceAll(
RegExp(r'[\/\?<>\\:\*\|"]'),
replacement,
)
// controlRe
.replaceAll(
RegExp(
r'[\x00-\x1f\x80-\x9f]',
),
replacement,
)
// reservedRe
.replaceFirst(
RegExp(r'^\.+$'),
replacement,
)
// windowsReservedRe
.replaceFirst(
RegExp(
r'^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$',
caseSensitive: false,
),
replacement,
)
// windowsTrailingRe
.replaceFirst(RegExp(r'[\. ]+$'), replacement);
return result.length > 255 ? result.substring(0, 255) : result;
}
} }

View File

@ -5,7 +5,6 @@ import 'package:drift/drift.dart';
import 'package:drift/internal/migrations.dart'; import 'package:drift/internal/migrations.dart';
import 'schema_v3.dart' as v3; import 'schema_v3.dart' as v3;
import 'schema_v5.dart' as v5; import 'schema_v5.dart' as v5;
import 'schema_v6.dart' as v6;
import 'schema_v1.dart' as v1; import 'schema_v1.dart' as v1;
import 'schema_v2.dart' as v2; import 'schema_v2.dart' as v2;
import 'schema_v4.dart' as v4; import 'schema_v4.dart' as v4;
@ -18,8 +17,6 @@ class GeneratedHelper implements SchemaInstantiationHelper {
return v3.DatabaseAtV3(db); return v3.DatabaseAtV3(db);
case 5: case 5:
return v5.DatabaseAtV5(db); return v5.DatabaseAtV5(db);
case 6:
return v6.DatabaseAtV6(db);
case 1: case 1:
return v1.DatabaseAtV1(db); return v1.DatabaseAtV1(db);
case 2: case 2:
@ -31,5 +28,5 @@ class GeneratedHelper implements SchemaInstantiationHelper {
} }
} }
static const versions = const [1, 2, 3, 4, 5, 6]; static const versions = const [1, 2, 3, 4, 5];
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1 @@
{ {}
"fr": [
"connection_request_denied"
]
}