feat(-arr): view download client queue via overlay sheet

This commit is contained in:
Jagandeep Brar
2022-09-21 23:43:55 -04:00
parent a78aa001fa
commit 0c59886657
15 changed files with 142 additions and 23 deletions

View File

@@ -1,14 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: Support via Discord
- name: Feedback Requets & Support via Discord
url: https://www.lunasea.app/discord
about: Chat with the developer and users on support and setup related topics.
about: Request new features and get support from the community
- name: Support via GitHub Discussions
url: https://github.com/JagandeepBrar/LunaSea/discussions
about: Ask questions and discuss with other community members
- name: Support via Reddit
url: https://www.lunasea.app/reddit
about: Ask the developer and other redditors for support and setup related topics.
- name: Feedback & Feature Requests Board
url: https://feedback.lunasea.app
about: Request new features and modules to be implemented into LunaSea.
about: Ask the developer and other redditors for support and setup related topics

View File

@@ -16,11 +16,8 @@ jobs:
issue-comment: >
Hi @{issue-author}! We use the issue tracker exclusively
for bug reports and issues. However, this issue appears
to be a feature request. Please use the following channels:
- [Feedback & Feature Requests Board](https://feedback.lunasea.app)
- [Discord](https://www.lunasea.app/discord)
to be a feature request. Please use the [Discord](https://www.lunasea.app/discord)
to request new features.
close-issue: true
lock-issue: true
issue-lock-reason: 'off-topic'

View File

@@ -33,7 +33,6 @@ Interested in using prerelease build channels of LunaSea? Learn the differences
- [Build Guide](https://github.com/JagandeepBrar/LunaSea/wiki/Build-Guide)
- [Documentation](https://www.lunasea.app/docs)
- [Feedback & Feature Requests Board](https://www.lunasea.app/feedback)
- [Frequently Asked Questions](https://docs.lunasea.app/getting-started/frequently-asked-questions)
## Support
@@ -41,9 +40,8 @@ Interested in using prerelease build channels of LunaSea? Learn the differences
[![Discord](https://img.shields.io/discord/673591529834807358?label=Discord&style=flat)](https://www.lunasea.app/discord)
[![Reddit](https://img.shields.io/reddit/subreddit-subscribers/LunaSeaApp?label=r%2FLunaSeaApp&style=flat)](https://www.lunasea.app/reddit)
**Please only create an issue on GitHub for bugs and software issues**. Post in the [discussions board](https://github.com/JagandeepBrar/LunaSea/discussions) or the [feedback & feature requests board](https://www.lunasea.app/feedback) for requests and general feedback.
**Please only create an issue on GitHub for bugs and software issues**. Post in the [discussions board](https://github.com/JagandeepBrar/LunaSea/discussions) or the [Discord forum](https://www.lunasea.app/discord) for requests and general feedback.
- [Discord](https://www.lunasea.app/discord)
- [Email](mailto:hello@lunasea.app)
- [Reddit](https://www.lunasea.app/reddit)
- [Website](https://www.lunasea.app)
@@ -55,5 +53,4 @@ Interested in using prerelease build channels of LunaSea? Learn the differences
Thank you to all tools and services for offering free subscriptions for open-source projects!
- [docs.page](https://docs.page/): docs.page is used to host LunaSea's documentation
- [Hellonext](https://www.hellonext.co): Hellonext is used to host LunaSea's feedback board
- [Weblate](https://weblate.org): Weblate is used to gather community localization for LunaSea

View File

@@ -54,6 +54,7 @@
"lunasea.Disabled": "Disabled",
"lunasea.Dismiss": "Dismiss",
"lunasea.Docs": "Docs",
"lunasea.DownloadClient": "Download Client",
"lunasea.Edge": "Edge",
"lunasea.Error": "Error",
"lunasea.ExternalModules": "External Modules",

View File

@@ -15,7 +15,6 @@ The software, or as used in LunaSea, _Modules_, are all pieces of software that
I take all requests into consideration! If you would like to request a feature there are a few ways I recommend:
- [Feedback Board](https://www.lunasea.app/feedback): The feedback board allows users to create, comment on, and vote on new features and general requests! This is the ideal way to request a new feature, as it allows other users to see active requests, it allows discussions to stay per-request, and the voting system gives me a good indication on the active demand for a feature.
- [Discord](https://www.lunasea.app/discord)
- [Email](mailto:hello@lunasea.app)
- [Reddit](https://www.lunasea.app/reddit)
@@ -34,7 +33,7 @@ Support for torrent clients is easily the most requested new module, and I defin
Torrent support is not completely off the table and may come in the future! But at the moment, over 90% of the active user base is using iOS-based devices and it is hard to justify building a module (that takes a lot of time) that the mass majority of the user base would not be able to use.
> I am actively thinking of methods to get around this limitation, if you have any ideas consider commenting on the torrent client support [feedback board request](https://feedback.lunasea.app/b/New-Modules/p/torrent-clients-support).
> I am actively thinking of methods to get around this limitation, if you have any ideas consider commenting on the torrent client support [Discord Forum post](https://discord.com/channels/673591529834807358/1020181897973874748).
## Development
@@ -69,7 +68,6 @@ I tried to make it as stable as possible, but bugs obviously will always be ther
I consider all feedback and actively try to integrate new features that are requested by the community, big or small! You have a few ways to request new features for LunaSea:
- [Feedback Board](https://www.lunasea.app/feedback): The feedback board allows users to create, comment on, and vote on new features and general requests! This is the ideal way to request a new feature, as it allows other users to see active requests, it allows discussions to stay per-request, and the voting system gives me a good indication on the active demand for a feature.
- [Discord](https://www.lunasea.app/discord)
- [Email](mailto:hello@lunasea.app)
- [Reddit](https://www.lunasea.app/reddit)

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:lunasea/core.dart';
import 'package:lunasea/modules/lidarr.dart';
import 'package:lunasea/widgets/sheets/download_client/button.dart';
class ArtistAlbumReleasesRoute extends StatefulWidget {
final int albumId;
@@ -46,6 +47,9 @@ class _State extends State<ArtistAlbumReleasesRoute>
title: 'Releases',
scrollControllers: [scrollController],
bottom: LidarrReleasesSearchBar(scrollController: scrollController),
actions: const [
DownloadClientButton(),
],
);
}

View File

@@ -9,8 +9,11 @@ import 'package:lunasea/system/filesystem/file.dart';
import 'package:lunasea/system/filesystem/filesystem.dart';
class NZBGetRoute extends StatefulWidget {
final bool showDrawer;
const NZBGetRoute({
Key? key,
this.showDrawer = true,
}) : super(key: key);
@override
@@ -40,7 +43,7 @@ class _State extends State<NZBGetRoute> {
return LunaScaffold(
scaffoldKey: _scaffoldKey,
body: _body(),
drawer: _drawer(),
drawer: widget.showDrawer ? _drawer() : null,
appBar: _appBar() as PreferredSizeWidget?,
bottomNavigationBar: _bottomNavigationBar(),
extendBodyBehindAppBar: false,
@@ -81,7 +84,8 @@ class _State extends State<NZBGetRoute> {
];
return LunaAppBar.dropdown(
title: LunaModule.NZBGET.title,
useDrawer: true,
useDrawer: widget.showDrawer,
hideLeading: !widget.showDrawer,
profiles: profiles,
actions: actions,
pageController: _pageController,

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:lunasea/core.dart';
import 'package:lunasea/modules/radarr.dart';
import 'package:lunasea/widgets/pages/invalid_route.dart';
import 'package:lunasea/widgets/sheets/download_client/button.dart';
class MovieReleasesRoute extends StatefulWidget {
final int movieId;
@@ -43,6 +44,9 @@ class _State extends State<MovieReleasesRoute> with LunaScrollControllerMixin {
title: 'Releases',
scrollControllers: [scrollController],
bottom: RadarrReleasesSearchBar(scrollController: scrollController),
actions: const [
DownloadClientButton(),
],
);
}

View File

@@ -8,8 +8,11 @@ import 'package:lunasea/system/filesystem/file.dart';
import 'package:lunasea/system/filesystem/filesystem.dart';
class SABnzbdRoute extends StatefulWidget {
final bool showDrawer;
const SABnzbdRoute({
Key? key,
this.showDrawer = true,
}) : super(key: key);
@override
@@ -39,7 +42,7 @@ class _State extends State<SABnzbdRoute> {
return LunaScaffold(
scaffoldKey: _scaffoldKey,
body: _body(),
drawer: _drawer(),
drawer: widget.showDrawer ? _drawer() : null,
appBar: _appBar() as PreferredSizeWidget?,
bottomNavigationBar: _bottomNavigationBar(),
extendBodyBehindAppBar: false,
@@ -79,7 +82,8 @@ class _State extends State<SABnzbdRoute> {
];
return LunaAppBar.dropdown(
title: LunaModule.SABNZBD.title,
useDrawer: true,
useDrawer: widget.showDrawer,
hideLeading: !widget.showDrawer,
profiles: profiles,
actions: actions,
pageController: _pageController,

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:lunasea/core.dart';
import 'package:lunasea/modules/sonarr.dart';
import 'package:lunasea/widgets/sheets/download_client/button.dart';
class ReleasesRoute extends StatefulWidget {
final int? episodeId;
@@ -45,6 +46,9 @@ class _State extends State<ReleasesRoute> with LunaScrollControllerMixin {
title: 'sonarr.Releases'.tr(),
scrollControllers: [scrollController],
bottom: SonarrReleasesSearchBar(scrollController: scrollController),
actions: const [
DownloadClientButton(),
],
);
}

View File

@@ -157,4 +157,40 @@ class LunaDialogs {
);
return [_flag];
}
Future<LunaModule?> selectDownloadClient() async {
final profile = LunaProfile.current;
final context = LunaState.context;
LunaModule? module;
await LunaDialog.dialog(
context: context,
title: 'lunasea.DownloadClient'.tr(),
content: [
if (profile.nzbgetEnabled)
LunaDialog.tile(
text: LunaModule.NZBGET.title,
icon: LunaModule.NZBGET.icon,
iconColor: LunaModule.NZBGET.color,
onTap: () {
module = LunaModule.NZBGET;
Navigator.of(context).pop();
},
),
if (profile.sabnzbdEnabled)
LunaDialog.tile(
text: LunaModule.SABNZBD.title,
icon: LunaModule.SABNZBD.icon,
iconColor: LunaModule.SABNZBD.color,
onTap: () {
module = LunaModule.SABNZBD;
Navigator.of(context).pop();
},
),
],
contentPadding: LunaDialog.listDialogContentPadding(),
);
return module;
}
}

View File

@@ -15,7 +15,6 @@ enum LunaLinkedContent {
BUILDS('https://www.lunasea.app/builds'),
DISCORD('https://www.lunasea.app/discord'),
DOCUMENTATION('https://www.lunasea.app/docs'),
FEEDBACK_BOARD('https://www.lunasea.app/feedback'),
GITHUB('https://www.lunasea.app/github'),
NOTIFICATIONS_DOC('https://docs.lunasea.app/lunasea/notifications'),
REDDIT('https://www.lunasea.app/reddit'),

View File

@@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
import 'package:lunasea/database/models/profile.dart';
import 'package:lunasea/widgets/sheets/download_client/sheet.dart';
import 'package:lunasea/widgets/ui.dart';
class DownloadClientButton extends StatelessWidget {
const DownloadClientButton({
super.key,
});
@override
Widget build(BuildContext context) {
if (_shouldShow) {
return LunaIconButton.appBar(
icon: LunaIcons.DOWNLOAD,
onPressed: DownloadClientSheet().show,
);
}
return const SizedBox();
}
bool get _shouldShow {
final profile = LunaProfile.current;
return profile.sabnzbdEnabled || profile.nzbgetEnabled;
}
}

View File

@@ -0,0 +1,47 @@
import 'package:flutter/material.dart';
import 'package:lunasea/database/models/profile.dart';
import 'package:lunasea/modules.dart';
import 'package:lunasea/modules/nzbget.dart';
import 'package:lunasea/modules/sabnzbd/routes.dart';
import 'package:lunasea/utils/dialogs.dart';
import 'package:lunasea/vendor.dart';
import 'package:lunasea/widgets/pages/invalid_route.dart';
import 'package:lunasea/widgets/ui.dart';
class DownloadClientSheet extends LunaBottomModalSheet {
Future<LunaModule?> getDownloadClient() async {
final profile = LunaProfile.current;
final nzbget = profile.nzbgetEnabled;
final sabnzbd = profile.sabnzbdEnabled;
if (nzbget && sabnzbd) {
return LunaDialogs().selectDownloadClient();
}
if (nzbget) {
return LunaModule.NZBGET;
}
if (sabnzbd) {
return LunaModule.SABNZBD;
}
return null;
}
@override
Future<dynamic> show({
Widget Function(BuildContext context)? builder,
}) async {
final module = await getDownloadClient();
if (module != null) {
return showModal(builder: (context) {
if (module == LunaModule.SABNZBD) {
return const SABnzbdRoute(showDrawer: false);
}
if (module == LunaModule.NZBGET) {
return const NZBGetRoute(showDrawer: false);
}
return InvalidRoutePage();
});
}
}
}

View File

@@ -33,6 +33,7 @@
"lunasea.Disabled": "Disabled",
"lunasea.Dismiss": "Dismiss",
"lunasea.Docs": "Docs",
"lunasea.DownloadClient": "Download Client",
"lunasea.Edge": "Edge",
"lunasea.Error": "Error",
"lunasea.ExternalModules": "External Modules",