mirror of
https://github.com/jagandeepbrar/lunasea.git
synced 2026-08-31 04:32:32 +00:00
feat(-arr): view download client queue via overlay sheet
This commit is contained in:
9
.github/ISSUE_TEMPLATE/config.yml
vendored
9
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -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
|
||||
|
||||
7
.github/workflows/github_issue_labels.yml
vendored
7
.github/workflows/github_issue_labels.yml
vendored
@@ -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'
|
||||
|
||||
@@ -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
|
||||
[](https://www.lunasea.app/discord)
|
||||
[](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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'),
|
||||
|
||||
26
lib/widgets/sheets/download_client/button.dart
Normal file
26
lib/widgets/sheets/download_client/button.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
47
lib/widgets/sheets/download_client/sheet.dart
Normal file
47
lib/widgets/sheets/download_client/sheet.dart
Normal 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();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user