private void populateModel(DateSelectModel model) { model.Dates = getDirectories(); if (model.ItemsPerPage <= 0) { model.ItemsPerPage = 20; } if (model.PageNumber <= 0) { model.PageNumber = 1; } if (model.SelectedDate != null) { var files = getFiles(model, model.SelectedDate); if (model.PageNumber * model.ItemsPerPage > files.Count()) { model.PageNumber = 1; } model.TotalFiles = files.Count(); model.TotalPages = (model.TotalFiles / model.ItemsPerPage) + (model.TotalFiles % model.ItemsPerPage > 0 ? 1 : 0); model.Files = files .Skip((model.PageNumber - 1) * model.ItemsPerPage) .Take(Math.Min(model.ItemsPerPage, model.TotalFiles)) .ToList(); } }
private IEnumerable <FileEntry> getFiles(DateSelectModel model, string selectedDate) { List <FileEntry> results = new List <FileEntry>(1); DateTime date = DateTime.Parse(selectedDate); string partial = date.ToString("yyyy-MM-dd") + "_*"; foreach (string directory in Directory.EnumerateDirectories(_config.Value.DashCamPath, partial)) { try { foreach (string file in Directory.EnumerateFiles(directory, "*-preview.mp4")) { results.Add(parseFileEntry(file)); } } catch (Exception ex) { if (model != null) { model.ErrorMessage += $"Error Accessing Folder: {directory} ({ex.Message})\n"; } } } return(results.OrderBy(i => i.OrderValue)); }
private void deleteFiles(DateSelectModel model) { List <string> idsToDelete = model.FilesToDelete.Split(':').ToList(); idsToDelete.RemoveAll(i => string.IsNullOrEmpty(i)); var filesToDelete = model.Files .Join(idsToDelete, i => i.FileId, j => j, (i, j) => new { i.CombinedFile, i.PreviewFile, i.TimelapseFile, i.FrontFile, i.RightRepeaterFile, i.LeftRepeaterFile, i.DoneFile }); filesToDelete .ToList() .ForEach(i => { exceptionLessFileDelete(i.PreviewFile); exceptionLessFileDelete(i.CombinedFile); exceptionLessFileDelete(i.TimelapseFile); exceptionLessFileDelete(i.FrontFile); exceptionLessFileDelete(i.RightRepeaterFile); exceptionLessFileDelete(i.LeftRepeaterFile); exceptionLessFileDelete(i.DoneFile); }); filesToDelete .Select(i => i.PreviewFile.Substring(0, i.PreviewFile.LastIndexOf(Path.DirectorySeparatorChar))) .Distinct() .ToList() .ForEach(i => { if (!Directory.EnumerateFiles(i).Any()) { Directory.Delete(i); } }); model.Files.RemoveAll(i => idsToDelete.Contains(i.FileId)); model.FilesToDelete = string.Empty; }
public IActionResult Index(DateSelectModel model) { if (Request.Method == "POST" && Request.Form.ContainsKey("pageNext")) { model.PageNumber = int.Parse(Request.Form["pageNext"]); } if (Request.Method == "POST" && Request.Form.ContainsKey("pagePrevious")) { model.PageNumber = int.Parse(Request.Form["pagePrevious"]); } populateModel(model); if (Request.Method == "POST" && Request.Form.ContainsKey("cmdDelete") && !string.IsNullOrEmpty(model.FilesToDelete)) { deleteFiles(model); populateModel(model); } return(View(model)); }