mirror of
https://github.com/LNH-team/pico-launcher.git
synced 2026-09-18 21:22:38 +02:00
Add support for custom BMP icons and custom NDS banners for games and folders. Closes #53 and Closes #62
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
#include "common.h"
|
||||
#include <string.h>
|
||||
#include "FileType/CustomIconInternalFileInfo.h"
|
||||
#include "FileInfoManager.h"
|
||||
|
||||
FileInfoManager::FileInfoManager(std::unique_ptr<const FileInfo*[]> items, u32 itemCount, const ICoverRepository& coverRepository)
|
||||
FileInfoManager::FileInfoManager(std::unique_ptr<const FileInfo*[]> items, u32 itemCount, const ICoverRepository& coverRepository,
|
||||
const IIconRepository& iconRepository, const IBannerRepository& bannerRepository)
|
||||
: _items(std::move(items)), _itemCount(itemCount)
|
||||
, _extraFileInfo(std::make_unique<ExtraFileInfo[]>(itemCount))
|
||||
, _coverRepository(coverRepository) { }
|
||||
, _coverRepository(coverRepository)
|
||||
, _iconRepository(iconRepository)
|
||||
, _bannerRepository(bannerRepository) { }
|
||||
|
||||
FileInfoManager::~FileInfoManager()
|
||||
{
|
||||
@@ -17,10 +21,29 @@ FileInfoManager::~FileInfoManager()
|
||||
|
||||
void FileInfoManager::LoadFileInfo(int index)
|
||||
{
|
||||
auto internalFileInfo = _extraFileInfo[index].internalFileInfo;
|
||||
if (!internalFileInfo)
|
||||
if (_extraFileInfo[index].loaded)
|
||||
{
|
||||
internalFileInfo = _items[index]->CreateInternalFileInfo();
|
||||
return;
|
||||
}
|
||||
|
||||
const InternalFileInfo* internalFileInfo = _items[index]->CreateInternalFileInfo();
|
||||
const char* gameCode = internalFileInfo ? internalFileInfo->GetGameCode() : nullptr;
|
||||
|
||||
// A custom banner (.bnr) takes priority and replaces the internal file info entirely.
|
||||
auto customBanner = _bannerRepository.GetBannerForFile(*_items[index], gameCode);
|
||||
if (customBanner)
|
||||
{
|
||||
delete internalFileInfo;
|
||||
internalFileInfo = customBanner;
|
||||
}
|
||||
else
|
||||
{
|
||||
// A custom icon (.bmp) wraps the existing internal file info, overriding only the icon.
|
||||
auto iconData = _iconRepository.GetIconForFile(*_items[index], gameCode);
|
||||
if (iconData)
|
||||
{
|
||||
internalFileInfo = new CustomIconInternalFileInfo(std::move(iconData), std::unique_ptr<const InternalFileInfo>(internalFileInfo));
|
||||
}
|
||||
}
|
||||
|
||||
if (!_extraFileInfo[index].fileCover.Lock())
|
||||
@@ -29,10 +52,13 @@ void FileInfoManager::LoadFileInfo(int index)
|
||||
}
|
||||
|
||||
_extraFileInfo[index].internalFileInfo = internalFileInfo;
|
||||
_extraFileInfo[index].loaded = true;
|
||||
}
|
||||
|
||||
void FileInfoManager::ReleaseFileInfo(int index)
|
||||
{
|
||||
_extraFileInfo[index].loaded = false;
|
||||
|
||||
auto internalFileInfo = _extraFileInfo[index].internalFileInfo;
|
||||
if (internalFileInfo)
|
||||
{
|
||||
@@ -57,4 +83,4 @@ int FileInfoManager::GetItemIndex(const char* fileName)
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user