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 }
            }));
        }
Exemple #3
0
        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);
        }