Skip to content
This repository has been archived by the owner on Jan 3, 2024. It is now read-only.

Commit

Permalink
Merge 3d5130f into acb367d
Browse files Browse the repository at this point in the history
  • Loading branch information
Konstantin committed Jun 14, 2018
2 parents acb367d + 3d5130f commit 9067b42
Show file tree
Hide file tree
Showing 25 changed files with 639 additions and 349 deletions.
2 changes: 1 addition & 1 deletion android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<application
android:name="io.flutter.app.FlutterApplication"
android:label="courses_in_english"
android:icon="@mipmap/ic_launcher">
android:icon="@mipmap/cow_icon">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
Expand Down
17 changes: 17 additions & 0 deletions lib/connect/dataprovider/cie/mock/sqlite_cie_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'dart:async';
import 'package:courses_in_english/connect/dataprovider/cie/cie_provider.dart';
import 'package:courses_in_english/model/cie/cie.dart';
import 'package:courses_in_english/connect/dataprovider/databasehelper/databasehelper.dart';
import 'package:courses_in_english/model/globals/globals.dart' as globals;

/// Provider for campuses providing mock data.
class SqliteCieProvider implements CieProvider {
Expand All @@ -22,6 +23,22 @@ class SqliteCieProvider implements CieProvider {
return (new Future(() => campuses));
}

Future<List<Cie>> getCiesByCurrentUserId() async {
List<Cie> campuses = [];
DatabaseHelper dbh = new DatabaseHelper();
List<Map<String, dynamic>> rawCampusData =
await dbh.selectWhere("Cie", "userId", globals.userId.toString());

void iterate(Map<String, dynamic> data) {
campuses.add(new Cie(data["name"], data["department"],
data["lecturerName"], data["ects"], data["id"]));
}

rawCampusData.forEach(iterate);

return (new Future(() => campuses));
}

@override
Future<int> putCies(List<Cie> cies) async {
DatabaseHelper dbh = new DatabaseHelper();
Expand Down
27 changes: 26 additions & 1 deletion lib/connect/dataprovider/databasehelper/databasehelper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ class DatabaseHelper {
await db.execute(
"CREATE TABLE User(id INTEGER PRIMARY KEY, username TEXT, firstname TEXT, lastname TEXT, department INTEGER)");
await db.execute(
"CREATE TABLE Cie(id INTEGER PRIMARY KEY, name TEXT, ects REAL, lecturerName TEXT, department INTEGER)");
"CREATE TABLE Cie(id INTEGER PRIMARY KEY, name TEXT, ects REAL, lecturerName TEXT, department INTEGER, userId INTEGER)");
await db.execute(
"CREATE TABLE Settings(id INTEGER PRIMARY KEY, offlineMode TEXT, feedbackMode TEXT, userId INTEGER)");
await db.execute(
"CREATE TABLE Date(id INTEGER PRIMARY KEY, weekday INTEGER, startHour INTEGER, startMinute INTEGER, duration INTEGER, course INTEGER)");
}
Expand All @@ -62,12 +64,35 @@ class DatabaseHelper {
return returnValue;
}

Future<int> updateTablebyId(String table, Map<String, dynamic> data,
String whereColumn, String whereArgs) async {
var dbClient = await db;

return dbClient
.update(table, data, where: '$whereColumn = ?', whereArgs: [whereArgs]);
}

Future<int> truncateTable(String table) async {
var dbClient = await db;

return await dbClient.delete(table);
}

void truncateAllTable() async {
var dbClient = await db;

await dbClient.delete("Campus");
await dbClient.delete("Course");
await dbClient.delete("Department");
await dbClient.delete("Favorites");
await dbClient.delete("Lecturer");
await dbClient.delete("User");
await dbClient.delete("Cie");
await dbClient.delete("Settings");
await dbClient.delete("Date");
exit(0);
}

Future<List<Map<String, dynamic>>> selectTable(String table) async {
var dbClient = await db;
List<Map<String, dynamic>> res =
Expand Down
5 changes: 3 additions & 2 deletions lib/connect/dataprovider/mock_provider_factory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import 'package:courses_in_english/connect/dataprovider/department/mock/mock_dep
import 'package:courses_in_english/connect/dataprovider/lecturer/lecturer_provider.dart';
import 'package:courses_in_english/connect/dataprovider/lecturer/mock/mock_lecturer_provider.dart';
import 'package:courses_in_english/connect/dataprovider/provider_factory.dart';
import 'package:courses_in_english/connect/dataprovider/user/mock/mock_user_settings_provider.dart';
//import 'package:courses_in_english/connect/dataprovider/user/mock/mock_user_settings_provider.dart';
import 'package:courses_in_english/connect/dataprovider/user/mock/sql_user_settings_provider.dart';
import 'package:courses_in_english/connect/dataprovider/user/mock/mock_user_provider.dart';
import 'package:courses_in_english/connect/dataprovider/user/user_provider.dart';
import 'package:courses_in_english/connect/dataprovider/user/user_settings_provider.dart';
Expand All @@ -31,5 +32,5 @@ class MockProviderFactory implements ProviderFactory {

@override
UserSettingsProvider createSettingsProvider() =>
new MockUserSettingsProvider();
new SqlUserSettingsProvider();
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import 'dart:async';

import 'package:courses_in_english/connect/dataprovider/user/user_settings_provider.dart';
import 'package:courses_in_english/model/user/user_settings.dart';

class MockUserSettingsProvider extends UserSettingsProvider {
UserSettings _settings = new UserSettings();

@override
UserSettings getCurrentSettings() {
return _settings;
Future<UserSettings> getCurrentSettings() {
return new Future(() => _settings);
}

Future<int> putCurrentSettings(UserSettings userSettings) {
return new Future(() => 0);
}

Future<int> putSettings(UserSettings userSettings) {
return new Future(() => 0);
}
}
32 changes: 32 additions & 0 deletions lib/connect/dataprovider/user/mock/sql_user_settings_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import 'dart:async';

import 'package:courses_in_english/connect/dataprovider/databasehelper/databasehelper.dart';
import 'package:courses_in_english/connect/dataprovider/user/user_settings_provider.dart';
import 'package:courses_in_english/controller/session.dart';
import 'package:courses_in_english/model/user/user_settings.dart';

class SqlUserSettingsProvider extends UserSettingsProvider {
Future<UserSettings> getCurrentSettings() async {
DatabaseHelper dbh = new DatabaseHelper();
Map<String, dynamic> data = await dbh.selectOneWhere(
"Settings", "userId", new Session().user.userId.toString());
return new UserSettings(
feedbackMode: data["feedbackMode"].toLowerCase() == 'true',
offlineMode: data["offlineMode"].toLowerCase() == 'true');
}

Future<int> putCurrentSettings(UserSettings userSettings) async {
DatabaseHelper dbh = new DatabaseHelper();
return dbh.updateTablebyId("Settings", userSettings.toMap(), "userId",
new Session().user.userId.toString());
//TODO: WHEN USER LOGS IN NEED TO CREATE USER AND SETTINGS
}

Future<int> putSettings(UserSettings userSettings) async {
DatabaseHelper dbh = new DatabaseHelper();
List<Map<String, dynamic>> userList = [];
userList.add(userSettings.toMap());
return dbh.insertTable("Settings", userList);
//TODO: WHEN USER LOGS IN NEED TO CREATE USER AND SETTINGS
}
}
5 changes: 4 additions & 1 deletion lib/connect/dataprovider/user/user_settings_provider.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'package:courses_in_english/model/user/user_settings.dart';
import 'dart:async';

/// Abstract class to provide local settings. Doesn't use futures, as there is no need to sync settings at runtime.
abstract class UserSettingsProvider {
UserSettings getCurrentSettings();
Future<UserSettings> getCurrentSettings();
Future<int> putCurrentSettings(UserSettings userSettings);
Future<int> putSettings(UserSettings userSettings);
}
10 changes: 10 additions & 0 deletions lib/controller/session.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:courses_in_english/model/course/course.dart';
import 'package:courses_in_english/model/department/department.dart';
import 'package:courses_in_english/model/lecturer/lecturer.dart';
import 'package:courses_in_english/model/user/user.dart';
import 'package:courses_in_english/model/user/user_settings.dart';

typedef void OnSuccess(Session s);
typedef void OnDataChanged(Session s);
Expand All @@ -21,6 +22,8 @@ class Session {
final List<OnDataChanged> callbacks = [];

User _user;
// This is bad form, I know, however otherwise the tests won't work
UserSettings _settings = new UserSettings();
Iterable<Campus> _campuses;
Iterable<Department> _departments;
Iterable<Lecturer> _lecturers;
Expand All @@ -42,6 +45,7 @@ class Session {
},
onError: (Error e) => failure(this, e),
);
await data.settingsProvider.getCurrentSettings();
}

void download({OnFailure failure}) async {
Expand Down Expand Up @@ -124,6 +128,10 @@ class Session {
throw new UnimplementedError();
}

void setSettings(UserSettings settings) {
_settings = settings;
}

get user => _user;

get campuses => _campuses;
Expand All @@ -137,4 +145,6 @@ class Session {
get favorites => _favorites;

get selected => _selected;

get settings => _settings;
}
4 changes: 4 additions & 0 deletions lib/model/cie/cie.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'package:courses_in_english/model/globals/globals.dart' as globals;

class Cie {
int id = -1;
final String name;
Expand All @@ -14,6 +16,7 @@ class Cie {
tempMap["department"] = this.department;
tempMap["lecturerName"] = this.lecturerName;
tempMap["ects"] = this.ects;
tempMap["userId"] = globals.userId;
return tempMap;
}

Expand All @@ -23,6 +26,7 @@ class Cie {
tempMap["department"] = this.department;
tempMap["lecturerName"] = this.lecturerName;
tempMap["ects"] = this.ects;
tempMap["userId"] = globals.userId;
return tempMap;
}
}
1 change: 1 addition & 0 deletions lib/model/globals/globals.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int userId = -1;
26 changes: 12 additions & 14 deletions lib/model/user/user_settings.dart
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
class UserSettings {
bool autoSync;
bool offlineMode;
bool usesDrawer;
String language;
bool secret1;
bool feedbackMode;

UserSettings({
String language = "en",
bool sync = false,
bool offlineMode = false,
bool usesDrawer = false,
bool secret1 = true,
}) : autoSync = sync,
offlineMode = offlineMode,
usesDrawer = usesDrawer,
secret1 = secret1,
language = language;
bool offlineMode = true,
bool feedbackMode = true,
}) : offlineMode = offlineMode,
feedbackMode = feedbackMode;

Map<String, dynamic> toMap() {
Map<String, dynamic> tempMap = new Map();
tempMap["offlineMode"] = this.offlineMode.toString();
tempMap["feedbackMode"] = this.feedbackMode.toString();
return tempMap;
}
}
Loading

0 comments on commit 9067b42

Please sign in to comment.