public byte[] ReadImageResource(string imageGroupId, MediaImageSize imageSize, out string imageType)
        {
            imageType = string.Empty;

            Guid imageGroupGuid;

            if (!Guid.TryParse(imageGroupId, out imageGroupGuid))
            {
                return(null);
            }

            var mediaImage = (from mi in _mediaDataContext.Get <MediaImage>()
                              where mi.ImageGroup.Id == imageGroupGuid &&
                              mi.ImageSize == imageSize && mi.IsArchived == false
                              select new { Format = mi.Format, Url = mi.Url })
                             .FirstOrDefault();

            if (mediaImage == null || string.IsNullOrEmpty(mediaImage.Url))
            {
                return(null);
            }

            byte[] imageData = null;
            imageType = MediaFormatExtension.GetMimeType(mediaImage.Format);

            using (var stream = _storage.Open(mediaImage.Url))
            {
                imageData = new byte[stream.Length];
                if (stream.Read(imageData, 0, imageData.Length) != imageData.Length)
                {
                    imageData = null;
                }
            }
            return(imageData);
        }
Exemple #2
0
        private void SyncMediaFileStream(MediaFile mediaFile, string copyAsFilePath, string encoderFilePath)
        {
            var fileStates = new MediaFileStateInfos
            {
                MediaFileStateJson   = string.Empty,
                EncoderFileStateJson = string.Empty
            };

            using (var file = _localStorage.Open(mediaFile.TempUrl))
            {
                // Generate encoder state and store as json file.
                if (!string.IsNullOrEmpty(encoderFilePath))
                {
                    var encoderStateJson = MediaEncoderExtension.GenerateEncoderState(mediaFile.Format, file, true);
                    if (!string.IsNullOrEmpty(encoderStateJson))
                    {
                        using (var mem = new MemoryStream(ASCIIEncoding.UTF8.GetBytes(encoderStateJson)))
                        {
                            using (var encoderFile = _mediaStorage.StoreAndGetFileStream(encoderFilePath, mem, "text/json"))
                            {
                                fileStates.EncoderFileStateJson = encoderFile.SaveStateAsJson();
                            }
                        }
                    }
                }

                using (var mediaFileStream = _mediaStorage.StoreAndGetFileStream(copyAsFilePath, file,
                                                                                 MediaFormatExtension.GetMimeType(mediaFile.Format)))
                {
                    fileStates.MediaFileStateJson = mediaFileStream.SaveStateAsJson();
                }
            }

            // Add MediaFileStateInfo entry.
            _mediaDataContext.Add(new MediaFileStateInfo
            {
                MediaFileId   = mediaFile.Id,
                StateInfoJson = JsonConvert.SerializeObject(fileStates)
            });
        }
Exemple #3
0
        public bool UploadMedia(Stream media, string fileName, Guid userId, string mediaFormat = MediaFormatExtension.AudioMp3)
        {
            // Get latest not synced upload by the user or create new media upload entry.
            Guid mediaUploadId = (from mu in _mediaDataContext.Get <MediaUpload>()
                                  where mu.UserId == userId && mu.IsSynced == false
                                  select mu.Id).FirstOrDefault();

            // Create media upload entry.
            if (mediaUploadId == Guid.Empty)
            {
                mediaUploadId = Guid.NewGuid();
                _mediaDataContext.Add(new MediaUpload()
                {
                    Id     = mediaUploadId,
                    UserId = userId
                });

                _mediaDataContext.SaveChanges();
            }

            // Copy media file under media upload entry.
            string mediaPath = $"{mediaUploadId}{DirDelimiter}{fileName}";

            if (!_localStorage.Store(mediaPath, media, MediaFormatExtension.GetMimeType(mediaFormat)))
            {
                return(false);
            }

            // Read metadata from media file and serialize into json.
            var metadataJson = string.Empty;

            using (var mediaFile = _localStorage.Open(mediaPath))
            {
                IEnumerable <AttachedPicture> pictures;
                var metadata = mediaFile.ReadMetadata(mediaFormat, out pictures);

                // Create attached picture files.
                if (pictures != null && pictures.Any())
                {
                    metadata.AlbumImagesUrl = new Dictionary <AttachedPictureType, string>();

                    foreach (var pic in pictures)
                    {
                        string filePath = $"{mediaUploadId}{DirDelimiter}artwork{DirDelimiter}{fileName}-{pic.Type}.jpeg";
                        using (var pictureStream = new MemoryStream(pic.PictureData, false))
                        {
                            if (_localStorage.Store(filePath, pictureStream, MediaFormatExtension.GetMimeType(mediaFormat)))
                            {
                                if (pic.Type == AttachedPictureType.Artist || pic.Type == AttachedPictureType.Band)
                                {
                                    metadata.ArtistImageUrl = filePath;
                                }
                                else
                                {
                                    metadata.AlbumImagesUrl.Add(pic.Type, filePath);
                                }
                            }
                        }
                    }
                }

                if (metadata != null)
                {
                    metadataJson = Newtonsoft.Json.JsonConvert.SerializeObject(metadata);
                }
            }

            // Create entry in media table using mediaupload id.
            _mediaDataContext.Add(new MediaFile()
            {
                Id            = Guid.NewGuid(),
                MediaUploadId = mediaUploadId,
                UserId        = userId,
                Format        = mediaFormat,
                MediaInfoJson = metadataJson,
                TempUrl       = mediaPath,
                FileSize      = media.Length,
            });

            // var mediaUpload = _mediaDataContext.Get<MediaUpload>().Where(x => x.Id == mediaUploadId).FirstOrDefault();
            // mediaUpload.NumOfMedia++;
            //_mediaDataContext.Update(mediaUpload);

            _mediaDataContext.Update <MediaUpload>(x => x.Id == mediaUploadId, x => x.NumOfMedia++);
            _mediaDataContext.SaveChanges();
            return(true);
        }
