diff --git a/.gitignore b/.gitignore index b76388d..d386a12 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ config.yml # Misc *.class +/target +/.vscode diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b0880b7..7dd92a7 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -27,6 +27,24 @@ "$maven" ], "group": "build" + }, + { + "label": "Maven: clean package (fat jar, rerun)", + "type": "shell", + "command": "mvn clean package", + "problemMatcher": [ + "$maven" + ], + "group": "build" + }, + { + "label": "Maven: clean package (final auto-format)", + "type": "shell", + "command": "mvn clean package", + "problemMatcher": [ + "$maven" + ], + "group": "build" } ] } \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 511ffc8..5f89dbb 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -13,6 +13,43 @@ public class Main { firstTimeSetup(); } + // Ensure format.yml exists by generating a default if missing + File formatFile = new File("format.yml"); + if (!formatFile.exists()) { + String defaultFormat = "events:\n" + + " follow:\n" + + " file_format:\n" + + " text: $userinfo followed\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Follow\n" + + " likes:\n" + + " file_format:\n" + + " text: $userinfo liked $amount\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Likes x$amount\n" + + " shares:\n" + + " file_format:\n" + + " text: $userinfo Shared\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Shared\n" + + " gifts:\n" + + " file_format:\n" + + " text: $userinfo sent x$amount $gift_name\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | x$amount $gift_name\n" + + " chat:\n" + + " file_format:\n" + + " text: $userinfo > $msg\n" + + " cli_format:\n" + + " text: $date | $time | $userinfo | Message > $msg\n"; + try { + Files.writeString(formatFile.toPath(), defaultFormat); + System.out.println("format.yml created with default values."); + } catch (IOException e) { + System.err.println("Failed to create format.yml: " + e.getMessage()); + } + } + // Load config and format try { var config = ConfigLoader.loadConfig("config.yml"); @@ -23,8 +60,6 @@ public class Main { wsServer.start(); System.out.println("WebSocket server running on port " + port); - // Initialize TikTok event listener (placeholder) - TikTokEventListener tiktokListener = new TikTokEventListener(config, format, wsServer); // TODO: Connect TikTokLiveJava and wire up event callbacks to tiktokListener @@ -52,11 +87,96 @@ public class Main { } } - // Write config.yml - String config = "TIKTOK_USERNAME: '" + username + "'\nwebsocket_port: " + port + "\n"; + // Write full config.yml with all event settings (valid YAML) + String config = "# tiktok username to follow\n" + + "TIKTOK_USERNAME: '" + username + "'\n" + + "\n" + + "websocket_port: " + port + " # Requires program restart to take effect\n" + + "\n" + + "events:\n" + + " follow: true\n" + + " likes: true\n" + + " shares: true\n" + + " gifts: true\n" + + " chat: true\n" + + " follow_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " output_path: 'C:/Users/Tiktok/Follows'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " likes_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " amount: true\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " amount: true\n" + + " output_path: 'C:/Users/Tiktok/Likes'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " amount: true\n" + + " shares_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " output_path: 'C:/Users/Tiktok/Shares'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " follower_only_share: true\n" + + " gifts_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " gift_name: true\n" + + " amount: true\n" + + " file_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " gift_name: true\n" + + " amount: true\n" + + " output_path: 'C:/Users/Tiktok/Gifts'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n" + + " gift_name: true\n" + + " amount: true\n" + + " chat_settings:\n" + + " ws_enable:\n" + + " profile_img: true\n" + + " userinfo: true\n" + + " user_style: username\n" + + " file_enable:\n" + + " profile_img: false\n" + + " userinfo: false\n" + + " user_style: username\n" + + " output_path: 'C:/Users/Tiktok/Chat'\n" + + " cli_enable:\n" + + " userinfo: true\n" + + " user_style: username\n"; try { Files.writeString(Paths.get("config.yml"), config); - System.out.println("config.yml created. Please edit it for more options as needed."); + System.out.println("config.yml created with all event settings. Please edit it for more options as needed."); } catch (IOException e) { System.err.println("Failed to write config.yml: " + e.getMessage()); } diff --git a/target/classes/Main.class b/target/classes/Main.class index 218c119..83b1e09 100644 Binary files a/target/classes/Main.class and b/target/classes/Main.class differ diff --git a/target/tiktok-live-event-stream-data-1.0-SNAPSHOT.jar b/target/tiktok-live-event-stream-data-1.0-SNAPSHOT.jar index 16ccdfb..e32921d 100644 Binary files a/target/tiktok-live-event-stream-data-1.0-SNAPSHOT.jar and b/target/tiktok-live-event-stream-data-1.0-SNAPSHOT.jar differ