feat: change single episode monitoring status

This commit is contained in:
Simon Ding
2024-08-03 10:46:52 +08:00
parent 578b6a9d78
commit 16216fcc4f
8 changed files with 81 additions and 23 deletions

View File

@@ -552,3 +552,8 @@ func (c *Client) GetMovieDummyEpisode(movieId int) (*ent.Episode, error) {
func (c *Client) GetDownloadClient(id int) (*ent.DownloadClients, error) { func (c *Client) GetDownloadClient(id int) (*ent.DownloadClients, error) {
return c.ent.DownloadClients.Query().Where(downloadclients.ID(id)).First(context.Background()) return c.ent.DownloadClients.Query().Where(downloadclients.ID(id)).First(context.Background())
} }
func (c *Client) SetEpisodeMonitoring(id int, b bool) error {
return c.ent.Episode.Update().Where(episode.ID(id)).SetMonitored(b).Exec(context.Background())
}

View File

@@ -67,6 +67,7 @@ func (s *Server) Serve() error {
setting.GET("/about", HttpHandler(s.About)) setting.GET("/about", HttpHandler(s.About))
setting.POST("/parse/tv", HttpHandler(s.ParseTv)) setting.POST("/parse/tv", HttpHandler(s.ParseTv))
setting.POST("/parse/movie", HttpHandler(s.ParseMovie)) setting.POST("/parse/movie", HttpHandler(s.ParseMovie))
setting.POST("/monitoring", HttpHandler(s.ChangeEpisodeMonitoring))
} }
activity := api.Group("/activity") activity := api.Group("/activity")
{ {

View File

@@ -193,3 +193,17 @@ func (s *Server) DeleteDownloadCLient(c *gin.Context) (interface{}, error) {
s.db.DeleteDownloadCLient(id) s.db.DeleteDownloadCLient(id)
return "success", nil return "success", nil
} }
type episodeMonitoringIn struct {
EpisodeID int `json:"episode_id"`
Monitor bool `json:"monitor"`
}
func (s *Server) ChangeEpisodeMonitoring(c *gin.Context) (interface{}, error) {
var in episodeMonitoringIn
if err := c.ShouldBindJSON(&in); err != nil {
return nil, errors.Wrap(err, "bind")
}
s.db.SetEpisodeMonitoring(in.EpisodeID, in.Monitor)
return "success", nil
}

View File

@@ -35,7 +35,8 @@ CustomTransitionPage buildPageWithDefaultTransition<T>({
reverseTransitionDuration: Duration.zero, reverseTransitionDuration: Duration.zero,
key: state.pageKey, key: state.pageKey,
child: child, child: child,
transitionsBuilder: (context, animation, secondaryAnimation, child) => child, transitionsBuilder: (context, animation, secondaryAnimation, child) =>
child,
); );
} }
@@ -123,14 +124,22 @@ class _MyAppState extends ConsumerState<MyApp> {
child: MaterialApp.router( child: MaterialApp.router(
title: 'Polaris 影视追踪下载', title: 'Polaris 影视追踪下载',
theme: ThemeData( theme: ThemeData(
fontFamily: "NotoSansSC", fontFamily: "NotoSansSC",
colorScheme: ColorScheme.fromSeed( colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blueAccent, seedColor: Colors.blueAccent,
brightness: Brightness.dark, brightness: Brightness.dark,
surface: Colors.black54), surface: Colors.black54),
useMaterial3: true, useMaterial3: true,
//scaffoldBackgroundColor: Color.fromARGB(255, 26, 24, 24) //scaffoldBackgroundColor: Color.fromARGB(255, 26, 24, 24)
), tooltipTheme: TooltipThemeData(
textStyle: const TextStyle(
color: Colors.grey,
),
decoration: BoxDecoration(
color: Colors.black54,
borderRadius: BorderRadius.circular(20),
),
)),
routerConfig: router, routerConfig: router,
), ),
); );

View File

