mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
refactor: make compatible with spotify lib 0.12
This commit is contained in:
parent
52768a7ec9
commit
afbb8ba5a7
@ -36,10 +36,10 @@ abstract class LanguageLocals {
|
||||
// name: "Amharic",
|
||||
// nativeName: "አማርኛ",
|
||||
// ),
|
||||
// "ar": const ISOLanguageName(
|
||||
// name: "Arabic",
|
||||
// nativeName: "العربية",
|
||||
// ),
|
||||
"ar": const ISOLanguageName(
|
||||
name: "Arabic",
|
||||
nativeName: "العربية",
|
||||
),
|
||||
// "an": const ISOLanguageName(
|
||||
// name: "Aragonese",
|
||||
// nativeName: "Aragonés",
|
||||
|
@ -1,187 +1,189 @@
|
||||
// Country Codes contributed by momobobe <https://github.com/momobobe>
|
||||
|
||||
import 'package:spotify/spotify.dart';
|
||||
|
||||
final spotifyMarkets = [
|
||||
("AL", "Albania (AL)"),
|
||||
("DZ", "Algeria (DZ)"),
|
||||
("AD", "Andorra (AD)"),
|
||||
("AO", "Angola (AO)"),
|
||||
("AG", "Antigua and Barbuda (AG)"),
|
||||
("AR", "Argentina (AR)"),
|
||||
("AM", "Armenia (AM)"),
|
||||
("AU", "Australia (AU)"),
|
||||
("AT", "Austria (AT)"),
|
||||
("AZ", "Azerbaijan (AZ)"),
|
||||
("BH", "Bahrain (BH)"),
|
||||
("BD", "Bangladesh (BD)"),
|
||||
("BB", "Barbados (BB)"),
|
||||
("BY", "Belarus (BY)"),
|
||||
("BE", "Belgium (BE)"),
|
||||
("BZ", "Belize (BZ)"),
|
||||
("BJ", "Benin (BJ)"),
|
||||
("BT", "Bhutan (BT)"),
|
||||
("BO", "Bolivia (BO)"),
|
||||
("BA", "Bosnia and Herzegovina (BA)"),
|
||||
("BW", "Botswana (BW)"),
|
||||
("BR", "Brazil (BR)"),
|
||||
("BN", "Brunei Darussalam (BN)"),
|
||||
("BG", "Bulgaria (BG)"),
|
||||
("BF", "Burkina Faso (BF)"),
|
||||
("BI", "Burundi (BI)"),
|
||||
("CV", "Cabo Verde / Cape Verde (CV)"),
|
||||
("KH", "Cambodia (KH)"),
|
||||
("CM", "Cameroon (CM)"),
|
||||
("CA", "Canada (CA)"),
|
||||
("TD", "Chad (TD)"),
|
||||
("CL", "Chile (CL)"),
|
||||
("CO", "Colombia (CO)"),
|
||||
("KM", "Comoros (KM)"),
|
||||
("CR", "Costa Rica (CR)"),
|
||||
("HR", "Croatia (HR)"),
|
||||
("CW", "Curaçao (CW)"),
|
||||
("CY", "Cyprus (CY)"),
|
||||
("CZ", "Czech Republic (CZ)"),
|
||||
("CI", "Ivory Coast (CI)"),
|
||||
("CD", "Congo (CD)"),
|
||||
("DK", "Denmark (DK)"),
|
||||
("DJ", "Djibouti (DJ)"),
|
||||
("DM", "Dominica (DM)"),
|
||||
("DO", "Dominican Republic (DO)"),
|
||||
("EC", "Ecuador (EC)"),
|
||||
("EG", "Egypt (EG)"),
|
||||
("SV", "El Salvador (SV)"),
|
||||
("GQ", "Equatorial Guinea (GQ)"),
|
||||
("EE", "Estonia (EE)"),
|
||||
("SZ", "Eswatini (SZ)"),
|
||||
("FJ", "Fiji (FJ)"),
|
||||
("FI", "Finland (FI)"),
|
||||
("FR", "France (FR)"),
|
||||
("GA", "Gabon (GA)"),
|
||||
("GE", "Georgia (GE)"),
|
||||
("DE", "Germany (DE)"),
|
||||
("GH", "Ghana (GH)"),
|
||||
("GR", "Greece (GR)"),
|
||||
("GD", "Grenada (GD)"),
|
||||
("GT", "Guatemala (GT)"),
|
||||
("GN", "Guinea (GN)"),
|
||||
("GW", "Guinea-Bissau (GW)"),
|
||||
("GY", "Guyana (GY)"),
|
||||
("HT", "Haiti (HT)"),
|
||||
("HN", "Honduras (HN)"),
|
||||
("HK", "Hong Kong (HK)"),
|
||||
("HU", "Hungary (HU)"),
|
||||
("IS", "Iceland (IS)"),
|
||||
("IN", "India (IN)"),
|
||||
("ID", "Indonesia (ID)"),
|
||||
("IQ", "Iraq (IQ)"),
|
||||
("IE", "Ireland (IE)"),
|
||||
("IL", "Israel (IL)"),
|
||||
("IT", "Italy (IT)"),
|
||||
("JM", "Jamaica (JM)"),
|
||||
("JP", "Japan (JP)"),
|
||||
("JO", "Jordan (JO)"),
|
||||
("KZ", "Kazakhstan (KZ)"),
|
||||
("KE", "Kenya (KE)"),
|
||||
("KI", "Kiribati (KI)"),
|
||||
("XK", "Kosovo (XK)"),
|
||||
("KW", "Kuwait (KW)"),
|
||||
("KG", "Kyrgyzstan (KG)"),
|
||||
("LA", "Laos (LA)"),
|
||||
("LV", "Latvia (LV)"),
|
||||
("LB", "Lebanon (LB)"),
|
||||
("LS", "Lesotho (LS)"),
|
||||
("LR", "Liberia (LR)"),
|
||||
("LY", "Libya (LY)"),
|
||||
("LI", "Liechtenstein (LI)"),
|
||||
("LT", "Lithuania (LT)"),
|
||||
("LU", "Luxembourg (LU)"),
|
||||
("MO", "Macao / Macau (MO)"),
|
||||
("MG", "Madagascar (MG)"),
|
||||
("MW", "Malawi (MW)"),
|
||||
("MY", "Malaysia (MY)"),
|
||||
("MV", "Maldives (MV)"),
|
||||
("ML", "Mali (ML)"),
|
||||
("MT", "Malta (MT)"),
|
||||
("MH", "Marshall Islands (MH)"),
|
||||
("MR", "Mauritania (MR)"),
|
||||
("MU", "Mauritius (MU)"),
|
||||
("MX", "Mexico (MX)"),
|
||||
("FM", "Micronesia (FM)"),
|
||||
("MD", "Moldova (MD)"),
|
||||
("MC", "Monaco (MC)"),
|
||||
("MN", "Mongolia (MN)"),
|
||||
("ME", "Montenegro (ME)"),
|
||||
("MA", "Morocco (MA)"),
|
||||
("MZ", "Mozambique (MZ)"),
|
||||
("NA", "Namibia (NA)"),
|
||||
("NR", "Nauru (NR)"),
|
||||
("NP", "Nepal (NP)"),
|
||||
("NL", "Netherlands (NL)"),
|
||||
("NZ", "New Zealand (NZ)"),
|
||||
("NI", "Nicaragua (NI)"),
|
||||
("NE", "Niger (NE)"),
|
||||
("NG", "Nigeria (NG)"),
|
||||
("MK", "North Macedonia (MK)"),
|
||||
("NO", "Norway (NO)"),
|
||||
("OM", "Oman (OM)"),
|
||||
("PK", "Pakistan (PK)"),
|
||||
("PW", "Palau (PW)"),
|
||||
("PS", "Palestine (PS)"),
|
||||
("PA", "Panama (PA)"),
|
||||
("PG", "Papua New Guinea (PG)"),
|
||||
("PY", "Paraguay (PY)"),
|
||||
("PE", "Peru (PE)"),
|
||||
("PH", "Philippines (PH)"),
|
||||
("PL", "Poland (PL)"),
|
||||
("PT", "Portugal (PT)"),
|
||||
("QA", "Qatar (QA)"),
|
||||
("CG", "Congo (CG)"),
|
||||
("RO", "Romania (RO)"),
|
||||
("RU", "Russia (RU)"),
|
||||
("RW", "Rwanda (RW)"),
|
||||
("WS", "Samoa (WS)"),
|
||||
("SM", "San Marino (SM)"),
|
||||
("SA", "Saudi Arabia (SA)"),
|
||||
("SN", "Senegal (SN)"),
|
||||
("RS", "Serbia (RS)"),
|
||||
("SC", "Seychelles (SC)"),
|
||||
("SL", "Sierra Leone (SL)"),
|
||||
("SG", "Singapore (SG)"),
|
||||
("SK", "Slovakia (SK)"),
|
||||
("SI", "Slovenia (SI)"),
|
||||
("SB", "Solomon Islands (SB)"),
|
||||
("ZA", "South Africa (ZA)"),
|
||||
("KR", "South Korea (KR)"),
|
||||
("ES", "Spain (ES)"),
|
||||
("LK", "Sri Lanka (LK)"),
|
||||
("KN", "St. Kitts and Nevis (KN)"),
|
||||
("LC", "St. Lucia (LC)"),
|
||||
("SR", "Suriname (SR)"),
|
||||
("SE", "Sweden (SE)"),
|
||||
("CH", "Switzerland (CH)"),
|
||||
("ST", "São Tomé and Príncipe (ST)"),
|
||||
("TW", "Taiwan (TW)"),
|
||||
("TJ", "Tajikistan (TJ)"),
|
||||
("TZ", "Tanzania (TZ)"),
|
||||
("TH", "Thailand (TH)"),
|
||||
("BS", "The Bahamas (BS)"),
|
||||
("GM", "The Gambia (GM)"),
|
||||
("TL", "East Timor (TL)"),
|
||||
("TG", "Togo (TG)"),
|
||||
("TO", "Tonga (TO)"),
|
||||
("TT", "Trinidad and Tobago (TT)"),
|
||||
("TN", "Tunisia (TN)"),
|
||||
("TR", "Turkey (TR)"),
|
||||
("TV", "Tuvalu (TV)"),
|
||||
("UG", "Uganda (UG)"),
|
||||
("UA", "Ukraine (UA)"),
|
||||
("AE", "United Arab Emirates (AE)"),
|
||||
("GB", "United Kingdom (GB)"),
|
||||
("US", "United States (US)"),
|
||||
("UY", "Uruguay (UY)"),
|
||||
("UZ", "Uzbekistan (UZ)"),
|
||||
("VU", "Vanuatu (VU)"),
|
||||
("VE", "Venezuela (VE)"),
|
||||
("VN", "Vietnam (VN)"),
|
||||
("ZM", "Zambia (ZM)"),
|
||||
("ZW", "Zimbabwe (ZW)"),
|
||||
(Market.AL, "Albania (AL)"),
|
||||
(Market.DZ, "Algeria (DZ)"),
|
||||
(Market.AD, "Andorra (AD)"),
|
||||
(Market.AO, "Angola (AO)"),
|
||||
(Market.AG, "Antigua and Barbuda (AG)"),
|
||||
(Market.AR, "Argentina (AR)"),
|
||||
(Market.AM, "Armenia (AM)"),
|
||||
(Market.AU, "Australia (AU)"),
|
||||
(Market.AT, "Austria (AT)"),
|
||||
(Market.AZ, "Azerbaijan (AZ)"),
|
||||
(Market.BH, "Bahrain (BH)"),
|
||||
(Market.BD, "Bangladesh (BD)"),
|
||||
(Market.BB, "Barbados (BB)"),
|
||||
(Market.BY, "Belarus (BY)"),
|
||||
(Market.BE, "Belgium (BE)"),
|
||||
(Market.BZ, "Belize (BZ)"),
|
||||
(Market.BJ, "Benin (BJ)"),
|
||||
(Market.BT, "Bhutan (BT)"),
|
||||
(Market.BO, "Bolivia (BO)"),
|
||||
(Market.BA, "Bosnia and Herzegovina (BA)"),
|
||||
(Market.BW, "Botswana (BW)"),
|
||||
(Market.BR, "Brazil (BR)"),
|
||||
(Market.BN, "Brunei Darussalam (BN)"),
|
||||
(Market.BG, "Bulgaria (BG)"),
|
||||
(Market.BF, "Burkina Faso (BF)"),
|
||||
(Market.BI, "Burundi (BI)"),
|
||||
(Market.CV, "Cabo Verde / Cape Verde (CV)"),
|
||||
(Market.KH, "Cambodia (KH)"),
|
||||
(Market.CM, "Cameroon (CM)"),
|
||||
(Market.CA, "Canada (CA)"),
|
||||
(Market.TD, "Chad (TD)"),
|
||||
(Market.CL, "Chile (CL)"),
|
||||
(Market.CO, "Colombia (CO)"),
|
||||
(Market.KM, "Comoros (KM)"),
|
||||
(Market.CR, "Costa Rica (CR)"),
|
||||
(Market.HR, "Croatia (HR)"),
|
||||
(Market.CW, "Curaçao (CW)"),
|
||||
(Market.CY, "Cyprus (CY)"),
|
||||
(Market.CZ, "Czech Republic (CZ)"),
|
||||
(Market.CI, "Ivory Coast (CI)"),
|
||||
(Market.CD, "Congo (CD)"),
|
||||
(Market.DK, "Denmark (DK)"),
|
||||
(Market.DJ, "Djibouti (DJ)"),
|
||||
(Market.DM, "Dominica (DM)"),
|
||||
(Market.DO, "Dominican Republic (DO)"),
|
||||
(Market.EC, "Ecuador (EC)"),
|
||||
(Market.EG, "Egypt (EG)"),
|
||||
(Market.SV, "El Salvador (SV)"),
|
||||
(Market.GQ, "Equatorial Guinea (GQ)"),
|
||||
(Market.EE, "Estonia (EE)"),
|
||||
(Market.SZ, "Eswatini (SZ)"),
|
||||
(Market.FJ, "Fiji (FJ)"),
|
||||
(Market.FI, "Finland (FI)"),
|
||||
(Market.FR, "France (FR)"),
|
||||
(Market.GA, "Gabon (GA)"),
|
||||
(Market.GE, "Georgia (GE)"),
|
||||
(Market.DE, "Germany (DE)"),
|
||||
(Market.GH, "Ghana (GH)"),
|
||||
(Market.GR, "Greece (GR)"),
|
||||
(Market.GD, "Grenada (GD)"),
|
||||
(Market.GT, "Guatemala (GT)"),
|
||||
(Market.GN, "Guinea (GN)"),
|
||||
(Market.GW, "Guinea-Bissau (GW)"),
|
||||
(Market.GY, "Guyana (GY)"),
|
||||
(Market.HT, "Haiti (HT)"),
|
||||
(Market.HN, "Honduras (HN)"),
|
||||
(Market.HK, "Hong Kong (HK)"),
|
||||
(Market.HU, "Hungary (HU)"),
|
||||
(Market.IS, "Iceland (IS)"),
|
||||
(Market.IN, "India (IN)"),
|
||||
(Market.ID, "Indonesia (ID)"),
|
||||
(Market.IQ, "Iraq (IQ)"),
|
||||
(Market.IE, "Ireland (IE)"),
|
||||
(Market.IL, "Israel (IL)"),
|
||||
(Market.IT, "Italy (IT)"),
|
||||
(Market.JM, "Jamaica (JM)"),
|
||||
(Market.JP, "Japan (JP)"),
|
||||
(Market.JO, "Jordan (JO)"),
|
||||
(Market.KZ, "Kazakhstan (KZ)"),
|
||||
(Market.KE, "Kenya (KE)"),
|
||||
(Market.KI, "Kiribati (KI)"),
|
||||
(Market.XK, "Kosovo (XK)"),
|
||||
(Market.KW, "Kuwait (KW)"),
|
||||
(Market.KG, "Kyrgyzstan (KG)"),
|
||||
(Market.LA, "Laos (LA)"),
|
||||
(Market.LV, "Latvia (LV)"),
|
||||
(Market.LB, "Lebanon (LB)"),
|
||||
(Market.LS, "Lesotho (LS)"),
|
||||
(Market.LR, "Liberia (LR)"),
|
||||
(Market.LY, "Libya (LY)"),
|
||||
(Market.LI, "Liechtenstein (LI)"),
|
||||
(Market.LT, "Lithuania (LT)"),
|
||||
(Market.LU, "Luxembourg (LU)"),
|
||||
(Market.MO, "Macao / Macau (MO)"),
|
||||
(Market.MG, "Madagascar (MG)"),
|
||||
(Market.MW, "Malawi (MW)"),
|
||||
(Market.MY, "Malaysia (MY)"),
|
||||
(Market.MV, "Maldives (MV)"),
|
||||
(Market.ML, "Mali (ML)"),
|
||||
(Market.MT, "Malta (MT)"),
|
||||
(Market.MH, "Marshall Islands (MH)"),
|
||||
(Market.MR, "Mauritania (MR)"),
|
||||
(Market.MU, "Mauritius (MU)"),
|
||||
(Market.MX, "Mexico (MX)"),
|
||||
(Market.FM, "Micronesia (FM)"),
|
||||
(Market.MD, "Moldova (MD)"),
|
||||
(Market.MC, "Monaco (MC)"),
|
||||
(Market.MN, "Mongolia (MN)"),
|
||||
(Market.ME, "Montenegro (ME)"),
|
||||
(Market.MA, "Morocco (MA)"),
|
||||
(Market.MZ, "Mozambique (MZ)"),
|
||||
(Market.NA, "Namibia (NA)"),
|
||||
(Market.NR, "Nauru (NR)"),
|
||||
(Market.NP, "Nepal (NP)"),
|
||||
(Market.NL, "Netherlands (NL)"),
|
||||
(Market.NZ, "New Zealand (NZ)"),
|
||||
(Market.NI, "Nicaragua (NI)"),
|
||||
(Market.NE, "Niger (NE)"),
|
||||
(Market.NG, "Nigeria (NG)"),
|
||||
(Market.MK, "North Macedonia (MK)"),
|
||||
(Market.NO, "Norway (NO)"),
|
||||
(Market.OM, "Oman (OM)"),
|
||||
(Market.PK, "Pakistan (PK)"),
|
||||
(Market.PW, "Palau (PW)"),
|
||||
(Market.PS, "Palestine (PS)"),
|
||||
(Market.PA, "Panama (PA)"),
|
||||
(Market.PG, "Papua New Guinea (PG)"),
|
||||
(Market.PY, "Paraguay (PY)"),
|
||||
(Market.PE, "Peru (PE)"),
|
||||
(Market.PH, "Philippines (PH)"),
|
||||
(Market.PL, "Poland (PL)"),
|
||||
(Market.PT, "Portugal (PT)"),
|
||||
(Market.QA, "Qatar (QA)"),
|
||||
(Market.CG, "Congo (CG)"),
|
||||
(Market.RO, "Romania (RO)"),
|
||||
(Market.RU, "Russia (RU)"),
|
||||
(Market.RW, "Rwanda (RW)"),
|
||||
(Market.WS, "Samoa (WS)"),
|
||||
(Market.SM, "San Marino (SM)"),
|
||||
(Market.SA, "Saudi Arabia (SA)"),
|
||||
(Market.SN, "Senegal (SN)"),
|
||||
(Market.RS, "Serbia (RS)"),
|
||||
(Market.SC, "Seychelles (SC)"),
|
||||
(Market.SL, "Sierra Leone (SL)"),
|
||||
(Market.SG, "Singapore (SG)"),
|
||||
(Market.SK, "Slovakia (SK)"),
|
||||
(Market.SI, "Slovenia (SI)"),
|
||||
(Market.SB, "Solomon Islands (SB)"),
|
||||
(Market.ZA, "South Africa (ZA)"),
|
||||
(Market.KR, "South Korea (KR)"),
|
||||
(Market.ES, "Spain (ES)"),
|
||||
(Market.LK, "Sri Lanka (LK)"),
|
||||
(Market.KN, "St. Kitts and Nevis (KN)"),
|
||||
(Market.LC, "St. Lucia (LC)"),
|
||||
(Market.SR, "Suriname (SR)"),
|
||||
(Market.SE, "Sweden (SE)"),
|
||||
(Market.CH, "Switzerland (CH)"),
|
||||
(Market.ST, "São Tomé and Príncipe (ST)"),
|
||||
(Market.TW, "Taiwan (TW)"),
|
||||
(Market.TJ, "Tajikistan (TJ)"),
|
||||
(Market.TZ, "Tanzania (TZ)"),
|
||||
(Market.TH, "Thailand (TH)"),
|
||||
(Market.BS, "The Bahamas (BS)"),
|
||||
(Market.GM, "The Gambia (GM)"),
|
||||
(Market.TL, "East Timor (TL)"),
|
||||
(Market.TG, "Togo (TG)"),
|
||||
(Market.TO, "Tonga (TO)"),
|
||||
(Market.TT, "Trinidad and Tobago (TT)"),
|
||||
(Market.TN, "Tunisia (TN)"),
|
||||
(Market.TR, "Turkey (TR)"),
|
||||
(Market.TV, "Tuvalu (TV)"),
|
||||
(Market.UG, "Uganda (UG)"),
|
||||
(Market.UA, "Ukraine (UA)"),
|
||||
(Market.AE, "United Arab Emirates (AE)"),
|
||||
(Market.GB, "United Kingdom (GB)"),
|
||||
(Market.US, "United States (US)"),
|
||||
(Market.UY, "Uruguay (UY)"),
|
||||
(Market.UZ, "Uzbekistan (UZ)"),
|
||||
(Market.VU, "Vanuatu (VU)"),
|
||||
(Market.VE, "Venezuela (VE)"),
|
||||
(Market.VN, "Vietnam (VN)"),
|
||||
(Market.ZM, "Zambia (ZM)"),
|
||||
(Market.ZW, "Zimbabwe (ZW)"),
|
||||
];
|
||||
|
@ -11,24 +11,7 @@ import 'package:spotube/services/audio_player/audio_player.dart';
|
||||
import 'package:spotube/utils/service_utils.dart';
|
||||
import 'package:spotube/utils/type_conversion_utils.dart';
|
||||
|
||||
enum AlbumType {
|
||||
album,
|
||||
single,
|
||||
compilation;
|
||||
|
||||
factory AlbumType.from(String? type) {
|
||||
switch (type) {
|
||||
case "album":
|
||||
return AlbumType.album;
|
||||
case "single":
|
||||
return AlbumType.single;
|
||||
case "compilation":
|
||||
return AlbumType.compilation;
|
||||
default:
|
||||
return AlbumType.album;
|
||||
}
|
||||
}
|
||||
|
||||
extension FormattedAlbumType on AlbumType {
|
||||
String get formatted => name.replaceFirst(name[0], name[0].toUpperCase());
|
||||
}
|
||||
|
||||
@ -71,7 +54,7 @@ class AlbumCard extends HookConsumerWidget {
|
||||
isLoading: isPlaylistPlaying && playlist.isFetching == true,
|
||||
title: album.name!,
|
||||
description:
|
||||
"${AlbumType.from(album.albumType!).formatted} • ${TypeConversionUtils.artists_X_String<ArtistSimple>(album.artists ?? [])}",
|
||||
"${album.albumType?.formatted} • ${TypeConversionUtils.artists_X_String<ArtistSimple>(album.artists ?? [])}",
|
||||
onTap: () {
|
||||
ServiceUtils.push(context, "/album/${album.id}", extra: album);
|
||||
},
|
||||
|
@ -42,6 +42,7 @@ class AdaptiveSelectTile<T> extends HookWidget {
|
||||
items: options,
|
||||
value: value,
|
||||
onChanged: onChanged,
|
||||
menuMaxHeight: mediaQuery.size.height * 0.6,
|
||||
);
|
||||
final controlPlaceholder = useMemoized(
|
||||
() => options
|
||||
|
@ -121,7 +121,7 @@ class TrackCollectionHeading<T> extends HookConsumerWidget {
|
||||
),
|
||||
if (album != null)
|
||||
Text(
|
||||
"${AlbumType.from(album?.albumType).formatted} • ${context.l10n.released} • ${DateTime.tryParse(
|
||||
"${album?.albumType?.formatted} • ${context.l10n.released} • ${DateTime.tryParse(
|
||||
album?.releaseDate ?? "",
|
||||
)?.year}",
|
||||
style: theme.textTheme.titleMedium!.copyWith(
|
||||
|
@ -227,7 +227,7 @@
|
||||
"selected_count_tracks": "مقطوعات {count} مختارة",
|
||||
"download_warning": "إذا قمت بتنزيل جميع المقاطع الصوتية بكميات كبيرة، فمن الواضح أنك تقوم بقرصنة الموسيقى وتسبب الضرر للمجتمع الإبداعي للموسيقى. أتمنى أن تكون على علم بهذا. حاول دائمًا احترام ودعم العمل الجاد للفنان",
|
||||
"download_ip_ban_warning": "بالمناسبة، يمكن أن يتم حظر عنوان IP الخاص بك على YouTube بسبب طلبات التنزيل الزائدة عن المعتاد. يعني حظر IP أنه لا يمكنك استخدام YouTube (حتى إذا قمت بتسجيل الدخول) لمدة تتراوح بين شهرين إلى ثلاثة أشهر على الأقل من جهاز IP هذا. ولا يتحمل Spotube أي مسؤولية إذا حدث هذا على الإطلاق",
|
||||
"by_clicking_accept_terms": "بالنقر على "قبول"، فإنك توافق على الشروط التالية:",
|
||||
"by_clicking_accept_terms": "بالنقر على \"قبول\"، فإنك توافق على الشروط التالية:",
|
||||
"download_agreement_1": "أعلم أنني أقوم بقرصنة الموسيقى. انا سيئ",
|
||||
"download_agreement_2": "سأدعم الفنان أينما أستطيع، وأنا أفعل هذا فقط لأنني لا أملك المال لشراء أعمالهم الفنية",
|
||||
"download_agreement_3": "أدرك تمامًا أنه يمكن حظر عنوان IP الخاص بي على YouTube ولا أحمل Spotube أو مالكيه/مساهميه المسؤولية عن أي حوادث ناجمة عن الإجراء الحالي الخاص بي",
|
||||
@ -264,4 +264,4 @@
|
||||
"use_system_title_bar": "استخدم شريط عنوان النظام",
|
||||
"crunching_results": "تدمير النتائج",
|
||||
"search_to_get_results": "إبحث للحصول على النتائج"
|
||||
}
|
||||
}
|
@ -23,5 +23,6 @@ class L10n {
|
||||
const Locale('ru', 'RU'),
|
||||
const Locale('pt', 'PT'),
|
||||
const Locale('uk', 'UA'),
|
||||
const Locale('ar', 'SA'),
|
||||
];
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ class PlaylistGeneratorPage extends HookConsumerWidget {
|
||||
final genresCollection = useQueries.category.genreSeeds(ref);
|
||||
|
||||
final limit = useValueNotifier<int>(10);
|
||||
final market = useValueNotifier<String>(preferences.recommendationMarket);
|
||||
final market = useValueNotifier<Market>(preferences.recommendationMarket);
|
||||
|
||||
final genres = useState<List<String>>([]);
|
||||
final artists = useState<List<Artist>>([]);
|
||||
@ -220,7 +220,7 @@ class PlaylistGeneratorPage extends HookConsumerWidget {
|
||||
final countrySelector = ValueListenableBuilder(
|
||||
valueListenable: market,
|
||||
builder: (context, value, _) {
|
||||
return DropdownButtonFormField<String>(
|
||||
return DropdownButtonFormField<Market>(
|
||||
decoration: InputDecoration(
|
||||
labelText: context.l10n.country,
|
||||
labelStyle: textTheme.titleMedium,
|
||||
|
@ -18,7 +18,7 @@ typedef PlaylistGenerateResultRouteState = ({
|
||||
({List<String> tracks, List<String> artists, List<String> genres})? seeds,
|
||||
RecommendationParameters? parameters,
|
||||
int limit,
|
||||
String? market,
|
||||
Market? market,
|
||||
});
|
||||
|
||||
class PlaylistGenerateResultPage extends HookConsumerWidget {
|
||||
|
@ -9,6 +9,7 @@ import 'package:go_router/go_router.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:piped_client/piped_client.dart';
|
||||
import 'package:spotify/spotify.dart';
|
||||
import 'package:spotube/collections/env.dart';
|
||||
import 'package:spotube/collections/language_codes.dart';
|
||||
import 'package:spotube/collections/spotube_icons.dart';
|
||||
@ -180,7 +181,7 @@ class SettingsPage extends HookConsumerWidget {
|
||||
),
|
||||
],
|
||||
),
|
||||
AdaptiveSelectTile<String>(
|
||||
AdaptiveSelectTile<Market>(
|
||||
breakLayout: mediaQuery.lgAndUp,
|
||||
secondary: const Icon(SpotubeIcons.shoppingBag),
|
||||
title: Text(context.l10n.market_place_region),
|
||||
|
@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_desktop_tools/flutter_desktop_tools.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:spotify/spotify.dart';
|
||||
import 'package:spotube/components/settings/color_scheme_picker_dialog.dart';
|
||||
import 'package:spotube/models/matched_track.dart';
|
||||
import 'package:spotube/provider/palette_provider.dart';
|
||||
@ -41,7 +42,7 @@ enum YoutubeApiType {
|
||||
|
||||
class UserPreferences extends PersistedChangeNotifier {
|
||||
ThemeMode themeMode;
|
||||
String recommendationMarket;
|
||||
Market recommendationMarket;
|
||||
bool saveTrackLyrics;
|
||||
bool checkUpdate;
|
||||
AudioQuality audioQuality;
|
||||
@ -118,7 +119,7 @@ class UserPreferences extends PersistedChangeNotifier {
|
||||
updatePersistence();
|
||||
}
|
||||
|
||||
void setRecommendationMarket(String country) {
|
||||
void setRecommendationMarket(Market country) {
|
||||
recommendationMarket = country;
|
||||
notifyListeners();
|
||||
updatePersistence();
|
||||
@ -342,7 +343,7 @@ class UserPreferences extends PersistedChangeNotifier {
|
||||
SearchMode? searchMode,
|
||||
bool? skipNonMusic,
|
||||
YoutubeApiType? youtubeApiType,
|
||||
String? recommendationMarket,
|
||||
Market? recommendationMarket,
|
||||
bool? saveTrackLyrics,
|
||||
}) {
|
||||
return UserPreferences(
|
||||
@ -371,7 +372,7 @@ final userPreferencesProvider = ChangeNotifierProvider(
|
||||
(ref) => UserPreferences(
|
||||
ref,
|
||||
accentColorScheme: SpotubeColor(Colors.blue.value, name: "Blue"),
|
||||
recommendationMarket: 'US',
|
||||
recommendationMarket: Market.US,
|
||||
themeMode: ThemeMode.system,
|
||||
layoutMode: LayoutMode.adaptive,
|
||||
),
|
||||
|
@ -43,8 +43,8 @@ class CustomSpotifyEndpoints {
|
||||
String imageStyle = "gradient_overlay",
|
||||
String includeExternal = "audio",
|
||||
String? locale,
|
||||
String? market,
|
||||
String? country,
|
||||
Market? market,
|
||||
Market? country,
|
||||
}) async {
|
||||
if (accessToken.isEmpty) {
|
||||
throw Exception('[CustomSpotifyEndpoints.getView]: accessToken is empty');
|
||||
@ -124,7 +124,7 @@ class CustomSpotifyEndpoints {
|
||||
Iterable<String>? seedGenres,
|
||||
Iterable<String>? seedTracks,
|
||||
int limit = 20,
|
||||
String? market,
|
||||
Market? market,
|
||||
Map<String, num>? max,
|
||||
Map<String, num>? min,
|
||||
Map<String, num>? target,
|
||||
@ -143,7 +143,7 @@ class CustomSpotifyEndpoints {
|
||||
'seed_genres': seedGenres,
|
||||
'seed_tracks': seedTracks
|
||||
}.forEach((key, list) => _addList(parameters, key, list!));
|
||||
if (market != null) parameters['market'] = market;
|
||||
if (market != null) parameters['market'] = market.name;
|
||||
for (var map in [min, max, target]) {
|
||||
_addTunableTrackMap(parameters, map);
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ class AlbumQueries {
|
||||
(pageParam, spotify) async {
|
||||
try {
|
||||
final albums = await spotify.browse
|
||||
.getNewReleases(country: market)
|
||||
.newReleases(country: market)
|
||||
.getPage(50, pageParam);
|
||||
|
||||
return albums;
|
||||
|
@ -13,7 +13,7 @@ class CategoryQueries {
|
||||
|
||||
InfiniteQuery<Page<Category>, dynamic, int> list(
|
||||
WidgetRef ref,
|
||||
String recommendationMarket,
|
||||
Market recommendationMarket,
|
||||
) {
|
||||
ref.watch(userPreferencesProvider.select((s) => s.locale));
|
||||
final locale = useContext().l10n.localeName;
|
||||
|
@ -1,6 +1,3 @@
|
||||
import 'dart:io';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:catcher/catcher.dart';
|
||||
import 'package:fl_query/fl_query.dart';
|
||||
import 'package:fl_query_hooks/fl_query_hooks.dart';
|
||||
@ -13,7 +10,6 @@ import 'package:spotube/extensions/track.dart';
|
||||
import 'package:spotube/hooks/use_spotify_infinite_query.dart';
|
||||
import 'package:spotube/hooks/use_spotify_query.dart';
|
||||
import 'package:spotube/pages/library/playlist_generate/playlist_generate.dart';
|
||||
import 'package:spotube/provider/authentication_provider.dart';
|
||||
import 'package:spotube/provider/custom_spotify_endpoint_provider.dart';
|
||||
import 'package:spotube/provider/user_preferences_provider.dart';
|
||||
|
||||
@ -244,7 +240,7 @@ class PlaylistQueries {
|
||||
({List<String> tracks, List<String> artists, List<String> genres})? seeds,
|
||||
RecommendationParameters? parameters,
|
||||
int limit = 20,
|
||||
String? market,
|
||||
Market? market,
|
||||
}) {
|
||||
final marketOfPreference = ref.watch(
|
||||
userPreferencesProvider.select((s) => s.recommendationMarket),
|
||||
|
@ -11,7 +11,7 @@ class SearchQueries {
|
||||
SearchType searchType,
|
||||
) {
|
||||
return useSpotifyInfiniteQuery<List<Page>, dynamic, int>(
|
||||
"search-query/${searchType.key}",
|
||||
"search-query/${searchType.name}",
|
||||
(page, spotify) {
|
||||
if (query.trim().isEmpty) return [];
|
||||
final queryString = query;
|
||||
|
@ -1,4 +1,9 @@
|
||||
{
|
||||
"ar": [
|
||||
"use_amoled_dark_theme",
|
||||
"normalize_audio"
|
||||
],
|
||||
|
||||
"bn": [
|
||||
"use_amoled_dark_theme",
|
||||
"normalize_audio"
|
||||
|
Loading…
Reference in New Issue
Block a user