Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2.8.0 #312

Merged
merged 21 commits into from
Dec 1, 2024
Merged

2.8.0 #312

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
31ede99
build(deps): bump webview_flutter_wkwebview from 3.15.0 to 3.16.3
dependabot[bot] Nov 23, 2024
756e0b4
build(deps): bump flutter_foreground_task from 8.11.0 to 8.14.0
dependabot[bot] Nov 23, 2024
ebb531e
build(deps): bump dio from 5.6.0 to 5.7.0
dependabot[bot] Nov 23, 2024
182bcf9
Merge pull request #302 from LezdCS/dependabot/pub/develop/webview_fl…
LezdCS Nov 23, 2024
4253a2e
Merge pull request #303 from LezdCS/dependabot/pub/develop/flutter_fo…
LezdCS Nov 23, 2024
0ce98dd
Merge pull request #304 from LezdCS/dependabot/pub/develop/dio-5.7.0
LezdCS Nov 23, 2024
d6f1c08
build(deps): bump webview_flutter_android from 3.16.7 to 4.1.0
dependabot[bot] Nov 23, 2024
c54ccf0
Merge pull request #306 from LezdCS/dependabot/pub/develop/webview_fl…
LezdCS Nov 23, 2024
f1d8d3d
build(deps): bump flutter_launcher_icons from 0.13.1 to 0.14.1 (#305)
dependabot[bot] Nov 23, 2024
5288dcf
ci: version 2.8.0
LezdCS Nov 23, 2024
898b738
fix: chat creation for not logged in users
LezdCS Nov 23, 2024
2a9a1b2
fix: twitch anonymous chat for non logged in users
LezdCS Nov 23, 2024
5afede6
fix: hide chat input if not logged in
LezdCS Nov 23, 2024
04a8423
refactor: move all getviews in the views folder
LezdCS Nov 23, 2024
14bfb8a
feat: add dartz package for Either usage
LezdCS Nov 23, 2024
36c708f
refactor: optimize Dio and Mappr instances creation
LezdCS Nov 23, 2024
3a022af
refactor: initDio base url
LezdCS Nov 23, 2024
767d486
refactor: SE use Either instead of DataState
LezdCS Nov 24, 2024
c8e9f7a
refactor: total replacement of DataState for Either
LezdCS Nov 24, 2024
ee5f506
fix: realtime tab for guests users
LezdCS Nov 27, 2024
3a822fe
fix: usage of .fold in the repos impl
LezdCS Nov 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import 'package:get_storage/get_storage.dart';
import 'package:irllink/firebase_options.dart';
import 'package:irllink/routes/app_pages.dart';
import 'package:irllink/src/bindings/login_bindings.dart';
import 'package:irllink/src/core/background/tasks_handlers/realtime_irl_task_handler.dart';
import 'package:irllink/src/core/depedency_injection.dart';
import 'package:irllink/src/core/resources/app_translations.dart';
import 'package:irllink/src/core/resources/themes.dart';
import 'package:irllink/src/core/services/realtime_irl_task_handler.dart';
import 'package:irllink/src/core/services/talker_service.dart';
import 'package:irllink/src/core/utils/talker_custom_logs.dart';
import 'package:irllink/src/presentation/views/login_view.dart';
Expand Down
15 changes: 13 additions & 2 deletions lib/src/bindings/home_bindings.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import 'package:dio/dio.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_instance/src/bindings_interface.dart';
import 'package:get/get_instance/src/extension_instance.dart';
import 'package:irllink/src/core/services/settings_service.dart';
import 'package:irllink/src/core/services/talker_service.dart';
import 'package:irllink/src/core/services/watch_service.dart';
import 'package:irllink/src/core/utils/constants.dart';
import 'package:irllink/src/core/utils/init_dio.dart';
import 'package:irllink/src/data/repositories/streamelements_repository_impl.dart';
import 'package:irllink/src/data/repositories/twitch_repository_impl.dart';
import 'package:irllink/src/domain/usecases/streamelements/get_last_activities_usecase.dart';
Expand Down Expand Up @@ -32,9 +35,17 @@ import 'package:irllink/src/presentation/controllers/twitch_tab_view_controller.
class HomeBindings extends Bindings {
@override
Future<void> dependencies() async {
Dio dioTwitchClient = initDio(kTwitchApiUrlBase);
Dio streamElementsDioClient = initDio(kStreamelementsUrlBase);

// Repositories
final twitchRepository = TwitchRepositoryImpl();
final streamelementsRepository = StreamelementsRepositoryImpl();
final twitchRepository = TwitchRepositoryImpl(
dioClient: dioTwitchClient,
);
final streamelementsRepository = StreamelementsRepositoryImpl(
talker: Get.find<TalkerService>().talker,
dioClient: streamElementsDioClient,
);

// Services
final settingsService = Get.find<SettingsService>();
Expand Down
8 changes: 7 additions & 1 deletion lib/src/bindings/login_bindings.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'package:dio/dio.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_instance/src/bindings_interface.dart';
import 'package:get/get_instance/src/extension_instance.dart';
import 'package:irllink/src/core/utils/constants.dart';
import 'package:irllink/src/core/utils/init_dio.dart';
import 'package:irllink/src/data/repositories/twitch_repository_impl.dart';
import 'package:irllink/src/domain/usecases/twitch/get_twitch_local_usecase.dart';
import 'package:irllink/src/domain/usecases/twitch/login_usecase.dart';
Expand All @@ -10,8 +13,11 @@ import 'package:irllink/src/presentation/controllers/login_view_controller.dart'
class LoginBindings extends Bindings {
@override
void dependencies() {
Dio dioTwitchClient = initDio(kTwitchApiUrlBase);
// Repositories
TwitchRepositoryImpl twitchRepository = TwitchRepositoryImpl();
TwitchRepositoryImpl twitchRepository = TwitchRepositoryImpl(
dioClient: dioTwitchClient,
);

// Use cases
GetTwitchLocalUseCase getTwitchLocalUseCase =
Expand Down
15 changes: 13 additions & 2 deletions lib/src/bindings/settings_bindings.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import 'package:dio/dio.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_instance/src/bindings_interface.dart';
import 'package:get/get_instance/src/extension_instance.dart';
import 'package:irllink/src/core/services/settings_service.dart';
import 'package:irllink/src/core/services/store_service.dart';
import 'package:irllink/src/core/services/talker_service.dart';
import 'package:irllink/src/core/services/tts_service.dart';
import 'package:irllink/src/core/utils/constants.dart';
import 'package:irllink/src/core/utils/init_dio.dart';
import 'package:irllink/src/data/repositories/streamelements_repository_impl.dart';
import 'package:irllink/src/data/repositories/twitch_repository_impl.dart';
import 'package:irllink/src/domain/usecases/streamelements/disconnect_usecase.dart';
Expand All @@ -16,9 +20,16 @@ import 'package:irllink/src/presentation/controllers/settings_view_controller.da
class SettingsBindings extends Bindings {
@override
void dependencies() {
Dio dioTwitchClient = initDio(kTwitchApiUrlBase);
Dio streamElementsDioClient = initDio(kStreamelementsUrlBase);
// Repositories
final twitchRepository = TwitchRepositoryImpl();
final streamelementsRepository = StreamelementsRepositoryImpl();
final twitchRepository = TwitchRepositoryImpl(
dioClient: dioTwitchClient,
);
final streamelementsRepository = StreamelementsRepositoryImpl(
talker: Get.find<TalkerService>().talker,
dioClient: streamElementsDioClient,
);

// Use cases
GetTwitchUsersUseCase getTwitchUsersUseCase =
Expand Down
13 changes: 11 additions & 2 deletions lib/src/core/depedency_injection.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:irllink/src/core/services/app_info_service.dart';
Expand All @@ -6,6 +7,8 @@ import 'package:irllink/src/core/services/store_service.dart';
import 'package:irllink/src/core/services/talker_service.dart';
import 'package:irllink/src/core/services/tts_service.dart';
import 'package:irllink/src/core/services/watch_service.dart';
import 'package:irllink/src/core/utils/constants.dart';
import 'package:irllink/src/core/utils/init_dio.dart';
import 'package:irllink/src/data/repositories/settings_repository_impl.dart';
import 'package:irllink/src/data/repositories/twitch_repository_impl.dart';
import 'package:irllink/src/domain/usecases/settings/get_settings_usecase.dart';
Expand All @@ -18,9 +21,15 @@ Future<void> initializeDependencies() async {
permanent: true,
);

Dio dioTwitchClient = initDio(kTwitchApiUrlBase);

// Repositories
SettingsRepositoryImpl settingsRepository = SettingsRepositoryImpl();
TwitchRepositoryImpl twitchRepository = TwitchRepositoryImpl();
final settingsRepository = SettingsRepositoryImpl(
talker: Get.find<TalkerService>().talker,
);
final twitchRepository = TwitchRepositoryImpl(
dioClient: dioTwitchClient,
);

// Use cases
final getSettingsUseCase = GetSettingsUseCase(settingsRepository);
Expand Down
9 changes: 9 additions & 0 deletions lib/src/core/failure.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import 'package:get/get.dart';
import 'package:irllink/src/core/services/talker_service.dart';

class Failure {
String message;
Failure(this.message) {
Get.find<TalkerService>().talker.error(message);
}
}
24 changes: 0 additions & 24 deletions lib/src/core/resources/data_state.dart

This file was deleted.

67 changes: 38 additions & 29 deletions lib/src/core/services/realtime_irl.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import 'dart:async';

import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import 'package:geolocator/geolocator.dart';
import 'package:get/get_instance/get_instance.dart';
import 'package:get/get_rx/get_rx.dart';
import 'package:get/route_manager.dart';
import 'package:irllink/src/core/resources/data_state.dart';
import 'package:irllink/src/core/failure.dart';
import 'package:irllink/src/core/services/talker_service.dart';
import 'package:irllink/src/core/utils/determine_position.dart';

Expand All @@ -23,6 +24,7 @@ class RealtimeIrl {

Rx<RtIrlStatus> status = RtIrlStatus.stopped.obs;
Talker talker = Get.find<TalkerService>().talker;
Dio dioClient = initDio('https://rtirl.com/api');

RealtimeIrl(
this.key,
Expand All @@ -34,17 +36,27 @@ class RealtimeIrl {
switch (action) {
case 'repeat':
status.value = RtIrlStatus.updating;
DataState<Position> p = await determinePosition();
if (p is DataSuccess && status.value == RtIrlStatus.updating) {
talker.info(
"Updating position on RTIRL: ${p.data!.latitude}, ${p.data!.longitude} at ${data['timestampMillis']}",
);
DataState updateResult = await updatePosition(p.data!);
if (updateResult is DataFailed) {
status.value = RtIrlStatus.stopped;
await stopTracking();
}
}
final positionResult = await determinePosition();
positionResult.fold(
(l) {},
(r) async {
if (status.value == RtIrlStatus.updating) {
talker.info(
"Updating position on RTIRL: ${r.latitude}, ${r.longitude} at ${data['timestampMillis']}",
);
final updateResult = await updatePosition(r);

updateResult.fold(
(l) async {
status.value = RtIrlStatus.stopped;
await stopTracking();
},
(r) {},
);
}
},
);

break;
case 'rtirl_stop':
await stopTracking();
Expand All @@ -55,41 +67,38 @@ class RealtimeIrl {
}
}

Future<DataState> updatePosition(Position p) async {
Future<Either<Failure, void>> updatePosition(Position p) async {
try {
Response response;
Dio dio = initDio();
dio.options.headers["Content-Type"] = "application/json";
response = await dio.post(
"https://rtirl.com/api/push?key=$key",
await dioClient.post(
"/push?key=$key",
data: {
'latitude': p.latitude,
'longitude': p.longitude,
},
);
status.value = RtIrlStatus.updating;
return DataSuccess(response.data);
return const Right(null);
} on DioException catch (e) {
status.value = RtIrlStatus.stopped;
return DataFailed(
"Unable to update your position on RTIRL : ${e.message}",
return Left(
Failure("Unable to update your position on RTIRL : ${e.message}"),
);
}
}

Future<DataState> stopTracking() async {
Future<Either<Failure, void>> stopTracking() async {
try {
FlutterForegroundTask.stopService();
Response response;
Dio dio = initDio();
status.value = RtIrlStatus.stopped;
response = await dio.post(
"https://rtirl.com/api/stop?key=$key",
await dioClient.post(
"/stop?key=$key",
);
return DataSuccess(response.data);
return const Right(null);
} on DioException catch (e) {
return DataFailed(
"Unable to stop tracking your position on RTIRL : ${e.message}",
return Left(
Failure(
"Unable to stop tracking your position on RTIRL : ${e.message}",
),
);
}
}
Expand Down
24 changes: 14 additions & 10 deletions lib/src/core/services/settings_service.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:irllink/src/core/resources/data_state.dart';
import 'package:irllink/src/domain/entities/settings.dart';
import 'package:irllink/src/domain/usecases/settings/get_settings_usecase.dart';
import 'package:irllink/src/domain/usecases/settings/set_settings_usecase.dart';
Expand All @@ -16,23 +16,27 @@ class SettingsService extends GetxService {
late Rx<Settings> settings;

Future<SettingsService> init() async {
settings = (await getSettings()).obs;
await getSettings();
return this;
}

Future<Settings> getSettings() async {
DataState<Settings> settingsResult = await getSettingsUseCase();
if (settingsResult is DataFailed) {
// settingsResult is never returned as DataFailed, we always return DataSuccess in the implementation
Exception(settingsResult.error);
}
return settingsResult.data!;
Future<void> getSettings() async {
final settingsResult = await getSettingsUseCase();

settingsResult.fold(
(l) => debugPrint(l.message),
(r) => settings = r.obs,
);
}

Future<void> saveSettings() async {
settings.refresh();
await setSettingsUseCase(
final setResult = await setSettingsUseCase(
params: settings.value,
);
setResult.fold(
(l) => debugPrint(l.message),
(r) => {},
);
}
}
16 changes: 8 additions & 8 deletions lib/src/core/services/store_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:irllink/src/core/resources/data_state.dart';

import 'package:irllink/src/core/utils/init_dio.dart';
import 'package:irllink/src/domain/entities/twitch/twitch_credentials.dart';
Expand All @@ -24,6 +23,8 @@ class StoreService extends GetxService {
final GetTwitchLocalUseCase getTwitchLocalUseCase;
final Talker talker;

Dio dioClient = initDio('');

late StreamSubscription<List<PurchaseDetails>> subscription;
List<ProductDetails> products = [];
RxBool purchasePending = false.obs;
Expand Down Expand Up @@ -143,11 +144,11 @@ class StoreService extends GetxService {
}

TwitchCredentials? twitchCredentials;
await getTwitchLocalUseCase().then((value) {
if (value is DataSuccess) {
twitchCredentials = value.data;
}
});
final getLocalResult = await getTwitchLocalUseCase();
getLocalResult.fold(
(l) => {},
(r) => twitchCredentials = r,
);

if (twitchCredentials == null) {
return Future<bool>.value(false);
Expand All @@ -161,9 +162,8 @@ class StoreService extends GetxService {
if (kDebugMode) {
url = remoteConfig.getString('verify_android_purchase_dev');
}
var dio = initDio();
try {
await dio.post(
await dioClient.post(
url,
data: {
'purchaseToken': pruchaseToken,
Expand Down
Loading