@@ -33,6 +33,7 @@ class APIs {
static final logsBaseUrl = "$_baseUrl/api/v1/logs/"; static final logsBaseUrl = "$_baseUrl/api/v1/logs/";
static final logFilesUrl = "$_baseUrl/api/v1/setting/logfiles"; static final logFilesUrl = "$_baseUrl/api/v1/setting/logfiles";
static final aboutUrl = "$_baseUrl/api/v1/setting/about"; static final aboutUrl = "$_baseUrl/api/v1/setting/about";
static final changeMonitoringUrl = "$_baseUrl/api/v1/setting/monitoring";
static final notifierAllUrl = "$_baseUrl/api/v1/notifier/all"; static final notifierAllUrl = "$_baseUrl/api/v1/notifier/all";
static final notifierDeleteUrl = "$_baseUrl/api/v1/notifier/id/"; static final notifierDeleteUrl = "$_baseUrl/api/v1/notifier/id/";

View File

@@ -48,6 +48,19 @@ class SeriesDetailData
var name = (sp.data as Map<String, dynamic>)["name"]; var name = (sp.data as Map<String, dynamic>)["name"];
return name; return name;
} }
Future<void> changeMonitoringStatus(int episodeId, bool b) async {
final dio = APIs.getDio();
var resp = await dio.post(APIs.changeMonitoringUrl, data: {
"episode_id": episodeId,
"monitor": b,
});
var sp = ServerResponse.fromJson(resp.data);
if (sp.code != 0) {
throw sp.message;
}
ref.invalidateSelf();
}
} }
class SeriesDetails { class SeriesDetails {

View File

@@ -57,15 +57,33 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
child: Icon(Icons.download_done), child: Icon(Icons.download_done),
) )
: (ep.monitored == true : (ep.monitored == true
? const Tooltip( ? Tooltip(
message: "监控中", message: "监控中",
child: Icon(Icons.alarm), child: IconButton(
onPressed: () {
ref
.read(mediaDetailsProvider(
widget.seriesId)
.notifier)
.changeMonitoringStatus(
ep.id!, false);
},
icon: const Icon(Icons.alarm)),
) )
: const Opacity( : Opacity(
opacity: 0.7, opacity: 0.7,
child: Tooltip( child: Tooltip(
message: "未监控", message: "未监控",
child: Icon(Icons.alarm_off), child: IconButton(
onPressed: () {
ref
.read(mediaDetailsProvider(
widget.seriesId)
.notifier)
.changeMonitoringStatus(
ep.id!, true);
},
icon: const Icon(Icons.alarm_off)),
), ),
)))), )))),
), ),
@@ -88,10 +106,10 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
const SizedBox( const SizedBox(
width: 10, width: 10,
), ),
IconButton( Tooltip(message: "查看可用资源",child: IconButton(
onPressed: () => showAvailableTorrents(widget.seriesId, onPressed: () => showAvailableTorrents(widget.seriesId,
ep.seasonNumber ?? 0, ep.episodeNumber ?? 0), ep.seasonNumber ?? 0, ep.episodeNumber ?? 0),
icon: const Icon(Icons.manage_search)) icon: const Icon(Icons.manage_search)),)
], ],
)) ))
]); ]);
@@ -136,10 +154,10 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
const SizedBox( const SizedBox(
width: 10, width: 10,
), ),
IconButton( Tooltip(message: "查看可用资源",child: IconButton(
onPressed: () => onPressed: () =>
showAvailableTorrents(widget.seriesId, k, 0), showAvailableTorrents(widget.seriesId, k, 0),
icon: const Icon(Icons.manage_search)) icon: const Icon(Icons.manage_search)),)
], ],
)) ))
], rows: m[k]!), ], rows: m[k]!),

View File

@@ -68,13 +68,10 @@ class _DetailCardState extends ConsumerState<DetailCard> {
const SizedBox( const SizedBox(
width: 30, width: 30,
), ),
Text( Expanded(child: Text(
"${widget.details.mediaType == "tv" ? widget.details.storage!.tvPath : widget.details.storage!.moviePath}" "${widget.details.mediaType == "tv" ? widget.details.storage!.tvPath : widget.details.storage!.moviePath}"
"${widget.details.targetDir}"), "${widget.details.targetDir}"),)
const SizedBox( ],
width: 30,
),
],
), ),
const Divider(thickness: 1, height: 1), const Divider(thickness: 1, height: 1),
Text( Text(