|
...
|
...
|
@@ -201,8 +201,7 @@ class TodayController extends GetMaterialController { |
|
|
|
showPartnerAdBanner.value = false;
|
|
|
|
} else {
|
|
|
|
_refreshFriendList(onFriendListUpdated: () {
|
|
|
|
if (friendsList.isNotEmpty ||
|
|
|
|
friendsList.value.length >= friendsListLimit) {
|
|
|
|
if (friendsList.isNotEmpty || friendsList.length >= friendsListLimit) {
|
|
|
|
showPartnerAdBanner.value = false;
|
|
|
|
return;
|
|
|
|
}
|
|
...
|
...
|
@@ -241,10 +240,12 @@ class TodayController extends GetMaterialController { |
|
|
|
|
|
|
|
DateTime _clampDate(DateTime date) {
|
|
|
|
final normalizedDate = DateUtils.dateOnly(date);
|
|
|
|
if (normalizedDate.isBefore(firstSelectableDay.value))
|
|
|
|
if (normalizedDate.isBefore(firstSelectableDay.value)) {
|
|
|
|
return firstSelectableDay.value;
|
|
|
|
if (normalizedDate.isAfter(lastSelectableDay.value))
|
|
|
|
}
|
|
|
|
if (normalizedDate.isAfter(lastSelectableDay.value)) {
|
|
|
|
return lastSelectableDay.value;
|
|
|
|
}
|
|
|
|
return normalizedDate;
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -275,7 +276,7 @@ class TodayController extends GetMaterialController { |
|
|
|
AppLogger.d("requestHealthClientAuthorization : $success");
|
|
|
|
if (success) {
|
|
|
|
// await LoadingService.instance.run(() async {
|
|
|
|
_rawDataApi.performHealthDataUpload();
|
|
|
|
_performHealthDataUpload();
|
|
|
|
_startCoreCaculate(refreshAfterComplete: true);
|
|
|
|
// });
|
|
|
|
// result.status = 1;
|
|
...
|
...
|
@@ -291,7 +292,7 @@ class TodayController extends GetMaterialController { |
|
|
|
return;
|
|
|
|
} else if (result.status == 1) {
|
|
|
|
// await LoadingService.instance.run(() async {
|
|
|
|
_rawDataApi.performHealthDataUpload();
|
|
|
|
_performHealthDataUpload();
|
|
|
|
_startCoreCaculate(refreshAfterComplete: true);
|
|
|
|
// });
|
|
|
|
if (isFromNoPermissionPage) {
|
|
...
|
...
|
@@ -352,17 +353,42 @@ class TodayController extends GetMaterialController { |
|
|
|
unawaited(loadDataForDate(selectedDate.value));
|
|
|
|
showHealthDataAuthCardStatus.value = result.status;
|
|
|
|
}
|
|
|
|
} catch (e) {}
|
|
|
|
} catch (error, stackTrace) {
|
|
|
|
AppLogger.e(
|
|
|
|
'TodayController.checkHealthDataAuthCardVisible failed',
|
|
|
|
error,
|
|
|
|
stackTrace,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> checkUploadedStatus(
|
|
|
|
DateTime firstTime, HealthAuthorization result) async {
|
|
|
|
bool hasUploaded = false;
|
|
|
|
switch (await _healthApi.getHealthDataEverUploaded()) {
|
|
|
|
case AppSuccess(:final data):
|
|
|
|
hasUploaded = data.flag ?? false;
|
|
|
|
if (hasUploaded && data.startTime != null && data.startTime! > 0) {
|
|
|
|
final firstDayTime = DateUtils.dateOnly(
|
|
|
|
DateTime.fromMillisecondsSinceEpoch(data.startTime! * 1000),
|
|
|
|
);
|
|
|
|
if (firstDayTime.isBefore(firstTime)) {
|
|
|
|
firstSelectableDay.value = firstDayTime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case AppFailure():
|
|
|
|
}
|
|
|
|
showHealthDataAuthCardStatus.value = !hasUploaded ? -1 : result.status;
|
|
|
|
}
|
|
|
|
|
|
|
|
void _calculateHealthDataWithoutLoading({VoidCallback? uploaded}) {
|
|
|
|
void _calculateHealthDataWithoutLoading({Future<void> Function()? uploaded}) {
|
|
|
|
unawaited(
|
|
|
|
(() async {
|
|
|
|
try {
|
|
|
|
await _healthRawDataCoreService.startCoreCaculate();
|
|
|
|
unawaited(loadDataForDate(selectedDate.value));
|
|
|
|
uploaded?.call();
|
|
|
|
await loadDataForDate(selectedDate.value);
|
|
|
|
await uploaded?.call();
|
|
|
|
} catch (error, stackTrace) {
|
|
|
|
AppLogger.e('Apple Health calculate failed', error, stackTrace);
|
|
|
|
}
|
|
...
|
...
|
@@ -385,6 +411,17 @@ class TodayController extends GetMaterialController { |
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
void _performHealthDataUpload() {
|
|
|
|
unawaited(
|
|
|
|
_rawDataApi
|
|
|
|
.performHealthDataUpload()
|
|
|
|
.catchError((Object error, StackTrace stackTrace) {
|
|
|
|
AppLogger.e('Apple Health raw upload failed', error, stackTrace);
|
|
|
|
return false;
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> checkNotificationCardVisible() async {
|
|
|
|
try {
|
|
|
|
Permission.notification.status.then((status) {
|
|
...
|
...
|
@@ -563,7 +600,9 @@ class TodayController extends GetMaterialController { |
|
|
|
try {
|
|
|
|
final vipPrefs = UserPreferencesVipInfo.fromVipInfo(vip);
|
|
|
|
await Get.find<UserPreferencesStorage>().updateVipInfo(vipPrefs);
|
|
|
|
} on Exception catch (e) {}
|
|
|
|
} on Exception catch (error, stackTrace) {
|
|
|
|
AppLogger.e('Update VIP info failed', error, stackTrace);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -574,7 +613,9 @@ class TodayController extends GetMaterialController { |
|
|
|
try {
|
|
|
|
final vipPrefs = UserPreferencesVipInfo.fromVipInfo(vip);
|
|
|
|
await Get.find<UserPreferencesStorage>().updateVipInfo(vipPrefs);
|
|
|
|
} on Exception catch (e) {}
|
|
|
|
} on Exception catch (error, stackTrace) {
|
|
|
|
AppLogger.e('Update VIP info failed', error, stackTrace);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
...
|
...
|
|