mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-09-08 17:51:20 +02:00
remove unused files
This commit is contained in:
parent
09a1f9b1a1
commit
b012711ae5
@ -1,82 +0,0 @@
|
|||||||
package stirling.software.common.util;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class for generating consistent temporary file names. Provides methods to create
|
|
||||||
* standardized, identifiable temp file names.
|
|
||||||
*/
|
|
||||||
public class TempFileNamingConvention {
|
|
||||||
|
|
||||||
private static final String DEFAULT_PREFIX = "stirling-pdf-";
|
|
||||||
private static final DateTimeFormatter DATE_FORMATTER =
|
|
||||||
DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a temporary file name for a specific operation type.
|
|
||||||
*
|
|
||||||
* @param operationType The type of operation (e.g., "merge", "split", "watermark")
|
|
||||||
* @param extension File extension without the dot
|
|
||||||
* @return A formatted temporary file name
|
|
||||||
*/
|
|
||||||
public static String forOperation(String operationType, String extension) {
|
|
||||||
String timestamp = LocalDateTime.now().format(DATE_FORMATTER);
|
|
||||||
String uuid = UUID.randomUUID().toString().substring(0, 8);
|
|
||||||
|
|
||||||
return DEFAULT_PREFIX + operationType + "-" + timestamp + "-" + uuid + "." + extension;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a temporary file name for intermediate processing.
|
|
||||||
*
|
|
||||||
* @param operationType The type of operation
|
|
||||||
* @param step The processing step number or identifier
|
|
||||||
* @param extension File extension without the dot
|
|
||||||
* @return A formatted temporary file name for intermediate processing
|
|
||||||
*/
|
|
||||||
public static String forProcessingStep(String operationType, String step, String extension) {
|
|
||||||
String uuid = UUID.randomUUID().toString().substring(0, 8);
|
|
||||||
return DEFAULT_PREFIX + operationType + "-" + step + "-" + uuid + "." + extension;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a temporary file name for a LibreOffice operation.
|
|
||||||
*
|
|
||||||
* @param sourceFilename The original filename
|
|
||||||
* @param extension File extension without the dot
|
|
||||||
* @return A formatted temporary file name for LibreOffice operations
|
|
||||||
*/
|
|
||||||
public static String forLibreOffice(String sourceFilename, String extension) {
|
|
||||||
// Extract base filename without extension
|
|
||||||
String baseName = sourceFilename;
|
|
||||||
int lastDot = sourceFilename.lastIndexOf('.');
|
|
||||||
if (lastDot > 0) {
|
|
||||||
baseName = sourceFilename.substring(0, lastDot);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sanitize the base name
|
|
||||||
baseName = baseName.replaceAll("[^a-zA-Z0-9]", "_");
|
|
||||||
|
|
||||||
// Limit the length of the base name
|
|
||||||
if (baseName.length() > 20) {
|
|
||||||
baseName = baseName.substring(0, 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
String uuid = UUID.randomUUID().toString().substring(0, 8);
|
|
||||||
return DEFAULT_PREFIX + "lo-" + baseName + "-" + uuid + "." + extension;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a temporary directory name.
|
|
||||||
*
|
|
||||||
* @param purpose The purpose of the directory
|
|
||||||
* @return A formatted temporary directory name
|
|
||||||
*/
|
|
||||||
public static String forTempDirectory(String purpose) {
|
|
||||||
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
|
||||||
String uuid = UUID.randomUUID().toString().substring(0, 8);
|
|
||||||
return DEFAULT_PREFIX + purpose + "-" + timestamp + "-" + uuid;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
|
|
@ -1,152 +0,0 @@
|
|||||||
package stirling.software.SPDF;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.InetSocketAddress;
|
|
||||||
import java.net.Socket;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import io.github.pixee.security.SystemCommand;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
|
|
||||||
import stirling.software.common.service.TempFileCleanupService;
|
|
||||||
import stirling.software.common.util.ApplicationContextProvider;
|
|
||||||
import stirling.software.common.util.TempFileManager;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
@Component
|
|
||||||
public class UnoconvServer {
|
|
||||||
|
|
||||||
private static final long ACTIVITY_TIMEOUT = 20L * 60 * 1000; // 20 minutes
|
|
||||||
|
|
||||||
private static UnoconvServer INSTANCE;
|
|
||||||
private static final int LISTENER_PORT = 2002;
|
|
||||||
private ExecutorService executorService;
|
|
||||||
private long lastActivityTime;
|
|
||||||
private Process process;
|
|
||||||
private Path tempDir;
|
|
||||||
|
|
||||||
private final TempFileManager tempFileManager;
|
|
||||||
private final TempFileCleanupService cleanupService;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public UnoconvServer(TempFileManager tempFileManager, TempFileCleanupService cleanupService) {
|
|
||||||
this.tempFileManager = tempFileManager;
|
|
||||||
this.cleanupService = cleanupService;
|
|
||||||
INSTANCE = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UnoconvServer getInstance() {
|
|
||||||
// If INSTANCE is not set through Spring, try to get it from the ApplicationContext
|
|
||||||
if (INSTANCE == null) {
|
|
||||||
INSTANCE = ApplicationContextProvider.getBean(UnoconvServer.class);
|
|
||||||
|
|
||||||
if (INSTANCE == null) {
|
|
||||||
log.warn("Creating UnoconvServer without Spring context");
|
|
||||||
INSTANCE = new UnoconvServer(null, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isServerRunning() {
|
|
||||||
log.info("Checking if unoconv server is running");
|
|
||||||
try (Socket socket = new Socket()) {
|
|
||||||
socket.connect(
|
|
||||||
new InetSocketAddress("localhost", LISTENER_PORT),
|
|
||||||
1000); // Timeout after 1 second
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() throws IOException {
|
|
||||||
// Check if the server is already running
|
|
||||||
if (process != null && process.isAlive()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create and register a temp directory for unoconv if TempFileManager is available
|
|
||||||
if (tempFileManager != null) {
|
|
||||||
tempDir = tempFileManager.registerLibreOfficeTempDir();
|
|
||||||
log.info("Created unoconv temp directory: {}", tempDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
String command;
|
|
||||||
if (tempDir != null) {
|
|
||||||
command = "unoconv-server --user-profile " + tempDir.toString();
|
|
||||||
} else {
|
|
||||||
command = "unoconv-server";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start the server process
|
|
||||||
process = SystemCommand.runCommand(Runtime.getRuntime(), command);
|
|
||||||
lastActivityTime = System.currentTimeMillis();
|
|
||||||
|
|
||||||
// Start a background thread to monitor the activity timeout
|
|
||||||
executorService = Executors.newSingleThreadExecutor();
|
|
||||||
executorService.submit(
|
|
||||||
() -> {
|
|
||||||
while (true) {
|
|
||||||
long idleTime = System.currentTimeMillis() - lastActivityTime;
|
|
||||||
if (idleTime >= ACTIVITY_TIMEOUT) {
|
|
||||||
process.destroy();
|
|
||||||
|
|
||||||
if (cleanupService != null) {
|
|
||||||
cleanupService.cleanupLibreOfficeTempFiles();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
Thread.sleep(5000); // Check for inactivity every 5 seconds
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Wait for the server to start up
|
|
||||||
long startTime = System.currentTimeMillis();
|
|
||||||
long timeout = 30000; // Timeout after 30 seconds
|
|
||||||
while (System.currentTimeMillis() - startTime < timeout) {
|
|
||||||
if (isServerRunning()) {
|
|
||||||
lastActivityTime = System.currentTimeMillis();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
Thread.sleep(1000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
log.error("Error waiting for server to start", e);
|
|
||||||
} // Check every 1 second
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void stop() {
|
|
||||||
// Stop the activity timeout monitor thread
|
|
||||||
if (executorService != null) {
|
|
||||||
executorService.shutdownNow();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stop the server process
|
|
||||||
if (process != null && process.isAlive()) {
|
|
||||||
process.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cleanupService != null) {
|
|
||||||
cleanupService.cleanupLibreOfficeTempFiles();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Notify that unoconv is being used, to reset the inactivity timer. */
|
|
||||||
public void notifyActivity() {
|
|
||||||
lastActivityTime = System.currentTimeMillis();
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user