public IActionResult Upload(UploadBindingModel model) { if (!this.IsValidModel(model)) { return(this.BuildErrorView()); } var youtubeId = ""; if (model.YouTubeLink.Contains("youtube.com")) { youtubeId = model.YouTubeLink.Split("=").Last(); } else if (model.YouTubeLink.Contains("youtu.be")) { youtubeId = model.YouTubeLink.Split("/").Last(); } else { this.BuildErrorView("Invalid Youtube link!"); return(this.View()); } var tube = new Tube() { Title = model.Title, Author = model.Author, YouTubeId = youtubeId, Description = model.Description, UploaderId = this.DbUser.Id }; using (this.Context) { this.Context.Tubes.Add(tube); this.Context.SaveChanges(); } return(this.RedirectToAction($"/tubes/details?id={tube.Id}")); }
public async Task <IActionResult> Upload([FromForm] UploadBindingModel model) { if (model.File == null || model.File.Length == 0) { return(BadRequest("Please upload a file.")); } Stream stream = new MemoryStream(); try { using var reader = new StreamReader(model.File.OpenReadStream()); await model.File.CopyToAsync(stream); } catch (Exception ex) { return(BadRequest(ex.Message)); } var text = _docToTextService.ReadAllTextFromDocx(stream); var poDocTextList = text.Split(new char[] { '\n', '\r', '\u2028' }, StringSplitOptions.RemoveEmptyEntries).ToList(); var curatedMusiclist = new List <CuratedMusic>(); bool hasMore = true; var index = 0; var dicList = new List <Dictionary <string, string> >(); Dictionary <string, string> dic; try { do { index = poDocTextList.FindIndex(index, x => x.Contains("Curator")); if (index <= 0) { break; } var nextCurator = poDocTextList.FindIndex(index + 1, x => x.Contains("Curator")); if (nextCurator <= 0) { nextCurator = poDocTextList.Count; hasMore = false; } dic = new Dictionary <string, string>(); var title = poDocTextList[index - 1]; if (!string.IsNullOrEmpty(title)) { dic.Add("Title", title); } do { var line = poDocTextList[index]; var fields = Regex.Matches(line, @"[a-zA-Z]*[ ]?(:)(?!\/)").Select(x => x.Value).ToArray(); if (fields.Count() == 0) { index++; continue; } var lineArray = line.Split(fields, StringSplitOptions.RemoveEmptyEntries); if (lineArray.Length != fields.Length) { lineArray = lineArray.Where(x => !x.Contains("Spotify Playlist", StringComparison.OrdinalIgnoreCase)).ToArray(); } for (var i = 0; i < fields.Length; i++) { string key = fields[i].Contains("Page", StringComparison.OrdinalIgnoreCase) ? "SpotifyPlaylistPage" : fields[i].Replace(":", "").Trim(); string value = lineArray[i].Trim(); if (!dic.Keys.Any(x => x == key)) { dic.Add(key, value); } } index++; } while (nextCurator > index); dicList.Add(dic); } while (hasMore); curatedMusiclist = JsonConvert.DeserializeObject <List <CuratedMusic> >(JsonConvert.SerializeObject(dicList)); if (curatedMusiclist.Any()) { await _dbContext.AddRangeAsync(curatedMusiclist); await _dbContext.SaveChangesAsync(); } } catch (Exception ex) { throw ex; } return(Ok()); }