mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-05 07:07:38 +03:00
Compare commits
1 Commits
6fd5d7b398
...
8edb682e6e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8edb682e6e |
@ -1 +1 @@
|
||||
Subproject commit c39f253a7dabbc193a8d7d310fb8777dca0ab8f1
|
||||
Subproject commit bd4e6707503ab9c97d13ee0d8f8c69e9ff03cd12
|
||||
@ -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()
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -80,4 +80,5 @@ class CrossPointWebServer {
|
||||
void handleDelete() const;
|
||||
void handleMove() const;
|
||||
void handleRename() const;
|
||||
|
||||
};
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user