Files
lunasea/lib/core/database/luna_database.dart

219 lines
6.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:lunasea/core.dart';
enum LunaDatabaseValue {
DRAWER_AUTOMATIC_MANAGE,
DRAWER_MANUAL_ORDER,
ENABLED_PROFILE,
NETWORKING_TLS_VALIDATION,
THEME_AMOLED,
THEME_AMOLED_BORDER,
THEME_IMAGE_BACKGROUND_OPACITY,
QUICK_ACTIONS_LIDARR,
QUICK_ACTIONS_RADARR,
QUICK_ACTIONS_SONARR,
QUICK_ACTIONS_NZBGET,
QUICK_ACTIONS_SABNZBD,
QUICK_ACTIONS_OMBI,
QUICK_ACTIONS_OVERSEERR,
QUICK_ACTIONS_TAUTULLI,
QUICK_ACTIONS_SEARCH,
USE_24_HOUR_TIME,
DEFAULT_LAUNCH_MODULE,
ENABLE_IN_APP_NOTIFICATIONS,
}
class LunaDatabase extends LunaModuleDatabase {
@override
void registerAdapters() {
// Deprecated
Hive.registerAdapter(DeprecatedLunaBrowserAdapter());
// Active
Hive.registerAdapter(ExternalModuleHiveObjectAdapter());
Hive.registerAdapter(IndexerHiveObjectAdapter());
Hive.registerAdapter(ProfileHiveObjectAdapter());
Hive.registerAdapter(LunaLogHiveObjectAdapter());
Hive.registerAdapter(LunaIndexerIconAdapter());
Hive.registerAdapter(LunaLogTypeAdapter());
Hive.registerAdapter(LunaModuleAdapter());
Hive.registerAdapter(LunaListViewOptionAdapter());
}
@override
Map<String, dynamic> export() {
Map<String, dynamic> data = {};
for (LunaDatabaseValue value in LunaDatabaseValue.values) {
switch (value) {
// Non-primitive values
case LunaDatabaseValue.DEFAULT_LAUNCH_MODULE:
data[value.key] =
(LunaDatabaseValue.DEFAULT_LAUNCH_MODULE.data as LunaModule).key;
break;
case LunaDatabaseValue.DRAWER_MANUAL_ORDER:
data[value.key] = LunaDrawer.moduleOrderedList()
.map<String>((module) => module.key)
.toList();
break;
// Primitive values
default:
data[value.key] = value.data;
break;
}
}
return data;
}
@override
void import(Map<String, dynamic> config) {
for (String key in config.keys) {
LunaDatabaseValue? value = valueFromKey(key);
if (value != null)
switch (value) {
// Non-primitive values
case LunaDatabaseValue.DEFAULT_LAUNCH_MODULE:
value.put(LunaModule.DASHBOARD.fromKey(config[key]));
break;
case LunaDatabaseValue.DRAWER_MANUAL_ORDER:
value.put(
(config[key] as List?)
?.map((item) => LunaModule.DASHBOARD.fromKey(item))
.toList(),
);
break;
// Primitive values
default:
value.put(config[key]);
break;
}
}
}
@override
LunaDatabaseValue? valueFromKey(String key) {
for (LunaDatabaseValue value in LunaDatabaseValue.values) {
if (value.key == key) return value;
}
return null;
}
}
extension LunaDatabaseValueExtension on LunaDatabaseValue {
String get key {
if (this == LunaDatabaseValue.ENABLED_PROFILE) return 'profile';
return 'LUNASEA_${this.name}';
}
dynamic get data {
return Database.lunasea.box.get(this.key, defaultValue: this._defaultValue);
}
void put(dynamic value) {
if (this._isTypeValid(value)) {
Database.lunasea.box.put(this.key, value);
} else {
LunaLogger().warning(
this.runtimeType.toString(),
'put',
'Invalid Database Insert (${this.key}, ${value.runtimeType})',
);
}
}
ValueListenableBuilder listen({
Key? key,
required Widget Function(BuildContext, dynamic, Widget?) builder,
}) {
return ValueListenableBuilder(
key: key,
valueListenable: Database.lunasea.box.listenable(keys: [this.key]),
builder: builder,
);
}
bool _isTypeValid(dynamic value) {
switch (this) {
case LunaDatabaseValue.ENABLED_PROFILE:
return value is String;
case LunaDatabaseValue.DRAWER_AUTOMATIC_MANAGE:
return value is bool;
case LunaDatabaseValue.DRAWER_MANUAL_ORDER:
return value is List;
case LunaDatabaseValue.THEME_AMOLED:
return value is bool;
case LunaDatabaseValue.THEME_AMOLED_BORDER:
return value is bool;
case LunaDatabaseValue.THEME_IMAGE_BACKGROUND_OPACITY:
return value is int;
case LunaDatabaseValue.QUICK_ACTIONS_LIDARR:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_RADARR:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_SONARR:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_NZBGET:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_SABNZBD:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_OMBI:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_OVERSEERR:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_TAUTULLI:
return value is bool;
case LunaDatabaseValue.QUICK_ACTIONS_SEARCH:
return value is bool;
case LunaDatabaseValue.USE_24_HOUR_TIME:
return value is bool;
case LunaDatabaseValue.DEFAULT_LAUNCH_MODULE:
return value is LunaModule;
case LunaDatabaseValue.NETWORKING_TLS_VALIDATION:
return value is bool;
case LunaDatabaseValue.ENABLE_IN_APP_NOTIFICATIONS:
return value is bool;
}
}
dynamic get _defaultValue {
switch (this) {
case LunaDatabaseValue.ENABLED_PROFILE:
return 'default';
case LunaDatabaseValue.DRAWER_AUTOMATIC_MANAGE:
return true;
case LunaDatabaseValue.DRAWER_MANUAL_ORDER:
return null;
case LunaDatabaseValue.THEME_AMOLED:
return false;
case LunaDatabaseValue.THEME_AMOLED_BORDER:
return false;
case LunaDatabaseValue.THEME_IMAGE_BACKGROUND_OPACITY:
return 20;
case LunaDatabaseValue.QUICK_ACTIONS_LIDARR:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_RADARR:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_SONARR:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_NZBGET:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_SABNZBD:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_OVERSEERR:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_TAUTULLI:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_OMBI:
return false;
case LunaDatabaseValue.QUICK_ACTIONS_SEARCH:
return false;
case LunaDatabaseValue.USE_24_HOUR_TIME:
return false;
case LunaDatabaseValue.DEFAULT_LAUNCH_MODULE:
return LunaModule.DASHBOARD;
case LunaDatabaseValue.NETWORKING_TLS_VALIDATION:
return false;
case LunaDatabaseValue.ENABLE_IN_APP_NOTIFICATIONS:
return true;
}
}
}