feat(files+gb): file browser launches .gb via GameBoy, preserve mDNS

This commit is contained in:
Adolfo Reyna
2026-07-20 12:51:19 -04:00
parent f45dcbb9e1
commit 5c18387792
3 changed files with 33 additions and 22 deletions
@@ -1,11 +1,9 @@
#pragma once
#include <string>
namespace tt::app::files {
bool isSupportedAppFile(const std::string& filename);
bool isSupportedImageFile(const std::string& filename);
bool isSupportedTextFile(const std::string& filename);
bool isSupportedAudioFile(const std::string& filename);
bool isSupportedGameBoyFile(const std::string& filename);
} // namespace
+12 -17
View File
@@ -1,29 +1,24 @@
#include <Tactility/StringUtils.h>
#include <Tactility/TactilityCore.h>
namespace tt::app::files {
constexpr auto* TAG = "Files";
bool isSupportedAppFile(const std::string& filename) {
return filename.ends_with(".app");
}
bool isSupportedImageFile(const std::string& filename) {
// Currently only the PNG library is built into Tactility
return string::lowercase(filename).ends_with(".png");
}
bool isSupportedTextFile(const std::string& filename) {
std::string filename_lower = string::lowercase(filename);
return filename_lower.ends_with(".txt") ||
filename_lower.ends_with(".ini") ||
filename_lower.ends_with(".json") ||
filename_lower.ends_with(".yaml") ||
filename_lower.ends_with(".yml") ||
filename_lower.ends_with(".lua") ||
filename_lower.ends_with(".js") ||
filename_lower.ends_with(".properties");
std::string l = string::lowercase(filename);
return l.ends_with(".txt") || l.ends_with(".ini") || l.ends_with(".json") || l.ends_with(".yaml") || l.ends_with(".yml") ||
l.ends_with(".lua") || l.ends_with(".js") || l.ends_with(".properties");
}
} // namespace tt::app::filebrowser
bool isSupportedAudioFile(const std::string& filename) {
std::string l = string::lowercase(filename);
return l.ends_with(".mp3") || l.ends_with(".wav") || l.ends_with(".ogg") || l.ends_with(".flac");
}
bool isSupportedGameBoyFile(const std::string& filename) {
std::string l = string::lowercase(filename);
return l.ends_with(".gb") || l.ends_with(".gbc") || l.ends_with(".sgb");
}
} // namespace
+19 -1
View File
@@ -1,4 +1,5 @@
#include <Tactility/app/files/SupportedFiles.h>
#include <Tactility/Bundle.h>
#include <Tactility/app/files/View.h>
#include <Tactility/Platform.h>
@@ -228,9 +229,26 @@ void View::viewFile(const std::string& path, const std::string& filename) {
if (kernel::getPlatform() == kernel::PlatformEsp) {
notes::start(processed_filepath);
} else {
// Remove forward slash, because we need a relative path
notes::start(processed_filepath.substr(1));
}
} else if (isSupportedAudioFile(filename)) {
#ifdef ESP_PLATFORM
auto bundle = std::make_shared<Bundle>();
bundle->putString("file", processed_filepath);
auto loader = service::loader::findLoaderService();
if (loader) {
loader->start("one.tactility.mp3player", bundle);
}
#endif
} else if (isSupportedGameBoyFile(filename)) {
#ifdef ESP_PLATFORM
auto bundle = std::make_shared<Bundle>();
bundle->putString("file", processed_filepath);
auto loader = service::loader::findLoaderService();
if (loader) {
loader->start("one.tactility.gameboy", bundle);
}
#endif
} else {
LOG_W(TAG, "Opening files of this type is not supported");
}