+ Added better logging for asset loading errors and some extra information, should help get better information on #59

Signed-off-by: Alexis Maiquez <almamu@almamu.com>
This commit is contained in:
Alexis Maiquez 2022-01-31 19:28:49 +01:00
parent a66bc26f1d
commit 20c4ad3652
7 changed files with 53 additions and 6 deletions

View File

@ -39,6 +39,8 @@ add_executable(
wallengine
main.cpp
src/WallpaperEngine/Assets/CAssetLoadException.cpp
src/WallpaperEngine/Assets/CAssetLoadException.h
src/WallpaperEngine/Assets/CContainer.h
src/WallpaperEngine/Assets/CContainer.cpp
src/WallpaperEngine/Assets/CCombinedContainer.h

View File

@ -151,10 +151,12 @@ int main (int argc, char* argv[])
// add the package to the list
containers->add (new WallpaperEngine::Assets::CPackage (scene_path));
std::cout << "Detected scene.pkg file at " << scene_path << ". Adding to list of searchable paths" << std::endl;
}
catch(std::filesystem::filesystem_error ex)
{
// ignore this error, the package file was not found
std::cout << "No scene.pkg file found at " << path << ". Defaulting to normal folder storage" << std::endl;
}
catch (std::runtime_error ex)
{
@ -208,7 +210,6 @@ int main (int argc, char* argv[])
return 3;
}
if (project->getType () == "scene")
{
WallpaperEngine::Core::CScene* scene = project->getWallpaper ()->as <WallpaperEngine::Core::CScene> ();

View File

@ -0,0 +1,14 @@
#include "CAssetLoadException.h"
using namespace WallpaperEngine::Assets;
CAssetLoadException::CAssetLoadException(const std::string& filename, const std::string& extrainfo)
: m_message("Cannot find file " + filename + ": " + extrainfo)
{
}
const char *CAssetLoadException::what() const noexcept
{
return this->m_message.c_str ();
}

View File

@ -0,0 +1,17 @@
#pragma once
#include <exception>
#include <string>
namespace WallpaperEngine::Assets
{
class CAssetLoadException : public std::exception
{
public:
CAssetLoadException(const std::string& filename, const std::string& extrainfo = "");
const char* what() const noexcept override;
private:
std::string m_message;
};
};

View File

@ -1,4 +1,5 @@
#include "CCombinedContainer.h"
#include "CAssetLoadException.h"
using namespace WallpaperEngine::Assets;
@ -20,12 +21,12 @@ void* CCombinedContainer::readFile (std::string filename, uint32_t* length)
// an exception will be thrown
return (*cur)->readFile (filename, length);
}
catch (std::exception& ex)
catch (CAssetLoadException& ex)
{
// not found in this container, next try
}
}
// no container was able to load the file, abort!
throw std::runtime_error ("Cannot find the file in any of the containers");
throw CAssetLoadException (filename, "Cannot find file in any of the containers");
}

View File

@ -1,10 +1,21 @@
#include <sys/stat.h>
#include "CDirectory.h"
#include "CAssetLoadException.h"
using namespace WallpaperEngine::Assets;
CDirectory::CDirectory (std::string basepath) :
m_basepath (std::move (basepath))
{
// ensure the specified path exists
struct stat buffer;
if (stat (this->m_basepath.c_str (), &buffer) != 0)
throw std::runtime_error ("Cannot find " + this->m_basepath + ". This folder is required for wallpaper engine to work");
if (!S_ISDIR(buffer.st_mode))
throw std::runtime_error ("Cannot find " + this->m_basepath + ". There's an assets file in it's place");
}
CDirectory::~CDirectory ()
@ -30,7 +41,7 @@ void* CDirectory::readFile (std::string filename, uint32_t* length)
FILE* fp = fopen (final.c_str (), "rb");
if (fp == nullptr)
throw std::runtime_error ("Cannot find requested file");
throw CAssetLoadException(filename, "Cannot find file");
// go to the end, get the position and return to the beginning
fseek (fp, 0, SEEK_END);
@ -43,7 +54,7 @@ void* CDirectory::readFile (std::string filename, uint32_t* length)
if (fread (contents, size, 1, fp) != 1)
{
delete[] contents;
throw std::runtime_error ("Unexpected error when reading the file");
throw CAssetLoadException (filename, "Unexpected error when reading the file");
}
// store it in the cache too

View File

@ -3,6 +3,7 @@
//
#include "CPackage.h"
#include "CAssetLoadException.h"
#include <utility>
#include <filesystem>
@ -40,7 +41,7 @@ void* CPackage::readFile (std::string filename, uint32_t* length)
auto it = this->m_contents.find (filename);
if (it == this->m_contents.end ())
throw std::runtime_error ("Cannot find file in file list");
throw CAssetLoadException(filename, "Cannot find the file in the package");
// set file length if required
if (length != nullptr)