public Task <bool> SaveVideoFileAsync(TvItem tvItem, IFormFile file) { string filename = tvItem.ID + "_" + Guid.NewGuid() + Path.GetExtension(file.FileName); TvItemFile itemFile = new TvItemFile() { FileName = filename, Length = file.Length, TvItemId = tvItem.ID }; using (var fileStream = new FileStream(itemFile.AbsolutePath, FileMode.Create)) { file.CopyTo(fileStream); } if (tvItem.Duration == 0) { throw new Exception("Video duration is 0s."); } Context.Add(itemFile); Context.SaveChanges(); return(Task.FromResult(true)); }
public McFileInfo(TvItemFile itemFile, int dur) { filename = itemFile.FileName; length = itemFile.Length; mainContentID = itemFile.TvItemId; duration = dur; fullPath = itemFile.FullUrl(true); thumb300Path = fullPath; }
public Task <bool> SaveImageFilesAsync(TvItem item, List <IFormFile> modelFiles) { foreach (IFormFile formFile in modelFiles) { Image <Rgba32> image = null; Stream inputStream = formFile.OpenReadStream(); image = Image.Load(inputStream); double height = image.Height; double width = image.Width; double k1 = width / Constants.MAX_IMAGE_WIDTH; double k2 = height / Constants.MAX_IMAGE_HEIGHT; if (k1 > k2 && k1 > 1) { image.Mutate(x => x.Resize(Constants.MAX_IMAGE_WIDTH, (int)(height / k1))); } if (k1 < k2 && k2 > 1) { image.Mutate(x => x.Resize((int)(width / k2), Constants.MAX_IMAGE_HEIGHT)); } string extension = Path.GetExtension(formFile.FileName) ?? ""; string filename = item.ID + "_" + Guid.NewGuid() + extension; TvItemFile itemFile = new TvItemFile() { FileName = filename, Length = formFile.Length, TvItemId = item.ID }; using (var fileStream = new FileStream(itemFile.AbsolutePath, FileMode.Create)) { if (extension.ToLower().EndsWith("jpg") || extension.ToLower().EndsWith("jpeg")) { image.SaveAsJpeg(fileStream); } else if (extension.ToLower().EndsWith("png")) { image.SaveAsPng(fileStream); } else { throw new Exception($"Unsupported image file extension [{extension}]."); } itemFile.Length = fileStream.Length; Context.Add(itemFile); } } Context.SaveChanges(); return(Task.FromResult(true)); }
public Task <TvItemFile> FetchTvItemFileAsync(int fileId) { TvItemFile itemFile = Context.TvItemFile.FirstOrDefault(x => x.ID == fileId); if (itemFile == null) { throw new Exception($"Item not found with fileId {fileId}."); } return(Task.FromResult(itemFile)); }
public async Task <IActionResult> DeleteFile(int id) { TvItemFile itemFile = await _tvItemService.FetchTvItemFileAsync(id); TvItem item = await _tvItemService.FetchTvItemAsync(itemFile.TvItemId); await _tvItemService.DeleteTvItemFileAsync(id); await _eventService.AddWebServerLogAsync( User.Identity.Name, WebServerLogType.ItemDeleteSingleFile, $"User deleted file[{itemFile.FileName}] for item [{item.GetDetailHyperlink(false)}] with id [{item.ID}].", item.ID); return(RedirectToAction(nameof(Edit), new { id = item.ID })); }
public static string GetFileSize(TvItemFile item) { long size = item.Length; string[] sizes = { "B", "KB", "MB", "GB", "TB" }; int order = 0; while (size >= 1024 && order < sizes.Length - 1) { order++; size = size / 1024; } // Adjust the format string to your preferences. For example "{0:0.#}{1}" would // show a single decimal place, and no space. return(String.Format("{0:0.##} {1}", size, sizes[order])); }
public Task DeleteTvItemFileAsync(int fileId) { TvItemFile tvItemFile = Context.TvItemFile.SingleOrDefault(m => m.ID == fileId); if (tvItemFile == null) { throw new Exception($"Item not found with id {fileId}."); } Console.WriteLine($"deleting file: {tvItemFile.FileName}"); _fileService.DeletePhysicalFileAsync(tvItemFile.AbsolutePath); tvItemFile.Deleted = true; Context.TvItemFile.Update(tvItemFile); Context.SaveChanges(); return(Task.CompletedTask); }
public Task <List <TvItemFile> > FindZombieFilesAsync() { // file types in files directory: // 1. TvItem is not deleted: doesnt matter about its files yet // 2. TvItem is deleted and file is: // existing and deleted == true -> zombie, unsuccessful first delete // existing and deleted == false -> not yet zombie, must call tvItem delete files, only tvitem was deleted // existing and no record -> zombie // non existing and deleted == true -> OK // non existing and deleted == false -> OK, but must call delete files to change property 'deleted' DirectoryInfo d = new DirectoryInfo(Path.Combine(Constants.WEB_ROOT_PATH, Constants.FILES_DIR)); FileInfo[] files = d.GetFiles(); List <TvItemFile> tvItemFiles = Context.TvItemFile.ToList(); List <TvItemFile> zombieFiles = new List <TvItemFile>(); foreach (FileInfo file in files) { if (!file.Name.Equals(".gitignore")) { // case 1: file that was unsuccessfully deleted TvItemFile zombie = tvItemFiles.FirstOrDefault(tf => tf.FileName.Equals(file.Name) && tf.Deleted == true); if (zombie != null) { zombieFiles.Add(zombie); } else { if (!tvItemFiles.Any(tf => tf.FileName.Equals(file.Name))) { // case 2: existing and no record, delete immediately bool result = DeletePhysicalFileAsync(file.Name).Result; } } } } return(Task.FromResult(zombieFiles)); }
public Task <bool> ReplaceVideoFileAsync(TvItem tvItem, IFormFile file) { string filename = tvItem.ID + "_" + Guid.NewGuid() + Path.GetExtension(file.FileName); TvItemFile newItemFile = new TvItemFile() { FileName = filename, Length = file.Length }; using (var fileStream = new FileStream(newItemFile.AbsolutePath, FileMode.Create)) { file.CopyTo(fileStream); } if (tvItem.Duration == 0) { throw new Exception("Video duration is 0s."); } TvItemFile tvItemFile = tvItem.Files.FirstOrDefault(); if (tvItemFile != null) { bool success = DeletePhysicalFileAsync(tvItemFile.FileName).Result; // if not successful delete, then new zombie file tvItemFile.FileName = newItemFile.FileName; tvItemFile.Length = newItemFile.Length; Context.Update(tvItemFile); Context.Update(tvItem); Context.SaveChanges(); return(Task.FromResult(true)); } else { throw new Exception($"TvItem with id {tvItem.ID} does not have any files."); } }
/// <summary> /// Removing specific file. If the file does not exist, then it is still a success. /// </summary> /// <param name="filename"></param> /// <returns></returns> public Task <bool> DeletePhysicalFileAsync(string filename) { TvItemFile file = new TvItemFile() { FileName = filename }; try { if (File.Exists(file.AbsolutePath)) { File.Delete(file.AbsolutePath); Console.WriteLine($"successfully deleted file: {filename}"); } } catch (Exception e) { Console.WriteLine(e); return(Task.FromResult(false)); } return(Task.FromResult(true)); }
public Task AddFileRequestEventAsync(string sourceIp, string filename) { TvItemFile itemFile = _tvItemService.FetchTvItemFileAsync(filename).Result; if (itemFile != null) { WebClientLog wcl = new WebClientLog() { Source = sourceIp, TimeInserted = DateTime.Now, TvItemFileId = itemFile.ID, TvScreenId = KnownTvScreens.FirstOrDefault(x => x.IpAddress.Equals(sourceIp))?.ID, Type = itemFile.IsVideoFile() ? WebClientLogType.VideoRequest : WebClientLogType.ImageRequest }; Context.Add(wcl); Context.SaveChanges(); Console.WriteLine($"adding file request from ip {sourceIp} for file: " + wcl); } else { WebClientLog wcl = new WebClientLog() { Source = sourceIp, TimeInserted = DateTime.Now, Message = $"file with filename [{filename}] not found!", Type = WebClientLogType.Exception }; Context.Add(wcl); Context.SaveChanges(); Console.WriteLine("file not found on file request: " + wcl); } return(Task.CompletedTask); }
public Task <TvItemFile> FetchTvItemFileAsync(string filename) { TvItemFile itemFile = Context.TvItemFile.FirstOrDefault(x => x.FileName.Equals(filename)); return(Task.FromResult(itemFile)); }
public Task <bool> ReplaceImageFileAsync(TvItem tvItem, IFormFile formFile) { Image <Rgba32> image = null; Stream inputStream = formFile.OpenReadStream(); image = Image.Load(inputStream); double height = image.Height; double width = image.Width; double k1 = width / Constants.MAX_IMAGE_WIDTH; double k2 = height / Constants.MAX_IMAGE_HEIGHT; if (k1 > k2 && k1 > 1) { image.Mutate(x => x.Resize(Constants.MAX_IMAGE_WIDTH, (int)(height / k1))); } if (k1 < k2 && k2 > 1) { image.Mutate(x => x.Resize((int)(width / k2), Constants.MAX_IMAGE_HEIGHT)); } string extension = Path.GetExtension(formFile.FileName) ?? ""; string filename = tvItem.ID + "_" + Guid.NewGuid() + extension; TvItemFile newItemFile = new TvItemFile() { FileName = filename, Length = formFile.Length, TvItemId = tvItem.ID }; using (var fileStream = new FileStream(newItemFile.AbsolutePath, FileMode.Create)) { if (extension.ToLower().EndsWith("jpg") || extension.ToLower().EndsWith("jpeg")) { image.SaveAsJpeg(fileStream); } else if (extension.ToLower().EndsWith("png")) { image.SaveAsPng(fileStream); } else { throw new Exception($"Unsupported image file extension [{extension}]."); } newItemFile.Length = fileStream.Length; } TvItemFile tvItemFile = tvItem.Files.FirstOrDefault(); if (tvItemFile != null) { bool success = DeletePhysicalFileAsync(tvItemFile.FileName).Result; // if not successfull delete, then new zombie file tvItemFile.FileName = newItemFile.FileName; tvItemFile.Length = newItemFile.Length; Context.Update(tvItemFile); Context.Update(tvItem); Context.SaveChanges(); return(Task.FromResult(true)); } else { throw new Exception($"TvItem with id {tvItem.ID} does not have any files."); } }