Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
26be20ac28 | ||
|
|
afd004b980 | ||
|
|
6eb6a0cf16 | ||
|
|
abf9f9b13d |
@@ -1,3 +1,5 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:filcnaplo/utils/jwt.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
|
||||
import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
|
||||
|
||||
@@ -9,7 +9,7 @@ Future<Database> initDB() async {
|
||||
var settingsDB = await createSettingsTable(db);
|
||||
|
||||
// Create table Users
|
||||
await db.execute("CREATE TABLE IF NOT EXISTS users (id TEXT NOT NULL, name TEXT, username TEXT, password TEXT, institute_code TEXT, student TEXT)");
|
||||
var usersDB = await createUsersTable(db);
|
||||
await db.execute("CREATE TABLE IF NOT EXISTS user_data ("
|
||||
"id TEXT NOT NULL, grades TEXT, timetable TEXT, exams TEXT, homework TEXT, messages TEXT, notes TEXT, events TEXT, absences TEXT)");
|
||||
|
||||
@@ -18,7 +18,9 @@ Future<Database> initDB() async {
|
||||
await db.insert("settings", SettingsProvider.defaultSettings().toMap());
|
||||
}
|
||||
|
||||
await migrateDB(db, settingsDB.struct.keys);
|
||||
// Migrate Databases
|
||||
await migrateDB(db, "settings", settingsDB.struct.keys, SettingsProvider.defaultSettings().toMap(), createSettingsTable);
|
||||
await migrateDB(db, "users", usersDB.struct.keys, {"role": 0}, createUsersTable);
|
||||
|
||||
return db;
|
||||
}
|
||||
@@ -38,35 +40,59 @@ Future<DatabaseStruct> createSettingsTable(Database db) async {
|
||||
return settingsDB;
|
||||
}
|
||||
|
||||
Future<void> migrateDB(Database db, Iterable<String> keys) async {
|
||||
var settings = (await db.query("settings"))[0];
|
||||
Future<DatabaseStruct> createUsersTable(Database db) async {
|
||||
var usersDB = DatabaseStruct(
|
||||
{"id": String, "name": String, "username": String, "password": String, "institute_code": String, "student": String, "role": String});
|
||||
|
||||
bool migrationRequired = keys.any((key) => !settings.containsKey(key) || settings[key] == null);
|
||||
// Create table Users
|
||||
await db.execute("CREATE TABLE IF NOT EXISTS users ($usersDB)");
|
||||
|
||||
if (migrationRequired) {
|
||||
var defaultSettings = SettingsProvider.defaultSettings();
|
||||
var settingsCopy = Map<String, dynamic>.from(settings);
|
||||
|
||||
// Delete settings
|
||||
await db.execute("drop table settings");
|
||||
|
||||
// Fill missing columns
|
||||
keys.forEach((key) {
|
||||
if (!keys.contains(key)) {
|
||||
print("debug: dropping $key");
|
||||
settingsCopy.remove(key);
|
||||
}
|
||||
|
||||
if (!settings.containsKey(key) || settings[key] == null) {
|
||||
print("DEBUG: migrating $key");
|
||||
settingsCopy[key] = defaultSettings.toMap()[key];
|
||||
}
|
||||
});
|
||||
|
||||
// Recreate settings
|
||||
await createSettingsTable(db);
|
||||
await db.insert("settings", settingsCopy);
|
||||
|
||||
print("INFO: Database migrated");
|
||||
}
|
||||
return usersDB;
|
||||
}
|
||||
|
||||
Future<void> migrateDB(
|
||||
Database db,
|
||||
String table,
|
||||
Iterable<String> keys,
|
||||
Map<String, Object?> defaultValues,
|
||||
Future<DatabaseStruct> Function(Database) create,
|
||||
) async {
|
||||
var originalRows = (await db.query(table));
|
||||
|
||||
if (originalRows.length == 0) {
|
||||
await db.execute("drop table $table");
|
||||
await create(db);
|
||||
return;
|
||||
}
|
||||
|
||||
await Future.forEach<Map<String, Object?>>(originalRows, (original) async {
|
||||
bool migrationRequired = keys.any((key) => !original.containsKey(key) || original[key] == null);
|
||||
|
||||
if (migrationRequired) {
|
||||
print("INFO: Migrating $table");
|
||||
var copy = Map<String, dynamic>.from(original);
|
||||
|
||||
// Delete table
|
||||
await db.execute("drop table $table");
|
||||
|
||||
// Fill missing columns
|
||||
keys.forEach((key) {
|
||||
if (!keys.contains(key)) {
|
||||
print("DEBUG: dropping $key");
|
||||
copy.remove(key);
|
||||
}
|
||||
|
||||
if (!original.containsKey(key) || original[key] == null) {
|
||||
print("DEBUG: migrating $key");
|
||||
copy[key] = defaultValues[key];
|
||||
}
|
||||
});
|
||||
|
||||
// Recreate table
|
||||
await create(db);
|
||||
await db.insert(table, copy);
|
||||
|
||||
print("INFO: Database migrated");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class DatabaseStruct {
|
||||
break;
|
||||
}
|
||||
|
||||
return "${name} ${typeName.toUpperCase()}";
|
||||
return "${name} ${typeName.toUpperCase()} ${name == 'id' ? 'NOT NULL' : ''}";
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -10,6 +10,8 @@ import 'package:open_file/open_file.dart';
|
||||
enum UpdateState { prepare, downloading, installing }
|
||||
typedef UpdateCallback = Function(double progress, UpdateState state);
|
||||
|
||||
// TODO: cleanup old apk files
|
||||
|
||||
extension UpdateHelper on Release {
|
||||
Future<void> install({UpdateCallback? updateCallback}) async {
|
||||
String downloads = await StorageHelper.downloadsPath();
|
||||
|
||||
@@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez"
|
||||
homepage: https://filcnaplo.hu
|
||||
publish_to: "none"
|
||||
|
||||
version: 3.0.2+130
|
||||
version: 3.0.3+131
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0 <3.0.0"
|
||||
|
||||
Submodule filcnaplo_kreta_api updated: 8b3ec15500...136f132edf
Submodule filcnaplo_mobile_ui updated: b301aee9d0...6ba35d8050
Reference in New Issue
Block a user