Exemple #1
0
        public async Task DeleteVideo(Guid id)
        {
            var video = await _catalogDb.Videos.FirstOrDefaultAsync(v => v.Id == id);

            if (video != null)
            {
                if (video.Status != Status.Converted)
                {
                    throw new Exception("Video can be deleted only after converting finished.");
                }
                var dir = new DirectoryInfo(_fileStorageSettings.Path);

                foreach (var file in dir.EnumerateFiles(id.ToString("N") + ".*"))
                {
                    file.Delete();
                }
                var hlsDir = new DirectoryInfo(Path.Combine(_fileStorageSettings.Path, "hls", id.ToString("N")));
                if (hlsDir.Exists)
                {
                    hlsDir.Delete(true);
                }
                if (video.ImageFileName != null)
                {
                    var imgDirectoryPath = Path.Combine(_fileStorageSettings.Path, "images");
                    var imgDirectory     = new DirectoryInfo(imgDirectoryPath);
                    if (!imgDirectory.Exists)
                    {
                        imgDirectory.Create();
                    }
                    foreach (var oldFile in imgDirectory.EnumerateFiles(id.ToString("N") + ".*"))
                    {
                        oldFile.Delete();
                    }
                }
                var userVideos = await _catalogDb.UserVideoLists.Where(uvl => uvl.Video.Id == video.Id).ToListAsync();

                var userProgresses = await _catalogDb.UserVideoProgresses.Where(uvp => uvp.Video.Id == video.Id).ToListAsync();

                _catalogDb.RemoveRange(userVideos);
                _catalogDb.RemoveRange(userProgresses);
                _catalogDb.Remove(video);
                await _catalogDb.SaveChangesAsync();
            }
        }