Compare commits

...

8 Commits

Author SHA1 Message Date
zandoli
8d791b6e07 chore: trigger CI 2026-01-30 17:06:55 +01:00
zandoli
3ce1f1a09a Fix open-x4-sdk submodule reference to valid commit 2026-01-30 17:06:44 +01:00
zandoli
2a164f100c chore: trigger CI 2026-01-30 17:04:50 +01:00
zandoli
8ec6e6b574 chore: update open-x4-sdk submodule with rename support 2026-01-30 16:58:57 +01:00
zandoli
8e603346fa chore: trigger CI 2026-01-30 16:53:52 +01:00
zandoli
4deeeb8813 chore: trigger CI 2026-01-30 16:44:05 +01:00
zandoli
a7dee81106 chore: trigger CI 2026-01-30 16:39:26 +01:00
zandoli
07ccf3acc0 Text fix 2026-01-30 16:04:43 +01:00
6 changed files with 18 additions and 20 deletions

@ -1 +1 @@
Subproject commit bd4e6707503ab9c97d13ee0d8f8c69e9ff03cd12
Subproject commit c39f253a7dabbc193a8d7d310fb8777dca0ab8f1

View File

@ -38,7 +38,7 @@ class RecentBooksStore {
* Update the path of a book in the recent list.
* Useful when moving/renaming files or entire directories.
* If oldPath is a directory, all books within will have their paths updated.
*
*
* @param oldPath Original absolute path
* @param newPath New absolute path
*/
@ -46,4 +46,4 @@ class RecentBooksStore {
};
// Helper macro to access recent books store
#define RECENT_BOOKS RecentBooksStore::getInstance()
#define RECENT_BOOKS RecentBooksStore::getInstance()

View File

@ -1,7 +1,6 @@
#include "CrossPointWebServer.h"
#include <ArduinoJson.h>
#include "util/BookCacheManager.h"
#include <Epub.h>
#include <FsHelpers.h>
#include <SDCardManager.h>
@ -12,6 +11,7 @@
#include "html/FilesPageHtml.generated.h"
#include "html/HomePageHtml.generated.h"
#include "util/BookCacheManager.h"
#include "util/StringUtils.h"
namespace {
@ -848,7 +848,7 @@ void CrossPointWebServer::handleRename() const {
if (!newPath.startsWith("/")) newPath = "/" + newPath;
// Security check: prevent renaming system files
if (oldPath.substring(oldPath.lastIndexOf('/') + 1).startsWith(".") ||
if (oldPath.substring(oldPath.lastIndexOf('/') + 1).startsWith(".") ||
newPath.substring(newPath.lastIndexOf('/') + 1).startsWith(".")) {
server->send(403, "text/plain", "Cannot rename system files");
return;
@ -875,8 +875,6 @@ void CrossPointWebServer::handleRename() const {
}
}
// WebSocket callback trampoline
void CrossPointWebServer::wsEventCallback(uint8_t num, WStype_t type, uint8_t* payload, size_t length) {
if (wsInstance) {

View File

@ -80,5 +80,4 @@ class CrossPointWebServer {
void handleDelete() const;
void handleMove() const;
void handleRename() const;
};

View File

@ -1,8 +1,10 @@
#include "BookCacheManager.h"
#include "StringUtils.h"
#include <HardwareSerial.h>
#include "../RecentBooksStore.h"
#include "../CrossPointState.h"
#include "../RecentBooksStore.h"
#include "StringUtils.h"
bool BookCacheManager::migrateCache(const String& oldPath, const String& newPath) {
if (oldPath == newPath) return true;
@ -40,7 +42,7 @@ bool BookCacheManager::migrateCache(const String& oldPath, const String& newPath
String subOldPath = oldPath + "/" + fileName;
String subNewPath = newPath + "/" + fileName;
if (!migrateCache(subOldPath, subNewPath)) {
success = false;
}
@ -52,7 +54,7 @@ bool BookCacheManager::migrateCache(const String& oldPath, const String& newPath
// It's a file. check if it's a supported book type
if (!isSupportedFile(oldPath)) {
return true; // Not a book, nothing to migrate
return true; // Not a book, nothing to migrate
}
String oldCache = getCachePath(oldPath);
@ -78,7 +80,7 @@ bool BookCacheManager::migrateCache(const String& oldPath, const String& newPath
}
}
return true; // No old cache to migrate
return true; // No old cache to migrate
}
String BookCacheManager::getCachePath(const String& path) {
@ -89,15 +91,13 @@ String BookCacheManager::getCachePath(const String& path) {
}
bool BookCacheManager::isSupportedFile(const String& path) {
return StringUtils::checkFileExtension(path, ".epub") ||
StringUtils::checkFileExtension(path, ".txt") ||
StringUtils::checkFileExtension(path, ".xtc") ||
StringUtils::checkFileExtension(path, ".xtg") ||
return StringUtils::checkFileExtension(path, ".epub") || StringUtils::checkFileExtension(path, ".txt") ||
StringUtils::checkFileExtension(path, ".xtc") || StringUtils::checkFileExtension(path, ".xtg") ||
StringUtils::checkFileExtension(path, ".xth");
}
String BookCacheManager::getCachePrefix(const String& path) {
if (StringUtils::checkFileExtension(path, ".epub")) return "epub";
if (StringUtils::checkFileExtension(path, ".txt")) return "txt";
return "xtc"; // .xtc, .xtg, .xth
return "xtc"; // .xtc, .xtg, .xth
}

View File

@ -2,6 +2,7 @@
#include <SDCardManager.h>
#include <WString.h>
#include <string>
class BookCacheManager {
@ -9,7 +10,7 @@ class BookCacheManager {
/**
* Migrate cache data for a file or directory.
* If path is a directory, it recursively migrates all files within.
*
*
* @param oldPath Original absolute path
* @param newPath New absolute path
* @return true if migration was successful or no cache existed
@ -18,7 +19,7 @@ class BookCacheManager {
/**
* Get the cache directory path for a given book file.
*
*
* @param path Absolute path to the book file
* @return Full path to the cache directory, or empty string if not a supported book type
*/