progress in calendar sync

This commit is contained in:
Kima
2024-02-27 22:42:16 +01:00
parent c214705368
commit 9c43de08db
13 changed files with 364 additions and 4 deletions

View File

@@ -72,6 +72,7 @@ const userDataDB = DatabaseStruct("user_data", {
// v5 shit
"roundings": String,
"grade_rarities": String,
"linked_accounts": String,
});
Future<void> createTable(Database db, DatabaseStruct struct) =>
@@ -134,6 +135,7 @@ Future<Database> initDB(DatabaseProvider database) async {
// v5 shit
"roundings": "{}",
"grade_rarities": "{}",
"linked_accounts": "{}",
});
} catch (error) {
print("ERROR: migrateDB: $error");

View File

@@ -1,5 +1,6 @@
import 'dart:convert';
import 'package:refilc/api/providers/database_provider.dart';
import 'package:refilc/models/linked_account.dart';
import 'package:refilc/models/self_note.dart';
import 'package:refilc/models/subject_lesson_count.dart';
import 'package:refilc/models/user.dart';
@@ -133,7 +134,14 @@ class UserDatabaseQuery {
.map((e) => SendRecipient.fromJson(
e,
SendRecipientType.fromJson(e != null
? e['tipus']
? (e['tipus'] ??
{
'azonosito': '',
'kod': '',
'leiras': '',
'nev': '',
'rovidNev': ''
})
: {
'azonosito': '',
'kod': '',
@@ -326,4 +334,17 @@ class UserDatabaseQuery {
return (jsonDecode(raritiesJson) as Map)
.map((key, value) => MapEntry(key.toString(), value.toString()));
}
Future<List<LinkedAccount>> getLinkedAccounts(
{required String userId}) async {
List<Map> userData =
await db.query("user_data", where: "id = ?", whereArgs: [userId]);
if (userData.isEmpty) return [];
String? accountsJson = userData.elementAt(0)["linked_accounts"] as String?;
if (accountsJson == null) return [];
List<LinkedAccount> accounts = (jsonDecode(accountsJson) as List)
.map((e) => LinkedAccount.fromJson(e))
.toList();
return accounts;
}
}

View File

@@ -0,0 +1,35 @@
enum AccountType {
apple,
google,
meta,
qwid,
}
class LinkedAccount {
AccountType type;
String username;
String displayName;
String id;
LinkedAccount({
required this.type,
required this.username,
required this.displayName,
required this.id,
});
factory LinkedAccount.fromJson(Map json) {
return LinkedAccount(
type: json['type'] == 'apple'
? AccountType.apple
: json['type'] == 'google'
? AccountType.google
: json['type'] == 'meta'
? AccountType.meta
: AccountType.qwid,
username: json['username'],
displayName: json['display_name'],
id: json['id'],
);
}
}

View File

@@ -1,4 +1,8 @@
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
import 'package:provider/provider.dart';
import 'package:refilc/api/providers/database_provider.dart';
import 'package:refilc/api/providers/user_provider.dart';
import 'package:refilc/models/linked_account.dart';
import 'package:refilc_kreta_api/controllers/timetable_controller.dart';
import 'package:refilc_kreta_api/models/lesson.dart';
import 'package:flutter/foundation.dart';
@@ -8,7 +12,9 @@ import 'package:google_sign_in/google_sign_in.dart';
class ThirdPartyProvider with ChangeNotifier {
late List<Event>? _googleEvents;
// late BuildContext _context;
late List<LinkedAccount> _linkedAccounts;
late BuildContext _context;
static final _googleSignIn = GoogleSignIn(scopes: [
CalendarApi.calendarScope,
@@ -16,13 +22,31 @@ class ThirdPartyProvider with ChangeNotifier {
]);
List<Event> get googleEvents => _googleEvents ?? [];
List<LinkedAccount> get linkedAccounts => _linkedAccounts;
ThirdPartyProvider({
required BuildContext context,
List<LinkedAccount>? initialLinkedAccounts,
}) {
// _context = context;
_context = context;
_linkedAccounts = initialLinkedAccounts ?? [];
}
Future<void> restore() async {
String? userId = Provider.of<UserProvider>(_context, listen: false).id;
// Load absences from the database
if (userId != null) {
var dbLinkedAccounts =
await Provider.of<DatabaseProvider>(_context, listen: false)
.userQuery
.getLinkedAccounts(userId: userId);
_linkedAccounts = dbLinkedAccounts;
}
}
void fetch() async {}
Future<GoogleSignInAccount?> googleSignIn() async {
if (!await _googleSignIn.isSignedIn()) {
return _googleSignIn.signIn();