Exemple #4
0
        protected void CreateMediaWithRelationships(IMediaMetadata meta, Guid mediaId, Guid userId, string imageSavePath, bool saveChanges)
        {
            Guid artistCoverMediaId = Guid.Parse("00000000-0000-0000-0000-000000000001");
            Guid albumCoverMediaId  = Guid.Parse("00000000-0000-0000-0000-000000000002");

            // Create/Update Genre.
            string genreName = meta.Genre;

            if (string.IsNullOrEmpty(genreName))
            {
                genreName = "Unknown";
            }

            var genre = _mediaDataContext.Get <Genre>().Where(x => x.Name == genreName).FirstOrDefault();

            if (genre == null)
            {
                genre = new Genre
                {
                    Id   = Guid.NewGuid(),
                    Name = genreName
                };
                _mediaDataContext.Add(genre);
            }

            // Create/Update Artist.
            string artistName = meta.Artist;

            if (string.IsNullOrEmpty(artistName))
            {
                artistName = "Unknown Artist";
            }

            var artist = _mediaDataContext.Get <Artist>().Where(x => x.Name == artistName).FirstOrDefault();

            if (artist == null)
            {
                artist = new Artist
                {
                    Id      = Guid.NewGuid(),
                    Name    = artistName,
                    GenreId = genre.Id,
                    Genre   = genre
                };
                _mediaDataContext.Add(artist);
            }

            // Create/Update Album.
            string albumName = meta.Album;

            if (string.IsNullOrEmpty(albumName))
            {
                albumName = "Unknown Album";
            }

            var album = _mediaDataContext.Get <Album>().Where(x => x.Name == albumName).FirstOrDefault();

            if (album == null)
            {
                int year = 0;
                int.TryParse(meta.Year, out year);

                album = new Album
                {
                    Id       = Guid.NewGuid(),
                    Name     = albumName,
                    ArtistId = artist.Id,
                    Year     = year,
                };

                // Album cover image.
                if (meta.AlbumImagesUrl != null && meta.AlbumImagesUrl.Any())
                {
                    string albumImageUrl            = meta.AlbumImagesUrl.FirstOrDefault().Value;
                    IEnumerable <MediaImage> images = null;
                    using (var imageStream = _localStorage.Open(albumImageUrl))
                    {
                        images = ResizeAndCopyImage(imageStream, imageSavePath, "album", MediaFormatExtension.GetMimeType(MediaFormatExtension.ImageJpeg));
                    }

                    if (images != null && images.Any())
                    {
                        var imageGroup = new MediaImageGroup
                        {
                            UserId = userId
                        };
                        _mediaDataContext.Add(imageGroup);
                        _mediaDataContext.Add(new AlbumAndMediaImage
                        {
                            AlbumId           = album.Id,
                            IsCoverImage      = true,
                            MediaImageGroupId = imageGroup.Id
                        });

                        foreach (var m in images)
                        {
                            m.ImageGroupId = imageGroup.Id;
                            _mediaDataContext.Add(m);
                        }
                    }
                }

                _mediaDataContext.Add(album);
            }

            // Create/Update Song.
            string songName = meta.Song;

            if (string.IsNullOrEmpty(songName))
            {
                albumName = "Unknown Song";
            }

            int trackNumber = 0;

            int.TryParse(meta.Track, out trackNumber);

            var song = new Song
            {
                Id          = Guid.NewGuid(),
                Name        = songName,
                AlbumId     = album.Id,
                TrackNumber = trackNumber,
                DurationSec = meta.DurationSec,
                MediaId     = mediaId
            };

            _mediaDataContext.Add(song);
            if (saveChanges)
            {
                _mediaDataContext.SaveChanges();
            }
        }
 public void Add(MediaFormatExtension mediaFormat, IFileFormatParser fileFormatParser)
 {
     fileFormatParserCollection.Add(mediaFormat, fileFormatParser);
 }