public IEnumerable <UploadSync> GetSyncUpload(Guid userId) { // Get latest not synced upload by the user var mediaUploadIds = (from mu in _mediaDataContext.Get <MediaUpload>() where mu.UserId == userId && mu.IsSynced == false select mu.Id).ToList(); if (mediaUploadIds == null || !mediaUploadIds.Any()) { return(null); } var result = new List <UploadSync>(); foreach (var mediaUploadId in mediaUploadIds) { // Walk through the files and IEnumerable <MediaFile> mediaFiles = (from m in _mediaDataContext.Get <MediaFile>() where m.MediaUploadId == mediaUploadId && m.IsArchived == false select m).ToList(); var upload = new UploadSync(); upload.Id = mediaUploadId; foreach (var mediaFile in mediaFiles) { // Retrieve media metadata. var metadata = MediaMetadataExtension.MetadataFromJson(mediaFile.Format, mediaFile.MediaInfoJson); upload.Merge(mediaFile.Id, metadata); } result.Add(upload); } return(result); }
/// <summary> /// Sync uploaded media files. /// </summary> /// <param name="userId"></param> /// <returns></returns> public bool SyncUploadMedia(Guid userId, UploadSync uploadInfo) { // Get latest not synced upload by the user var mediaUploadIds = (from mu in _mediaDataContext.Get <MediaUpload>() where mu.UserId == userId && mu.IsSynced == false select mu.Id).ToList(); if (mediaUploadIds == null || !mediaUploadIds.Any()) { return(false); } foreach (var mediaUploadId in mediaUploadIds) { // Walk through the files and IEnumerable <MediaFile> mediaFiles = (from m in _mediaDataContext.Get <MediaFile>() where m.MediaUploadId == mediaUploadId select m).ToList(); foreach (var mediaFile in mediaFiles) { // Copy media file. var metadata = MediaMetadataExtension.MetadataFromJson(mediaFile.Format, mediaFile.MediaInfoJson); if (metadata != null) { int index = 1; string mediaFilePath = $"{userId}{DirDelimiter}{metadata.Artist}{DirDelimiter}{metadata.Album}{DirDelimiter}{metadata.Song}.{mediaFile.Format}"; while (_mediaStorage.Exists(mediaFilePath)) { mediaFilePath = $"{userId}{DirDelimiter}{metadata.Artist}{DirDelimiter}{metadata.Album}{DirDelimiter}{metadata.Song}-{index}.{mediaFile.Format}"; index++; } // Copy media file from temporary directory to the media storage specific directory. //CopyFileStream(_localStorage, mediaFile.TempUrl, _mediaStorage, mediaFilePath, MediaFormatExtension.GetMimeType(mediaFile.Format)); var encoderFilePath = $"{mediaFilePath}.enc.json"; SyncMediaFileStream(mediaFile, mediaFilePath, encoderFilePath); mediaFile.Url = mediaFilePath; _mediaDataContext.Update(mediaFile); CreateMediaWithRelationships(metadata, mediaFile.Id, userId, $"{userId}{DirDelimiter}{metadata.Artist}{DirDelimiter}{metadata.Album}{DirDelimiter}", true); } } // Mark media upload as synced. // var mediaUpload = _mediaDataContext.Get<MediaUpload>().Where(x => x.Id == mediaUploadId).FirstOrDefault(); // mediaUpload.IsSynced = true; // _mediaDataContext.Update(mediaUpload); _mediaDataContext.Update <MediaUpload>(x => x.Id == mediaUploadId, x => x.IsSynced = true); _mediaDataContext.SaveChanges(); } return(true); }
public static void Merge(this UploadSync upload, Guid mediaId, IMediaMetadata metadata) { // Artist var artist = upload.Artists.Where(x => x.Name == metadata.Artist).FirstOrDefault(); if (artist == null) { artist = new UploadArtist { Name = metadata.Artist, ArtistImageId = null }; upload.Artists.Add(artist); } // Album var album = artist.Albums.Where(x => x.Name == metadata.Album).FirstOrDefault(); if (album == null) { album = new UploadAlbum { Name = metadata.Album, Year = metadata.Year, AlbumImageId = null }; artist.Albums.Add(album); } // Song album.Songs.Add(new UploadSong { MediaId = mediaId, Genre = metadata.Genre, Name = metadata.Song, Track = metadata.Track }); upload.NumSongs++; }
public ActionResult CompleteUpload([FromBody] UploadSync request) { return(Json(new { Status = _uploadService.SyncUploadMedia(UserId, request) })); }