Preliminary hash and thumb generation
This commit is contained in:
parent
43a626eef9
commit
dddf1d7370
7
pom.xml
7
pom.xml
|
@ -83,6 +83,13 @@
|
|||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.11</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
package com.itdominator.api.controller;
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.DirectoryStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
@ -35,6 +44,9 @@ public class ThumbnailerApiController {
|
|||
|
||||
private final ThumbnailerService thumbnailerService;
|
||||
|
||||
@Value("${videos.filter}")
|
||||
private final String[] videoFilter;
|
||||
|
||||
|
||||
@PreAuthorize("hasRole('User')")
|
||||
@PostMapping("/get-thumbnail/id/{id}")
|
||||
|
@ -69,4 +81,62 @@ public class ThumbnailerApiController {
|
|||
return thumbnailerService.getAllThumbnails();
|
||||
}
|
||||
|
||||
@PreAuthorize("hasRole('User')")
|
||||
@GetMapping("/temp-videos-list-test")
|
||||
public Set<String> getAllVideoFiles() {
|
||||
Set<Path> paths = collectVideoFilePaths("/home/abaddon/Downloads");
|
||||
Set<String> files = new HashSet<>();
|
||||
|
||||
generateThumbnails(paths);
|
||||
for (Path path : paths) {
|
||||
files.add( path.getFileName().toString() );
|
||||
}
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
|
||||
public Set<Path> collectVideoFilePaths(final String dir) {
|
||||
Set<Path> paths = new HashSet<>();
|
||||
|
||||
try (DirectoryStream<Path> stream = Files.newDirectoryStream( Paths.get(dir) )) {
|
||||
for (Path path : stream) {
|
||||
if ( !Files.isDirectory(path) ) {
|
||||
String target = path.getFileName().toString();
|
||||
for (String filterItem : videoFilter) {
|
||||
if ( target.endsWith(filterItem) ) {
|
||||
paths.add(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.debug("Invalid path given to scan...");
|
||||
}
|
||||
|
||||
return paths;
|
||||
}
|
||||
|
||||
public void generateThumbnails(Set<Path> paths) {
|
||||
for (Path path : paths) {
|
||||
String fileName = path.getFileName().toString();
|
||||
String fileHash = DigestUtils.sha256Hex(fileName);
|
||||
generateThumbnail(path.toString(), "/home/abaddon/Downloads/tmp/" + fileHash + ".jpg","65%");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// proc = subprocess.Popen([self.FFMPG_THUMBNLR, "-t", scrub_percent, "-s", "300", "-c", "jpg", "-i", full_path, "-o", hash_img_path])
|
||||
public void generateThumbnail(final String full_path, final String hash_img_path, final String scrub_percent) {
|
||||
try {
|
||||
ProcessBuilder pb = new ProcessBuilder("ffmpegthumbnailer", "-t", scrub_percent, "-s", "300", "-c", "jpg", "-i", full_path, "-o", hash_img_path);
|
||||
Process p = pb.start();
|
||||
} catch (Exception e) {
|
||||
log.debug("Thumbnail couldn't be generated...");
|
||||
// Note: Need supporting logic for failed loads. Maybe return empty byte[]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,4 +16,6 @@ hibernate.show_sql=true
|
|||
spring.jpa.hibernate.ddl-auto=update
|
||||
|
||||
|
||||
videos.filter=.mkv,.mp4,.webm,.avi,.mov,.m4v,.mpg,.mpeg,.wmv,.flv
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue