commit d826999380c910e2a2d541cc33ca54181ec62257 Author: MrLetsplay Date: Sun Feb 9 23:51:04 2025 +0100 initial commit diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..da907b2 --- /dev/null +++ b/.classpath @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe582da --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/bin/ +/target/ +/dependency-reduced-pom.xml +/library diff --git a/.project b/.project new file mode 100644 index 0000000..f4b6f55 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + VideoBaseV2 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..d04c2a6 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/README.md b/README.md new file mode 100644 index 0000000..4147ca2 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# VideoBase +A simple file-based video library + +(not to be confused with the identically named project located [here](https://github.com/MrLetsplay2003/VideoBase)) + +## Planned features +- [ ] REST API supporting fetching videos and metadata, authentication and editing metadata (no video upload) +- [ ] Frontend based on the aforementioned REST API +- [ ] API for easy integration into other projects diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..882ab7a --- /dev/null +++ b/pom.xml @@ -0,0 +1,40 @@ + + 4.0.0 + me.mrletsplay + VideoBaseV2 + 0.0.1-SNAPSHOT + + src/main/java + + + maven-compiler-plugin + 3.13.0 + + 11 + + + + + + + + Graphite-Official + https://maven.graphite-official.com/releases + + + + + + me.mrletsplay + MrCore + 4.6.1 + + + me.mrletsplay + SimpleHTTPServer + 2.1-SNAPSHOT + + + \ No newline at end of file diff --git a/src/main/java/me/mrletsplay/videobase/Config.java b/src/main/java/me/mrletsplay/videobase/Config.java new file mode 100644 index 0000000..ff69e3c --- /dev/null +++ b/src/main/java/me/mrletsplay/videobase/Config.java @@ -0,0 +1,19 @@ +package me.mrletsplay.videobase; + +import me.mrletsplay.mrcore.json.converter.JSONConvertible; +import me.mrletsplay.mrcore.json.converter.JSONValue; + +public class Config implements JSONConvertible { + + @JSONValue + private String libraryPath; + + private Config() {} + + public static Config createDefault() { + Config config = new Config(); + config.libraryPath = "library"; + return config; + } + +} diff --git a/src/main/java/me/mrletsplay/videobase/VideoBase.java b/src/main/java/me/mrletsplay/videobase/VideoBase.java new file mode 100644 index 0000000..b35aea4 --- /dev/null +++ b/src/main/java/me/mrletsplay/videobase/VideoBase.java @@ -0,0 +1,52 @@ +package me.mrletsplay.videobase; + +import java.nio.file.Path; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + +import me.mrletsplay.simplehttpserver.http.server.HttpServer; +import me.mrletsplay.videobase.library.Library; +import me.mrletsplay.videobase.rest.LibraryAPI; +import me.mrletsplay.videobase.util.Hash; + +public class VideoBase { + + public static final Logger LOGGER = Logger.getLogger(VideoBase.class.getName()); + + private static ScheduledExecutorService executor; + private static Library library; + + public static void main(String[] args) { + executor = Executors.newScheduledThreadPool(0); + + // Verify hash is working + Hash.hash("test"); + + loadLibrary(); + executor.scheduleWithFixedDelay(VideoBase::loadLibrary, 10, 10, TimeUnit.MINUTES); + + HttpServer server = new HttpServer(HttpServer.newConfigurationBuilder() + .hostBindAll() + .port(6969) + .poolSize(20) + .ioWorkers(3) + .create()); + + new LibraryAPI().register(server.getDocumentProvider()); + + server.start(); + } + + public static Library getLibrary() { + return library; + } + + private static void loadLibrary() { + library = Library.load(Path.of("/mnt/wd4tb/Files/ytdl/Aliensrock/")); + + System.out.println(library.getVideos()); + } + +} diff --git a/src/main/java/me/mrletsplay/videobase/library/Library.java b/src/main/java/me/mrletsplay/videobase/library/Library.java new file mode 100644 index 0000000..54491ee --- /dev/null +++ b/src/main/java/me/mrletsplay/videobase/library/Library.java @@ -0,0 +1,149 @@ +package me.mrletsplay.videobase.library; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import me.mrletsplay.mrcore.json.JSONObject; +import me.mrletsplay.mrcore.json.JSONParseException; +import me.mrletsplay.mrcore.json.converter.JSONConverter; +import me.mrletsplay.videobase.VideoBase; +import me.mrletsplay.videobase.util.Hash; + +public class Library { + + public static final String + METADATA_NAME = "meta.json", + VIDEO_METADATA_SUFFIX = ".meta.json"; + + private Path path; + private List