mirror of
https://github.com/jagandeepbrar/lunasea.git
synced 2026-08-31 04:32:32 +00:00
191 lines
5.2 KiB
Dart
191 lines
5.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lunasea/core.dart';
|
|
import 'package:lunasea/modules/nzbget.dart';
|
|
|
|
class NZBGetQueueTile extends StatefulWidget {
|
|
final int index;
|
|
final NZBGetQueueData data;
|
|
final Function refresh;
|
|
final BuildContext queueContext;
|
|
|
|
const NZBGetQueueTile({
|
|
required this.data,
|
|
required this.index,
|
|
required this.queueContext,
|
|
required this.refresh,
|
|
Key? key,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
State<StatefulWidget> createState() => _State();
|
|
}
|
|
|
|
class _State extends State<NZBGetQueueTile> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return LunaBlock(
|
|
title: widget.data.name,
|
|
body: [TextSpan(text: widget.data.subtitle)],
|
|
bottom: LunaLinearPercentIndicator(
|
|
percent: min(1.0, max(0, widget.data.percentageDone / 100)),
|
|
),
|
|
trailing: LunaReorderableListViewDragger(index: widget.index),
|
|
onTap: _handlePopup,
|
|
);
|
|
}
|
|
|
|
Future<void> _handlePopup() async {
|
|
_Helper _helper = _Helper(widget.queueContext, widget.data, widget.refresh);
|
|
List values = await NZBGetDialogs.queueSettings(
|
|
widget.queueContext, widget.data.name, widget.data.paused);
|
|
if (values[0])
|
|
switch (values[1]) {
|
|
case 'status':
|
|
widget.data.paused ? _helper._resumeJob() : _helper._pauseJob();
|
|
break;
|
|
case 'category':
|
|
_helper._category();
|
|
break;
|
|
case 'priority':
|
|
_helper._priority();
|
|
break;
|
|
case 'password':
|
|
_helper._password();
|
|
break;
|
|
case 'rename':
|
|
_helper._rename();
|
|
break;
|
|
case 'delete':
|
|
_helper._delete();
|
|
break;
|
|
default:
|
|
LunaLogger().warning('Unknown Case: ${values[1]}');
|
|
}
|
|
}
|
|
}
|
|
|
|
class _Helper {
|
|
final BuildContext context;
|
|
final NZBGetQueueData data;
|
|
final Function refresh;
|
|
|
|
_Helper(
|
|
this.context,
|
|
this.data,
|
|
this.refresh,
|
|
);
|
|
|
|
Future<void> _pauseJob() async {
|
|
await NZBGetAPI.from(LunaProfile.current).pauseSingleJob(data.id).then((_) {
|
|
showLunaSuccessSnackBar(title: 'Job Paused', message: data.name);
|
|
refresh();
|
|
}).catchError((error) {
|
|
showLunaErrorSnackBar(
|
|
title: 'Failed to Pause Job',
|
|
error: error,
|
|
);
|
|
});
|
|
}
|
|
|
|
Future<void> _resumeJob() async {
|
|
await NZBGetAPI.from(LunaProfile.current)
|
|
.resumeSingleJob(data.id)
|
|
.then((_) {
|
|
showLunaSuccessSnackBar(title: 'Job Resumed', message: data.name);
|
|
refresh();
|
|
}).catchError((error) {
|
|
showLunaErrorSnackBar(
|
|
title: 'Failed to Resume Job',
|
|
error: error,
|
|
);
|
|
});
|
|
}
|
|
|
|
Future<void> _category() async {
|
|
List<NZBGetCategoryData> categories =
|
|
await NZBGetAPI.from(LunaProfile.current).getCategories();
|
|
List values = await NZBGetDialogs.changeCategory(context, categories);
|
|
if (values[0])
|
|
await NZBGetAPI.from(LunaProfile.current)
|
|
.setJobCategory(data.id, values[1])
|
|
.then((_) {
|
|
showLunaSuccessSnackBar(
|
|
title: values[1].name == ''
|
|
? 'Category Set (No Category)'
|
|
: 'Category Set (${values[1].name})',
|
|
message: data.name,
|
|
);
|
|
refresh();
|
|
}).catchError((error) {
|
|
showLunaErrorSnackBar(
|
|
title: 'Failed to Set Category',
|
|
error: error,
|
|
);
|
|
});
|
|
}
|
|
|
|
Future<void> _priority() async {
|
|
List values = await NZBGetDialogs.changePriority(context);
|
|
if (values[0])
|
|
await NZBGetAPI.from(LunaProfile.current)
|
|
.setJobPriority(data.id, values[1])
|
|
.then((_) {
|
|
showLunaSuccessSnackBar(
|
|
title: 'Priority Set (${(values[1] as NZBGetPriority?).name})',
|
|
message: data.name);
|
|
refresh();
|
|
}).catchError((error) {
|
|
showLunaErrorSnackBar(
|
|
title: 'Failed to Set Priority',
|
|
error: error,
|
|
);
|
|
});
|
|
}
|
|
|
|
Future<void> _rename() async {
|
|
List values = await NZBGetDialogs.renameJob(context, data.name);
|
|
if (values[0])
|
|
NZBGetAPI.from(LunaProfile.current)
|
|
.renameJob(data.id, values[1])
|
|
.then((_) {
|
|
showLunaSuccessSnackBar(title: 'Job Renamed', message: values[1]);
|
|
refresh();
|
|
}).catchError((error) {
|
|
showLunaErrorSnackBar(
|
|
title: 'Failed to Rename Job',
|
|
error: error,
|
|
);
|
|
});
|
|
}
|
|
|
|
Future<void> _delete() async {
|
|
List values = await NZBGetDialogs.deleteJob(context);
|
|
if (values[0])
|
|
await NZBGetAPI.from(LunaProfile.current).deleteJob(data.id).then((_) {
|
|
showLunaSuccessSnackBar(title: 'Job Deleted', message: data.name);
|
|
refresh();
|
|
}).catchError((error) {
|
|
showLunaErrorSnackBar(
|
|
title: 'Failed to Delete Job',
|
|
error: error,
|
|
);
|
|
});
|
|
}
|
|
|
|
Future<void> _password() async {
|
|
List values = await NZBGetDialogs.setPassword(context);
|
|
if (values[0])
|
|
await NZBGetAPI.from(LunaProfile.current)
|
|
.setJobPassword(data.id, values[1])
|
|
.then((_) {
|
|
showLunaSuccessSnackBar(title: 'Job Password Set', message: data.name);
|
|
refresh();
|
|
}).catchError((error) {
|
|
showLunaErrorSnackBar(
|
|
title: 'Failed to Set Job Password',
|
|
error: error,
|
|
);
|
|
});
|
|
}
|
|
}
|