Use intuitive behavior for loading assets with ambiguous extensions
This commit is contained in:
parent
d27501313c
commit
037d96a5d9
@ -167,6 +167,7 @@ public:
|
|||||||
QString get_sfx(QString p_sfx, QString p_misc="", QString p_character="");
|
QString get_sfx(QString p_sfx, QString p_misc="", QString p_character="");
|
||||||
QString get_case_sensitive_path(QString p_file);
|
QString get_case_sensitive_path(QString p_file);
|
||||||
QString get_real_path(const VPath &vpath);
|
QString get_real_path(const VPath &vpath);
|
||||||
|
QString get_real_suffixed_path(const VPath &vpath, const QStringList &suffixes);
|
||||||
void invalidate_lookup_cache();
|
void invalidate_lookup_cache();
|
||||||
|
|
||||||
////// Functions for reading and writing files //////
|
////// Functions for reading and writing files //////
|
||||||
@ -355,9 +356,6 @@ public:
|
|||||||
// Returns the sfx with p_identifier from courtroom_sounds.ini in the current theme path
|
// Returns the sfx with p_identifier from courtroom_sounds.ini in the current theme path
|
||||||
QString get_court_sfx(QString p_identifier, QString p_misc="");
|
QString get_court_sfx(QString p_identifier, QString p_misc="");
|
||||||
|
|
||||||
// Find the correct suffix for a given file
|
|
||||||
QString get_suffix(VPath file_to_check, QStringList suffixes);
|
|
||||||
|
|
||||||
// Figure out if we can opus this or if we should fall back to wav
|
// Figure out if we can opus this or if we should fall back to wav
|
||||||
QString get_sfx_suffix(VPath sound_to_check);
|
QString get_sfx_suffix(VPath sound_to_check);
|
||||||
|
|
||||||
|
@ -20,13 +20,8 @@ void AOButton::set_image(QString p_path, QString p_misc)
|
|||||||
{
|
{
|
||||||
movie->stop();
|
movie->stop();
|
||||||
QString p_image;
|
QString p_image;
|
||||||
// Check if the user wants animated themes
|
p_image = ao_app->get_image(p_path, ao_app->current_theme, ao_app->get_subtheme(),
|
||||||
if (ao_app->get_animated_theme())
|
ao_app->default_theme, p_misc, "", "", !ao_app->get_animated_theme());
|
||||||
// We want an animated image
|
|
||||||
p_image = ao_app->get_image(p_path, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_misc);
|
|
||||||
else
|
|
||||||
// Grab a static variant of the image
|
|
||||||
p_image = ao_app->get_image_path(ao_app->get_asset_paths(p_path, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_misc), true);
|
|
||||||
if (p_image.isEmpty()) {
|
if (p_image.isEmpty()) {
|
||||||
this->setIcon(QIcon());
|
this->setIcon(QIcon());
|
||||||
this->setIconSize(this->size());
|
this->setIconSize(this->size());
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QElapsedTimer>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
@ -246,6 +246,39 @@ QString AOApplication::get_real_path(const VPath &vpath) {
|
|||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case of get_real_path where multiple suffixes need to be tried
|
||||||
|
// on each mount path.
|
||||||
|
QString AOApplication::get_real_suffixed_path(const VPath &vpath,
|
||||||
|
const QStringList &suffixes) {
|
||||||
|
// Try cache first
|
||||||
|
QString phys_path = asset_lookup_cache.value(vpath);
|
||||||
|
if (!phys_path.isEmpty() && exists(phys_path)) {
|
||||||
|
return phys_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cache miss; try each suffix on all known mount paths
|
||||||
|
QStringList bases = get_mount_paths();
|
||||||
|
bases.push_front(get_base_path());
|
||||||
|
|
||||||
|
for (const QString &base : bases) {
|
||||||
|
for (const QString &suffix : suffixes) {
|
||||||
|
QDir baseDir(base);
|
||||||
|
const QString path = baseDir.absoluteFilePath(vpath.toQString() + suffix);
|
||||||
|
if (!path.startsWith(baseDir.absolutePath())) {
|
||||||
|
qWarning() << "invalid path" << path << "(path is outside vfs)";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (exists(get_case_sensitive_path(path))) {
|
||||||
|
asset_lookup_cache.insert(vpath, path);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// File or directory not found
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
void AOApplication::invalidate_lookup_cache() {
|
void AOApplication::invalidate_lookup_cache() {
|
||||||
asset_lookup_cache.clear();
|
asset_lookup_cache.clear();
|
||||||
}
|
}
|
||||||
|
@ -495,32 +495,21 @@ QString AOApplication::get_court_sfx(QString p_identifier, QString p_misc)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AOApplication::get_suffix(VPath path_to_check, QStringList suffixes) {
|
|
||||||
for (const QString &suffix : suffixes) {
|
|
||||||
QString path = get_real_path(VPath(path_to_check.toQString() + suffix));
|
|
||||||
if (!path.isEmpty())
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString AOApplication::get_sfx_suffix(VPath sound_to_check)
|
QString AOApplication::get_sfx_suffix(VPath sound_to_check)
|
||||||
{
|
{
|
||||||
return get_suffix(sound_to_check, { "", ".opus", ".ogg", ".mp3", ".wav" });
|
return get_real_suffixed_path(sound_to_check,
|
||||||
|
{ "", ".opus", ".ogg", ".mp3", ".wav" });
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AOApplication::get_image_suffix(VPath path_to_check, bool static_image)
|
QString AOApplication::get_image_suffix(VPath path_to_check, bool static_image)
|
||||||
{
|
{
|
||||||
QStringList suffixes { "" };
|
QStringList suffixes { "" };
|
||||||
// A better method would to actually use AOImageReader and see if these images have more than 1 frame.
|
|
||||||
// However, that might not be performant.
|
|
||||||
if (!static_image) {
|
if (!static_image) {
|
||||||
suffixes.append({ ".webp", ".apng", ".gif" });
|
suffixes.append({ ".webp", ".apng", ".gif" });
|
||||||
}
|
}
|
||||||
suffixes.append(".png");
|
suffixes.append(".png");
|
||||||
|
|
||||||
return get_suffix(path_to_check, suffixes);
|
return get_real_suffixed_path(path_to_check, suffixes);
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns whatever is to the right of "search_line =" within target_tag and
|
// returns whatever is to the right of "search_line =" within target_tag and
|
||||||
|
Loading…
Reference in New Issue
Block a user