Merge branch 'master' into analytics
This commit is contained in:
commit
acbdf2aecb
3
changelog.md
Normal file
3
changelog.md
Normal file
@ -0,0 +1,3 @@
|
||||
- Haptikus visszajelzés
|
||||
- Animációk
|
||||
- Hibajavítások
|
@ -58,8 +58,6 @@ PODS:
|
||||
- SwiftyGif (5.4.0)
|
||||
- url_launcher (0.0.1):
|
||||
- Flutter
|
||||
- vibration (1.7.4-nullsafety.0):
|
||||
- Flutter
|
||||
|
||||
DEPENDENCIES:
|
||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||
@ -72,7 +70,6 @@ DEPENDENCIES:
|
||||
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
||||
- vibration (from `.symlinks/plugins/vibration/ios`)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
@ -103,8 +100,6 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/sqflite/ios"
|
||||
url_launcher:
|
||||
:path: ".symlinks/plugins/url_launcher/ios"
|
||||
vibration:
|
||||
:path: ".symlinks/plugins/vibration/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d
|
||||
@ -122,7 +117,6 @@ SPEC CHECKSUMS:
|
||||
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
||||
SwiftyGif: 5d4af95df24caf1c570dbbcb32a3b8a0763bc6d7
|
||||
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
||||
vibration: 1ec279c4a1a7a646627b54039d812334b3f1114a
|
||||
|
||||
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
|
||||
|
||||
|
@ -50,5 +50,7 @@
|
||||
</array>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>The app requires the photo library to set a custom profile picture.</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
@ -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,8 +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, role INTEGER)");
|
||||
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)");
|
||||
|
||||
@ -19,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;
|
||||
}
|
||||
@ -40,35 +41,67 @@ 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": int});
|
||||
|
||||
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);
|
||||
return usersDB;
|
||||
}
|
||||
|
||||
// Delete settings
|
||||
await db.execute("drop table settings");
|
||||
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);
|
||||
|
||||
// Fill missing columns
|
||||
keys.forEach((key) {
|
||||
if (!keys.contains(key)) {
|
||||
print("debug: dropping $key");
|
||||
settingsCopy.remove(key);
|
||||
}
|
||||
if (originalRows.length == 0) {
|
||||
await db.execute("drop table $table");
|
||||
await create(db);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!settings.containsKey(key) || settings[key] == null) {
|
||||
print("DEBUG: migrating $key");
|
||||
settingsCopy[key] = defaultSettings.toMap()[key];
|
||||
}
|
||||
List<Map<String, dynamic>> migrated = [];
|
||||
|
||||
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);
|
||||
|
||||
// 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];
|
||||
}
|
||||
});
|
||||
|
||||
migrated.add(copy);
|
||||
}
|
||||
});
|
||||
|
||||
if (migrated.length > 0) {
|
||||
// Delete table
|
||||
await db.execute("drop table $table");
|
||||
|
||||
// Recreate table
|
||||
await create(db);
|
||||
await Future.forEach(migrated, (Map<String, dynamic> copy) async {
|
||||
await db.insert(table, copy);
|
||||
});
|
||||
|
||||
// Recreate settings
|
||||
await createSettingsTable(db);
|
||||
await db.insert("settings", settingsCopy);
|
||||
|
||||
print("INFO: Database migrated");
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ class DatabaseStruct {
|
||||
break;
|
||||
}
|
||||
|
||||
return "${name} ${typeName.toUpperCase()}";
|
||||
return "${name} ${typeName.toUpperCase()} ${name == 'id' ? 'NOT NULL' : ''}";
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -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.4+133
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0 <3.0.0"
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit d8a680edf29c4b576e8303b7fc0a938df914e6e7
|
||||
Subproject commit 33bfa51329b52f900835b06adc8f62b9cb16b8eb
|
Loading…
x
Reference in New Issue
Block a user