Files
icarus/Controllers/Managers/CoverArtManager.cs
T

146 lines
4.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Icarus.Constants;
using Icarus.Controllers.Utilities;
using Icarus.Database.Repositories;
using Icarus.Models;
using Icarus.Types;
namespace Icarus.Controllers.Managers
{
public class CoverArtManager : BaseManager
{
#region Fields
private string _rootCoverArtPath;
#endregion
#region Constructors
public CoverArtManager(string rootPath)
{
_rootCoverArtPath = rootPath;
Initialize();
}
#endregion
#region Methods
public void SaveCoverArtToDatabase(ref Song song, ref CoverArt coverArt,
CoverArtRepository coverArtRepository)
{
_logger.Info("Saving cover art record to the database");
coverArtRepository.SaveCoverArt(coverArt);
coverArt = coverArtRepository.GetCoverArt(CoverArtField.SongTitle,
coverArt);
song.CoverArtId = coverArt.CoverArtId;
_logger.Info("Cover art Process saving complete");
}
public void DeleteCoverArtFromDatabase(CoverArt coverArt,
CoverArtRepository coverArtRepository)
{
_logger.Info("Attempting to delete cover art from the database");
coverArtRepository.DeleteCoverArt(coverArt);
}
public void DeleteCoverArt(CoverArt coverArt)
{
var stockCoverArtPath = _rootCoverArtPath + "CoverArtPath.png";
DirectoryManager.delete_cover_art(coverArt.ImagePath, stockCoverArtPath);
}
public CoverArt SaveCoverArt(Song song)
{
try
{
// TODO: Change logic so it attempts to create the directory
// after it has been determined that the song does not have
// a cover art image
var strCount = _rootCoverArtPath.Length + song.Artist.Length +
song.AlbumTitle.Length + 2;
var imgPath = new StringBuilder(strCount);
DirectoryManager.create_directory(SongManager.ConvertSongToSng(song),
_rootCoverArtPath, imgPath);
var imagePath = imgPath.ToString().Substring(0, strCount) +
song.Title + ".png";
var coverArt = new CoverArt
{
SongTitle = song.Title,
ImagePath = imagePath
};
var cov = ConvertCoverArtToCovArt(coverArt);
var stock_path = _rootCoverArtPath + "CoverArt.png";
//var metaData = new MetadataRetriever();
// TODO: Work on the function on the c++ side
// I left some TODO's
MetadataRetriever.update_cover_art(ref cov, stock_path, song.SongPath);
/**
var imgBytes = metaData.RetrieveCoverArtBytes(song);
if (imgBytes != null)
{
_logger.Info("Saving cover art to the filesystem");
File.WriteAllBytes(coverArt.ImagePath, imgBytes);
}
else
{
_logger.Info("Song has no cover art, applying stock cover art");
coverArt.ImagePath = _rootCoverArtPath + "CoverArt.png";
metaData.UpdateCoverArt(song, coverArt);
}
*/
return coverArt;
}
catch (Exception ex)
{
var msg = ex.Message;
_logger.Error(msg, "An error occurred");
}
return null;
}
public static CovArt ConvertCoverArtToCovArt(CoverArt cover)
{
return new CovArt
{
SongTitle = cover.SongTitle,
ImagePath = cover.ImagePath
};
}
public static CoverArt ConvertCovArtToCoverArt(CovArt cov)
{
return new CoverArt
{
SongTitle = cov.SongTitle,
ImagePath = cov.ImagePath
};
}
private void Initialize()
{
var stockCover = _rootCoverArtPath + "CoverArt.png";
DirectoryManager.copy_stock_cover_art(stockCover,
DirectoryPaths.CoverArtPath);
}
#region Testing
private void PrintCoverArtDetails(CoverArt cover)
{
Console.WriteLine("\nCover art");
Console.WriteLine($"Song Title: {cover.SongTitle}");
Console.WriteLine($"ImagePath: {cover.ImagePath}\n");
}
#endregion
#endregion
}
}