forked from firka/student-legacy
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)
|
- SwiftyGif (5.4.0)
|
||||||
- url_launcher (0.0.1):
|
- url_launcher (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- vibration (1.7.4-nullsafety.0):
|
|
||||||
- Flutter
|
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||||
@ -72,7 +70,6 @@ DEPENDENCIES:
|
|||||||
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
- share_plus (from `.symlinks/plugins/share_plus/ios`)
|
||||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||||
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
|
||||||
- vibration (from `.symlinks/plugins/vibration/ios`)
|
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
@ -103,8 +100,6 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/sqflite/ios"
|
:path: ".symlinks/plugins/sqflite/ios"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
:path: ".symlinks/plugins/url_launcher/ios"
|
:path: ".symlinks/plugins/url_launcher/ios"
|
||||||
vibration:
|
|
||||||
:path: ".symlinks/plugins/vibration/ios"
|
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d
|
DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d
|
||||||
@ -122,7 +117,6 @@ SPEC CHECKSUMS:
|
|||||||
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
||||||
SwiftyGif: 5d4af95df24caf1c570dbbcb32a3b8a0763bc6d7
|
SwiftyGif: 5d4af95df24caf1c570dbbcb32a3b8a0763bc6d7
|
||||||
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
|
||||||
vibration: 1ec279c4a1a7a646627b54039d812334b3f1114a
|
|
||||||
|
|
||||||
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
|
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
|
||||||
|
|
||||||
|
@ -50,5 +50,7 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>NSPhotoLibraryUsageDescription</key>
|
<key>NSPhotoLibraryUsageDescription</key>
|
||||||
<string>The app requires the photo library to set a custom profile picture.</string>
|
<string>The app requires the photo library to set a custom profile picture.</string>
|
||||||
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
|
<false/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
import 'package:filcnaplo/utils/jwt.dart';
|
import 'package:filcnaplo/utils/jwt.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
|
||||||
|
@ -9,8 +9,7 @@ Future<Database> initDB() async {
|
|||||||
var settingsDB = await createSettingsTable(db);
|
var settingsDB = await createSettingsTable(db);
|
||||||
|
|
||||||
// Create table Users
|
// Create table Users
|
||||||
await db.execute(
|
var usersDB = await createUsersTable(db);
|
||||||
"CREATE TABLE IF NOT EXISTS users (id TEXT NOT NULL, name TEXT, username TEXT, password TEXT, institute_code TEXT, student TEXT, role INTEGER)");
|
|
||||||
await db.execute("CREATE TABLE IF NOT EXISTS user_data ("
|
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)");
|
"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 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;
|
return db;
|
||||||
}
|
}
|
||||||
@ -40,35 +41,67 @@ Future<DatabaseStruct> createSettingsTable(Database db) async {
|
|||||||
return settingsDB;
|
return settingsDB;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> migrateDB(Database db, Iterable<String> keys) async {
|
Future<DatabaseStruct> createUsersTable(Database db) async {
|
||||||
var settings = (await db.query("settings"))[0];
|
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) {
|
return usersDB;
|
||||||
var defaultSettings = SettingsProvider.defaultSettings();
|
}
|
||||||
var settingsCopy = Map<String, dynamic>.from(settings);
|
|
||||||
|
|
||||||
// Delete settings
|
Future<void> migrateDB(
|
||||||
await db.execute("drop table settings");
|
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
|
if (originalRows.length == 0) {
|
||||||
keys.forEach((key) {
|
await db.execute("drop table $table");
|
||||||
if (!keys.contains(key)) {
|
await create(db);
|
||||||
print("debug: dropping $key");
|
return;
|
||||||
settingsCopy.remove(key);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!settings.containsKey(key) || settings[key] == null) {
|
List<Map<String, dynamic>> migrated = [];
|
||||||
print("DEBUG: migrating $key");
|
|
||||||
settingsCopy[key] = defaultSettings.toMap()[key];
|
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");
|
print("INFO: Database migrated");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ class DatabaseStruct {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "${name} ${typeName.toUpperCase()}";
|
return "${name} ${typeName.toUpperCase()} ${name == 'id' ? 'NOT NULL' : ''}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -3,7 +3,7 @@ description: "Nem hivatalos e-napló alkalmazás az e-Kréta rendszerhez"
|
|||||||
homepage: https://filcnaplo.hu
|
homepage: https://filcnaplo.hu
|
||||||
publish_to: "none"
|
publish_to: "none"
|
||||||
|
|
||||||
version: 3.0.2+130
|
version: 3.0.4+133
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.12.0 <3.0.0"
|
sdk: ">=2.12.0 <3.0.0"
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit d8a680edf29c4b576e8303b7fc0a938df914e6e7
|
Subproject commit 33bfa51329b52f900835b06adc8f62b9cb16b8eb
|
Loading…
x
Reference in New Issue
Block a user