mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-04 14:47:37 +03:00
Compare commits
8 Commits
b483b46b40
...
8d791b6e07
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8d791b6e07 | ||
|
|
3ce1f1a09a | ||
|
|
2a164f100c | ||
|
|
8ec6e6b574 | ||
|
|
8e603346fa | ||
|
|
4deeeb8813 | ||
|
|
a7dee81106 | ||
|
|
07ccf3acc0 |
@ -1 +1 @@
|
||||
Subproject commit bd4e6707503ab9c97d13ee0d8f8c69e9ff03cd12
|
||||
Subproject commit c39f253a7dabbc193a8d7d310fb8777dca0ab8f1
|
||||
@ -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,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) {
|
||||
|
||||
@ -80,5 +80,4 @@ class CrossPointWebServer {
|
||||
void handleDelete() const;
|
||||
void handleMove() const;
|
||||
void handleRename() const;
|
||||
|
||||
};
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user