/// <summary> /// Creates/Load Movie Content Object /// </summary> /// <param name="db"></param> /// <param name="contentModel"></param> /// <param name="loadOnly"></param> /// <returns></returns> private Movie EnsureMovie(MediaManagerDataContext db, ContentModel contentModel, bool loadOnly = false) { // a remote source has been provided if (!string.IsNullOrEmpty(contentModel.RemoteSourceId)) { var mv = db.Movies.FirstOrDefault(a => a.SourceId == contentModel.RemoteSourceId); if (mv != null) { return mv; } if (!loadOnly) { var movie = new Movie() { SourceId = contentModel.RemoteSourceId, Title = contentModel.Title, SortName = contentModel.SortName }; db.Movies.InsertOnSubmit(movie); return movie; } } else { var mt = db.Movies.FirstOrDefault(a => a.Title == contentModel.Title); if (mt != null) { return mt; } if (!loadOnly) { var movieT = new Movie() { Title = contentModel.Title, SortName = contentModel.SortName }; db.Movies.InsertOnSubmit(movieT); return movieT; } } return null; }
/// <summary> /// Creates ServerMedia object (assigns content to server) for Movie /// </summary> /// <param name="db"></param> /// <param name="server"></param> /// <param name="contentModel"></param> /// <param name="movie"></param> private void AssignMovieToServer(MediaManagerDataContext db, Server server, ContentModel contentModel, Movie movie) { // load the libraries for the specific server var libraries = db.Libraries.Where(a => a.Server == server).ToList(); foreach (var file in contentModel.MediaModels) { // check and see if the files exist, if not then create a new one if (!db.ServerMedias.Any(a => a.Server == server && a.MediaId == file.MediaId)) { var mvs = new ServerMedia() { Server = server, Movie = movie, VideoId = file.VideoId, MediaId = file.MediaId, Resolution = file.Resolution, AspectRatio = file.AspectRatio, FilePath = file.FilePath, DateAdded = file.DateAdded, Size = file.Size, LastCheckin = DateTime.Now, Hash = contentModel.ModelHash, Library = libraries.FirstOrDefault(a => a.Name == contentModel.LibraryName) }; db.ServerMedias.InsertOnSubmit(mvs); } } }
/// <summary> /// Creates/Load Episode Content Object /// </summary> /// <param name="db"></param> /// <param name="contentModel"></param> /// <param name="loadShowOnly"></param> /// <param name="loadOnly"></param> /// <returns></returns> private Episode EnsureEpisode(MediaManagerDataContext db, ContentModel contentModel, bool loadShowOnly = false, bool loadOnly = false) { var show = EnsureShow(db, contentModel.ParentTitle, contentModel.ParentSortTitle, contentModel.ParentRemoteSourceId, loadShowOnly); if (show == null) return null; var ep = db.Episodes.FirstOrDefault(a => a.Show == show && a.Season == contentModel.Season && a.Episode1 == contentModel.Episode); if (ep != null && loadOnly) { return ep; } if (!loadOnly) { ep = new Episode() { Show = show, Season = contentModel.Season, Episode1 = contentModel.Episode, Title = contentModel.Title }; db.Episodes.InsertOnSubmit(ep); return ep; } return null; }
/// <summary> /// Creates ServerMedia object (assigns content to server) for Show / Episode /// </summary> /// <param name="db"></param> /// <param name="server"></param> /// <param name="contentModel"></param> /// <param name="episode"></param> private void AssignEpisodeToServer(MediaManagerDataContext db, Server server, ContentModel contentModel, Episode episode) { var libraries = db.Libraries.Where(a => a.Server == server).ToList(); foreach (var file in contentModel.MediaModels) { var sm = db.ServerMedias.FirstOrDefault(a => a.MediaId == file.MediaId); // media file does not exist on server, create new meida object if (sm == null) { var evs = new ServerMedia() { Server = server, Episode = episode, VideoId = file.VideoId, MediaId = file.MediaId, Resolution = file.Resolution, AspectRatio = file.AspectRatio, FilePath = file.FilePath, DateAdded = file.DateAdded, Size = file.Size, LastCheckin = DateTime.Now, Hash = contentModel.ModelHash, Library = libraries.FirstOrDefault(a => a.Name == contentModel.LibraryName) }; db.ServerMedias.InsertOnSubmit(evs); } // update an existing else { sm.VideoId = file.VideoId; sm.MediaId = file.MediaId; sm.Resolution = file.Resolution; sm.AspectRatio = file.AspectRatio; sm.FilePath = file.FilePath; sm.DateAdded = file.DateAdded; sm.Size = file.Size; sm.LastCheckin = DateTime.Now; sm.Hash = contentModel.ModelHash; sm.Library = libraries.FirstOrDefault(a => a.Name == contentModel.LibraryName); } } }