Example #1
0
        public static string GetId3TagComment(Stream stream)
        {
            var simpleFileAbstraction = new SimpleFileAbstraction(stream);
            var tagLibFile            = TagLib.File.Create(simpleFileAbstraction, "taglib/mp3", ReadStyle.None);

            if (tagLibFile?.Tag != null)
            {
                return(tagLibFile.Tag.Comment ?? tagLibFile.Tag.Title);
            }
            return(null);
        }
Example #2
0
        public readonly string Title;            // "Narodni muzeum je fenomen ceske historie. Strileli po nem sovetsti vojaci v roce 1968. Dnes se do nej dobyvaji turiste, i kdyz je budova v rekonstrukci. Jake to je v takove budove delat generalniho reditele? Hostem Miroslava Dittricha byl Michal Lukes."

        public Id3Tags(Stream stream)
        {
            var simpleFileAbstraction = new SimpleFileAbstraction(stream);
            var tagLibFile            = TagLib.File.Create(simpleFileAbstraction, "taglib/mp3", ReadStyle.None);

            if (tagLibFile?.Tag != null)
            {
                Album            = tagLibFile.Tag.Album;
                Comment          = tagLibFile.Tag.Comment;
                Copyright        = tagLibFile.Tag.Copyright;
                FirstComposer    = tagLibFile.Tag.FirstComposer;
                FirstPerformer   = tagLibFile.Tag.FirstPerformer;
                JoinedComposers  = tagLibFile.Tag.JoinedComposers;
                JoinedPerformers = tagLibFile.Tag.JoinedPerformers;
                Title            = tagLibFile.Tag.Title;
            }
        }
        public Mp3RecordManager(IActorRef resourceDownloader, IActorRef resourceStorer)
        {
            Receive <NewRecordMessage>(async message =>
            {
                newRecord       = message;
                path            = message.Artist + "\\" + message.Album + "\\" + message.Track + ".mp3";
                var pathHash    = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(path));
                var rowKey      = message.Album + " - " + message.Track; //BitConverter.ToString(pathHash).Replace("-", "");
                var tableClient = storageAccount.CreateCloudTableClient();
                var table       = tableClient.GetTableReference(StorageTableName);
                trackEntity     = new TrackEntity
                {
                    Album              = message.Album,
                    AlbumArtUrl        = message.AlbumImageLocation.AbsoluteUri,
                    AlbumArtDownloaded = false,
                    Artist             = message.Artist,
                    Track              = message.Track,
                    TrackDownloaded    = false,
                    TrackUrl           = message.FileLocation.AbsoluteUri,
                    PartitionKey       = message.Artist,
                    RowKey             = rowKey,
                    Timestamp          = DateTime.UtcNow
                };
                var partitionFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal,
                                                                         trackEntity.PartitionKey);
                var rowFilter   = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, trackEntity.RowKey);
                var finalFilter = TableQuery.CombineFilters(partitionFilter, TableOperators.And, rowFilter);
                var query       = new TableQuery <TrackEntity>().Where(finalFilter);


                var entities = table.ExecuteQuery(query, new TableRequestOptions {
                    RetryPolicy = new NoRetry()
                });
                if (!entities.Any())
                {
                    var insertOperation = TableOperation.Insert(trackEntity);
                    table.Execute(insertOperation);

                    if (message.AlbumImageLocation != null)
                    {
                        var albumArtDownloadedMessage =
                            await
                            resourceDownloader.Ask <AlbumArtDownloaded>(
                                new DownloadAlbumArt(message.AlbumImageLocation));
                        trackEntity.AlbumImage = albumArtDownloadedMessage.Resource;
                    }
                    var mp3Downloaded =
                        await resourceDownloader.Ask <Mp3Downloaded>(new DownloadMp3(message.FileLocation));

                    Log.Information("Received downloaded MP3. Length: {length}, Location: {resourceUri}", mp3Downloaded.Resource.Length,
                                    mp3Downloaded.ResourceUri);


                    var memoryStream = new MemoryStream();
                    memoryStream.Write(mp3Downloaded.Resource, 0, mp3Downloaded.Resource.Length);

                    var simpleFile            = new SimpleFile(path, memoryStream);
                    var simpleFileAbstraction = new SimpleFileAbstraction(simpleFile);
                    var file = File.Create(simpleFileAbstraction);

                    file.Tag.Composers    = new[] { newRecord.Artist };
                    file.Tag.AlbumArtists = new[] { newRecord.Artist };
                    file.Tag.Title        = newRecord.Track;
                    file.Tag.Album        = newRecord.Album;

                    file.Tag.Pictures = new IPicture[]
                    {
                        new Picture(trackEntity.AlbumImage)
                    };

                    file.Save();
                    var savedFile = ReadToEnd(simpleFile.Stream);
                    resourceStorer.Tell(new StoreBlobRequest(path, savedFile));

                    Log.Information("Creating record: {artist}", message.Artist);
                }
            });

            Receive <Mp3Downloaded>(message =>
            {
                Log.Information("receieved downloaded MP3. Length: {length}, Resource URI: {resourceUri}",
                                message.Resource.Length,
                                message.ResourceUri);



                var memoryStream = new MemoryStream();
                memoryStream.Write(message.Resource, 0, message.Resource.Length);

                var simpleFile            = new SimpleFile(path, memoryStream);
                var simpleFileAbstraction = new SimpleFileAbstraction(simpleFile);
                var file = File.Create(simpleFileAbstraction);

                file.Tag.Composers    = new[] { newRecord.Artist };
                file.Tag.AlbumArtists = new[] { newRecord.Artist };
                file.Tag.Title        = newRecord.Track;
                file.Tag.Album        = newRecord.Album;

                file.Tag.Pictures = new IPicture[]
                {
                    new Picture(trackEntity.AlbumImage)
                };

                file.Save();
                var savedFile = ReadToEnd(simpleFile.Stream);
                resourceStorer.Tell(new StoreBlobRequest(path, savedFile));
            });

            Receive <AlbumArtDownloaded>(message =>
            {
                // this is the Album Art Image file.
                if (newRecord.AlbumImageLocation != null &&
                    message.ResourceUri.AbsoluteUri == newRecord.AlbumImageLocation.AbsoluteUri)
                {
                    var path = newRecord.Artist + "\\" + newRecord.Album + ".jpg";
                    resourceStorer.Tell(new StoreBlobRequest(path, message.Resource));
                }
            });
        }