progress in calendar sync
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
35
refilc/lib/models/linked_account.dart
Normal file
35
refilc/lib/models/linked_account.dart
Normal 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'],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user