diff --git a/lib/spotify.dart b/lib/spotify.dart index 15711ee..ac862f4 100644 --- a/lib/spotify.dart +++ b/lib/spotify.dart @@ -28,6 +28,7 @@ part 'src/endpoints/categories.dart'; part 'src/endpoints/endpoint_base.dart'; part 'src/endpoints/endpoint_paging.dart'; part 'src/endpoints/episodes.dart'; +part 'src/endpoints/markets.dart'; part 'src/endpoints/me.dart'; part 'src/endpoints/player.dart'; part 'src/endpoints/playlists.dart'; diff --git a/lib/src/endpoints/markets.dart b/lib/src/endpoints/markets.dart new file mode 100644 index 0000000..d2cfc6a --- /dev/null +++ b/lib/src/endpoints/markets.dart @@ -0,0 +1,20 @@ +part of spotify; + +/// Endpoint for `v1/markets` +class Markets extends EndpointBase { + @override + String get _path => 'v1/markets'; + + Markets(SpotifyApiBase api) : super(api); + + /// Get the list of markets where Spotify is available. + /// A result of `null` means that the country is not mapped + /// in this library. + Future> get availableMarkets async { + var jsonString = await _api._get(_path); + var map = json.decode(jsonString); + var markets = map['markets'] as Iterable; + var marketsMap = Market.values.asNameMap(); + return markets.map((market) => marketsMap[market]); + } +} diff --git a/lib/src/models/_models.dart b/lib/src/models/_models.dart index 1f59b93..7b7a399 100644 --- a/lib/src/models/_models.dart +++ b/lib/src/models/_models.dart @@ -17,6 +17,7 @@ part 'device.dart'; part 'error.dart'; part 'followers.dart'; part 'image.dart'; +part 'market.dart'; part 'paging.dart'; part 'player.dart'; part 'playlist.dart'; diff --git a/lib/src/models/market.dart b/lib/src/models/market.dart new file mode 100644 index 0000000..83c2c08 --- /dev/null +++ b/lib/src/models/market.dart @@ -0,0 +1,254 @@ +// Copyright (c) 2019-2021, Denis Portnov. All rights reserved. +part of spotify.models; + +enum Market { + AD, + AE, + AF, + AG, + AI, + AL, + AM, + AO, + AQ, + AR, + AS, + AT, + AU, + AW, + AX, + AZ, + BA, + BB, + BD, + BE, + BF, + BG, + BH, + BI, + BJ, + BL, + BM, + BN, + BO, + BQ, + BR, + BS, + BT, + BV, + BW, + BY, + BZ, + CA, + CC, + CD, + CF, + CG, + CH, + CI, + CK, + CL, + CM, + CN, + CO, + CR, + CU, + CV, + CW, + CX, + CY, + CZ, + DE, + DJ, + DK, + DM, + DO, + DZ, + EC, + EE, + EG, + EH, + ER, + ES, + ET, + FI, + FJ, + FK, + FM, + FO, + FR, + GA, + GB, + GD, + GE, + GF, + GG, + GH, + GI, + GL, + GM, + GN, + GP, + GQ, + GR, + GS, + GT, + GU, + GW, + GY, + HK, + HM, + HN, + HR, + HT, + HU, + ID, + IE, + IL, + IM, + IN, + IO, + IQ, + IR, + IS, + IT, + JE, + JM, + JO, + JP, + KE, + KG, + KH, + KI, + KM, + KN, + KP, + KR, + KW, + KY, + KZ, + LA, + LB, + LC, + LI, + LK, + LR, + LS, + LT, + LU, + LV, + LY, + MA, + MC, + MD, + ME, + MF, + MG, + MH, + MK, + ML, + MM, + MN, + MO, + MP, + MQ, + MR, + MS, + MT, + MU, + MV, + MW, + MX, + MY, + MZ, + NA, + NC, + NE, + NF, + NG, + NI, + NL, + NO, + NP, + NR, + NU, + NZ, + OM, + PA, + PE, + PF, + PG, + PH, + PK, + PL, + PM, + PN, + PR, + PS, + PT, + PW, + PY, + QA, + RE, + RO, + RS, + RU, + RW, + SA, + SB, + SC, + SD, + SE, + SG, + SH, + SI, + SJ, + SK, + SL, + SM, + SN, + SO, + SR, + SS, + ST, + SV, + SX, + SY, + SZ, + TC, + TD, + TF, + TG, + TH, + TJ, + TK, + TL, + TM, + TN, + TO, + TR, + TT, + TV, + TW, + TZ, + UA, + UG, + UM, + US, + UY, + UZ, + VA, + VC, + VE, + VG, + VI, + VN, + VU, + WF, + WS, + YE, + YT, + ZA, + ZM, + ZW, +} diff --git a/lib/src/spotify_base.dart b/lib/src/spotify_base.dart index cd2a81b..35034f1 100644 --- a/lib/src/spotify_base.dart +++ b/lib/src/spotify_base.dart @@ -25,6 +25,8 @@ abstract class SpotifyApiBase { Episodes get episodes => _episodes; late RecommendationsEndpoint _recommendations; RecommendationsEndpoint get recommendations => _recommendations; + late Markets _markets; + Markets get markets => _markets; late Users _users; Users get users => _users; late Search _search; @@ -53,6 +55,7 @@ abstract class SpotifyApiBase { _episodes = Episodes(this); _playlists = Playlists(this); _recommendations = RecommendationsEndpoint(this); + _markets = Markets(this); _player = PlayerEndpoint(this); _me = Me(this, _player); _users = Users(this); diff --git a/test/data/v1/markets.json b/test/data/v1/markets.json new file mode 100644 index 0000000..931d431 --- /dev/null +++ b/test/data/v1/markets.json @@ -0,0 +1,7 @@ +{ + "markets": [ + "CA", + "BR", + "IT" + ] +} \ No newline at end of file diff --git a/test/spotify_test.dart b/test/spotify_test.dart index 54e6840..afe7a93 100644 --- a/test/spotify_test.dart +++ b/test/spotify_test.dart @@ -490,6 +490,17 @@ Future main() async { expect(result.isExpired, true); }); }); + + group('markets', () { + test('getAvailableMarkets', () async { + var result = await spotify.markets.availableMarkets; + expect(result.isEmpty, false); + expect(result.first, Market.CA); + expect(result.elementAt(1), Market.BR); + expect(result.last, Market.IT); + }); + }); + group('Errors', () { test('apiRateErrorSuccess', () async { spotify.mockHttpErrors = List.generate(