Compare commits

..

1 Commits

Author SHA1 Message Date
Zando
8edb682e6e
Merge b483b46b40 into da4d3b5ea5 2026-01-29 23:00:15 +01:00
6 changed files with 21 additions and 19 deletions

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

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,6 +1,7 @@
#include "CrossPointWebServer.h"
#include <ArduinoJson.h>
#include "util/BookCacheManager.h"
#include <Epub.h>
#include <FsHelpers.h>
#include <SDCardManager.h>
@ -11,7 +12,6 @@
#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,6 +875,8 @@ 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,4 +80,5 @@ class CrossPointWebServer {
void handleDelete() const;
void handleMove() const;
void handleRename() const;
};

View File

@ -1,10 +1,8 @@
#include "BookCacheManager.h"
#include <HardwareSerial.h>
#include "../CrossPointState.h"
#include "../RecentBooksStore.h"
#include "StringUtils.h"
#include <HardwareSerial.h>
#include "../RecentBooksStore.h"
#include "../CrossPointState.h"
bool BookCacheManager::migrateCache(const String& oldPath, const String& newPath) {
if (oldPath == newPath) return true;
@ -42,7 +40,7 @@ bool BookCacheManager::migrateCache(const String& oldPath, const String& newPath
String subOldPath = oldPath + "/" + fileName;
String subNewPath = newPath + "/" + fileName;
if (!migrateCache(subOldPath, subNewPath)) {
success = false;
}
@ -54,7 +52,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);
@ -80,7 +78,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) {
@ -91,13 +89,15 @@ 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,7 +2,6 @@
#include <SDCardManager.h>
#include <WString.h>
#include <string>
class BookCacheManager {
@ -10,7 +9,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
@ -19,7 +18,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
*/