private IQueryable <VolyDatabase.MediaItem> Filter(MediaManagerQuery q) { return(db.Media.Where(x => q.ID != null ? x.MediaId == q.ID : true && q.LibraryName != null ? x.LibraryName == q.LibraryName : true && q.SeriesName != null ? EF.Functions.Like(x.SeriesName, $"{q.SeriesName}%") : true && q.EpisodeName != null ? EF.Functions.Like(x.Name, $"{q.EpisodeName}%") : true && q.GeneralQuery != null ? EF.Functions.Like(x.SeriesName, $"%{q.GeneralQuery}%") || EF.Functions.Like(x.Name, $"%{q.GeneralQuery}%") : true)); }
public IActionResult Manager(string query, int limit, int page, string orderBy, int ascending, int byColumn) { var orderProps = new List <string>(); if (string.IsNullOrWhiteSpace(orderBy) || orderBy == "null") { orderProps.Add("MediaId"); } else if (orderBy == "seasonNumber") { orderProps.Add("seasonNumber"); orderProps.Add("episodeNumber"); } else { orderProps.Add(orderBy); } List <VolyDatabase.MediaItem> result; int totalCount = 0; if (!string.IsNullOrWhiteSpace(query)) { var q = new MediaManagerQuery(query); totalCount = Filter(q).Count(); result = Filter(q) .OrderBy(orderProps, ascending == 0) .Skip(limit * (page - 1)).Take(limit) .AsNoTracking().ToList(); } else { totalCount = db.Media.Count(); result = db.Media .OrderBy(orderProps, ascending == 0) .Skip(limit * (page - 1)).Take(limit) .AsNoTracking().ToList(); } result = result.TakeLast(limit).ToList(); return(new JsonResult(new Dictionary <string, object> { { "data", result }, { "count", totalCount } })); }
public void TestMediaManagerQuery() { var query = new MediaManagerQuery("library:asdf"); Assert.AreEqual("asdf", query.LibraryName); query = new MediaManagerQuery("series:qwerty"); Assert.AreEqual("qwerty", query.SeriesName); query = new MediaManagerQuery("episode:uiop"); Assert.AreEqual("uiop", query.EpisodeName); query = new MediaManagerQuery("library:asdf series:qwerty episode:uiop"); Assert.AreEqual("asdf", query.LibraryName); Assert.AreEqual("qwerty", query.SeriesName); Assert.AreEqual("uiop", query.EpisodeName); query = new MediaManagerQuery("library:as\\ df series:qwerty episode:uiop Hello!"); Assert.AreEqual("as df", query.LibraryName); Assert.AreEqual("qwerty", query.SeriesName); Assert.AreEqual("uiop", query.EpisodeName); Assert.AreEqual("Hello!", query.GeneralQuery); query = new MediaManagerQuery("library:asdf Hello! series:qwerty"); Assert.AreEqual("asdf", query.LibraryName); Assert.AreEqual("qwerty", query.SeriesName); Assert.AreEqual("Hello!", query.GeneralQuery); query = new MediaManagerQuery("library:asdf Hello! series:qwerty World"); Assert.AreEqual("asdf", query.LibraryName); Assert.AreEqual("qwerty", query.SeriesName); Assert.AreEqual("Hello! World", query.GeneralQuery); query = new MediaManagerQuery("library:asdf library:qwerty"); Assert.AreEqual("qwerty", query.LibraryName); }