fix cleanup
This commit is contained in:
@@ -42,6 +42,12 @@ public class ImageService {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private StoryService storyService;
|
private StoryService storyService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AuthorService authorService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CollectionService collectionService;
|
||||||
|
|
||||||
private String getUploadDir() {
|
private String getUploadDir() {
|
||||||
String libraryPath = libraryService.getCurrentImagePath();
|
String libraryPath = libraryService.getCurrentImagePath();
|
||||||
@@ -590,6 +596,25 @@ public class ImageService {
|
|||||||
Pattern imagePattern = Pattern.compile("src=[\"']([^\"']*(?:content/[^\"']*\\.(jpg|jpeg|png)))[\"']", Pattern.CASE_INSENSITIVE);
|
Pattern imagePattern = Pattern.compile("src=[\"']([^\"']*(?:content/[^\"']*\\.(jpg|jpeg|png)))[\"']", Pattern.CASE_INSENSITIVE);
|
||||||
|
|
||||||
for (com.storycove.entity.Story story : allStories) {
|
for (com.storycove.entity.Story story : allStories) {
|
||||||
|
// Add story cover image if present
|
||||||
|
if (story.getCoverPath() != null && !story.getCoverPath().trim().isEmpty()) {
|
||||||
|
String relativePath = convertAbsolutePathToRelative(story.getCoverPath());
|
||||||
|
if (relativePath != null) {
|
||||||
|
referencedImages.add(relativePath);
|
||||||
|
logger.debug("Found cover image reference in story {}: {}", story.getId(), relativePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add author avatar image if present
|
||||||
|
if (story.getAuthor() != null && story.getAuthor().getAvatarImagePath() != null && !story.getAuthor().getAvatarImagePath().trim().isEmpty()) {
|
||||||
|
String relativePath = convertAbsolutePathToRelative(story.getAuthor().getAvatarImagePath());
|
||||||
|
if (relativePath != null) {
|
||||||
|
referencedImages.add(relativePath);
|
||||||
|
logger.debug("Found avatar image reference for author {}: {}", story.getAuthor().getId(), relativePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add content images from HTML
|
||||||
if (story.getContentHtml() != null) {
|
if (story.getContentHtml() != null) {
|
||||||
Matcher matcher = imagePattern.matcher(story.getContentHtml());
|
Matcher matcher = imagePattern.matcher(story.getContentHtml());
|
||||||
|
|
||||||
@@ -600,12 +625,36 @@ public class ImageService {
|
|||||||
String relativePath = convertSrcToRelativePath(imageSrc);
|
String relativePath = convertSrcToRelativePath(imageSrc);
|
||||||
if (relativePath != null) {
|
if (relativePath != null) {
|
||||||
referencedImages.add(relativePath);
|
referencedImages.add(relativePath);
|
||||||
logger.debug("Found image reference in story {}: {}", story.getId(), relativePath);
|
logger.debug("Found content image reference in story {}: {}", story.getId(), relativePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Also get all authors separately to catch avatars for authors without stories
|
||||||
|
List<com.storycove.entity.Author> allAuthors = authorService.findAll();
|
||||||
|
for (com.storycove.entity.Author author : allAuthors) {
|
||||||
|
if (author.getAvatarImagePath() != null && !author.getAvatarImagePath().trim().isEmpty()) {
|
||||||
|
String relativePath = convertAbsolutePathToRelative(author.getAvatarImagePath());
|
||||||
|
if (relativePath != null) {
|
||||||
|
referencedImages.add(relativePath);
|
||||||
|
logger.debug("Found standalone avatar image reference for author {}: {}", author.getId(), relativePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Also get all collections to catch cover images
|
||||||
|
List<com.storycove.entity.Collection> allCollections = collectionService.findAll();
|
||||||
|
for (com.storycove.entity.Collection collection : allCollections) {
|
||||||
|
if (collection.getCoverImagePath() != null && !collection.getCoverImagePath().trim().isEmpty()) {
|
||||||
|
String relativePath = convertAbsolutePathToRelative(collection.getCoverImagePath());
|
||||||
|
if (relativePath != null) {
|
||||||
|
referencedImages.add(relativePath);
|
||||||
|
logger.debug("Found collection cover image reference for collection {}: {}", collection.getId(), relativePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Error collecting image references from stories", e);
|
logger.error("Error collecting image references from stories", e);
|
||||||
}
|
}
|
||||||
@@ -629,6 +678,64 @@ public class ImageService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert absolute file path to relative path from upload directory
|
||||||
|
*/
|
||||||
|
private String convertAbsolutePathToRelative(String absolutePath) {
|
||||||
|
try {
|
||||||
|
if (absolutePath == null || absolutePath.trim().isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Path absPath = Paths.get(absolutePath);
|
||||||
|
Path uploadDirPath = Paths.get(getUploadDir());
|
||||||
|
|
||||||
|
// If the path is already relative to upload dir, return as-is
|
||||||
|
if (!absPath.isAbsolute()) {
|
||||||
|
return absolutePath.replace('\\', '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to make it relative to the upload directory
|
||||||
|
if (absPath.startsWith(uploadDirPath)) {
|
||||||
|
Path relativePath = uploadDirPath.relativize(absPath);
|
||||||
|
return relativePath.toString().replace('\\', '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
// If it's not under upload directory, check if it's library-specific path
|
||||||
|
String libraryPath = libraryService.getCurrentImagePath();
|
||||||
|
Path baseUploadPath = Paths.get(baseUploadDir);
|
||||||
|
|
||||||
|
if (absPath.startsWith(baseUploadPath)) {
|
||||||
|
Path relativePath = baseUploadPath.relativize(absPath);
|
||||||
|
String relativeStr = relativePath.toString().replace('\\', '/');
|
||||||
|
|
||||||
|
// Remove library prefix if present to make it library-agnostic for comparison
|
||||||
|
if (relativeStr.startsWith(libraryPath.substring(1))) { // Remove leading slash from library path
|
||||||
|
return relativeStr.substring(libraryPath.length() - 1); // Keep the leading slash
|
||||||
|
}
|
||||||
|
return relativeStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback: just use the filename portion if it's in the right structure
|
||||||
|
String fileName = absPath.getFileName().toString();
|
||||||
|
if (fileName.matches(".*\\.(jpg|jpeg|png)$")) {
|
||||||
|
// Try to preserve directory structure if it looks like covers/ or avatars/
|
||||||
|
Path parent = absPath.getParent();
|
||||||
|
if (parent != null) {
|
||||||
|
String parentName = parent.getFileName().toString();
|
||||||
|
if (parentName.equals("covers") || parentName.equals("avatars")) {
|
||||||
|
return parentName + "/" + fileName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.debug("Failed to convert absolute path to relative: {}", absolutePath, e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get relative image path from absolute file path
|
* Get relative image path from absolute file path
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user