Skip to content

Commit 747daad

Browse files
authored
Merge pull request #61 from parsamrrelax/main
added regions
2 parents e3e4a50 + 8b453ae commit 747daad

38 files changed

+682
-194
lines changed

lib/functions/fetchers/fetch_movie_credits.dart

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:isolate';
22

3+
import 'package:Mirarr/functions/get_base_url.dart';
34
import 'package:flutter_dotenv/flutter_dotenv.dart';
45
import 'package:http/http.dart' as http;
56
import 'dart:convert';
@@ -26,11 +27,12 @@ void _isolateFunction(Map<String, dynamic> message) {
2627
}
2728

2829
Future<Map<String, List<Map<String, dynamic>>>> fetchCredits(
29-
int movieId) async {
30+
int movieId, String region) async {
31+
final baseUrl = getBaseUrl(region);
3032
try {
3133
final response = await http.get(
3234
Uri.parse(
33-
'https://tmdb.maybeparsa.top/tmdb/movie/$movieId/credits?api_key=$apiKey',
35+
'${baseUrl}movie/$movieId/credits?api_key=$apiKey',
3436
),
3537
);
3638

lib/functions/fetchers/fetch_movie_details.dart

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
import 'package:Mirarr/functions/get_base_url.dart';
12
import 'package:flutter_dotenv/flutter_dotenv.dart';
23
import 'package:http/http.dart' as http;
34
import 'dart:convert';
45

56
final apiKey = dotenv.env['TMDB_API_KEY'];
6-
Future<Map<String, dynamic>> fetchMovieDetails(int movieId) async {
7+
Future<Map<String, dynamic>> fetchMovieDetails(
8+
int movieId, String region) async {
79
try {
8-
// Make an HTTP GET request to fetch movie details from the first API
10+
final baseUrl = getBaseUrl(region);
911
final response = await http.get(
1012
Uri.parse(
11-
'https://tmdb.maybeparsa.top/tmdb/movie/$movieId?api_key=$apiKey',
13+
'${baseUrl}movie/$movieId?api_key=$apiKey',
1214
),
1315
);
1416

lib/functions/fetchers/fetch_movies_by_genre.dart

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:isolate';
22
import 'dart:convert';
3+
import 'package:Mirarr/functions/get_base_url.dart';
34
import 'package:flutter_dotenv/flutter_dotenv.dart';
45
import 'package:Mirarr/moviesPage/models/movie.dart';
56
import 'package:http/http.dart' as http;
@@ -60,11 +61,10 @@ void _movieIsolateFunction(Map<String, dynamic> message) {
6061
sendPort.send(movies);
6162
}
6263

63-
Future<List<Genre>> fetchGenres() async {
64+
Future<List<Genre>> fetchGenres(String region) async {
65+
final baseUrl = getBaseUrl(region);
6466
final response = await http.get(
65-
Uri.parse(
66-
'https://tmdb.maybeparsa.top/tmdb/genre/movie/list?api_key=$apiKey',
67-
),
67+
Uri.parse('${baseUrl}genre/movie/list?api_key=$apiKey'),
6868
);
6969

7070
if (response.statusCode == 200) {
@@ -85,10 +85,12 @@ Future<List<Genre>> fetchGenres() async {
8585
}
8686
}
8787

88-
Future<List<Movie>> fetchMoviesByGenre(int genreId) async {
88+
Future<List<Movie>> fetchMoviesByGenre(int genreId, String region) async {
89+
final baseUrl = getBaseUrl(region);
90+
8991
final response = await http.get(
9092
Uri.parse(
91-
'https://tmdb.maybeparsa.top/tmdb/discover/movie?api_key=$apiKey&with_genres=$genreId',
93+
'${baseUrl}discover/movie?api_key=$apiKey&with_genres=$genreId',
9294
),
9395
);
9496

lib/functions/fetchers/fetch_other_movies_by_director.dart

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:isolate';
22

3+
import 'package:Mirarr/functions/get_base_url.dart';
34
import 'package:flutter_dotenv/flutter_dotenv.dart';
45
import 'package:http/http.dart' as http;
56
import 'dart:convert';
@@ -36,10 +37,11 @@ void _isolateFunction(Map<String, dynamic> message) {
3637
sendPort.send(filteredMovies);
3738
}
3839

39-
Future<List<dynamic>> fetchOtherMoviesByDirector(int castId) async {
40+
Future<List<dynamic>> fetchOtherMoviesByDirector(
41+
int castId, String region) async {
42+
final baseUrl = getBaseUrl(region);
4043
final response = await http.get(
41-
Uri.parse(
42-
'https://tmdb.maybeparsa.top/tmdb/person/$castId/movie_credits?api_key=$apiKey'),
44+
Uri.parse('${baseUrl}person/$castId/movie_credits?api_key=$apiKey'),
4345
);
4446
if (response.statusCode == 200) {
4547
final receivePort = ReceivePort();

lib/functions/fetchers/fetch_popular_movies.dart

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_dotenv/flutter_dotenv.dart';
44

55
import 'package:Mirarr/moviesPage/models/movie.dart';
66
import 'package:http/http.dart' as http;
7+
import 'package:Mirarr/functions/get_base_url.dart';
78

89
final apiKey = dotenv.env['TMDB_API_KEY'];
910

@@ -31,10 +32,12 @@ void _isolateFunction(Map<String, dynamic> message) {
3132
sendPort.send(movies);
3233
}
3334

34-
Future<List<Movie>> fetchPopularMovies() async {
35+
Future<List<Movie>> fetchPopularMovies(String region) async {
36+
final baseUrl = getBaseUrl(region);
37+
3538
final response = await http.get(
3639
Uri.parse(
37-
'https://tmdb.maybeparsa.top/tmdb/movie/popular?api_key=$apiKey',
40+
'${baseUrl}movie/popular?api_key=$apiKey',
3841
),
3942
);
4043

lib/functions/fetchers/fetch_popular_series.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:isolate';
22
import 'dart:convert';
3+
import 'package:Mirarr/functions/get_base_url.dart';
34
import 'package:Mirarr/seriesPage/models/serie.dart';
45
import 'package:flutter_dotenv/flutter_dotenv.dart';
56

@@ -31,11 +32,10 @@ void _isolateFunction(Map<String, dynamic> message) {
3132
sendPort.send(series);
3233
}
3334

34-
Future<List<Serie>> fetchPopularSeries() async {
35+
Future<List<Serie>> fetchPopularSeries(String region) async {
36+
final baseUrl = getBaseUrl(region);
3537
final response = await http.get(
36-
Uri.parse(
37-
'https://tmdb.maybeparsa.top/tmdb/tv/popular?api_key=$apiKey',
38-
),
38+
Uri.parse('${baseUrl}tv/popular?api_key=$apiKey'),
3939
);
4040

4141
if (response.statusCode == 200) {

lib/functions/fetchers/fetch_serie_details.dart

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1+
import 'package:Mirarr/functions/get_base_url.dart';
12
import 'package:flutter_dotenv/flutter_dotenv.dart';
23
import 'package:http/http.dart' as http;
34
import 'dart:convert';
45

56
final apiKey = dotenv.env['TMDB_API_KEY'];
67

7-
Future<Map<String, dynamic>> fetchSerieDetails(int serieId) async {
8+
Future<Map<String, dynamic>> fetchSerieDetails(
9+
int serieId, String region) async {
10+
final baseUrl = getBaseUrl(region);
811
try {
912
final response = await http.get(
10-
Uri.parse(
11-
'https://tmdb.maybeparsa.top/tmdb/tv/$serieId?api_key=$apiKey',
12-
),
13+
Uri.parse('${baseUrl}tv/$serieId?api_key=$apiKey'),
1314
);
1415

1516
if (response.statusCode == 200) {

lib/functions/fetchers/fetch_series_by_genre.dart

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:convert';
22
import 'dart:isolate';
3+
import 'package:Mirarr/functions/get_base_url.dart';
34
import 'package:Mirarr/seriesPage/models/serie.dart';
45
import 'package:flutter_dotenv/flutter_dotenv.dart';
56
import 'package:http/http.dart' as http;
@@ -33,11 +34,10 @@ void _genreIsolateFunction(Map<String, dynamic> message) {
3334
sendPort.send(genres);
3435
}
3536

36-
Future<List<Genre>> fetchGenres() async {
37+
Future<List<Genre>> fetchGenres(String region) async {
38+
final baseUrl = getBaseUrl(region);
3739
final response = await http.get(
38-
Uri.parse(
39-
'https://tmdb.maybeparsa.top/tmdb/genre/tv/list?api_key=$apiKey',
40-
),
40+
Uri.parse('${baseUrl}genre/tv/list?api_key=$apiKey'),
4141
);
4242

4343
if (response.statusCode == 200) {
@@ -81,11 +81,10 @@ void _seriesIsolateFunction(Map<String, dynamic> message) {
8181
sendPort.send(series);
8282
}
8383

84-
Future<List<Serie>> fetchSeriesByGenre(int genreId) async {
84+
Future<List<Serie>> fetchSeriesByGenre(int genreId, String region) async {
85+
final baseUrl = getBaseUrl(region);
8586
final response = await http.get(
86-
Uri.parse(
87-
'https://tmdb.maybeparsa.top/tmdb/discover/tv?api_key=$apiKey&with_genres=$genreId',
88-
),
87+
Uri.parse('${baseUrl}discover/tv?api_key=$apiKey&with_genres=$genreId'),
8988
);
9089

9190
if (response.statusCode == 200) {

lib/functions/fetchers/fetch_series_credits.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:isolate';
22

3+
import 'package:Mirarr/functions/get_base_url.dart';
34
import 'package:flutter_dotenv/flutter_dotenv.dart';
45
import 'package:http/http.dart' as http;
56
import 'dart:convert';
@@ -25,12 +26,11 @@ void _isolateFunction(Map<String, dynamic> message) {
2526
}
2627

2728
Future<Map<String, List<Map<String, dynamic>>>> fetchCredits(
28-
int serieId) async {
29+
int serieId, String region) async {
30+
final baseUrl = getBaseUrl(region);
2931
try {
3032
final response = await http.get(
31-
Uri.parse(
32-
'https://tmdb.maybeparsa.top/tmdb/tv/$serieId/credits?api_key=$apiKey',
33-
),
33+
Uri.parse('${baseUrl}tv/$serieId/credits?api_key=$apiKey'),
3434
);
3535

3636
if (response.statusCode == 200) {

lib/functions/fetchers/fetch_trending_movies.dart

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_dotenv/flutter_dotenv.dart';
44

55
import 'package:Mirarr/moviesPage/models/movie.dart';
66
import 'package:http/http.dart' as http;
7+
import 'package:Mirarr/functions/get_base_url.dart';
78

89
final apiKey = dotenv.env['TMDB_API_KEY'];
910

@@ -32,10 +33,12 @@ void _isolateFunction(Map<String, dynamic> message) {
3233
sendPort.send(movies);
3334
}
3435

35-
Future<List<Movie>> fetchTrendingMovies() async {
36+
Future<List<Movie>> fetchTrendingMovies(String region) async {
37+
final baseUrl = getBaseUrl(region);
38+
3639
final response = await http.get(
3740
Uri.parse(
38-
'https://tmdb.maybeparsa.top/tmdb/trending/movie/week?api_key=$apiKey',
41+
'${baseUrl}trending/movie/week?api_key=$apiKey',
3942
),
4043
);
4144

lib/functions/fetchers/fetch_trending_series.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:isolate';
22
import 'dart:convert';
3+
import 'package:Mirarr/functions/get_base_url.dart';
34
import 'package:Mirarr/seriesPage/models/serie.dart';
45
import 'package:flutter_dotenv/flutter_dotenv.dart';
56

@@ -31,11 +32,10 @@ void _isolateFunction(Map<String, dynamic> message) {
3132
sendPort.send(series);
3233
}
3334

34-
Future<List<Serie>> fetchTrendingSeries() async {
35+
Future<List<Serie>> fetchTrendingSeries(String region) async {
36+
final baseUrl = getBaseUrl(region);
3537
final response = await http.get(
36-
Uri.parse(
37-
'https://tmdb.maybeparsa.top/tmdb/trending/tv/day?api_key=$apiKey',
38-
),
38+
Uri.parse('${baseUrl}trending/tv/day?api_key=$apiKey'),
3939
);
4040

4141
if (response.statusCode == 200) {

lib/functions/get_base_url.dart

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
String getBaseUrl(String region) {
2+
if (region == 'iran') {
3+
return 'https://tmdb.relayer.ir/tmdb/';
4+
} else {
5+
return 'https://tmdb.maybeparsa.top/tmdb/';
6+
}
7+
}
8+
9+
String getImageBaseUrl(String region) {
10+
if (region == 'iran') {
11+
return 'https://tmdbpics.relayer.ir';
12+
} else {
13+
return 'https://tmdbpics.maybeparsa.top';
14+
}
15+
}
+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import 'package:flutter/material.dart';
2+
3+
import 'package:shared_preferences/shared_preferences.dart';
4+
5+
class RegionProvider extends ChangeNotifier {
6+
String _currentRegion = 'worldwide';
7+
SharedPreferences? _prefs;
8+
9+
RegionProvider(this._currentRegion) {
10+
loadRegion();
11+
}
12+
13+
String get currentRegion => _currentRegion;
14+
15+
void setRegion(String region) async {
16+
_currentRegion = region;
17+
notifyListeners();
18+
await _saveRegion();
19+
}
20+
21+
Future<void> loadRegion() async {
22+
_prefs = await SharedPreferences.getInstance();
23+
String? region = _prefs?.getString('region');
24+
if (region != null) {
25+
switch (region) {
26+
case 'iran':
27+
_currentRegion = 'iran';
28+
break;
29+
case 'worldwide':
30+
_currentRegion = 'worldwide';
31+
break;
32+
}
33+
}
34+
}
35+
36+
Future<void> _saveRegion() async {
37+
String regionName = 'worldwide';
38+
switch (_currentRegion) {
39+
case 'iran':
40+
regionName = 'iran';
41+
break;
42+
case 'worldwide':
43+
regionName = 'worldwide';
44+
break;
45+
}
46+
await _prefs?.setString('region', regionName);
47+
}
48+
}
49+
50+
class Region {
51+
static const String iran = 'iran';
52+
static const String worldwide = 'worldwide';
53+
}

lib/main.dart

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:Mirarr/functions/themeprovider_class.dart';
2+
import 'package:Mirarr/functions/regionprovider_class.dart';
23
import 'package:Mirarr/widgets/check_updates.dart';
34
import 'package:flutter/material.dart';
45
import 'package:flutter_dotenv/flutter_dotenv.dart';
@@ -24,9 +25,15 @@ void main() async {
2425
final themeProvider = ThemeProvider(AppThemes.orangeTheme);
2526
await themeProvider.loadTheme();
2627

28+
final regionProvider = RegionProvider('worldwide');
29+
await regionProvider.loadRegion();
30+
2731
runApp(
28-
ChangeNotifierProvider.value(
29-
value: themeProvider,
32+
MultiProvider(
33+
providers: [
34+
ChangeNotifierProvider.value(value: themeProvider),
35+
ChangeNotifierProvider.value(value: regionProvider),
36+
],
3037
child: const MyApp(),
3138
),
3239
);
@@ -43,8 +50,7 @@ class MyApp extends StatelessWidget {
4350
title: 'Mirarr',
4451
theme: themeProvider.currentTheme,
4552
home: const Scaffold(
46-
body:
47-
ConnectivityWidget(), // Use ConnectivityWidget as the home screen
53+
body: ConnectivityWidget(),
4854
),
4955
);
5056
});

0 commit comments

Comments
 (0)