示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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) }));
 }