refactor folder names pt2
parent
c87a59a0b6
commit
8230a66df1
|
@ -1,108 +0,0 @@
|
||||||
import 'dart:async';
|
|
||||||
|
|
||||||
import 'package:path/path.dart';
|
|
||||||
import 'package:smoke_cess_app/models/mood.dart';
|
|
||||||
import 'package:sqflite/sqflite.dart';
|
|
||||||
// ignore: depend_on_referenced_packages
|
|
||||||
import 'package:path_provider/path_provider.dart';
|
|
||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import '../models/sleep.dart';
|
|
||||||
|
|
||||||
class DatabaseService {
|
|
||||||
DatabaseService._privateConstructor();
|
|
||||||
static final DatabaseService instance = DatabaseService._privateConstructor();
|
|
||||||
|
|
||||||
static Database? _database;
|
|
||||||
Future<Database> get database async => _database ??= await _initDatabase();
|
|
||||||
|
|
||||||
Future<Database> _initDatabase() async {
|
|
||||||
Directory documentsDirectory = await getApplicationDocumentsDirectory();
|
|
||||||
String path = join(documentsDirectory.path, 'database.db');
|
|
||||||
return await openDatabase(path,
|
|
||||||
version: 1, onCreate: _onCreate, onOpen: _createTablesIfNotExists);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future _onCreate(Database db, int version) async {
|
|
||||||
await _createTablesIfNotExists(db);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future _createTablesIfNotExists(Database db) async {
|
|
||||||
await db.execute(_createMoodTable);
|
|
||||||
await db.execute(_createSleepTable);
|
|
||||||
await db.execute(_createRelapseTable);
|
|
||||||
await db.execute(_createWorkoutTable);
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO use generic function?
|
|
||||||
Future<List<Mood>> getMoodRecords() async {
|
|
||||||
Database db = await instance.database;
|
|
||||||
var moodRecords = await db.query('mood');
|
|
||||||
List<Mood> moodList = moodRecords.isNotEmpty
|
|
||||||
? moodRecords.map((e) => Mood.fromDatabase(e)).toList()
|
|
||||||
: [];
|
|
||||||
return moodList;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<List<Sleep>> getSleepRecords() async {
|
|
||||||
Database db = await instance.database;
|
|
||||||
var sleepRecords = await db.query('sleep');
|
|
||||||
List<Sleep> sleepList = sleepRecords.isNotEmpty
|
|
||||||
? sleepRecords.map((e) => Sleep.fromDatabase(e)).toList()
|
|
||||||
: [];
|
|
||||||
return sleepList;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<int> addMood(Mood mood) async {
|
|
||||||
Database db = await instance.database;
|
|
||||||
return await db.insert('mood', mood.toMap());
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<int> addSleep(Sleep sleep) async {
|
|
||||||
Database db = await instance.database;
|
|
||||||
return await db.insert('sleep', sleep.toMap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String _createMoodTable = '''
|
|
||||||
CREATE TABLE IF NOT EXISTS mood(
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
value INTEGER,
|
|
||||||
date TEXT,
|
|
||||||
comment TEXT
|
|
||||||
)
|
|
||||||
''';
|
|
||||||
|
|
||||||
String _createSleepTable = '''
|
|
||||||
CREATE TABLE IF NOT EXISTS sleep(
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
value INTEGER,
|
|
||||||
date TEXT,
|
|
||||||
comment TEXT,
|
|
||||||
sleepedAtHour INTEGER,
|
|
||||||
sleepedAtMinute INTEGER,
|
|
||||||
wokeUpAtHour INTEGER,
|
|
||||||
wokeUpAtMinute INTEGER
|
|
||||||
)
|
|
||||||
''';
|
|
||||||
|
|
||||||
String _createRelapseTable = '''
|
|
||||||
CREATE TABLE IF NOT EXISTS relapse(
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
date TEXT,
|
|
||||||
comment TEXT,
|
|
||||||
reason TEXT
|
|
||||||
)
|
|
||||||
''';
|
|
||||||
|
|
||||||
String _createWorkoutTable = '''
|
|
||||||
CREATE TABLE IF NOT EXISTS workout(
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
date TEXT,
|
|
||||||
motivationBefore INTEGER,
|
|
||||||
commentBefore TEXT,
|
|
||||||
motivationAfter INTEGER,
|
|
||||||
commentAfter TEXT,
|
|
||||||
completed INTEGER
|
|
||||||
)
|
|
||||||
''';
|
|
|
@ -1,63 +0,0 @@
|
||||||
import 'package:smoke_cess_app/service/settings_service.dart';
|
|
||||||
import 'package:timezone/timezone.dart';
|
|
||||||
|
|
||||||
const int trainingTime = 40;
|
|
||||||
|
|
||||||
const weekDays = {
|
|
||||||
"Montag": 1,
|
|
||||||
"Dienstag": 2,
|
|
||||||
"Mittwoch": 3,
|
|
||||||
"Donnerstag": 4,
|
|
||||||
"Freitag": 5,
|
|
||||||
"Samstag": 6,
|
|
||||||
"Sonntag": 7,
|
|
||||||
};
|
|
||||||
|
|
||||||
Future<List<TZDateTime>> getDatesforAll() async {
|
|
||||||
List<TZDateTime> allDates = [];
|
|
||||||
List<TZDateTime> moodDates = await getDatesforMood();
|
|
||||||
List<TZDateTime> sleepDates = await getDatesforSleep();
|
|
||||||
allDates.addAll(moodDates);
|
|
||||||
allDates.addAll(sleepDates);
|
|
||||||
return allDates;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<List<TZDateTime>> getDatesforMood() async {
|
|
||||||
final List<String>? selectedDays = await getMoodQueryDaysCategories();
|
|
||||||
final int? selectedHours = await getMoodQueryHours();
|
|
||||||
final int? selectedMinutes = await getMoodQueryMinutes();
|
|
||||||
return createTZDateTimes(selectedDays, selectedHours, selectedMinutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<List<TZDateTime>> getDatesforSleep() async {
|
|
||||||
final List<String>? selectedDays = await getSleepQueryDaysCategories();
|
|
||||||
final int? selectedHours = await getSleepQueryHours();
|
|
||||||
final int? selectedMinutes = await getSleepQueryMinutes();
|
|
||||||
return createTZDateTimes(selectedDays, selectedHours, selectedMinutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TZDateTime> createTZDateTimes(
|
|
||||||
List<String>? selectedDays, int? selectedHours, int? selectedMinutes) {
|
|
||||||
final List<TZDateTime> tzDateTimes = [];
|
|
||||||
final DateTime now = DateTime.now();
|
|
||||||
final Duration offset = now.timeZoneOffset;
|
|
||||||
if (selectedDays == null ||
|
|
||||||
selectedHours == null ||
|
|
||||||
selectedMinutes == null) {
|
|
||||||
return tzDateTimes;
|
|
||||||
}
|
|
||||||
final Iterable<int?> selectedDaysInt =
|
|
||||||
selectedDays.map((day) => weekDays[day]);
|
|
||||||
for (int i = 0; i < trainingTime; i++) {
|
|
||||||
final DateTime date = DateTime(now.year, now.month, now.day, selectedHours,
|
|
||||||
selectedMinutes, 0, 0, 0)
|
|
||||||
.add(Duration(days: i));
|
|
||||||
if (selectedDaysInt.contains(date.weekday) &&
|
|
||||||
date.isAfter(DateTime.now())) {
|
|
||||||
tzDateTimes.add(TZDateTime.local(date.year, date.month, date.day,
|
|
||||||
selectedHours, selectedMinutes, 0, 0, 0)
|
|
||||||
.subtract(offset));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tzDateTimes;
|
|
||||||
}
|
|
|
@ -1,105 +0,0 @@
|
||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
|
||||||
import 'package:smoke_cess_app/service/date_service.dart';
|
|
||||||
import 'package:timezone/timezone.dart';
|
|
||||||
|
|
||||||
class NotificationService {
|
|
||||||
static final NotificationService _notificationService =
|
|
||||||
NotificationService._internal();
|
|
||||||
|
|
||||||
factory NotificationService() {
|
|
||||||
return _notificationService;
|
|
||||||
}
|
|
||||||
|
|
||||||
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
|
|
||||||
FlutterLocalNotificationsPlugin();
|
|
||||||
|
|
||||||
NotificationService._internal();
|
|
||||||
|
|
||||||
Future<void> initNotification() async {
|
|
||||||
// Android initialization
|
|
||||||
const AndroidInitializationSettings initializationSettingsAndroid =
|
|
||||||
AndroidInitializationSettings('mipmap/ic_launcher');
|
|
||||||
|
|
||||||
// ios initialization
|
|
||||||
const DarwinInitializationSettings initializationSettingsIOS =
|
|
||||||
DarwinInitializationSettings(
|
|
||||||
requestAlertPermission: false,
|
|
||||||
requestBadgePermission: false,
|
|
||||||
requestSoundPermission: false,
|
|
||||||
);
|
|
||||||
|
|
||||||
const InitializationSettings initializationSettings =
|
|
||||||
InitializationSettings(
|
|
||||||
android: initializationSettingsAndroid,
|
|
||||||
iOS: initializationSettingsIOS);
|
|
||||||
// the initialization settings are initialized after they are setted
|
|
||||||
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> showNotification() async {
|
|
||||||
await flutterLocalNotificationsPlugin.show(
|
|
||||||
0,
|
|
||||||
'test',
|
|
||||||
'test',
|
|
||||||
//schedule the notification to show after 2 seconds.
|
|
||||||
const NotificationDetails(
|
|
||||||
// Android details
|
|
||||||
android: AndroidNotificationDetails('main_channel', 'Main Channel',
|
|
||||||
channelDescription: "ashwin",
|
|
||||||
importance: Importance.max,
|
|
||||||
priority: Priority.max),
|
|
||||||
// iOS details
|
|
||||||
iOS: DarwinNotificationDetails(
|
|
||||||
sound: 'default.wav',
|
|
||||||
presentAlert: true,
|
|
||||||
presentBadge: true,
|
|
||||||
presentSound: true,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> setAllNotifications() async {
|
|
||||||
List<TZDateTime> moodDates = await getDatesforMood();
|
|
||||||
List<TZDateTime> sleepDates = await getDatesforSleep();
|
|
||||||
int index = 0;
|
|
||||||
for (var date in moodDates) {
|
|
||||||
setNotification(index, "Mood", "Evaluate your mood", date);
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
for (var date in sleepDates) {
|
|
||||||
setNotification(index, "Sleep", "Evaluate your sleep", date);
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> setNotification(
|
|
||||||
int id, String title, String body, TZDateTime tzDateTime) async {
|
|
||||||
await flutterLocalNotificationsPlugin.zonedSchedule(
|
|
||||||
id,
|
|
||||||
title,
|
|
||||||
body,
|
|
||||||
tzDateTime, //schedule the notification to show after 2 seconds.
|
|
||||||
const NotificationDetails(
|
|
||||||
// Android details
|
|
||||||
android: AndroidNotificationDetails('main_channel', 'Main Channel',
|
|
||||||
channelDescription: "ashwin",
|
|
||||||
importance: Importance.max,
|
|
||||||
priority: Priority.max),
|
|
||||||
// iOS details
|
|
||||||
iOS: DarwinNotificationDetails(
|
|
||||||
sound: 'default.wav',
|
|
||||||
presentAlert: true,
|
|
||||||
presentBadge: true,
|
|
||||||
presentSound: true,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
// Type of time interpretation
|
|
||||||
uiLocalNotificationDateInterpretation:
|
|
||||||
UILocalNotificationDateInterpretation.absoluteTime,
|
|
||||||
androidAllowWhileIdle:
|
|
||||||
true, // To show notification even when the app is closed
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
|
||||||
import 'package:smoke_cess_app/models/settings.dart';
|
|
||||||
import 'package:smoke_cess_app/service/json_service.dart';
|
|
||||||
|
|
||||||
//access group setting which was saved in local storage
|
|
||||||
Future<int?> getGroup() => _getIntSetting('group');
|
|
||||||
|
|
||||||
Future<List<String>?> getRelapseCategories() =>
|
|
||||||
_getStringListSetting('relapse_categories');
|
|
||||||
|
|
||||||
Future<List<String>?> getSleepQueryDaysCategories() =>
|
|
||||||
_getStringListSetting('sleep_query_days');
|
|
||||||
|
|
||||||
Future<int?> getSleepQueryHours() => _getIntSetting('sleep_query_hours');
|
|
||||||
Future<int?> getSleepQueryMinutes() => _getIntSetting('sleep_query_minutes');
|
|
||||||
|
|
||||||
Future<List<String>?> getMoodQueryDaysCategories() =>
|
|
||||||
_getStringListSetting('mood_query_days');
|
|
||||||
|
|
||||||
Future<int?> getMoodQueryHours() => _getIntSetting('mood_query_hours');
|
|
||||||
Future<int?> getMoodQueryMinutes() => _getIntSetting('mood_query_minutes');
|
|
||||||
|
|
||||||
Future<int?> getChessHours() => _getIntSetting('chess_hours');
|
|
||||||
Future<int?> getChessMinutes() => _getIntSetting('chess_minutes');
|
|
||||||
|
|
||||||
void _setStringSetting(String settingKey, String settingValue) =>
|
|
||||||
SharedPreferences.getInstance()
|
|
||||||
.then((pref) => pref.setString(settingKey, settingValue));
|
|
||||||
|
|
||||||
Future<String?> _getStringSetting(String settingKey) =>
|
|
||||||
SharedPreferences.getInstance().then((pref) => pref.getString(settingKey));
|
|
||||||
|
|
||||||
void _setIntSetting(String settingKey, int settingValue) =>
|
|
||||||
SharedPreferences.getInstance()
|
|
||||||
.then((pref) => pref.setInt(settingKey, settingValue));
|
|
||||||
|
|
||||||
Future<int?> _getIntSetting(String settingKey) =>
|
|
||||||
SharedPreferences.getInstance().then((pref) => pref.getInt(settingKey));
|
|
||||||
|
|
||||||
void _setStringListSetting(String settingKey, List<String> list) =>
|
|
||||||
SharedPreferences.getInstance()
|
|
||||||
.then((pref) => pref.setStringList(settingKey, list));
|
|
||||||
|
|
||||||
Future<List<String>?> _getStringListSetting(String settingKey) =>
|
|
||||||
SharedPreferences.getInstance()
|
|
||||||
.then((pref) => pref.getStringList(settingKey));
|
|
||||||
|
|
||||||
Future<void> loadSettingsFromLocalJSON() async {
|
|
||||||
Map<String, dynamic> configJSON = await loadLocalConfigJSON();
|
|
||||||
Settings settings = Settings.fromJson(configJSON);
|
|
||||||
saveSettings(settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
void saveSettings(Settings settings) {
|
|
||||||
_setIntSetting('group', settings.group);
|
|
||||||
_setStringListSetting('relapse_categories', settings.relapseCategories!);
|
|
||||||
_setStringListSetting('mood_query_days', settings.moodQuery.days!);
|
|
||||||
_setIntSetting('mood_query_hours', settings.moodQuery.hours);
|
|
||||||
_setIntSetting('mood_query_minutes', settings.moodQuery.minutes);
|
|
||||||
_setStringListSetting('sleep_query_days', settings.sleepQuery.days!);
|
|
||||||
_setIntSetting('sleep_query_hours', settings.sleepQuery.hours);
|
|
||||||
_setIntSetting('sleep_query_minutes', settings.sleepQuery.minutes);
|
|
||||||
if (settings.chessTime != null) {
|
|
||||||
_setIntSetting('chess_hours', settings.chessTime!.hours);
|
|
||||||
_setIntSetting('chess_minutes', settings.chessTime!.minutes);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue