finished calendar sync huh
This commit is contained in:
parent
32c5e8ae91
commit
88daf43c3a
@ -49,6 +49,7 @@ const settingsDB = DatabaseStruct("settings", {
|
|||||||
"cal_sync_show_exams": int,
|
"cal_sync_show_exams": int,
|
||||||
"cal_sync_show_teacher": int,
|
"cal_sync_show_teacher": int,
|
||||||
"cal_sync_renamed": int,
|
"cal_sync_renamed": int,
|
||||||
|
"calendar_id": String,
|
||||||
});
|
});
|
||||||
// DON'T FORGET TO UPDATE DEFAULT VALUES IN `initDB` MIGRATION OR ELSE PARENTS WILL COMPLAIN ABOUT THEIR CHILDREN MISSING
|
// DON'T FORGET TO UPDATE DEFAULT VALUES IN `initDB` MIGRATION OR ELSE PARENTS WILL COMPLAIN ABOUT THEIR CHILDREN MISSING
|
||||||
// YOU'VE BEEN WARNED!!!
|
// YOU'VE BEEN WARNED!!!
|
||||||
|
@ -97,6 +97,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
bool _calSyncShowExams;
|
bool _calSyncShowExams;
|
||||||
bool _calSyncShowTeacher;
|
bool _calSyncShowTeacher;
|
||||||
bool _calSyncRenamed;
|
bool _calSyncRenamed;
|
||||||
|
String _calendarId;
|
||||||
|
|
||||||
SettingsProvider({
|
SettingsProvider({
|
||||||
DatabaseProvider? database,
|
DatabaseProvider? database,
|
||||||
@ -159,6 +160,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
required bool calSyncShowExams,
|
required bool calSyncShowExams,
|
||||||
required bool calSyncShowTeacher,
|
required bool calSyncShowTeacher,
|
||||||
required bool calSyncRenamed,
|
required bool calSyncRenamed,
|
||||||
|
required String calendarId,
|
||||||
}) : _database = database,
|
}) : _database = database,
|
||||||
_language = language,
|
_language = language,
|
||||||
_startPage = startPage,
|
_startPage = startPage,
|
||||||
@ -218,7 +220,8 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
_calSyncRoomLocation = calSyncRoomLocation,
|
_calSyncRoomLocation = calSyncRoomLocation,
|
||||||
_calSyncShowExams = calSyncShowExams,
|
_calSyncShowExams = calSyncShowExams,
|
||||||
_calSyncShowTeacher = calSyncShowTeacher,
|
_calSyncShowTeacher = calSyncShowTeacher,
|
||||||
_calSyncRenamed = calSyncRenamed;
|
_calSyncRenamed = calSyncRenamed,
|
||||||
|
_calendarId = calendarId;
|
||||||
|
|
||||||
factory SettingsProvider.fromMap(Map map,
|
factory SettingsProvider.fromMap(Map map,
|
||||||
{required DatabaseProvider database}) {
|
{required DatabaseProvider database}) {
|
||||||
@ -298,6 +301,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
calSyncShowExams: map['cal_sync_show_exams'] == 1,
|
calSyncShowExams: map['cal_sync_show_exams'] == 1,
|
||||||
calSyncShowTeacher: map['cal_sync_show_teacher'] == 1,
|
calSyncShowTeacher: map['cal_sync_show_teacher'] == 1,
|
||||||
calSyncRenamed: map['cal_sync_renamed'] == 1,
|
calSyncRenamed: map['cal_sync_renamed'] == 1,
|
||||||
|
calendarId: map['calendar_id'],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,6 +369,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
"cal_sync_show_exams": _calSyncShowExams ? 1 : 0,
|
"cal_sync_show_exams": _calSyncShowExams ? 1 : 0,
|
||||||
"cal_sync_show_teacher": _calSyncShowTeacher ? 1 : 0,
|
"cal_sync_show_teacher": _calSyncShowTeacher ? 1 : 0,
|
||||||
"cal_sync_renamed": _calSyncRenamed ? 1 : 0,
|
"cal_sync_renamed": _calSyncRenamed ? 1 : 0,
|
||||||
|
"calendar_id": _calendarId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,6 +441,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
calSyncShowExams: true,
|
calSyncShowExams: true,
|
||||||
calSyncShowTeacher: true,
|
calSyncShowTeacher: true,
|
||||||
calSyncRenamed: false,
|
calSyncRenamed: false,
|
||||||
|
calendarId: '',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,6 +504,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
bool get calSyncShowExams => _calSyncShowExams;
|
bool get calSyncShowExams => _calSyncShowExams;
|
||||||
bool get calSyncShowTeacher => _calSyncShowTeacher;
|
bool get calSyncShowTeacher => _calSyncShowTeacher;
|
||||||
bool get calSyncRenamed => _calSyncRenamed;
|
bool get calSyncRenamed => _calSyncRenamed;
|
||||||
|
String get calendarId => _calendarId;
|
||||||
|
|
||||||
Future<void> update({
|
Future<void> update({
|
||||||
bool store = true,
|
bool store = true,
|
||||||
@ -556,6 +563,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
bool? calSyncShowExams,
|
bool? calSyncShowExams,
|
||||||
bool? calSyncShowTeacher,
|
bool? calSyncShowTeacher,
|
||||||
bool? calSyncRenamed,
|
bool? calSyncRenamed,
|
||||||
|
String? calendarId,
|
||||||
}) async {
|
}) async {
|
||||||
if (language != null && language != _language) _language = language;
|
if (language != null && language != _language) _language = language;
|
||||||
if (startPage != null && startPage != _startPage) _startPage = startPage;
|
if (startPage != null && startPage != _startPage) _startPage = startPage;
|
||||||
@ -720,6 +728,9 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
if (calSyncRenamed != null && calSyncRenamed != _calSyncRenamed) {
|
if (calSyncRenamed != null && calSyncRenamed != _calSyncRenamed) {
|
||||||
_calSyncRenamed = calSyncRenamed;
|
_calSyncRenamed = calSyncRenamed;
|
||||||
}
|
}
|
||||||
|
if (calendarId != null && calendarId != _calendarId) {
|
||||||
|
_calendarId = calendarId;
|
||||||
|
}
|
||||||
// store or not
|
// store or not
|
||||||
if (store) await _database?.store.storeSettings(this);
|
if (store) await _database?.store.storeSettings(this);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
|
||||||
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
|
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:refilc/api/providers/database_provider.dart';
|
import 'package:refilc/api/providers/database_provider.dart';
|
||||||
import 'package:refilc/api/providers/user_provider.dart';
|
import 'package:refilc/api/providers/user_provider.dart';
|
||||||
import 'package:refilc/models/linked_account.dart';
|
import 'package:refilc/models/linked_account.dart';
|
||||||
|
import 'package:refilc/models/settings.dart';
|
||||||
import 'package:refilc/models/user.dart';
|
import 'package:refilc/models/user.dart';
|
||||||
import 'package:refilc_kreta_api/controllers/timetable_controller.dart';
|
import 'package:refilc_kreta_api/controllers/timetable_controller.dart';
|
||||||
import 'package:refilc_kreta_api/models/lesson.dart';
|
import 'package:refilc_kreta_api/models/lesson.dart';
|
||||||
@ -149,6 +152,8 @@ class ThirdPartyProvider with ChangeNotifier {
|
|||||||
required String calendarId,
|
required String calendarId,
|
||||||
required DateTime start,
|
required DateTime start,
|
||||||
required DateTime end,
|
required DateTime end,
|
||||||
|
required String description,
|
||||||
|
required String? location,
|
||||||
}) async {
|
}) async {
|
||||||
try {
|
try {
|
||||||
var httpClient = (await _googleSignIn.authenticatedClient())!;
|
var httpClient = (await _googleSignIn.authenticatedClient())!;
|
||||||
@ -160,6 +165,8 @@ class ThirdPartyProvider with ChangeNotifier {
|
|||||||
start: EventDateTime(dateTime: start),
|
start: EventDateTime(dateTime: start),
|
||||||
end: EventDateTime(dateTime: end),
|
end: EventDateTime(dateTime: end),
|
||||||
summary: title,
|
summary: title,
|
||||||
|
description: description,
|
||||||
|
location: location,
|
||||||
);
|
);
|
||||||
|
|
||||||
return await calendarApi.events.insert(event, calendarId);
|
return await calendarApi.events.insert(event, calendarId);
|
||||||
@ -194,13 +201,39 @@ class ThirdPartyProvider with ChangeNotifier {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Calendar?> getCalendar({
|
||||||
|
required String id,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
var httpClient = (await _googleSignIn.authenticatedClient())!;
|
||||||
|
var calendarApi = CalendarApi(httpClient);
|
||||||
|
|
||||||
|
return await calendarApi.calendars.get(id);
|
||||||
|
} catch (e) {
|
||||||
|
if (kDebugMode) print(e);
|
||||||
|
await _googleSignIn.signOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> pushTimetable(
|
Future<void> pushTimetable(
|
||||||
BuildContext context, TimetableController controller) async {
|
BuildContext context, TimetableController controller) async {
|
||||||
Calendar? calendar = await createCalendar(
|
SettingsProvider settings =
|
||||||
|
Provider.of<SettingsProvider>(_context, listen: false);
|
||||||
|
|
||||||
|
String calendarId = settings.calendarId;
|
||||||
|
late Calendar? calendar;
|
||||||
|
|
||||||
|
if (calendarId == '') {
|
||||||
|
calendar = await createCalendar(
|
||||||
name: 'reFilc - Órarend',
|
name: 'reFilc - Órarend',
|
||||||
description:
|
description:
|
||||||
'Ez egy automatikusan generált naptár, melyet a reFilc hozott létre az órarend számára.',
|
'Ez egy automatikusan generált naptár, melyet a reFilc hozott létre az órarend számára.',
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
calendar = await getCalendar(id: calendarId);
|
||||||
|
}
|
||||||
|
|
||||||
if (calendar == null) return;
|
if (calendar == null) return;
|
||||||
|
|
||||||
@ -209,11 +242,31 @@ class ThirdPartyProvider with ChangeNotifier {
|
|||||||
everyLesson.sort((a, b) => a.start.compareTo(b.start));
|
everyLesson.sort((a, b) => a.start.compareTo(b.start));
|
||||||
|
|
||||||
for (Lesson l in everyLesson) {
|
for (Lesson l in everyLesson) {
|
||||||
|
String mixedDescription = '';
|
||||||
|
|
||||||
|
if (settings.calSyncShowTeacher) {
|
||||||
|
mixedDescription +=
|
||||||
|
'Tanár: ${(l.teacher.isRenamed && settings.calSyncRenamed && settings.renamedTeachersEnabled) ? l.teacher.renamedTo : l.teacher.name}\n';
|
||||||
|
}
|
||||||
|
if (settings.calSyncRoomLocation == 'description') {
|
||||||
|
mixedDescription += 'Terem: ${l.room}\n';
|
||||||
|
}
|
||||||
|
|
||||||
Event? event = await pushEvent(
|
Event? event = await pushEvent(
|
||||||
title: l.name,
|
title: (((l.subject.isRenamed &&
|
||||||
|
settings.calSyncRenamed &&
|
||||||
|
settings.renamedSubjectsEnabled)
|
||||||
|
? l.subject.renamedTo
|
||||||
|
: l.subject.name) ??
|
||||||
|
l.name) +
|
||||||
|
(settings.calSyncShowExams && l.exam.replaceAll(' ', '') != ''
|
||||||
|
? '📝'
|
||||||
|
: ''),
|
||||||
calendarId: calendar.id!,
|
calendarId: calendar.id!,
|
||||||
start: l.start,
|
start: l.start,
|
||||||
end: l.end,
|
end: l.end,
|
||||||
|
description: mixedDescription,
|
||||||
|
location: settings.calSyncRoomLocation == 'location' ? l.room : null,
|
||||||
);
|
);
|
||||||
|
|
||||||
// temp shit (DONT BULLY ME, ILL CUM)
|
// temp shit (DONT BULLY ME, ILL CUM)
|
||||||
|
@ -58,6 +58,7 @@ class NavigationScreenState extends State<NavigationScreen>
|
|||||||
// Initial sync
|
// Initial sync
|
||||||
syncAll(context);
|
syncAll(context);
|
||||||
|
|
||||||
|
// platform specific shit
|
||||||
() async {
|
() async {
|
||||||
try {
|
try {
|
||||||
await Window.initialize();
|
await Window.initialize();
|
||||||
|
@ -3,6 +3,7 @@ import 'package:animations/animations.dart';
|
|||||||
import 'package:i18n_extension/i18n_extension.dart';
|
import 'package:i18n_extension/i18n_extension.dart';
|
||||||
import 'package:refilc/api/providers/update_provider.dart';
|
import 'package:refilc/api/providers/update_provider.dart';
|
||||||
import 'package:refilc/models/settings.dart';
|
import 'package:refilc/models/settings.dart';
|
||||||
|
import 'package:refilc/providers/third_party_provider.dart';
|
||||||
// TODO: gulag calendar sync
|
// TODO: gulag calendar sync
|
||||||
// import 'package:refilc/providers/third_party_provider.dart';
|
// import 'package:refilc/providers/third_party_provider.dart';
|
||||||
import 'package:refilc/utils/format.dart';
|
import 'package:refilc/utils/format.dart';
|
||||||
@ -30,6 +31,8 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:refilc_plus/models/premium_scopes.dart';
|
||||||
|
import 'package:refilc_plus/providers/premium_provider.dart';
|
||||||
import 'timetable_page.i18n.dart';
|
import 'timetable_page.i18n.dart';
|
||||||
|
|
||||||
// todo: "fix" overflow (priority: -1)
|
// todo: "fix" overflow (priority: -1)
|
||||||
@ -148,6 +151,16 @@ class TimetablePageState extends State<TimetablePage>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// push timetable to calendar
|
||||||
|
if (mounted) {
|
||||||
|
if (Provider.of<PremiumProvider>(context, listen: false).hasPremium &&
|
||||||
|
Provider.of<PremiumProvider>(context, listen: false)
|
||||||
|
.hasScope(PremiumScopes.calendarSync)) {
|
||||||
|
Provider.of<ThirdPartyProvider>(context, listen: false)
|
||||||
|
.pushTimetable(context, _controller);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Listen for user changes
|
// Listen for user changes
|
||||||
user = Provider.of<UserProvider>(context, listen: false);
|
user = Provider.of<UserProvider>(context, listen: false);
|
||||||
user.addListener(_userListener);
|
user.addListener(_userListener);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user