Example #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);
        }
Example #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);
        }