mirror of
https://github.com/jagandeepbrar/lunasea.git
synced 2026-08-30 20:24:25 +00:00
chore(api): create stub APIs for remaining modules (#707)
This commit is contained in:
@@ -2,6 +2,8 @@ include: package:flutter_lints/flutter.yaml
|
||||
analyzer:
|
||||
exclude:
|
||||
- 'test/**'
|
||||
- 'test.g.dart'
|
||||
- 'lib/**/*.g.dart'
|
||||
|
||||
linter:
|
||||
rules:
|
||||
|
||||
27
lib/api/lidarr/api.dart
Normal file
27
lib/api/lidarr/api.dart
Normal file
@@ -0,0 +1,27 @@
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
part 'api.g.dart';
|
||||
|
||||
String _baseUrl(String host) {
|
||||
String base = host.endsWith('/') ? host.substring(0, host.length - 1) : host;
|
||||
return '$base/api/v3/';
|
||||
}
|
||||
|
||||
@RestApi()
|
||||
abstract class LidarrAPI {
|
||||
factory LidarrAPI({
|
||||
required String host,
|
||||
required String apiKey,
|
||||
Map<String, dynamic> headers = const {},
|
||||
}) {
|
||||
Dio dio = Dio(BaseOptions(
|
||||
headers: headers,
|
||||
followRedirects: true,
|
||||
maxRedirects: 5,
|
||||
queryParameters: {
|
||||
if (apiKey.isNotEmpty) 'apikey': apiKey,
|
||||
},
|
||||
));
|
||||
return _LidarrAPI(dio, baseUrl: _baseUrl(host));
|
||||
}
|
||||
}
|
||||
69
lib/api/nzbget/api.dart
Normal file
69
lib/api/nzbget/api.dart
Normal file
@@ -0,0 +1,69 @@
|
||||
import 'dart:convert';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:lunasea/api/nzbget/models/status.dart';
|
||||
import 'package:lunasea/api/nzbget/models/version.dart';
|
||||
import 'package:retrofit/retrofit.dart';
|
||||
|
||||
part 'api.g.dart';
|
||||
|
||||
String _baseUrl(String host, String user, String password) {
|
||||
String base = host.endsWith('/') ? host.substring(0, host.length - 1) : host;
|
||||
|
||||
if (user.isNotEmpty && password.isNotEmpty) {
|
||||
return '$base/$user:$password/jsonrpc/';
|
||||
}
|
||||
return '$base/jsonrpc/';
|
||||
}
|
||||
|
||||
void _attachInterceptor(Dio dio) {
|
||||
dio.interceptors.add(InterceptorsWrapper(
|
||||
onRequest: (options, handler) {
|
||||
options.data = json.encode({
|
||||
'jsonrpc': '2.0',
|
||||
'method': options.queryParameters['method'],
|
||||
'params': options.queryParameters['params'] ?? [],
|
||||
'id': 1,
|
||||
});
|
||||
options.queryParameters = const {};
|
||||
return handler.next(options);
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
void _setResponseTransformer(Dio dio) {
|
||||
(dio.transformer as DefaultTransformer).jsonDecodeCallback = (data) {
|
||||
final parsed = json.decode(data);
|
||||
final result = parsed['result'];
|
||||
if (result is Map) return result;
|
||||
return {'result': result};
|
||||
};
|
||||
}
|
||||
|
||||
@RestApi()
|
||||
abstract class NZBGetAPI {
|
||||
factory NZBGetAPI({
|
||||
required String host,
|
||||
required String username,
|
||||
required String password,
|
||||
Map<String, dynamic> headers = const {},
|
||||
}) {
|
||||
Dio dio = Dio(BaseOptions(
|
||||
headers: headers,
|
||||
followRedirects: true,
|
||||
maxRedirects: 5,
|
||||
));
|
||||
_attachInterceptor(dio);
|
||||
_setResponseTransformer(dio);
|
||||
return _NZBGetAPI(dio, baseUrl: _baseUrl(host, username, password));
|
||||
}
|
||||
|
||||
@POST('')
|
||||
Future<NZBGetVersion> getVersion({
|
||||
@Query('method') String method = 'version',
|
||||
});
|
||||
|
||||
@POST('')
|
||||
Future<NZBGetStatus> getStatus({
|
||||
@Query('method') String method = 'status',
|
||||
});
|
||||
}
|
||||
37
lib/api/nzbget/models/status.dart
Normal file
37
lib/api/nzbget/models/status.dart
Normal file
@@ -0,0 +1,37 @@
|
||||
import 'dart:convert';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'status.g.dart';
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class NZBGetStatus {
|
||||
@JsonKey(name: 'DownloadPaused')
|
||||
bool paused;
|
||||
|
||||
@JsonKey(name: 'DownloadRate')
|
||||
int speed;
|
||||
|
||||
@JsonKey(name: 'DownloadLimit')
|
||||
int speedLimit;
|
||||
|
||||
@JsonKey(name: 'RemainingSizeMB')
|
||||
int remainingSize;
|
||||
|
||||
NZBGetStatus({
|
||||
required this.paused,
|
||||
required this.speed,
|
||||
required this.speedLimit,
|
||||
required this.remainingSize,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() => json.encode(this.toJson());
|
||||
|
||||
factory NZBGetStatus.fromJson(Map<String, dynamic> json) {
|
||||
return _$NZBGetStatusFromJson(json);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$NZBGetStatusToJson(this);
|
||||
}
|
||||
}
|
||||
25
lib/api/nzbget/models/version.dart
Normal file
25
lib/api/nzbget/models/version.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
import 'dart:convert';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'version.g.dart';
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class NZBGetVersion {
|
||||
@JsonKey(name: 'result')
|
||||
String version;
|
||||
|
||||
NZBGetVersion({
|
||||
required this.version,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() => json.encode(this.toJson());
|
||||
|
||||
factory NZBGetVersion.fromJson(Map<String, dynamic> json) {
|
||||
return _$NZBGetVersionFromJson(json);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$NZBGetVersionToJson(this);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,17 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:retrofit/retrofit.dart';
|
||||
import 'package:lunasea/api/overseerr/models.dart';
|
||||
import 'package:lunasea/api/overseerr/models/content/movie.dart';
|
||||
import 'package:lunasea/api/overseerr/models/content/series.dart';
|
||||
import 'package:lunasea/api/overseerr/models/issues/issue.dart';
|
||||
import 'package:lunasea/api/overseerr/models/issues/issue_page.dart';
|
||||
import 'package:lunasea/api/overseerr/models/requests/request.dart';
|
||||
import 'package:lunasea/api/overseerr/models/requests/request_count.dart';
|
||||
import 'package:lunasea/api/overseerr/models/requests/request_page.dart';
|
||||
import 'package:lunasea/api/overseerr/models/status/status.dart';
|
||||
import 'package:lunasea/api/overseerr/models/status/status_appdata.dart';
|
||||
import 'package:lunasea/api/overseerr/models/users/user_page.dart';
|
||||
import 'package:lunasea/api/overseerr/models/users/user_quota.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
part 'overseerr.g.dart';
|
||||
part 'api.g.dart';
|
||||
|
||||
@RestApi()
|
||||
abstract class OverseerrAPI {
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
import 'package:lunasea/api/sabnzbd/models/action_result.dart';
|
||||
import 'package:lunasea/api/sabnzbd/models/categories.dart';
|
||||
import 'package:lunasea/api/sabnzbd/models/history.dart';
|
||||
@@ -13,9 +13,13 @@ import 'package:lunasea/api/sabnzbd/types/post_processing.dart';
|
||||
import 'package:lunasea/api/sabnzbd/types/priority.dart';
|
||||
import 'package:lunasea/api/sabnzbd/types/sort_category.dart';
|
||||
import 'package:lunasea/api/sabnzbd/types/sort_direction.dart';
|
||||
import 'package:retrofit/retrofit.dart';
|
||||
|
||||
part 'sabnzbd.g.dart';
|
||||
part 'api.g.dart';
|
||||
|
||||
String _baseUrl(String host) {
|
||||
String base = host.endsWith('/') ? host.substring(0, host.length - 1) : host;
|
||||
return '$base/api/';
|
||||
}
|
||||
|
||||
@RestApi()
|
||||
abstract class SABnzbdAPI {
|
||||
@@ -24,7 +28,6 @@ abstract class SABnzbdAPI {
|
||||
required String apiKey,
|
||||
Map<String, dynamic> headers = const {},
|
||||
}) {
|
||||
String baseUrl = host.endsWith('/') ? '${host}api/' : '$host/api/';
|
||||
Dio dio = Dio(BaseOptions(
|
||||
headers: headers,
|
||||
followRedirects: true,
|
||||
@@ -34,7 +37,7 @@ abstract class SABnzbdAPI {
|
||||
'output': 'json',
|
||||
},
|
||||
));
|
||||
return _SABnzbdAPI(dio, baseUrl: baseUrl);
|
||||
return _SABnzbdAPI(dio, baseUrl: _baseUrl(host));
|
||||
}
|
||||
|
||||
@GET('')
|
||||
@@ -6,7 +6,7 @@ part 'history.g.dart';
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdHistory {
|
||||
SABnzbdHistoryResult history;
|
||||
_SABnzbdHistoryResult history;
|
||||
|
||||
SABnzbdHistory({
|
||||
required this.history,
|
||||
@@ -25,8 +25,8 @@ class SABnzbdHistory {
|
||||
}
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdHistoryResult {
|
||||
List<SABnzbdHistorySlot> slots;
|
||||
class _SABnzbdHistoryResult {
|
||||
List<_SABnzbdHistorySlot> slots;
|
||||
|
||||
@JsonKey(name: 'day_size')
|
||||
String dailySize;
|
||||
@@ -40,7 +40,7 @@ class SABnzbdHistoryResult {
|
||||
@JsonKey(name: 'total_size')
|
||||
String totalSize;
|
||||
|
||||
SABnzbdHistoryResult({
|
||||
_SABnzbdHistoryResult({
|
||||
required this.slots,
|
||||
required this.dailySize,
|
||||
required this.weeklySize,
|
||||
@@ -51,7 +51,7 @@ class SABnzbdHistoryResult {
|
||||
@override
|
||||
String toString() => json.encode(this.toJson());
|
||||
|
||||
factory SABnzbdHistoryResult.fromJson(Map<String, dynamic> json) {
|
||||
factory _SABnzbdHistoryResult.fromJson(Map<String, dynamic> json) {
|
||||
return _$SABnzbdHistoryResultFromJson(json);
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ class SABnzbdHistoryResult {
|
||||
}
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdHistorySlot {
|
||||
class _SABnzbdHistorySlot {
|
||||
String name;
|
||||
String status;
|
||||
String script;
|
||||
@@ -89,7 +89,7 @@ class SABnzbdHistorySlot {
|
||||
@JsonKey(name: 'stage_log')
|
||||
List<SABnzbdStageLog> stageLog;
|
||||
|
||||
SABnzbdHistorySlot({
|
||||
_SABnzbdHistorySlot({
|
||||
required this.name,
|
||||
required this.status,
|
||||
required this.script,
|
||||
@@ -107,7 +107,7 @@ class SABnzbdHistorySlot {
|
||||
@override
|
||||
String toString() => json.encode(this.toJson());
|
||||
|
||||
factory SABnzbdHistorySlot.fromJson(Map<String, dynamic> json) {
|
||||
factory _SABnzbdHistorySlot.fromJson(Map<String, dynamic> json) {
|
||||
return _$SABnzbdHistorySlotFromJson(json);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ part 'queue.g.dart';
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdQueue {
|
||||
SABnzbdQueueResult queue;
|
||||
_SABnzbdQueueResult queue;
|
||||
|
||||
SABnzbdQueue({
|
||||
required this.queue,
|
||||
@@ -24,10 +24,10 @@ class SABnzbdQueue {
|
||||
}
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdQueueResult {
|
||||
class _SABnzbdQueueResult {
|
||||
String status;
|
||||
bool paused;
|
||||
List<SABnzbdQueueSlot> slots;
|
||||
List<_SABnzbdQueueSlot> slots;
|
||||
|
||||
@JsonKey(name: 'kbpersec')
|
||||
String speed;
|
||||
@@ -41,7 +41,7 @@ class SABnzbdQueueResult {
|
||||
@JsonKey(name: 'mbleft')
|
||||
String sizeLeft;
|
||||
|
||||
SABnzbdQueueResult({
|
||||
_SABnzbdQueueResult({
|
||||
required this.status,
|
||||
required this.paused,
|
||||
required this.speed,
|
||||
@@ -54,7 +54,7 @@ class SABnzbdQueueResult {
|
||||
@override
|
||||
String toString() => json.encode(this.toJson());
|
||||
|
||||
factory SABnzbdQueueResult.fromJson(Map<String, dynamic> json) {
|
||||
factory _SABnzbdQueueResult.fromJson(Map<String, dynamic> json) {
|
||||
return _$SABnzbdQueueResultFromJson(json);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ class SABnzbdQueueResult {
|
||||
}
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdQueueSlot {
|
||||
class _SABnzbdQueueSlot {
|
||||
String filename;
|
||||
String status;
|
||||
String script;
|
||||
@@ -85,7 +85,7 @@ class SABnzbdQueueSlot {
|
||||
@JsonKey(name: 'cat')
|
||||
String category;
|
||||
|
||||
SABnzbdQueueSlot({
|
||||
_SABnzbdQueueSlot({
|
||||
required this.filename,
|
||||
required this.status,
|
||||
required this.script,
|
||||
@@ -100,7 +100,7 @@ class SABnzbdQueueSlot {
|
||||
@override
|
||||
String toString() => json.encode(this.toJson());
|
||||
|
||||
factory SABnzbdQueueSlot.fromJson(Map<String, dynamic> json) {
|
||||
factory _SABnzbdQueueSlot.fromJson(Map<String, dynamic> json) {
|
||||
return _$SABnzbdQueueSlotFromJson(json);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ part 'status.g.dart';
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdStatus {
|
||||
SABnzbdStatusResult status;
|
||||
_SABnzbdStatusResult status;
|
||||
|
||||
SABnzbdStatus({
|
||||
required this.status,
|
||||
@@ -24,7 +24,7 @@ class SABnzbdStatus {
|
||||
}
|
||||
|
||||
@JsonSerializable(explicitToJson: true, includeIfNull: false)
|
||||
class SABnzbdStatusResult {
|
||||
class _SABnzbdStatusResult {
|
||||
String uptime;
|
||||
String version;
|
||||
bool paused;
|
||||
@@ -41,7 +41,7 @@ class SABnzbdStatusResult {
|
||||
@JsonKey(name: 'speedlimit')
|
||||
String speedLimitPercentage;
|
||||
|
||||
SABnzbdStatusResult({
|
||||
_SABnzbdStatusResult({
|
||||
required this.uptime,
|
||||
required this.version,
|
||||
required this.paused,
|
||||
@@ -54,7 +54,7 @@ class SABnzbdStatusResult {
|
||||
@override
|
||||
String toString() => json.encode(this.toJson());
|
||||
|
||||
factory SABnzbdStatusResult.fromJson(Map<String, dynamic> json) {
|
||||
factory _SABnzbdStatusResult.fromJson(Map<String, dynamic> json) {
|
||||
return _$SABnzbdStatusResultFromJson(json);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/// This file is deprecated and should no longer be actively used.
|
||||
/// All imports should happen directly and canonical export files will not be used anymore.
|
||||
|
||||
export 'system/state.dart';
|
||||
export 'state/state.dart';
|
||||
export 'types/loading_state.dart';
|
||||
export 'database/box.dart';
|
||||
export 'database/models/profile.dart';
|
||||
|
||||
@@ -63,11 +63,15 @@ enum LunaBox<T> {
|
||||
return Hive.openBox<T>(key);
|
||||
}
|
||||
|
||||
Stream<BoxEvent> watch([dynamic key]) {
|
||||
return _instance.watch(key: key);
|
||||
}
|
||||
|
||||
ValueListenable<Box<T>> listenable([List<dynamic>? keys]) {
|
||||
return _instance.listenable(keys: keys);
|
||||
}
|
||||
|
||||
ValueListenableBuilder watch({
|
||||
ValueListenableBuilder listenableBuilder({
|
||||
required Widget Function(BuildContext, Widget?) builder,
|
||||
List<dynamic>? selectKeys,
|
||||
List<LunaTableMixin>? selectItems,
|
||||
|
||||
@@ -12,6 +12,7 @@ import 'package:lunasea/database/tables/sabnzbd.dart';
|
||||
import 'package:lunasea/database/tables/search.dart';
|
||||
import 'package:lunasea/database/tables/sonarr.dart';
|
||||
import 'package:lunasea/database/tables/tautulli.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
enum LunaTable<T extends LunaTableMixin> {
|
||||
bios<BIOSDatabase>('bios', items: BIOSDatabase.values),
|
||||
@@ -94,12 +95,16 @@ mixin LunaTableMixin<T> on Enum {
|
||||
return update(value as T);
|
||||
}
|
||||
|
||||
ValueListenableBuilder watch({
|
||||
Stream<BoxEvent> watch() {
|
||||
return box.watch(this.key);
|
||||
}
|
||||
|
||||
ValueListenableBuilder listenableBuilder({
|
||||
required Widget Function(BuildContext, Widget?) builder,
|
||||
Key? key,
|
||||
Widget? child,
|
||||
}) {
|
||||
return box.watch(
|
||||
return box.listenableBuilder(
|
||||
key: key,
|
||||
selectItems: [this],
|
||||
builder: (context, widget) => builder(context, widget),
|
||||
|
||||
@@ -65,4 +65,9 @@ extension StringExtension on String {
|
||||
}) {
|
||||
return '${bullet.pad(count: padCount)}$this';
|
||||
}
|
||||
|
||||
/// Returns the string without any trailing slash.
|
||||
String noTrailingSlash() {
|
||||
return this.endsWith('/') ? this.substring(0, this.length - 1) : this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ class LunaOS extends StatelessWidget {
|
||||
fallbackLocale: LunaLocalization.fallbackLocale,
|
||||
startLocale: LunaLocalization.fallbackLocale,
|
||||
useFallbackTranslations: true,
|
||||
child: LunaBox.lunasea.watch(
|
||||
child: LunaBox.lunasea.listenableBuilder(
|
||||
selectItems: [
|
||||
LunaSeaDatabase.THEME_AMOLED,
|
||||
LunaSeaDatabase.THEME_AMOLED_BORDER,
|
||||
|
||||
@@ -495,7 +495,7 @@ extension LunaModuleExtension on LunaModule {
|
||||
String key = 'LUNASEA_MODULE_INFORMATION_${this.key}';
|
||||
void markSeen() => LunaBox.alerts.update(key, false);
|
||||
|
||||
return LunaBox.alerts.watch(
|
||||
return LunaBox.alerts.listenableBuilder(
|
||||
selectKeys: [key],
|
||||
builder: (context, _) {
|
||||
if (LunaBox.alerts.read(key, fallback: true)) {
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:lunasea/database/tables/dashboard.dart';
|
||||
import 'package:lunasea/modules/dashboard/core/adapters/calendar_starting_type.dart';
|
||||
import 'package:lunasea/modules/dashboard/core/api/api.dart';
|
||||
import 'package:lunasea/modules/dashboard/core/api/data/abstract.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
|
||||
class ModuleState extends LunaModuleState {
|
||||
ModuleState() {
|
||||
|
||||
@@ -53,7 +53,7 @@ class _State extends State<DashboardRoute> {
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.watch(
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.listenableBuilder(
|
||||
builder: (context, _) => LunaPageView(
|
||||
controller: _pageController,
|
||||
children: [
|
||||
|
||||
@@ -122,7 +122,7 @@ class _State extends State<CalendarView> {
|
||||
}
|
||||
|
||||
Widget _calendar() {
|
||||
return LunaBox.lunasea.watch(
|
||||
return LunaBox.lunasea.listenableBuilder(
|
||||
selectItems: [
|
||||
DashboardDatabase.CALENDAR_STARTING_DAY,
|
||||
DashboardDatabase.CALENDAR_STARTING_SIZE,
|
||||
|
||||
@@ -319,7 +319,7 @@ class LidarrDialogs {
|
||||
],
|
||||
showCancelButton: false,
|
||||
content: [
|
||||
LidarrDatabase.ADD_ARTIST_SEARCH_FOR_MISSING.watch(
|
||||
LidarrDatabase.ADD_ARTIST_SEARCH_FOR_MISSING.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'lidarr.StartSearchForMissingAlbums'.tr(),
|
||||
value: LidarrDatabase.ADD_ARTIST_SEARCH_FOR_MISSING.read(),
|
||||
|
||||
@@ -165,7 +165,7 @@ class _State extends State<AddArtistDetailsRoute>
|
||||
widget.data?.discogsLink?.openLink();
|
||||
},
|
||||
),
|
||||
LidarrDatabase.ADD_ROOT_FOLDER.watch(
|
||||
LidarrDatabase.ADD_ROOT_FOLDER.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
final _rootfolder = LidarrDatabase.ADD_ROOT_FOLDER.read();
|
||||
return LunaBlock(
|
||||
@@ -183,7 +183,8 @@ class _State extends State<AddArtistDetailsRoute>
|
||||
);
|
||||
},
|
||||
),
|
||||
LidarrDatabase.ADD_MONITORED_STATUS.watch(builder: (context, _) {
|
||||
LidarrDatabase.ADD_MONITORED_STATUS.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
const _db = LidarrDatabase.ADD_MONITORED_STATUS;
|
||||
final _status = LidarrMonitorStatus.ALL.fromKey(_db.read()) ??
|
||||
LidarrMonitorStatus.ALL;
|
||||
@@ -199,7 +200,7 @@ class _State extends State<AddArtistDetailsRoute>
|
||||
},
|
||||
);
|
||||
}),
|
||||
LidarrDatabase.ADD_QUALITY_PROFILE.watch(
|
||||
LidarrDatabase.ADD_QUALITY_PROFILE.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
final _profile = LidarrDatabase.ADD_QUALITY_PROFILE.read();
|
||||
return LunaBlock(
|
||||
@@ -217,7 +218,7 @@ class _State extends State<AddArtistDetailsRoute>
|
||||
);
|
||||
},
|
||||
),
|
||||
LidarrDatabase.ADD_METADATA_PROFILE.watch(
|
||||
LidarrDatabase.ADD_METADATA_PROFILE.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
final _profile = LidarrDatabase.ADD_METADATA_PROFILE.read();
|
||||
return LunaBlock(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export '../api/overseerr/overseerr.dart';
|
||||
export '../api/overseerr/api.dart';
|
||||
export '../api/overseerr/models.dart';
|
||||
export '../api/overseerr/types.dart';
|
||||
export 'overseerr/core.dart';
|
||||
|
||||
@@ -467,7 +467,7 @@ class RadarrDialogs {
|
||||
),
|
||||
],
|
||||
content: [
|
||||
RadarrDatabase.QUEUE_REMOVE_FROM_CLIENT.watch(
|
||||
RadarrDatabase.QUEUE_REMOVE_FROM_CLIENT.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'Remove From Client',
|
||||
value: RadarrDatabase.QUEUE_REMOVE_FROM_CLIENT.read(),
|
||||
@@ -475,7 +475,7 @@ class RadarrDialogs {
|
||||
RadarrDatabase.QUEUE_REMOVE_FROM_CLIENT.update(selected!),
|
||||
),
|
||||
),
|
||||
RadarrDatabase.QUEUE_BLACKLIST.watch(
|
||||
RadarrDatabase.QUEUE_BLACKLIST.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'Blacklist Release',
|
||||
value: RadarrDatabase.QUEUE_BLACKLIST.read(),
|
||||
@@ -610,7 +610,7 @@ class RadarrDialogs {
|
||||
),
|
||||
],
|
||||
content: [
|
||||
RadarrDatabase.REMOVE_MOVIE_IMPORT_LIST.watch(
|
||||
RadarrDatabase.REMOVE_MOVIE_IMPORT_LIST.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'Add to Exclusion List',
|
||||
value: RadarrDatabase.REMOVE_MOVIE_IMPORT_LIST.read(),
|
||||
@@ -618,7 +618,7 @@ class RadarrDialogs {
|
||||
RadarrDatabase.REMOVE_MOVIE_IMPORT_LIST.update(value!),
|
||||
),
|
||||
),
|
||||
RadarrDatabase.REMOVE_MOVIE_DELETE_FILES.watch(
|
||||
RadarrDatabase.REMOVE_MOVIE_DELETE_FILES.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'Delete Files',
|
||||
value: RadarrDatabase.REMOVE_MOVIE_DELETE_FILES.read(),
|
||||
@@ -690,7 +690,7 @@ class RadarrDialogs {
|
||||
],
|
||||
showCancelButton: false,
|
||||
content: [
|
||||
RadarrDatabase.ADD_MOVIE_SEARCH_FOR_MISSING.watch(
|
||||
RadarrDatabase.ADD_MOVIE_SEARCH_FOR_MISSING.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'radarr.StartSearchForMissingMovie'.tr(),
|
||||
value: RadarrDatabase.ADD_MOVIE_SEARCH_FOR_MISSING.read(),
|
||||
|
||||
@@ -11,7 +11,7 @@ class RadarrManualImportDetailsBottomActionBar extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return LunaBottomActionBar(
|
||||
actions: [
|
||||
RadarrDatabase.MANUAL_IMPORT_DEFAULT_MODE.watch(
|
||||
RadarrDatabase.MANUAL_IMPORT_DEFAULT_MODE.listenableBuilder(
|
||||
builder: (context, _) => LunaActionBarCard(
|
||||
title: 'radarr.ImportMode'.tr(),
|
||||
subtitle: RadarrImportMode.COPY
|
||||
|
||||
@@ -19,7 +19,7 @@ class SearchDialogs {
|
||||
await LunaDialog.dialog(
|
||||
context: context,
|
||||
title: 'search.Download'.tr(),
|
||||
customContent: LunaSeaDatabase.ENABLED_PROFILE.watch(
|
||||
customContent: LunaSeaDatabase.ENABLED_PROFILE.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.content(
|
||||
children: [
|
||||
Padding(
|
||||
|
||||
@@ -73,7 +73,7 @@ extension SettingsBannersExtension on SettingsBanners {
|
||||
Color headerColor = Colors.white,
|
||||
Color bodyColor = LunaColours.grey,
|
||||
}) {
|
||||
return LunaBox.alerts.watch(
|
||||
return LunaBox.alerts.listenableBuilder(
|
||||
selectKeys: [key],
|
||||
builder: (context, _) {
|
||||
if (shouldShow!)
|
||||
|
||||
@@ -53,7 +53,7 @@ class _State extends State<SettingsHeaderRoute> with LunaScrollControllerMixin {
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -36,7 +36,7 @@ class _State extends State<ConfigurationRoute> with LunaScrollControllerMixin {
|
||||
}
|
||||
|
||||
Widget _enabledProfile() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
if (LunaBox.profiles.size < 2) return const SizedBox();
|
||||
return LunaIconButton(
|
||||
|
||||
@@ -44,7 +44,7 @@ class _State extends State<ConfigurationAppearanceRoute>
|
||||
|
||||
Widget _amoledTheme() {
|
||||
const _db = LunaSeaDatabase.THEME_AMOLED;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.AmoledTheme'.tr(),
|
||||
body: [
|
||||
@@ -62,7 +62,7 @@ class _State extends State<ConfigurationAppearanceRoute>
|
||||
}
|
||||
|
||||
Widget _amoledThemeBorders() {
|
||||
return LunaBox.lunasea.watch(
|
||||
return LunaBox.lunasea.listenableBuilder(
|
||||
selectItems: [
|
||||
LunaSeaDatabase.THEME_AMOLED_BORDER,
|
||||
LunaSeaDatabase.THEME_AMOLED,
|
||||
@@ -84,7 +84,7 @@ class _State extends State<ConfigurationAppearanceRoute>
|
||||
|
||||
Widget _imageBackgroundOpacity() {
|
||||
const _db = LunaSeaDatabase.THEME_IMAGE_BACKGROUND_OPACITY;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.BackgroundImageOpacity'.tr(),
|
||||
body: [
|
||||
|
||||
@@ -60,7 +60,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _pastDaysInSchedule() {
|
||||
const _db = DashboardDatabase.CALENDAR_SHOW_PAST_DAYS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.PastDaysInScheduleView'.tr(),
|
||||
trailing: LunaSwitch(
|
||||
@@ -73,7 +73,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _pastDays() {
|
||||
const _db = DashboardDatabase.CALENDAR_DAYS_PAST;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.PastDays'.tr(),
|
||||
body: [
|
||||
@@ -95,7 +95,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _futureDays() {
|
||||
const _db = DashboardDatabase.CALENDAR_DAYS_FUTURE;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.FutureDays'.tr(),
|
||||
body: [
|
||||
@@ -117,7 +117,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _modulesLidarr() {
|
||||
const _db = DashboardDatabase.CALENDAR_ENABLE_LIDARR;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: LunaModule.LIDARR.title,
|
||||
body: [
|
||||
@@ -137,7 +137,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _modulesRadarr() {
|
||||
const _db = DashboardDatabase.CALENDAR_ENABLE_RADARR;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: LunaModule.RADARR.title,
|
||||
body: [
|
||||
@@ -157,7 +157,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _modulesSonarr() {
|
||||
const _db = DashboardDatabase.CALENDAR_ENABLE_SONARR;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: LunaModule.SONARR.title,
|
||||
body: [
|
||||
@@ -177,7 +177,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _startingView() {
|
||||
const _db = DashboardDatabase.CALENDAR_STARTING_TYPE;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.StartingView'.tr(),
|
||||
body: [
|
||||
@@ -195,7 +195,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _startingDay() {
|
||||
const _db = DashboardDatabase.CALENDAR_STARTING_DAY;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.StartingDay'.tr(),
|
||||
body: [
|
||||
@@ -213,7 +213,7 @@ class _State extends State<ConfigurationDashboardCalendarRoute>
|
||||
|
||||
Widget _startingSize() {
|
||||
const _db = DashboardDatabase.CALENDAR_STARTING_SIZE;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.StartingSize'.tr(),
|
||||
body: [
|
||||
|
||||
@@ -45,7 +45,7 @@ class _State extends State<ConfigurationDashboardDefaultPagesRoute>
|
||||
|
||||
Widget _homePage() {
|
||||
const _db = DashboardDatabase.NAVIGATION_INDEX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'lunasea.Home'.tr(),
|
||||
body: [TextSpan(text: HomeNavigationBar.titles[_db.read()])],
|
||||
|
||||
@@ -46,7 +46,7 @@ class _State extends State<ConfigurationDrawerRoute>
|
||||
body: [
|
||||
TextSpan(text: 'settings.AutomaticallyManageOrderDescription'.tr()),
|
||||
],
|
||||
trailing: LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.watch(
|
||||
trailing: LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.listenableBuilder(
|
||||
builder: (context, _) => LunaSwitch(
|
||||
value: LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.read(),
|
||||
onChanged: LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.update,
|
||||
@@ -76,7 +76,7 @@ class _State extends State<ConfigurationDrawerRoute>
|
||||
}
|
||||
|
||||
Widget _reorderableModuleTile(int index) {
|
||||
return LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.watch(
|
||||
return LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.listenableBuilder(
|
||||
key: ObjectKey(_modules![index]),
|
||||
builder: (context, _) => LunaBlock(
|
||||
disabled: LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.read(),
|
||||
|
||||
@@ -68,7 +68,7 @@ class _State extends State<ConfigurationExternalModulesEditRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.externalModules.watch(
|
||||
return LunaBox.externalModules.listenableBuilder(
|
||||
selectKeys: [widget.moduleId],
|
||||
builder: (context, dynamic _) {
|
||||
if (!LunaBox.externalModules.contains(widget.moduleId))
|
||||
|
||||
@@ -46,7 +46,7 @@ class _State extends State<ConfigurationExternalModulesRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.externalModules.watch(
|
||||
return LunaBox.externalModules.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationLidarrConnectionDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -42,7 +42,7 @@ class _State extends State<ConfigurationLidarrDefaultPagesRoute>
|
||||
|
||||
Widget _homePage() {
|
||||
const _db = LidarrDatabase.NAVIGATION_INDEX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'lunasea.Home'.tr(),
|
||||
body: [TextSpan(text: LidarrNavigationBar.titles[_db.read()])],
|
||||
|
||||
@@ -47,7 +47,7 @@ class _State extends State<ConfigurationLidarrRoute>
|
||||
}
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.LIDARR.title]),
|
||||
trailing: LunaSwitch(
|
||||
|
||||
@@ -57,7 +57,7 @@ class _State extends State<ConfigurationLocalizationRoute>
|
||||
|
||||
Widget _use24HourTime() {
|
||||
const _db = LunaSeaDatabase.USE_24_HOUR_TIME;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.Use24HourTime'.tr(),
|
||||
body: [TextSpan(text: 'settings.Use24HourTimeDescription'.tr())],
|
||||
|
||||
@@ -42,7 +42,7 @@ class _State extends State<ConfigurationNetworkRoute>
|
||||
|
||||
Widget _useTLSValidation() {
|
||||
const _db = LunaSeaDatabase.NETWORKING_TLS_VALIDATION;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.TLSCertificateValidation'.tr(),
|
||||
body: [
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationNZBGetConnectionDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationNZBGetDefaultPagesRoute>
|
||||
|
||||
Widget _homePage() {
|
||||
const _db = NZBGetDatabase.NAVIGATION_INDEX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'lunasea.Home'.tr(),
|
||||
body: [TextSpan(text: NZBGetNavigationBar.titles[_db.read()])],
|
||||
|
||||
@@ -47,7 +47,7 @@ class _State extends State<ConfigurationNZBGetRoute>
|
||||
}
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.NZBGET.title]),
|
||||
trailing: LunaSwitch(
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationOverseerrConnectionDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -44,7 +44,7 @@ class _State extends State<ConfigurationOverseerrRoute>
|
||||
}
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.OVERSEERR.title}',
|
||||
trailing: LunaSwitch(
|
||||
|
||||
@@ -77,7 +77,7 @@ class _State extends State<ConfigurationQuickActionsRoute>
|
||||
Widget _actionTile(String title, LunaSeaDatabase action) {
|
||||
return LunaBlock(
|
||||
title: title,
|
||||
trailing: LunaBox.lunasea.watch(
|
||||
trailing: LunaBox.lunasea.listenableBuilder(
|
||||
selectKeys: [action.key],
|
||||
builder: (context, _) => LunaSwitch(
|
||||
value: action.read(),
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationRadarrConnectionDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -52,7 +52,7 @@ class _State extends State<ConfigurationRadarrDefaultOptionsRoute>
|
||||
|
||||
Widget _viewMovies() {
|
||||
const _db = RadarrDatabase.DEFAULT_VIEW_MOVIES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
return LunaBlock(
|
||||
title: 'lunasea.View'.tr(),
|
||||
@@ -86,7 +86,7 @@ class _State extends State<ConfigurationRadarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingMovies() {
|
||||
const _db = RadarrDatabase.DEFAULT_SORTING_MOVIES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
@@ -117,7 +117,7 @@ class _State extends State<ConfigurationRadarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingMoviesDirection() {
|
||||
const _db = RadarrDatabase.DEFAULT_SORTING_MOVIES_ASCENDING;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortDirection'.tr(),
|
||||
body: [
|
||||
@@ -142,7 +142,7 @@ class _State extends State<ConfigurationRadarrDefaultOptionsRoute>
|
||||
|
||||
Widget _filteringMovies() {
|
||||
const _db = RadarrDatabase.DEFAULT_FILTERING_MOVIES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.FilterCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
@@ -171,7 +171,7 @@ class _State extends State<ConfigurationRadarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingReleases() {
|
||||
const _db = RadarrDatabase.DEFAULT_SORTING_RELEASES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
@@ -199,7 +199,7 @@ class _State extends State<ConfigurationRadarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingReleasesDirection() {
|
||||
const _db = RadarrDatabase.DEFAULT_SORTING_RELEASES_ASCENDING;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortDirection'.tr(),
|
||||
body: [
|
||||
@@ -219,7 +219,7 @@ class _State extends State<ConfigurationRadarrDefaultOptionsRoute>
|
||||
|
||||
Widget _filteringReleases() {
|
||||
const _db = RadarrDatabase.DEFAULT_FILTERING_RELEASES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.FilterCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
|
||||
@@ -45,7 +45,7 @@ class _State extends State<ConfigurationRadarrDefaultPagesRoute>
|
||||
|
||||
Widget _homePage() {
|
||||
const _db = RadarrDatabase.NAVIGATION_INDEX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.Home'.tr(),
|
||||
body: [TextSpan(text: RadarrNavigationBar.titles[_db.read()])],
|
||||
@@ -64,7 +64,7 @@ class _State extends State<ConfigurationRadarrDefaultPagesRoute>
|
||||
|
||||
Widget _movieDetailsPage() {
|
||||
const _db = RadarrDatabase.NAVIGATION_INDEX_MOVIE_DETAILS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Movie Details',
|
||||
body: [
|
||||
@@ -87,7 +87,7 @@ class _State extends State<ConfigurationRadarrDefaultPagesRoute>
|
||||
|
||||
Widget _addMoviePage() {
|
||||
const _db = RadarrDatabase.NAVIGATION_INDEX_ADD_MOVIE;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Add Movie',
|
||||
body: [TextSpan(text: RadarrAddMovieNavigationBar.titles[_db.read()])],
|
||||
@@ -107,7 +107,7 @@ class _State extends State<ConfigurationRadarrDefaultPagesRoute>
|
||||
|
||||
Widget _systemStatusPage() {
|
||||
const _db = RadarrDatabase.NAVIGATION_INDEX_SYSTEM_STATUS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'System Status',
|
||||
body: [
|
||||
|
||||
@@ -49,7 +49,7 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
}
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.RADARR.title}',
|
||||
trailing: LunaSwitch(
|
||||
@@ -93,7 +93,7 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
|
||||
Widget _discoverUseRadarrSuggestionsToggle() {
|
||||
const _db = RadarrDatabase.ADD_DISCOVER_USE_SUGGESTIONS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Discover Suggestions',
|
||||
body: const [TextSpan(text: 'Add Suggested Releases in Discover')],
|
||||
@@ -107,7 +107,7 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
|
||||
Widget _queueSize() {
|
||||
const _db = RadarrDatabase.QUEUE_PAGE_SIZE;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Queue Size',
|
||||
body: [
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationSABnzbdConnectionDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationSABnzbdDefaultPagesRoute>
|
||||
|
||||
Widget _homePage() {
|
||||
const _db = SABnzbdDatabase.NAVIGATION_INDEX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'lunasea.Home'.tr(),
|
||||
body: [TextSpan(text: SABnzbdNavigationBar.titles[_db.read()])],
|
||||
|
||||
@@ -47,7 +47,7 @@ class _State extends State<ConfigurationSABnzbdRoute>
|
||||
}
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.SABNZBD.title}',
|
||||
trailing: LunaSwitch(
|
||||
|
||||
@@ -67,7 +67,7 @@ class _State extends State<ConfigurationSearchEditIndexerRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.indexers.watch(
|
||||
return LunaBox.indexers.listenableBuilder(
|
||||
selectKeys: [widget.id],
|
||||
builder: (context, _) {
|
||||
if (!LunaBox.indexers.contains(widget.id)) return Container();
|
||||
|
||||
@@ -59,7 +59,7 @@ class _State extends State<ConfigurationSearchEditIndexerHeadersRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.indexers.watch(
|
||||
return LunaBox.indexers.listenableBuilder(
|
||||
selectKeys: [widget.id],
|
||||
builder: (context, _) {
|
||||
if (!LunaBox.indexers.contains(widget.id)) return Container();
|
||||
|
||||
@@ -47,7 +47,7 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.indexers.watch(
|
||||
return LunaBox.indexers.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
@@ -101,7 +101,7 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
|
||||
Widget _hideAdultCategories() {
|
||||
const _db = SearchDatabase.HIDE_XXX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Hide Adult Categories',
|
||||
body: const [TextSpan(text: 'Hide Adult Content')],
|
||||
@@ -115,7 +115,7 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
|
||||
Widget _showLinks() {
|
||||
const _db = SearchDatabase.SHOW_LINKS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Show Links',
|
||||
body: const [TextSpan(text: 'Show Download and Comments Links')],
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationSonarrConnectionDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -52,7 +52,7 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
|
||||
Widget _viewSeries() {
|
||||
const _db = SonarrDatabase.DEFAULT_VIEW_SERIES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
LunaListViewOption _view = _db.read();
|
||||
return LunaBlock(
|
||||
@@ -87,7 +87,7 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingSeries() {
|
||||
const _db = SonarrDatabase.DEFAULT_SORTING_SERIES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
@@ -118,7 +118,7 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingSeriesDirection() {
|
||||
const _db = SonarrDatabase.DEFAULT_SORTING_SERIES_ASCENDING;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortDirection'.tr(),
|
||||
body: [
|
||||
@@ -138,7 +138,7 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
|
||||
Widget _filteringSeries() {
|
||||
const _db = SonarrDatabase.DEFAULT_FILTERING_SERIES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.FilterCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
@@ -166,7 +166,7 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingReleases() {
|
||||
const _db = SonarrDatabase.DEFAULT_SORTING_RELEASES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
@@ -194,7 +194,7 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
|
||||
Widget _sortingReleasesDirection() {
|
||||
const _db = SonarrDatabase.DEFAULT_SORTING_RELEASES_ASCENDING;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SortDirection'.tr(),
|
||||
body: [
|
||||
@@ -214,7 +214,7 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
|
||||
Widget _filteringReleases() {
|
||||
const _db = SonarrDatabase.DEFAULT_FILTERING_RELEASES;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.FilterCategory'.tr(),
|
||||
body: [TextSpan(text: _db.read().readable)],
|
||||
|
||||
@@ -44,7 +44,7 @@ class _State extends State<ConfigurationSonarrDefaultPagesRoute>
|
||||
|
||||
Widget _homePage() {
|
||||
const _db = SonarrDatabase.NAVIGATION_INDEX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
return LunaBlock(
|
||||
title: 'lunasea.Home'.tr(),
|
||||
@@ -65,7 +65,7 @@ class _State extends State<ConfigurationSonarrDefaultPagesRoute>
|
||||
|
||||
Widget _seriesDetailsPage() {
|
||||
const _db = SonarrDatabase.NAVIGATION_INDEX_SERIES_DETAILS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
return LunaBlock(
|
||||
title: 'sonarr.SeriesDetails'.tr(),
|
||||
@@ -89,7 +89,7 @@ class _State extends State<ConfigurationSonarrDefaultPagesRoute>
|
||||
|
||||
Widget _seasonDetailsPage() {
|
||||
const _db = SonarrDatabase.NAVIGATION_INDEX_SEASON_DETAILS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
return LunaBlock(
|
||||
title: 'sonarr.SeasonDetails'.tr(),
|
||||
|
||||
@@ -48,7 +48,7 @@ class _State extends State<ConfigurationSonarrRoute>
|
||||
}
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.SONARR.title}',
|
||||
trailing: LunaSwitch(
|
||||
@@ -100,7 +100,7 @@ class _State extends State<ConfigurationSonarrRoute>
|
||||
|
||||
Widget _queueSize() {
|
||||
const _db = SonarrDatabase.QUEUE_PAGE_SIZE;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Queue Size',
|
||||
body: [
|
||||
|
||||
@@ -43,7 +43,7 @@ class _State extends State<ConfigurationTautulliConnectionDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -46,7 +46,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
|
||||
Widget _homePage() {
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'lunasea.Home'.tr(),
|
||||
body: [TextSpan(text: TautulliNavigationBar.titles[_db.read()])],
|
||||
@@ -65,7 +65,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
|
||||
Widget _graphsPage() {
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_GRAPHS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Graphs',
|
||||
body: [TextSpan(text: TautulliGraphsNavigationBar.titles[_db.read()])],
|
||||
@@ -85,7 +85,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
|
||||
Widget _libraryDetailsPage() {
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_LIBRARIES_DETAILS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Library Details',
|
||||
body: [
|
||||
@@ -108,7 +108,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
|
||||
Widget _mediaDetailsPage() {
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_MEDIA_DETAILS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Media Details',
|
||||
body: [
|
||||
@@ -130,7 +130,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
|
||||
Widget _userDetailsPage() {
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_USER_DETAILS;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'User Details',
|
||||
body: [
|
||||
|
||||
@@ -49,7 +49,7 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
}
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.TAUTULLI.title}',
|
||||
trailing: LunaSwitch(
|
||||
@@ -86,7 +86,7 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
|
||||
Widget _defaultTerminationMessage() {
|
||||
const _db = TautulliDatabase.TERMINATION_MESSAGE;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
String message = _db.read();
|
||||
return LunaBlock(
|
||||
@@ -105,7 +105,7 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
|
||||
Widget _activityRefreshRate() {
|
||||
const _db = TautulliDatabase.REFRESH_RATE;
|
||||
return _db.watch(builder: (context, _) {
|
||||
return _db.listenableBuilder(builder: (context, _) {
|
||||
String? refreshRate;
|
||||
if (_db.read() == 1) refreshRate = 'Every Second';
|
||||
if (_db.read() != 1) refreshRate = 'Every ${_db.read()} Seconds';
|
||||
@@ -123,7 +123,7 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
|
||||
Widget _statisticsItemCount() {
|
||||
const _db = TautulliDatabase.STATISTICS_STATS_COUNT;
|
||||
return _db.watch(
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
String? statisticsItems;
|
||||
if (_db.read() == 1) statisticsItems = '1 Item';
|
||||
|
||||
@@ -32,7 +32,7 @@ class _State extends State<ConfigurationWakeOnLANRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.profiles.watch(
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
|
||||
@@ -69,7 +69,7 @@ class _State extends State<NotificationsRoute> with LunaScrollControllerMixin {
|
||||
const db = LunaSeaDatabase.ENABLE_IN_APP_NOTIFICATIONS;
|
||||
return LunaBlock(
|
||||
title: 'settings.EnableInAppNotifications'.tr(),
|
||||
trailing: db.watch(
|
||||
trailing: db.listenableBuilder(
|
||||
builder: (context, _) => LunaSwitch(
|
||||
value: db.read(),
|
||||
onChanged: db.update,
|
||||
|
||||
@@ -112,7 +112,7 @@ class _State extends State<ProfilesRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _enabledProfile() {
|
||||
const db = LunaSeaDatabase.ENABLED_PROFILE;
|
||||
return db.watch(
|
||||
return db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.EnabledProfile'.tr(),
|
||||
body: [TextSpan(text: db.read())],
|
||||
|
||||
@@ -37,7 +37,7 @@ class _State extends State<SystemLogsDetailsRoute>
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaBox.logs.watch(builder: (context, _) {
|
||||
return LunaBox.logs.listenableBuilder(builder: (context, _) {
|
||||
List<LunaLog> logs = filter();
|
||||
if (logs.isEmpty) {
|
||||
return LunaMessage.goBack(
|
||||
|
||||
@@ -81,7 +81,7 @@ class _State extends State<SystemLogsRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _sentryLogging() {
|
||||
const db = BIOSDatabase.SENTRY_LOGGING;
|
||||
return db.watch(
|
||||
return db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'settings.SentryLogging'.tr(),
|
||||
body: [TextSpan(text: 'settings.SentryLoggingDescription'.tr())],
|
||||
|
||||
@@ -557,7 +557,7 @@ class SonarrDialogs {
|
||||
),
|
||||
],
|
||||
content: [
|
||||
SonarrDatabase.REMOVE_SERIES_EXCLUSION_LIST.watch(
|
||||
SonarrDatabase.REMOVE_SERIES_EXCLUSION_LIST.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'sonarr.AddToExclusionList'.tr(),
|
||||
value: SonarrDatabase.REMOVE_SERIES_EXCLUSION_LIST.read(),
|
||||
@@ -565,7 +565,7 @@ class SonarrDialogs {
|
||||
SonarrDatabase.REMOVE_SERIES_EXCLUSION_LIST.update(value!),
|
||||
),
|
||||
),
|
||||
SonarrDatabase.REMOVE_SERIES_DELETE_FILES.watch(
|
||||
SonarrDatabase.REMOVE_SERIES_DELETE_FILES.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'sonarr.DeleteFiles'.tr(),
|
||||
value: SonarrDatabase.REMOVE_SERIES_DELETE_FILES.read(),
|
||||
@@ -591,7 +591,7 @@ class SonarrDialogs {
|
||||
],
|
||||
showCancelButton: false,
|
||||
content: [
|
||||
SonarrDatabase.ADD_SERIES_SEARCH_FOR_MISSING.watch(
|
||||
SonarrDatabase.ADD_SERIES_SEARCH_FOR_MISSING.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'sonarr.StartSearchForMissingEpisodes'.tr(),
|
||||
value: SonarrDatabase.ADD_SERIES_SEARCH_FOR_MISSING.read(),
|
||||
@@ -599,7 +599,7 @@ class SonarrDialogs {
|
||||
SonarrDatabase.ADD_SERIES_SEARCH_FOR_MISSING.update(value!),
|
||||
),
|
||||
),
|
||||
SonarrDatabase.ADD_SERIES_SEARCH_FOR_CUTOFF_UNMET.watch(
|
||||
SonarrDatabase.ADD_SERIES_SEARCH_FOR_CUTOFF_UNMET.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'sonarr.StartSearchForCutoffUnmetEpisodes'.tr(),
|
||||
value: SonarrDatabase.ADD_SERIES_SEARCH_FOR_CUTOFF_UNMET.read(),
|
||||
@@ -690,7 +690,7 @@ class SonarrDialogs {
|
||||
),
|
||||
],
|
||||
content: [
|
||||
SonarrDatabase.QUEUE_REMOVE_DOWNLOAD_CLIENT.watch(
|
||||
SonarrDatabase.QUEUE_REMOVE_DOWNLOAD_CLIENT.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'sonarr.RemoveFromDownloadClient'.tr(),
|
||||
value: SonarrDatabase.QUEUE_REMOVE_DOWNLOAD_CLIENT.read(),
|
||||
@@ -698,7 +698,7 @@ class SonarrDialogs {
|
||||
SonarrDatabase.QUEUE_REMOVE_DOWNLOAD_CLIENT.update(value!),
|
||||
),
|
||||
),
|
||||
SonarrDatabase.QUEUE_ADD_BLOCKLIST.watch(
|
||||
SonarrDatabase.QUEUE_ADD_BLOCKLIST.listenableBuilder(
|
||||
builder: (context, _) => LunaDialog.checkbox(
|
||||
title: 'sonarr.AddReleaseToBlocklist'.tr(),
|
||||
value: SonarrDatabase.QUEUE_ADD_BLOCKLIST.read(),
|
||||
|
||||
27
lib/state/sabnzbd/api.dart
Normal file
27
lib/state/sabnzbd/api.dart
Normal file
@@ -0,0 +1,27 @@
|
||||
import 'package:lunasea/api/sabnzbd/api.dart';
|
||||
import 'package:lunasea/database/box.dart';
|
||||
import 'package:lunasea/state/sabnzbd/config.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
final apiProvider =
|
||||
Provider.autoDispose.family<SABnzbdAPI, String>((ref, uuid) {
|
||||
final db = ref.watch(configProvider(uuid));
|
||||
|
||||
// A database update was triggered
|
||||
if (db.hasValue) {
|
||||
final config = db.value!;
|
||||
return SABnzbdAPI(
|
||||
host: config.host,
|
||||
apiKey: config.apiKey,
|
||||
headers: config.headers,
|
||||
);
|
||||
}
|
||||
|
||||
// Initial load
|
||||
final config = LunaBox.profiles.read(uuid)!;
|
||||
return SABnzbdAPI(
|
||||
host: config.sabnzbdHost,
|
||||
apiKey: config.sabnzbdKey,
|
||||
headers: config.sabnzbdHeaders,
|
||||
);
|
||||
});
|
||||
32
lib/state/sabnzbd/config.dart
Normal file
32
lib/state/sabnzbd/config.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'package:lunasea/database/box.dart';
|
||||
import 'package:lunasea/database/models/profile.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
class _DB {
|
||||
final bool enabled;
|
||||
final String host;
|
||||
final String apiKey;
|
||||
final Map<String, String> headers;
|
||||
|
||||
_DB(
|
||||
this.enabled, {
|
||||
this.host = '',
|
||||
this.apiKey = '',
|
||||
this.headers = const {},
|
||||
});
|
||||
}
|
||||
|
||||
final configProvider = StreamProvider.family<_DB, String>((ref, uuid) async* {
|
||||
final box = LunaBox.profiles.watch(uuid);
|
||||
await for (final event in box) {
|
||||
if (event.deleted) yield _DB(false);
|
||||
|
||||
LunaProfile profile = event.value;
|
||||
yield _DB(
|
||||
profile.sabnzbdEnabled,
|
||||
host: profile.sabnzbdHost,
|
||||
apiKey: profile.sabnzbdKey,
|
||||
headers: profile.sabnzbdHeaders,
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
|
||||
import 'package:lunasea/system/flavor.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:lunasea/database/models/profile.dart';
|
||||
import 'package:lunasea/database/box.dart';
|
||||
import 'package:lunasea/database/tables/lunasea.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
import 'package:lunasea/router/router.dart';
|
||||
import 'package:lunasea/system/logger.dart';
|
||||
import 'package:lunasea/types/exception.dart';
|
||||
|
||||
@@ -18,6 +18,7 @@ export 'package:json_annotation/json_annotation.dart';
|
||||
export 'package:meta/meta.dart';
|
||||
export 'package:package_info_plus/package_info_plus.dart';
|
||||
export 'package:provider/provider.dart' show ReadContext, WatchContext;
|
||||
export 'package:retrofit/retrofit.dart' hide Headers;
|
||||
export 'package:stash/stash_api.dart';
|
||||
export 'package:stash_memory/stash_memory.dart';
|
||||
export 'package:supercharged/supercharged.dart';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
import 'package:lunasea/extensions/string/string.dart';
|
||||
import 'package:lunasea/system/build.dart';
|
||||
import 'package:lunasea/system/environment.dart';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
import 'package:lunasea/widgets/ui.dart';
|
||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
import 'package:lunasea/types/loading_state.dart';
|
||||
import 'package:lunasea/widgets/ui.dart';
|
||||
|
||||
|
||||
@@ -34,12 +34,12 @@ class LunaDrawer extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.watch(
|
||||
builder: (context, _) => LunaBox.indexers.watch(
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.listenableBuilder(
|
||||
builder: (context, _) => LunaBox.indexers.listenableBuilder(
|
||||
builder: (context, _) => Drawer(
|
||||
elevation: LunaUI.ELEVATION,
|
||||
backgroundColor: Theme.of(context).primaryColor,
|
||||
child: LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.watch(
|
||||
child: LunaSeaDatabase.DRAWER_AUTOMATIC_MANAGE.listenableBuilder(
|
||||
builder: (context, _) => Column(
|
||||
children: [
|
||||
LunaDrawerHeader(page: page),
|
||||
|
||||
@@ -11,7 +11,7 @@ class LunaDrawerHeader extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.watch(
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.listenableBuilder(
|
||||
builder: (context, _) => Container(
|
||||
child: LunaAppBar.dropdown(
|
||||
backgroundColor: Colors.transparent,
|
||||
|
||||
@@ -52,7 +52,7 @@ class LunaScaffold extends StatelessWidget {
|
||||
}
|
||||
|
||||
Widget get scaffold {
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.watch(
|
||||
return LunaSeaDatabase.ENABLED_PROFILE.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
onProfileChange?.call(context);
|
||||
return Scaffold(
|
||||
|
||||
Reference in New Issue
Block a user