feat: add series delete feature

This commit is contained in:
Simon Ding
2024-07-13 17:50:19 +08:00
parent 85f8750908
commit 670fc16abe
6 changed files with 68 additions and 13 deletions

View File

@@ -7,6 +7,7 @@ import (
"os"
"polaris/ent"
"polaris/ent/downloadclients"
"polaris/ent/episode"
"polaris/ent/history"
"polaris/ent/indexers"
"polaris/ent/series"
@@ -125,6 +126,15 @@ func (c *Client) GetSeriesDetails(id int) *SeriesDetails {
}
}
func (c *Client) DeleteSeries(id int) error {
_, err := c.ent.Series.Delete().Where(series.ID(id)).Exec(context.TODO())
if err != nil {
return err
}
_, err = c.ent.Episode.Delete().Where(episode.SeriesID(id)).Exec(context.TODO())
return err
}
func (c *Client) SaveEposideDetail(d *ent.Episode) (int, error) {
ep, err := c.ent.Episode.Create().
SetAirDate(d.AirDate).

View File

@@ -62,6 +62,7 @@ func (s *Server) Serve() error {
tv.POST("/watchlist", HttpHandler(s.AddWatchlist))
tv.GET("/watchlist", HttpHandler(s.GetWatchlist))
tv.GET("/series/:id", HttpHandler(s.GetTvDetails))
tv.DELETE("/series/:id", HttpHandler(s.DeleteFromWatchlist))
tv.GET("/resolutions", HttpHandler(s.GetAvailableResolutions))
}
indexer := api.Group("/indexer")

View File

@@ -99,4 +99,16 @@ func (s *Server) GetAvailableResolutions(c *gin.Context) (interface{}, error) {
db.R1080p,
db.R4k,
}, nil
}
func (s *Server) DeleteFromWatchlist(c *gin.Context) (interface{}, error) {
ids := c.Param("id")
id, err := strconv.Atoi(ids)
if err != nil {
return nil, errors.Wrap(err, "convert")
}
if err := s.db.DeleteSeries(id); err != nil {
return nil, errors.Wrap(err, "delete db")
}
return "success", nil
}

View File

@@ -10,8 +10,10 @@ var seriesDetailsProvider = AsyncNotifierProvider.autoDispose
class SeriesDetailData
extends AutoDisposeFamilyAsyncNotifier<SeriesDetails, String> {
String? id;
@override
FutureOr<SeriesDetails> build(String arg) async {
id = arg;
final dio = await APIs.getDio();
var resp = await dio.get("${APIs.seriesDetailUrl}$arg");
var rsp = ServerResponse.fromJson(resp.data);
@@ -21,9 +23,18 @@ class SeriesDetailData
return SeriesDetails.fromJson(rsp.data);
}
Future<void> delete() async {
final dio = await APIs.getDio();
var resp = await dio.delete("${APIs.seriesDetailUrl}$id");
var rsp = ServerResponse.fromJson(resp.data);
if (rsp.code != 0) {
throw rsp.message;
}
}
Future<String> searchAndDownload(
String seriesId, int seasonNum, int episodeNum) async {
final dio = await APIs.getDio();
final dio = await APIs.getDio();
var resp = await dio.post(APIs.searchAndDownloadUrl, data: {
"id": int.parse(seriesId),
"season": seasonNum,

View File

@@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:ui/providers/APIs.dart';
import 'package:ui/providers/server_response.dart';
final welcomePageDataProvider = FutureProvider((ref) async {
final welcomePageDataProvider = FutureProvider.autoDispose((ref) async {
final dio = await APIs.getDio();
var resp = await dio.get(APIs.watchlistUrl);
var sp = ServerResponse.fromJson(resp.data);

View File

@@ -1,8 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:ui/providers/APIs.dart';
import 'package:ui/providers/series_details.dart';
import 'package:ui/utils.dart';
import 'package:ui/weclome.dart';
class TvDetailsPage extends ConsumerStatefulWidget {
static const route = "/series/:id";
@@ -112,18 +114,37 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
),
),
),
Flexible(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
Expanded(
child: Row(
children: [
Text(
"${details!.name}",
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold),
),
const Text(""),
Text(details!.overview!)
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"${details!.name}",
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold),
),
const Text(""),
Text(details!.overview!)
],
)),
Column(
children: [
IconButton(
onPressed: () {
ref
.read(seriesDetailsProvider(
seriesId)
.notifier)
.delete();
context.pop();
},
icon: const Icon(Icons.delete))
],
)
],
),
),