Esempio n. 1
0
        public async Task <UploadResult> UploadAsset(AlbumCoverData artworkData)
        {
            Debug.WriteLine($"Get key for asset string: {artworkData}...", "DiscordBee");
            if (!artworkData.HasCover)
            {
                return(null);
            }

            Debug.WriteLine($" --> Uploading asset {artworkData} ...", "DiscordBee");
            if (_uploadInProgress.ContainsKey(artworkData.Hash))
            {
                Debug.WriteLine($"Skipping upload for asset {artworkData} because its already being uploaded", "DiscordBee");
                return(null);
            }
            _uploadInProgress.TryAdd(artworkData.Hash, "");

            try
            {
                var result = await _assetUploader.UploadAsset(artworkData);

                Debug.WriteLine($" <-- Uploading asset {artworkData} ... finished", "DiscordBee");
                return(result);
            }
            catch (Exception e)
            {
                Debug.WriteLine($" <-- Uploading asset {artworkData} ... FAILED with {e.Message}", "DiscordBee");
                return(null);
            }
            finally
            {
                _uploadInProgress.TryRemove(artworkData.Hash, out _);
            }
        }
Esempio n. 2
0
 public override Task <UploadResult> UploadAsset(AlbumCoverData assetData)
 {
     // As this uploader changes the Hash of the image for all following uploaders, we need to restore the original hash on completion
     // because otherwise the caller would receive an upload result for a seemingly different image
     return(base.UploadAsset(GetNormalizeAlbumData(assetData)).ContinueWith(
                t => new UploadResult {
         Hash = assetData.Hash, Link = t.Result.Link
     },
                TaskContinuationOptions.OnlyOnRanToCompletion
                ));
 }
Esempio n. 3
0
        public async Task <UploadResult> UploadAsset(AlbumCoverData assetData)
        {
            if (_album == null)
            {
                return(new UploadResult {
                    Hash = assetData.Hash, Link = null
                });
            }
            var uploaded = await _client.UploadImage(assetData.Hash, assetData.ImageB64, _album.DeleteHash);

            return(new UploadResult {
                Hash = assetData.Hash, Link = uploaded.Link
            });
        }
Esempio n. 4
0
        private AlbumCoverData GetNormalizeAlbumData(AlbumCoverData assetData)
        {
            Image  input     = Base64ToImage(assetData.ImageB64);
            string imageData = ImageToBase64(ResizeImage(input, 1024, 1024), ImageFormat.Png);

            if (string.IsNullOrEmpty(imageData))
            {
                imageData = ImageToBase64(input, ImageFormat.Png);
            }

            input.Dispose();

            return(new AlbumCoverData(assetData.AlbumName, assetData.ArtistName, imageData));
        }
Esempio n. 5
0
 public virtual Task <UploadResult> UploadAsset(AlbumCoverData assetData)
 {
     if (_innerUploader?.IsHealthy() == true)
     {
         return(_innerUploader?.UploadAsset(assetData) ?? Task.FromResult <UploadResult>(new UploadResult {
             Hash = assetData.Hash, Link = null
         }));
     }
     else
     {
         return(Task.FromResult(new UploadResult {
             Hash = assetData.Hash, Link = null
         }));
     }
 }
Esempio n. 6
0
        public bool IsAssetCached(AlbumCoverData artworkData)
        {
            if (!artworkData.HasCover)
            {
                Debug.WriteLine("Artwork is empty -> using default", "DiscordBee");
                return(false);
            }

            if (_assetUploader.IsAssetCached(artworkData))
            {
                Debug.WriteLine($"Key for asset {artworkData} returned from cache", "DiscordBee");
                return(true);
            }

            return(false);
        }
Esempio n. 7
0
        public override Task <UploadResult> UploadAsset(AlbumCoverData assetData)
        {
            if (_cache.ContainsKey(assetData.Hash))
            {
                Debug.WriteLine($"Returning link from cache for {assetData}");
                _cache.TryGetValue(assetData.Hash, out string ret);
                return(Task.FromResult(new UploadResult {
                    Hash = assetData.Hash, Link = ret
                }));
            }

            Debug.WriteLine($"Not found in cache -> uploading {assetData}");
            return(base.UploadAsset(assetData).ContinueWith(res =>
            {
                if (res.Result.Success)
                {
                    _cache.TryAdd(assetData.Hash, res.Result.Link);
                }
                return res.Result;
            }, TaskContinuationOptions.OnlyOnRanToCompletion));
        }
Esempio n. 8
0
        public IEnumerable <AlbumCoverData> GetAlbumCoverData()
        {
            _log.Debug("Retrieving album cover data...");

            SqlCommand command = _dbObj.GetNewCommand("Library.GetAlbumCoverData", CommandType.StoredProcedure, false);

            _dbObj.AddErrorHandlingParamsToSqlCommand(command);

            SqlDataReader reader = command.ExecuteReader();

            try
            {
                int ordId             = reader.GetOrdinal("Id");
                int ordDirectory      = reader.GetOrdinal("Directory");
                int ordWmCollectionId = reader.GetOrdinal("WmCollectionId");
                int ordTitle          = reader.GetOrdinal("Title");

                while (reader.Read())
                {
                    AlbumCoverData albumCoverRecord = new AlbumCoverData()
                    {
                        Id             = reader[ordId].ToString(),
                        Directory      = reader.GetString(ordDirectory),
                        WmCollectionId = reader[ordWmCollectionId].ToString(),
                        Title          = reader[ordTitle].ToString()
                    };

                    yield return(albumCoverRecord);
                }
            }
            finally
            {
                reader.Close();

                //Since it's only a select, we don't care about committing the transaction even if we
                _dbObj.FreeCommand(command);
            }
        }
Esempio n. 9
0
 public virtual bool IsAssetCached(AlbumCoverData assetData)
 {
     return(_innerUploader?.IsAssetCached(assetData) == true);
 }
Esempio n. 10
0
 public virtual Task <bool> DeleteAsset(AlbumCoverData assetData)
 {
     return((_innerUploader?.DeleteAsset(assetData)) ?? Task.FromResult(false));
 }
Esempio n. 11
0
 public override bool IsAssetCached(AlbumCoverData assetData)
 {
     return(_cache.ContainsKey(assetData.Hash) || base.IsAssetCached(assetData));
 }
Esempio n. 12
0
 public override Task <bool> DeleteAsset(AlbumCoverData assetData)
 {
     _cache.TryRemove(assetData.Hash, out _);
     return(base.DeleteAsset(assetData));
 }
Esempio n. 13
0
 public Task <bool> DeleteAsset(AlbumCoverData assetData)
 {
     throw new System.NotImplementedException();
 }
Esempio n. 14
0
 public bool IsAssetCached(AlbumCoverData assetData)
 {
     return(false);
 }
Esempio n. 15
0
 public override bool IsAssetCached(AlbumCoverData assetData)
 {
     return(base.IsAssetCached(GetNormalizeAlbumData(assetData)));
 }