mediamanager/MediaManager/Pages/EditShow.cshtml.cs

108 lines
3.1 KiB
C#

using LinqToDB;
using MediaManager.database;
using MediaManager.database.Tables;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace MediaManager.Pages;
public class EditShow : PageModel {
public User AuthorizedUser;
public void OnGet() {
using var db = new Database.DbConn();
var showId = int.Parse(RouteData.Values["id"]!.ToString()!);
var show = db.Shows.First(p => p.ShowId == showId);
AuthorizedUser = db.Users.FirstOrDefault(p => p.Username == AuthUtil.GetRemoteUser(HttpContext, db))!;
if (show.UserId != AuthorizedUser.UserId)
Response.Redirect("/");
}
public void OnPost() {
using var db = new Database.DbConn();
var showId = int.Parse(RouteData.Values["id"]!.ToString()!);
var show = db.Shows.First(p => p.ShowId == showId);
AuthorizedUser = db.Users.FirstOrDefault(p => p.Username == AuthUtil.GetRemoteUser(HttpContext, db))!;
if (show.UserId != AuthorizedUser.UserId) {
Response.Redirect("/");
return;
}
if (Request.Form["action"] == "delete") {
db.Delete(show);
Response.Redirect("/Shows");
return;
}
if (Request.Form["action"] == "autoinc") {
if (show.WatchStatus == WatchStatus.Finished) {
Response.Redirect("/Shows");
return;
}
show.LastSeen = DateTime.Now;
show.SeenEpisodes++;
if (show.SeenEpisodes > show.TotalEpisodes)
show.TotalEpisodes = show.SeenEpisodes;
show.WatchStatus = show.WatchStatus switch {
WatchStatus.Waiting => WatchStatus.FirstWatch,
WatchStatus.Unwatched => WatchStatus.FirstWatch,
_ => show.WatchStatus
};
db.Update(show);
Response.Redirect($"/Shows#show_{show.ShowId}");
return;
}
if (Request.Form["action"] == "rewatch") {
show.SeenEpisodes = 0;
show.WatchStatus = WatchStatus.Rewatch;
db.Update(show);
Response.Redirect($"/Shows#show_{show.ShowId}");
return;
}
if (Request.Form["action"] == "finish") {
show.WatchStatus = WatchStatus.Finished;
show.WatchCount++;
db.Update(show);
Response.Redirect($"/Shows#show_{show.ShowId}");
return;
}
if (Request.Form["action"] == "waiting") {
show.WatchStatus = WatchStatus.Waiting;
db.Update(show);
Response.Redirect($"/Shows#show_{show.ShowId}");
return;
}
show.Title = Request.Form["title"];
show.Year = int.Parse(Request.Form["year"]);
show.WatchCount = int.Parse(Request.Form["watchcount"]);
show.Rating = int.Parse(Request.Form["rating"]);
show.Rewatchability = int.Parse(Request.Form["rewatchability"]);
show.LastSeen = string.IsNullOrEmpty(Request.Form["lastwatch"]) ? DateTime.MinValue : DateTime.Parse(Request.Form["lastwatch"]);
show.WatchStatus = (WatchStatus)int.Parse(Request.Form["status"]);
show.SeenEpisodes = int.Parse(Request.Form["seeneps"]);
show.TotalEpisodes = int.Parse(Request.Form["totaleps"]);
show.Comment = Request.Form["comment"];
if (show.SeenEpisodes >= show.TotalEpisodes) {
show.SeenEpisodes = show.TotalEpisodes;
if (show.WatchStatus != WatchStatus.Waiting)
show.WatchStatus = WatchStatus.Finished;
}
db.Update(show);
Response.Redirect($"/Shows#show_{show.ShowId}");
}
}