From 06a1c0d886ab85924efa9d6939df4b630851db19 Mon Sep 17 00:00:00 2001 From: wushuo Date: Sat, 22 Nov 2025 23:46:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8B=86=E5=88=86=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/maven-test.yml | 2 +- .github/workflows/maven.yml | 12 +- ani-rss-api/pom.xml | 27 +++ .../src/main/java/ani/rss/ApiMain.java | 19 ++ .../src}/main/java/ani/rss/entity/About.java | 0 .../src}/main/java/ani/rss/entity/Ani.java | 57 ------ .../main/java/ani/rss/entity/BgmInfo.java | 0 .../java/ani/rss/entity/CollectionInfo.java | 0 .../main/java/ani/rss/entity/EmbyViews.java | 0 .../main/java/ani/rss/entity/EmbyWebHook.java | 46 +++++ .../src/main/java/ani/rss/entity/Global.java | 17 ++ .../src}/main/java/ani/rss/entity/Item.java | 0 .../src}/main/java/ani/rss/entity/Log.java | 0 .../src}/main/java/ani/rss/entity/Login.java | 0 .../src}/main/java/ani/rss/entity/Mikan.java | 0 .../ani/rss/entity/NotificationConfig.java | 0 .../main/java/ani/rss/entity/PlayItem.java | 0 .../main/java/ani/rss/entity/ProxyTest.java | 0 .../src}/main/java/ani/rss/entity/Result.java | 0 .../main/java/ani/rss/entity/StandbyRss.java | 0 .../java/ani/rss/entity/TorrentsInfo.java | 0 .../src}/main/java/ani/rss/entity/TryOut.java | 0 .../main/java/ani/rss/entity/tmdb/Tmdb.java | 0 .../java/ani/rss/entity/tmdb/TmdbCredits.java | 0 .../ani/rss/entity/tmdb/TmdbCreditsCast.java | 0 .../java/ani/rss/entity/tmdb/TmdbEpisode.java | 0 .../java/ani/rss/entity/tmdb/TmdbGenres.java | 0 .../java/ani/rss/entity/tmdb/TmdbGroup.java | 0 .../java/ani/rss/entity/tmdb/TmdbImage.java | 0 .../java/ani/rss/entity/tmdb/TmdbImages.java | 0 .../java/ani/rss/entity/tmdb/TmdbNetwork.java | 0 .../java/ani/rss/entity/tmdb/TmdbSeason.java | 0 .../java/ani/rss/entity/tmdb/TmdbTitle.java | 0 .../ani/rss/entity/tmdb/TmdbTranslation.java | 0 .../rss/entity/tmdb/TmdbTranslationData.java | 0 .../ani/rss/entity/tmdb/TmdbTranslations.java | 0 .../java/ani/rss/entity/tmdb/TmdbVideo.java | 0 .../java/ani/rss/enums/BgmTokenTypeEnum.java | 0 .../ani/rss/enums/NotificationStatusEnum.java | 0 .../ani/rss/enums/NotificationTypeEnum.java | 14 ++ .../ani/rss/enums/ServerChanTypeEnum.java | 0 .../main/java/ani/rss/enums/SortTypeEnum.java | 0 .../main/java/ani/rss/enums/StringEnum.java | 0 .../main/java/ani/rss/enums/TmdbTypeEnum.java | 0 .../main/java/ani/rss/enums/TorrentsTags.java | 0 ani-rss-application/pom.xml | 116 +++++++++++ .../main/java/ani/rss/ApplicationMain.java | 12 +- .../main/java/ani/rss/action/AboutAction.java | 0 .../java/ani/rss/action/AfdianAction.java | 0 .../main/java/ani/rss/action/AniAction.java | 13 +- .../main/java/ani/rss/action/BgmAction.java | 3 +- .../ani/rss/action/BgmCallbackAction.java | 2 +- .../java/ani/rss/action/ClearCacheAction.java | 9 +- .../java/ani/rss/action/CollectionAction.java | 0 .../java/ani/rss/action/ConfigAction.java | 2 +- .../main/java/ani/rss/action/CoverAction.java | 0 .../java/ani/rss/action/CustomCssAction.java | 0 .../java/ani/rss/action/CustomJsAction.java | 0 .../ani/rss/action/DownloadLogsAction.java | 0 .../ani/rss/action/DownloadPathAction.java | 0 .../ani/rss/action/DownloadTestAction.java | 0 .../main/java/ani/rss/action/EmbyAction.java | 0 .../main/java/ani/rss/action/FileAction.java | 4 +- .../java/ani/rss/action/ImportAction.java | 0 .../main/java/ani/rss/action/ItemsAction.java | 0 .../main/java/ani/rss/action/LoginAction.java | 56 +----- .../main/java/ani/rss/action/LogsAction.java | 0 .../main/java/ani/rss/action/MikanAction.java | 0 .../java/ani/rss/action/MikanGroupAction.java | 2 +- .../ani/rss/action/NotificationAction.java | 6 +- .../java/ani/rss/action/PlaylistAction.java | 11 +- .../main/java/ani/rss/action/ProxyAction.java | 0 .../main/java/ani/rss/action/RssAction.java | 2 +- .../java/ani/rss/action/ScrapeAction.java | 0 .../main/java/ani/rss/action/StopAction.java | 6 +- .../java/ani/rss/action/TelegramAction.java | 0 .../main/java/ani/rss/action/TestAction.java | 0 .../java/ani/rss/action/ThemoviedbAction.java | 0 .../java/ani/rss/action/TorrentAction.java | 7 +- .../ani/rss/action/TorrentsInfosAction.java | 0 .../ani/rss/action/TrackersUpdateAction.java | 0 .../java/ani/rss/action/UpdateAction.java | 2 +- .../java/ani/rss/action/UploadAction.java | 0 .../java/ani/rss/action/WebHookAction.java | 76 ++++++- .../src}/main/resources/image/cover.png | Bin .../src}/main/resources/image/icon-64.png | Bin ani-rss-commons/pom.xml | 39 ++++ .../src/main/java/ani/rss/CommonsMain.java | 19 ++ .../main/java/ani/rss/commons/CacheUtil.java | 7 +- .../java/ani/rss/commons}/ExceptionUtil.java | 2 +- .../main/java/ani/rss/commons/FileUtil.java | 32 ++- .../java/ani/rss/commons}/GsonStatic.java | 3 +- .../main/java/ani/rss/commons}/MavenUtil.java | 19 +- .../main/java/ani/rss/commons}/Md5Util.java | 2 +- .../ani/rss/commons}/NumberFormatUtil.java | 2 +- .../ani/rss/commons}/TimeZoneSerializer.java | 4 +- .../main/java/ani/rss/commons/URLUtil.java | 4 +- ani-rss-core/pom.xml | 61 ++++++ .../src/main/java/ani/rss/CoreMain.java | 12 ++ .../main/java/ani/rss/download/Aria2.java | 7 +- .../java/ani/rss/download/BaseDownload.java | 0 .../main/java/ani/rss/download/OpenList.java | 4 +- .../java/ani/rss/download/Transmission.java | 7 +- .../java/ani/rss/download/qBittorrent.java | 9 +- .../java/ani/rss/dto/ImportAniDataDTO.java | 0 .../src}/main/java/ani/rss/entity/Config.java | 0 .../ani/rss/exception/ResultException.java | 0 .../ani/rss/list/FixedSizeLinkedList.java | 0 .../rss/notification/BaseNotification.java | 2 +- .../notification/EmbyRefreshNotification.java | 0 .../rss/notification/MailNotification.java | 2 +- .../notification/ServerChanNotification.java | 2 +- .../rss/notification/ShellNotification.java | 0 .../rss/notification/SystemNotification.java | 0 .../notification/TelegramNotification.java | 2 +- .../rss/notification/WebHookNotification.java | 0 .../src}/main/java/ani/rss/other/Cron.java | 0 .../java/ani/rss/service/ClearService.java | 0 .../java/ani/rss/service/DownloadService.java | 25 ++- .../java/ani/rss/service/NfoGenerator.java | 0 .../java/ani/rss/service/ScrapeService.java | 7 +- .../java/ani/rss/service/TaskService.java | 0 .../src}/main/java/ani/rss/task/BgmTask.java | 0 .../src}/main/java/ani/rss/task/GcTask.java | 0 .../main/java/ani/rss/task/RenameTask.java | 2 +- .../src}/main/java/ani/rss/task/RssTask.java | 2 +- .../ani/rss/util/basic/CidrRangeChecker.java | 0 .../main/java/ani/rss/util/basic/HttpReq.java | 5 +- .../ani/rss/util/basic/HttpRequestPlus.java | 1 + .../main/java/ani/rss/util/basic/LogUtil.java | 0 .../ani/rss/util/basic/RenameCacheUtil.java | 3 +- .../java/ani/rss/util/other/AfdianUtil.java | 2 +- .../java/ani/rss/util/other/AniListUtil.java | 2 +- .../main/java/ani/rss/util/other/AniUtil.java | 66 +++++- .../main/java/ani/rss/util/other/BgmUtil.java | 26 +-- .../java/ani/rss/util/other/ConfigUtil.java | 21 +- .../java/ani/rss/util/other/EmbyUtil.java | 2 +- .../java/ani/rss/util/other/ItemsUtil.java | 10 +- .../java/ani/rss/util/other/MenuUtil.java | 8 +- .../java/ani/rss/util/other/MikanUtil.java | 2 +- .../ani/rss/util/other/NotificationUtil.java | 21 +- .../java/ani/rss/util/other/OpenListUtil.java | 9 +- .../java/ani/rss/util/other/RenameUtil.java | 2 +- .../java/ani/rss/util/other/TmdbUtil.java | 12 +- .../java/ani/rss/util/other/TorrentUtil.java | 7 +- .../java/ani/rss/util/other/UpdateUtil.java | 30 +-- .../src}/main/resources/aria2/addTorrent.json | 0 .../src}/main/resources/aria2/addUri.json | 0 .../resources/aria2/changeGlobalOption.json | 0 .../main/resources/aria2/getGlobalStat.json | 0 .../resources/aria2/removeDownloadResult.json | 0 .../src}/main/resources/aria2/tellActive.json | 0 .../main/resources/aria2/tellStopped.json | 0 .../main/resources/aria2/tellWaiting.json | 0 .../src}/main/resources/logback-template.xml | 0 .../resources/transmission/torrent-add.json | 0 .../resources/transmission/torrent-get.json | 0 .../transmission/torrent-remove.json | 0 .../transmission/torrent-rename-path.json | 0 .../transmission/torrent-set-location.json | 0 .../resources/transmission/torrent-set.json | 0 ani-rss-web/pom.xml | 31 +++ .../src/main/java/ani/rss/WebMain.java | 10 + .../main/java/ani/rss/action/BaseAction.java | 4 +- .../main/java/ani/rss/action/RootAction.java | 2 +- .../main/java/ani/rss/annotation/Auth.java | 0 .../main/java/ani/rss/annotation/Path.java | 0 .../java/ani/rss/auth/enums/AuthType.java | 0 .../main/java/ani/rss/auth/fun/ApiKey.java | 0 .../src}/main/java/ani/rss/auth/fun/Form.java | 2 +- .../main/java/ani/rss/auth/fun/Header.java | 2 +- .../java/ani/rss/auth/fun/IpWhitelist.java | 16 +- .../src/main/java/ani/rss}/util/AuthUtil.java | 68 +++++-- .../main/java/ani/rss/util}/ServerUtil.java | 37 ++-- docker/Dockerfile | 2 +- docker/Dockerfile-arm32v7 | 2 +- docker/Dockerfile-openj9 | 2 +- package-win.sh | 7 +- package.sh | 52 +++-- pom.xml | 188 ++++++------------ src/main/java/ani/rss/entity/EmbyWebHook.java | 116 ----------- .../ani/rss/enums/NotificationTypeEnum.java | 19 -- src/test/java/ScrapeTest.java | 59 ------ 183 files changed, 943 insertions(+), 705 deletions(-) create mode 100644 ani-rss-api/pom.xml create mode 100644 ani-rss-api/src/main/java/ani/rss/ApiMain.java rename {src => ani-rss-api/src}/main/java/ani/rss/entity/About.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/Ani.java (63%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/BgmInfo.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/CollectionInfo.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/EmbyViews.java (100%) create mode 100644 ani-rss-api/src/main/java/ani/rss/entity/EmbyWebHook.java create mode 100644 ani-rss-api/src/main/java/ani/rss/entity/Global.java rename {src => ani-rss-api/src}/main/java/ani/rss/entity/Item.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/Log.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/Login.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/Mikan.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/NotificationConfig.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/PlayItem.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/ProxyTest.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/Result.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/StandbyRss.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/TorrentsInfo.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/TryOut.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/Tmdb.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbCredits.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbCreditsCast.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbEpisode.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbGenres.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbGroup.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbImage.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbImages.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbNetwork.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbSeason.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbTitle.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbTranslation.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbTranslationData.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbTranslations.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/entity/tmdb/TmdbVideo.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/enums/BgmTokenTypeEnum.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/enums/NotificationStatusEnum.java (100%) create mode 100644 ani-rss-api/src/main/java/ani/rss/enums/NotificationTypeEnum.java rename {src => ani-rss-api/src}/main/java/ani/rss/enums/ServerChanTypeEnum.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/enums/SortTypeEnum.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/enums/StringEnum.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/enums/TmdbTypeEnum.java (100%) rename {src => ani-rss-api/src}/main/java/ani/rss/enums/TorrentsTags.java (100%) create mode 100644 ani-rss-application/pom.xml rename src/main/java/ani/rss/Main.java => ani-rss-application/src/main/java/ani/rss/ApplicationMain.java (72%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/AboutAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/AfdianAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/AniAction.java (97%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/BgmAction.java (95%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/BgmCallbackAction.java (97%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/ClearCacheAction.java (86%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/CollectionAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/ConfigAction.java (99%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/CoverAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/CustomCssAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/CustomJsAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/DownloadLogsAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/DownloadPathAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/DownloadTestAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/EmbyAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/FileAction.java (98%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/ImportAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/ItemsAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/LoginAction.java (56%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/LogsAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/MikanAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/MikanGroupAction.java (98%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/NotificationAction.java (92%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/PlaylistAction.java (90%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/ProxyAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/RssAction.java (97%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/ScrapeAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/StopAction.java (91%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/TelegramAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/TestAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/ThemoviedbAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/TorrentAction.java (91%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/TorrentsInfosAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/TrackersUpdateAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/UpdateAction.java (95%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/UploadAction.java (100%) rename {src => ani-rss-application/src}/main/java/ani/rss/action/WebHookAction.java (67%) rename {src => ani-rss-application/src}/main/resources/image/cover.png (100%) rename {src => ani-rss-application/src}/main/resources/image/icon-64.png (100%) create mode 100644 ani-rss-commons/pom.xml create mode 100644 ani-rss-commons/src/main/java/ani/rss/CommonsMain.java rename src/main/java/ani/rss/util/basic/MyCacheUtil.java => ani-rss-commons/src/main/java/ani/rss/commons/CacheUtil.java (84%) rename {src/main/java/ani/rss/util/basic => ani-rss-commons/src/main/java/ani/rss/commons}/ExceptionUtil.java (96%) rename src/main/java/ani/rss/util/basic/MyFileUtil.java => ani-rss-commons/src/main/java/ani/rss/commons/FileUtil.java (83%) rename {src/main/java/ani/rss/util/basic => ani-rss-commons/src/main/java/ani/rss/commons}/GsonStatic.java (95%) rename {src/main/java/ani/rss/util/other => ani-rss-commons/src/main/java/ani/rss/commons}/MavenUtil.java (75%) rename {src/main/java/ani/rss/util/other => ani-rss-commons/src/main/java/ani/rss/commons}/Md5Util.java (92%) rename {src/main/java/ani/rss/util/basic => ani-rss-commons/src/main/java/ani/rss/commons}/NumberFormatUtil.java (95%) rename {src/main/java/ani/rss/other => ani-rss-commons/src/main/java/ani/rss/commons}/TimeZoneSerializer.java (95%) rename src/main/java/ani/rss/util/basic/MyURLUtil.java => ani-rss-commons/src/main/java/ani/rss/commons/URLUtil.java (87%) create mode 100644 ani-rss-core/pom.xml create mode 100644 ani-rss-core/src/main/java/ani/rss/CoreMain.java rename {src => ani-rss-core/src}/main/java/ani/rss/download/Aria2.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/download/BaseDownload.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/download/OpenList.java (99%) rename {src => ani-rss-core/src}/main/java/ani/rss/download/Transmission.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/download/qBittorrent.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/dto/ImportAniDataDTO.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/entity/Config.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/exception/ResultException.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/list/FixedSizeLinkedList.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/BaseNotification.java (99%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/EmbyRefreshNotification.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/MailNotification.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/ServerChanNotification.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/ShellNotification.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/SystemNotification.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/TelegramNotification.java (99%) rename {src => ani-rss-core/src}/main/java/ani/rss/notification/WebHookNotification.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/other/Cron.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/service/ClearService.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/service/DownloadService.java (97%) rename {src => ani-rss-core/src}/main/java/ani/rss/service/NfoGenerator.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/service/ScrapeService.java (97%) rename {src => ani-rss-core/src}/main/java/ani/rss/service/TaskService.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/task/BgmTask.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/task/GcTask.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/task/RenameTask.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/task/RssTask.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/basic/CidrRangeChecker.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/basic/HttpReq.java (96%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/basic/HttpRequestPlus.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/basic/LogUtil.java (100%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/basic/RenameCacheUtil.java (96%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/AfdianUtil.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/AniListUtil.java (97%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/AniUtil.java (82%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/BgmUtil.java (97%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/ConfigUtil.java (96%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/EmbyUtil.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/ItemsUtil.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/MenuUtil.java (96%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/MikanUtil.java (99%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/NotificationUtil.java (73%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/OpenListUtil.java (96%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/RenameUtil.java (99%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/TmdbUtil.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/TorrentUtil.java (98%) rename {src => ani-rss-core/src}/main/java/ani/rss/util/other/UpdateUtil.java (88%) rename {src => ani-rss-core/src}/main/resources/aria2/addTorrent.json (100%) rename {src => ani-rss-core/src}/main/resources/aria2/addUri.json (100%) rename {src => ani-rss-core/src}/main/resources/aria2/changeGlobalOption.json (100%) rename {src => ani-rss-core/src}/main/resources/aria2/getGlobalStat.json (100%) rename {src => ani-rss-core/src}/main/resources/aria2/removeDownloadResult.json (100%) rename {src => ani-rss-core/src}/main/resources/aria2/tellActive.json (100%) rename {src => ani-rss-core/src}/main/resources/aria2/tellStopped.json (100%) rename {src => ani-rss-core/src}/main/resources/aria2/tellWaiting.json (100%) rename {src => ani-rss-core/src}/main/resources/logback-template.xml (100%) rename {src => ani-rss-core/src}/main/resources/transmission/torrent-add.json (100%) rename {src => ani-rss-core/src}/main/resources/transmission/torrent-get.json (100%) rename {src => ani-rss-core/src}/main/resources/transmission/torrent-remove.json (100%) rename {src => ani-rss-core/src}/main/resources/transmission/torrent-rename-path.json (100%) rename {src => ani-rss-core/src}/main/resources/transmission/torrent-set-location.json (100%) rename {src => ani-rss-core/src}/main/resources/transmission/torrent-set.json (100%) create mode 100644 ani-rss-web/pom.xml create mode 100644 ani-rss-web/src/main/java/ani/rss/WebMain.java rename {src => ani-rss-web/src}/main/java/ani/rss/action/BaseAction.java (96%) rename {src => ani-rss-web/src}/main/java/ani/rss/action/RootAction.java (99%) rename {src => ani-rss-web/src}/main/java/ani/rss/annotation/Auth.java (100%) rename {src => ani-rss-web/src}/main/java/ani/rss/annotation/Path.java (100%) rename {src => ani-rss-web/src}/main/java/ani/rss/auth/enums/AuthType.java (100%) rename {src => ani-rss-web/src}/main/java/ani/rss/auth/fun/ApiKey.java (100%) rename {src => ani-rss-web/src}/main/java/ani/rss/auth/fun/Form.java (93%) rename {src => ani-rss-web/src}/main/java/ani/rss/auth/fun/Header.java (95%) rename {src => ani-rss-web/src}/main/java/ani/rss/auth/fun/IpWhitelist.java (86%) rename {src/main/java/ani/rss/auth => ani-rss-web/src/main/java/ani/rss}/util/AuthUtil.java (65%) rename {src/main/java/ani/rss/util/other => ani-rss-web/src/main/java/ani/rss/util}/ServerUtil.java (84%) delete mode 100644 src/main/java/ani/rss/entity/EmbyWebHook.java delete mode 100644 src/main/java/ani/rss/enums/NotificationTypeEnum.java delete mode 100644 src/test/java/ScrapeTest.java diff --git a/.github/workflows/maven-test.yml b/.github/workflows/maven-test.yml index 7ee3708c..0ddfb5b4 100644 --- a/.github/workflows/maven-test.yml +++ b/.github/workflows/maven-test.yml @@ -22,7 +22,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: Artifacts - path: ./target/ani-rss-jar-with-dependencies.jar + path: ./ani-rss-application/target/ani-rss-jar-with-dependencies.jar - name: Login to Docker Hub uses: docker/login-action@v3 with: diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 3cdb9e7e..ff6ccb58 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -35,12 +35,12 @@ jobs: append_body: false token: ${{ secrets.GITHUB_TOKEN }} files: | - ./target/ani-rss-jar-with-dependencies.jar - ./target/ani-rss-jar-with-dependencies.jar.md5 - ./target/ani-rss-launcher.exe - ./target/ani-rss-launcher.exe.md5 - ./target/ani-rss.win.x86_64.zip - ./target/ani-rss.win.x86_64.zip.md5 + ./ani-rss-application/target/ani-rss-jar-with-dependencies.jar + ./ani-rss-application/target/ani-rss-jar-with-dependencies.jar.md5 + ./ani-rss-application/target/ani-rss-launcher.exe + ./ani-rss-application/target/ani-rss-launcher.exe.md5 + ./ani-rss-application/target/ani-rss.win.x86_64.zip + ./ani-rss-application/target/ani-rss.win.x86_64.zip.md5 ./info.json - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/ani-rss-api/pom.xml b/ani-rss-api/pom.xml new file mode 100644 index 00000000..b3d21339 --- /dev/null +++ b/ani-rss-api/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + ani.rss + ani-rss + 2.4.8 + + + ani-rss-api + + + 17 + 17 + UTF-8 + + + + + ani.rss + ani-rss-commons + + + + diff --git a/ani-rss-api/src/main/java/ani/rss/ApiMain.java b/ani-rss-api/src/main/java/ani/rss/ApiMain.java new file mode 100644 index 00000000..20796790 --- /dev/null +++ b/ani-rss-api/src/main/java/ani/rss/ApiMain.java @@ -0,0 +1,19 @@ +package ani.rss; + +import cn.hutool.core.util.ClassUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.Set; + +@Slf4j +public class ApiMain { + public static void main(String[] args) { + Set> classSet = ClassUtil.scanPackage("ani.rss"); + for (Class clazz : classSet) { + if (clazz.isMemberClass()) { + continue; + } + log.info(clazz.getName()); + } + } +} diff --git a/src/main/java/ani/rss/entity/About.java b/ani-rss-api/src/main/java/ani/rss/entity/About.java similarity index 100% rename from src/main/java/ani/rss/entity/About.java rename to ani-rss-api/src/main/java/ani/rss/entity/About.java diff --git a/src/main/java/ani/rss/entity/Ani.java b/ani-rss-api/src/main/java/ani/rss/entity/Ani.java similarity index 63% rename from src/main/java/ani/rss/entity/Ani.java rename to ani-rss-api/src/main/java/ani/rss/entity/Ani.java index 6c899112..3a96752f 100644 --- a/src/main/java/ani/rss/entity/Ani.java +++ b/ani-rss-api/src/main/java/ani/rss/entity/Ani.java @@ -1,14 +1,10 @@ package ani.rss.entity; import ani.rss.entity.tmdb.Tmdb; -import ani.rss.util.other.ConfigUtil; -import cn.hutool.core.lang.UUID; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; import java.util.List; /** @@ -270,58 +266,5 @@ public class Ani implements Serializable { */ private List customTags; - public static Ani createAni() { - Ani newAni = new Ani(); - Config config = ConfigUtil.CONFIG; - return newAni - .setId(UUID.fastUUID().toString()) - .setMikanTitle("") - .setStandbyRssList(new ArrayList<>()) - .setOffset(0) - .setYear(1970) - .setMonth(1) - .setDate(1) - .setEnable(true) - .setOva(false) - .setScore(0.0) - .setLastDownloadTime(0L) - .setImage("") - .setThemoviedbName("") - .setCustomDownloadPath(false) - .setDownloadPath("") - .setGlobalExclude(false) - .setCurrentEpisodeNumber(0) - .setTotalEpisodeNumber(0) - .setMatch(List.of()) - .setExclude(List.of("720[Pp]", "\\d-\\d", "合集", "特别篇")) - .setBgmUrl("") - .setSubgroup("") - .setCustomEpisode(config.getCustomEpisode()) - .setCustomEpisodeStr(config.getCustomEpisodeStr()) - .setCustomEpisodeGroupIndex(config.getCustomEpisodeGroupIndex()) - .setOmit(true) - .setDownloadNew(false) - .setNotDownload(new ArrayList<>()) - .setTmdb( - new Tmdb() - .setId("") - .setName("") - .setDate(new Date()) - ) - .setUpload(config.getUpload()) - .setProcrastinating(true) - .setCustomRenameTemplate(config.getRenameTemplate()) - .setCustomRenameTemplateEnable(false) - .setCustomPriorityKeywordsEnable(false) - .setCustomPriorityKeywords(new ArrayList<>()) - .setMessage(true) - .setAlistPath("") - .setCustomAlistPath(false) - .setCompleted(true) - .setCustomCompleted(false) - .setCustomCompletedPathTemplate("") - .setCustomTags(new ArrayList<>()) - .setCustomTagsEnable(false); - } } diff --git a/src/main/java/ani/rss/entity/BgmInfo.java b/ani-rss-api/src/main/java/ani/rss/entity/BgmInfo.java similarity index 100% rename from src/main/java/ani/rss/entity/BgmInfo.java rename to ani-rss-api/src/main/java/ani/rss/entity/BgmInfo.java diff --git a/src/main/java/ani/rss/entity/CollectionInfo.java b/ani-rss-api/src/main/java/ani/rss/entity/CollectionInfo.java similarity index 100% rename from src/main/java/ani/rss/entity/CollectionInfo.java rename to ani-rss-api/src/main/java/ani/rss/entity/CollectionInfo.java diff --git a/src/main/java/ani/rss/entity/EmbyViews.java b/ani-rss-api/src/main/java/ani/rss/entity/EmbyViews.java similarity index 100% rename from src/main/java/ani/rss/entity/EmbyViews.java rename to ani-rss-api/src/main/java/ani/rss/entity/EmbyViews.java diff --git a/ani-rss-api/src/main/java/ani/rss/entity/EmbyWebHook.java b/ani-rss-api/src/main/java/ani/rss/entity/EmbyWebHook.java new file mode 100644 index 00000000..93364ee0 --- /dev/null +++ b/ani-rss-api/src/main/java/ani/rss/entity/EmbyWebHook.java @@ -0,0 +1,46 @@ +package ani.rss.entity; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * EmbyWebHook + */ +@Data +@Accessors(chain = true) +public class EmbyWebHook implements Serializable { + + @SerializedName(value = "item", alternate = "Item") + private Item item; + + @SerializedName(value = "event", alternate = "Event") + private String event; + + @SerializedName(value = "playbackInfo", alternate = "PlaybackInfo") + private PlaybackInfo playbackInfo; + + @Data + @Accessors(chain = true) + public static class Item implements Serializable { + @SerializedName(value = "path", alternate = "Path") + private String path; + @SerializedName(value = "seriesName", alternate = "SeriesName") + private String seriesName; + @SerializedName(value = "fileName", alternate = "FileName") + private String fileName; + } + + @Data + @Accessors(chain = true) + public static class PlaybackInfo implements Serializable { + /** + * 是否播放完成 + */ + @SerializedName(value = "playedToCompletion", alternate = "PlayedToCompletion") + private Boolean playedToCompletion; + } + +} diff --git a/ani-rss-api/src/main/java/ani/rss/entity/Global.java b/ani-rss-api/src/main/java/ani/rss/entity/Global.java new file mode 100644 index 00000000..889a9e28 --- /dev/null +++ b/ani-rss-api/src/main/java/ani/rss/entity/Global.java @@ -0,0 +1,17 @@ +package ani.rss.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@Data +@Accessors(chain = true) +public class Global implements Serializable { + public static List ARGS = new ArrayList<>(); + + public static String HOST = ""; + public static String HTTP_PORT = "7789"; +} diff --git a/src/main/java/ani/rss/entity/Item.java b/ani-rss-api/src/main/java/ani/rss/entity/Item.java similarity index 100% rename from src/main/java/ani/rss/entity/Item.java rename to ani-rss-api/src/main/java/ani/rss/entity/Item.java diff --git a/src/main/java/ani/rss/entity/Log.java b/ani-rss-api/src/main/java/ani/rss/entity/Log.java similarity index 100% rename from src/main/java/ani/rss/entity/Log.java rename to ani-rss-api/src/main/java/ani/rss/entity/Log.java diff --git a/src/main/java/ani/rss/entity/Login.java b/ani-rss-api/src/main/java/ani/rss/entity/Login.java similarity index 100% rename from src/main/java/ani/rss/entity/Login.java rename to ani-rss-api/src/main/java/ani/rss/entity/Login.java diff --git a/src/main/java/ani/rss/entity/Mikan.java b/ani-rss-api/src/main/java/ani/rss/entity/Mikan.java similarity index 100% rename from src/main/java/ani/rss/entity/Mikan.java rename to ani-rss-api/src/main/java/ani/rss/entity/Mikan.java diff --git a/src/main/java/ani/rss/entity/NotificationConfig.java b/ani-rss-api/src/main/java/ani/rss/entity/NotificationConfig.java similarity index 100% rename from src/main/java/ani/rss/entity/NotificationConfig.java rename to ani-rss-api/src/main/java/ani/rss/entity/NotificationConfig.java diff --git a/src/main/java/ani/rss/entity/PlayItem.java b/ani-rss-api/src/main/java/ani/rss/entity/PlayItem.java similarity index 100% rename from src/main/java/ani/rss/entity/PlayItem.java rename to ani-rss-api/src/main/java/ani/rss/entity/PlayItem.java diff --git a/src/main/java/ani/rss/entity/ProxyTest.java b/ani-rss-api/src/main/java/ani/rss/entity/ProxyTest.java similarity index 100% rename from src/main/java/ani/rss/entity/ProxyTest.java rename to ani-rss-api/src/main/java/ani/rss/entity/ProxyTest.java diff --git a/src/main/java/ani/rss/entity/Result.java b/ani-rss-api/src/main/java/ani/rss/entity/Result.java similarity index 100% rename from src/main/java/ani/rss/entity/Result.java rename to ani-rss-api/src/main/java/ani/rss/entity/Result.java diff --git a/src/main/java/ani/rss/entity/StandbyRss.java b/ani-rss-api/src/main/java/ani/rss/entity/StandbyRss.java similarity index 100% rename from src/main/java/ani/rss/entity/StandbyRss.java rename to ani-rss-api/src/main/java/ani/rss/entity/StandbyRss.java diff --git a/src/main/java/ani/rss/entity/TorrentsInfo.java b/ani-rss-api/src/main/java/ani/rss/entity/TorrentsInfo.java similarity index 100% rename from src/main/java/ani/rss/entity/TorrentsInfo.java rename to ani-rss-api/src/main/java/ani/rss/entity/TorrentsInfo.java diff --git a/src/main/java/ani/rss/entity/TryOut.java b/ani-rss-api/src/main/java/ani/rss/entity/TryOut.java similarity index 100% rename from src/main/java/ani/rss/entity/TryOut.java rename to ani-rss-api/src/main/java/ani/rss/entity/TryOut.java diff --git a/src/main/java/ani/rss/entity/tmdb/Tmdb.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/Tmdb.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/Tmdb.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/Tmdb.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbCredits.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbCredits.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbCredits.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbCredits.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbCreditsCast.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbCreditsCast.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbCreditsCast.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbCreditsCast.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbEpisode.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbEpisode.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbEpisode.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbEpisode.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbGenres.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbGenres.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbGenres.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbGenres.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbGroup.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbGroup.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbGroup.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbGroup.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbImage.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbImage.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbImage.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbImage.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbImages.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbImages.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbImages.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbImages.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbNetwork.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbNetwork.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbNetwork.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbNetwork.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbSeason.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbSeason.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbSeason.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbSeason.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbTitle.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTitle.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbTitle.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTitle.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbTranslation.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTranslation.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbTranslation.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTranslation.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbTranslationData.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTranslationData.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbTranslationData.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTranslationData.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbTranslations.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTranslations.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbTranslations.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbTranslations.java diff --git a/src/main/java/ani/rss/entity/tmdb/TmdbVideo.java b/ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbVideo.java similarity index 100% rename from src/main/java/ani/rss/entity/tmdb/TmdbVideo.java rename to ani-rss-api/src/main/java/ani/rss/entity/tmdb/TmdbVideo.java diff --git a/src/main/java/ani/rss/enums/BgmTokenTypeEnum.java b/ani-rss-api/src/main/java/ani/rss/enums/BgmTokenTypeEnum.java similarity index 100% rename from src/main/java/ani/rss/enums/BgmTokenTypeEnum.java rename to ani-rss-api/src/main/java/ani/rss/enums/BgmTokenTypeEnum.java diff --git a/src/main/java/ani/rss/enums/NotificationStatusEnum.java b/ani-rss-api/src/main/java/ani/rss/enums/NotificationStatusEnum.java similarity index 100% rename from src/main/java/ani/rss/enums/NotificationStatusEnum.java rename to ani-rss-api/src/main/java/ani/rss/enums/NotificationStatusEnum.java diff --git a/ani-rss-api/src/main/java/ani/rss/enums/NotificationTypeEnum.java b/ani-rss-api/src/main/java/ani/rss/enums/NotificationTypeEnum.java new file mode 100644 index 00000000..03104d50 --- /dev/null +++ b/ani-rss-api/src/main/java/ani/rss/enums/NotificationTypeEnum.java @@ -0,0 +1,14 @@ +package ani.rss.enums; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum NotificationTypeEnum { + EMBY_REFRESH, + MAIL, + SERVER_CHAN, + SYSTEM, + TELEGRAM, + WEB_HOOK, + SHELL +} diff --git a/src/main/java/ani/rss/enums/ServerChanTypeEnum.java b/ani-rss-api/src/main/java/ani/rss/enums/ServerChanTypeEnum.java similarity index 100% rename from src/main/java/ani/rss/enums/ServerChanTypeEnum.java rename to ani-rss-api/src/main/java/ani/rss/enums/ServerChanTypeEnum.java diff --git a/src/main/java/ani/rss/enums/SortTypeEnum.java b/ani-rss-api/src/main/java/ani/rss/enums/SortTypeEnum.java similarity index 100% rename from src/main/java/ani/rss/enums/SortTypeEnum.java rename to ani-rss-api/src/main/java/ani/rss/enums/SortTypeEnum.java diff --git a/src/main/java/ani/rss/enums/StringEnum.java b/ani-rss-api/src/main/java/ani/rss/enums/StringEnum.java similarity index 100% rename from src/main/java/ani/rss/enums/StringEnum.java rename to ani-rss-api/src/main/java/ani/rss/enums/StringEnum.java diff --git a/src/main/java/ani/rss/enums/TmdbTypeEnum.java b/ani-rss-api/src/main/java/ani/rss/enums/TmdbTypeEnum.java similarity index 100% rename from src/main/java/ani/rss/enums/TmdbTypeEnum.java rename to ani-rss-api/src/main/java/ani/rss/enums/TmdbTypeEnum.java diff --git a/src/main/java/ani/rss/enums/TorrentsTags.java b/ani-rss-api/src/main/java/ani/rss/enums/TorrentsTags.java similarity index 100% rename from src/main/java/ani/rss/enums/TorrentsTags.java rename to ani-rss-api/src/main/java/ani/rss/enums/TorrentsTags.java diff --git a/ani-rss-application/pom.xml b/ani-rss-application/pom.xml new file mode 100644 index 00000000..1ea95837 --- /dev/null +++ b/ani-rss-application/pom.xml @@ -0,0 +1,116 @@ + + + 4.0.0 + + ani.rss + ani-rss + 2.4.8 + + + ani-rss-application + + + 17 + 17 + UTF-8 + + + + + ani.rss + ani-rss-web + + + org.projectlombok + lombok + provided + + + junit + junit + 4.13.2 + test + + + + + ani-rss + + + org.apache.maven.plugins + maven-assembly-plugin + 3.7.1 + + + jar-with-dependencies + + + + true + ani.rss.ApplicationMain + + + + + + make-assembly + package + + single + + + + + + com.akathist.maven.plugins.launch4j + launch4j-maven-plugin + 2.6.0 + + + l4j + package + + launch4j + + + gui + target/ani-rss-launcher.exe + target/ani-rss-jar-with-dependencies.jar + Java environment is required! + --gui + . + normal + https://adoptium.net/zh-CN/ + https://whichjdk.com/ + false + false + ${project.parent.basedir}/ui/public/favicon.ico + + jre/bin;%JAVA_HOME%/bin;%PATH% + 17 + + -Xms60m -Xmx1g -Xss256k + --enable-native-access=ALL-UNNAMED + --add-opens=java.base/java.net=ALL-UNNAMED + --add-opens=java.base/sun.net.www.protocol.https=ALL-UNNAMED + + + + https://docs.wushuo.top/ + Copyright (C) 2024-2025 + ${project.artifactId} + ${project.artifactId} + ani-rss-launcher.exe + SIMPLIFIED_CHINESE + + + + + + + + + + diff --git a/src/main/java/ani/rss/Main.java b/ani-rss-application/src/main/java/ani/rss/ApplicationMain.java similarity index 72% rename from src/main/java/ani/rss/Main.java rename to ani-rss-application/src/main/java/ani/rss/ApplicationMain.java index c88c6092..2df1697e 100644 --- a/src/main/java/ani/rss/Main.java +++ b/ani-rss-application/src/main/java/ani/rss/ApplicationMain.java @@ -1,9 +1,13 @@ package ani.rss; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.MavenUtil; import ani.rss.other.Cron; import ani.rss.service.TaskService; -import ani.rss.util.basic.ExceptionUtil; -import ani.rss.util.other.*; +import ani.rss.util.ServerUtil; +import ani.rss.util.other.AniUtil; +import ani.rss.util.other.ConfigUtil; +import ani.rss.util.other.MenuUtil; import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; @@ -11,13 +15,13 @@ import java.util.ArrayList; import java.util.List; @Slf4j -public class Main { +public class ApplicationMain { public static List ARGS = new ArrayList<>(); public static void main(String[] args) { System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); - Main.ARGS = List.of(ObjectUtil.defaultIfNull(args, new String[]{})); + ApplicationMain.ARGS = List.of(ObjectUtil.defaultIfNull(args, new String[]{})); try { ConfigUtil.load(); ConfigUtil.backup(); diff --git a/src/main/java/ani/rss/action/AboutAction.java b/ani-rss-application/src/main/java/ani/rss/action/AboutAction.java similarity index 100% rename from src/main/java/ani/rss/action/AboutAction.java rename to ani-rss-application/src/main/java/ani/rss/action/AboutAction.java diff --git a/src/main/java/ani/rss/action/AfdianAction.java b/ani-rss-application/src/main/java/ani/rss/action/AfdianAction.java similarity index 100% rename from src/main/java/ani/rss/action/AfdianAction.java rename to ani-rss-application/src/main/java/ani/rss/action/AfdianAction.java diff --git a/src/main/java/ani/rss/action/AniAction.java b/ani-rss-application/src/main/java/ani/rss/action/AniAction.java similarity index 97% rename from src/main/java/ani/rss/action/AniAction.java rename to ani-rss-application/src/main/java/ani/rss/action/AniAction.java index e89f43a9..e94293d5 100644 --- a/src/main/java/ani/rss/action/AniAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/AniAction.java @@ -3,6 +3,8 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; import ani.rss.auth.enums.AuthType; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.FileUtil; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.Item; @@ -11,16 +13,17 @@ import ani.rss.enums.SortTypeEnum; import ani.rss.service.ClearService; import ani.rss.service.DownloadService; import ani.rss.task.RssTask; -import ani.rss.util.basic.ExceptionUtil; -import ani.rss.util.basic.MyFileUtil; -import ani.rss.util.other.*; +import ani.rss.util.ServerUtil; +import ani.rss.util.other.AniUtil; +import ani.rss.util.other.ConfigUtil; +import ani.rss.util.other.ItemsUtil; +import ani.rss.util.other.TorrentUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.comparator.PinyinComparator; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.text.StrFormatter; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; @@ -219,7 +222,7 @@ public class AniAction implements BaseAction { } try { FileUtil.mkdir(newDownloadPath); - File[] files = MyFileUtil.listFiles(downloadPath); + File[] files = FileUtil.listFiles(downloadPath); for (File oldFile : files) { log.info("移动文件 {} ==> {}", oldFile, newDownloadPath); FileUtil.move(oldFile, new File(newDownloadPath), true); diff --git a/src/main/java/ani/rss/action/BgmAction.java b/ani-rss-application/src/main/java/ani/rss/action/BgmAction.java similarity index 95% rename from src/main/java/ani/rss/action/BgmAction.java rename to ani-rss-application/src/main/java/ani/rss/action/BgmAction.java index 515bcaad..da47c75e 100644 --- a/src/main/java/ani/rss/action/BgmAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/BgmAction.java @@ -5,6 +5,7 @@ import ani.rss.annotation.Path; import ani.rss.entity.Ani; import ani.rss.entity.BgmInfo; import ani.rss.entity.tmdb.Tmdb; +import ani.rss.util.other.AniUtil; import ani.rss.util.other.BgmUtil; import cn.hutool.core.lang.Opt; import cn.hutool.http.server.HttpServerRequest; @@ -33,7 +34,7 @@ public class BgmAction implements BaseAction { case "getAniBySubjectId" -> { String id = request.getParam("id"); BgmInfo bgmInfo = BgmUtil.getBgmInfo(id, true); - Ani ani = BgmUtil.toAni(bgmInfo, Ani.createAni()); + Ani ani = BgmUtil.toAni(bgmInfo, AniUtil.createAni()); ani .setCustomDownloadPath(true); resultSuccess(ani); diff --git a/src/main/java/ani/rss/action/BgmCallbackAction.java b/ani-rss-application/src/main/java/ani/rss/action/BgmCallbackAction.java similarity index 97% rename from src/main/java/ani/rss/action/BgmCallbackAction.java rename to ani-rss-application/src/main/java/ani/rss/action/BgmCallbackAction.java index 89da7aa4..7c37fbee 100644 --- a/src/main/java/ani/rss/action/BgmCallbackAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/BgmCallbackAction.java @@ -2,8 +2,8 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Config; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; import ani.rss.util.other.ConfigUtil; import cn.hutool.http.server.HttpServerRequest; diff --git a/src/main/java/ani/rss/action/ClearCacheAction.java b/ani-rss-application/src/main/java/ani/rss/action/ClearCacheAction.java similarity index 86% rename from src/main/java/ani/rss/action/ClearCacheAction.java rename to ani-rss-application/src/main/java/ani/rss/action/ClearCacheAction.java index 091d3567..b76302b6 100644 --- a/src/main/java/ani/rss/action/ClearCacheAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/ClearCacheAction.java @@ -2,12 +2,11 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; +import ani.rss.commons.FileUtil; import ani.rss.entity.Ani; import ani.rss.service.ClearService; -import ani.rss.util.basic.MyFileUtil; import ani.rss.util.other.AniUtil; import ani.rss.util.other.ConfigUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.http.server.HttpServerRequest; import cn.hutool.http.server.HttpServerResponse; @@ -29,12 +28,12 @@ public class ClearCacheAction implements BaseAction { @Override public synchronized void doAction(HttpServerRequest request, HttpServerResponse response) throws IOException { File configDir = ConfigUtil.getConfigDir(); - String configDirStr = MyFileUtil.getAbsolutePath(configDir); + String configDirStr = FileUtil.getAbsolutePath(configDir); Set covers = AniUtil.ANI_LIST .stream() .map(Ani::getCover) - .map(s -> MyFileUtil.getAbsolutePath(new File(configDirStr + "/files/" + s))) + .map(s -> FileUtil.getAbsolutePath(new File(configDirStr + "/files/" + s))) .collect(Collectors.toSet()); FileUtil.mkdir(configDirStr + "/files"); @@ -43,7 +42,7 @@ public class ClearCacheAction implements BaseAction { Set files = FileUtil.loopFiles(configDirStr + "/files") .stream() .filter(file -> { - String fileName = MyFileUtil.getAbsolutePath(file); + String fileName = FileUtil.getAbsolutePath(file); return !covers.contains(fileName); }).collect(Collectors.toSet()); long filesSize = files.stream() diff --git a/src/main/java/ani/rss/action/CollectionAction.java b/ani-rss-application/src/main/java/ani/rss/action/CollectionAction.java similarity index 100% rename from src/main/java/ani/rss/action/CollectionAction.java rename to ani-rss-application/src/main/java/ani/rss/action/CollectionAction.java diff --git a/src/main/java/ani/rss/action/ConfigAction.java b/ani-rss-application/src/main/java/ani/rss/action/ConfigAction.java similarity index 99% rename from src/main/java/ani/rss/action/ConfigAction.java rename to ani-rss-application/src/main/java/ani/rss/action/ConfigAction.java index 38bca142..b7d01531 100644 --- a/src/main/java/ani/rss/action/ConfigAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/ConfigAction.java @@ -2,12 +2,12 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; +import ani.rss.commons.MavenUtil; import ani.rss.entity.Config; import ani.rss.entity.Login; import ani.rss.service.TaskService; import ani.rss.util.other.AfdianUtil; import ani.rss.util.other.ConfigUtil; -import ani.rss.util.other.MavenUtil; import ani.rss.util.other.TorrentUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; diff --git a/src/main/java/ani/rss/action/CoverAction.java b/ani-rss-application/src/main/java/ani/rss/action/CoverAction.java similarity index 100% rename from src/main/java/ani/rss/action/CoverAction.java rename to ani-rss-application/src/main/java/ani/rss/action/CoverAction.java diff --git a/src/main/java/ani/rss/action/CustomCssAction.java b/ani-rss-application/src/main/java/ani/rss/action/CustomCssAction.java similarity index 100% rename from src/main/java/ani/rss/action/CustomCssAction.java rename to ani-rss-application/src/main/java/ani/rss/action/CustomCssAction.java diff --git a/src/main/java/ani/rss/action/CustomJsAction.java b/ani-rss-application/src/main/java/ani/rss/action/CustomJsAction.java similarity index 100% rename from src/main/java/ani/rss/action/CustomJsAction.java rename to ani-rss-application/src/main/java/ani/rss/action/CustomJsAction.java diff --git a/src/main/java/ani/rss/action/DownloadLogsAction.java b/ani-rss-application/src/main/java/ani/rss/action/DownloadLogsAction.java similarity index 100% rename from src/main/java/ani/rss/action/DownloadLogsAction.java rename to ani-rss-application/src/main/java/ani/rss/action/DownloadLogsAction.java diff --git a/src/main/java/ani/rss/action/DownloadPathAction.java b/ani-rss-application/src/main/java/ani/rss/action/DownloadPathAction.java similarity index 100% rename from src/main/java/ani/rss/action/DownloadPathAction.java rename to ani-rss-application/src/main/java/ani/rss/action/DownloadPathAction.java diff --git a/src/main/java/ani/rss/action/DownloadTestAction.java b/ani-rss-application/src/main/java/ani/rss/action/DownloadTestAction.java similarity index 100% rename from src/main/java/ani/rss/action/DownloadTestAction.java rename to ani-rss-application/src/main/java/ani/rss/action/DownloadTestAction.java diff --git a/src/main/java/ani/rss/action/EmbyAction.java b/ani-rss-application/src/main/java/ani/rss/action/EmbyAction.java similarity index 100% rename from src/main/java/ani/rss/action/EmbyAction.java rename to ani-rss-application/src/main/java/ani/rss/action/EmbyAction.java diff --git a/src/main/java/ani/rss/action/FileAction.java b/ani-rss-application/src/main/java/ani/rss/action/FileAction.java similarity index 98% rename from src/main/java/ani/rss/action/FileAction.java rename to ani-rss-application/src/main/java/ani/rss/action/FileAction.java index d97dd260..25f233a0 100644 --- a/src/main/java/ani/rss/action/FileAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/FileAction.java @@ -3,10 +3,10 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; import ani.rss.auth.enums.AuthType; -import ani.rss.util.basic.ExceptionUtil; +import ani.rss.commons.ExceptionUtil; +import ani.rss.util.ServerUtil; import ani.rss.util.basic.HttpReq; import ani.rss.util.other.ConfigUtil; -import ani.rss.util.other.ServerUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; diff --git a/src/main/java/ani/rss/action/ImportAction.java b/ani-rss-application/src/main/java/ani/rss/action/ImportAction.java similarity index 100% rename from src/main/java/ani/rss/action/ImportAction.java rename to ani-rss-application/src/main/java/ani/rss/action/ImportAction.java diff --git a/src/main/java/ani/rss/action/ItemsAction.java b/ani-rss-application/src/main/java/ani/rss/action/ItemsAction.java similarity index 100% rename from src/main/java/ani/rss/action/ItemsAction.java rename to ani-rss-application/src/main/java/ani/rss/action/ItemsAction.java diff --git a/src/main/java/ani/rss/action/LoginAction.java b/ani-rss-application/src/main/java/ani/rss/action/LoginAction.java similarity index 56% rename from src/main/java/ani/rss/action/LoginAction.java rename to ani-rss-application/src/main/java/ani/rss/action/LoginAction.java index 245b39df..f4b24391 100644 --- a/src/main/java/ani/rss/action/LoginAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/LoginAction.java @@ -2,15 +2,12 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; -import ani.rss.auth.util.AuthUtil; +import ani.rss.commons.CacheUtil; import ani.rss.entity.Config; import ani.rss.entity.Login; -import ani.rss.entity.Result; -import ani.rss.exception.ResultException; -import ani.rss.util.basic.MyCacheUtil; +import ani.rss.util.AuthUtil; import ani.rss.util.other.ConfigUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.text.StrFormatter; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.http.server.HttpServerRequest; @@ -18,8 +15,8 @@ import cn.hutool.http.server.HttpServerResponse; import lombok.extern.slf4j.Slf4j; import java.io.IOException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; + +import static ani.rss.util.AuthUtil.limitLoginAttempts; /** * 登录 @@ -74,51 +71,10 @@ public class LoginAction implements BaseAction { public static void clearLimitLoginAttempts() { String ip = AuthUtil.getIp(); String key = "LimitLoginAttempts#" + ip; - if (MyCacheUtil.containsKey(key)) { - MyCacheUtil.remove(key); + if (CacheUtil.containsKey(key)) { + CacheUtil.remove(key); } } - /** - * 限制尝试次数 - * - * @param isAdd 累加计数 - */ - public static void limitLoginAttempts(Boolean isAdd) { - Config config = ConfigUtil.CONFIG; - boolean limitLoginAttempts = config.getLimitLoginAttempts(); - if (!limitLoginAttempts) { - return; - } - String ip = AuthUtil.getIp(); - String key = "LimitLoginAttempts#" + ip; - - // 1 天内将不再允许尝试 - long timeout = TimeUnit.DAYS.toMillis(1); - - if (!MyCacheUtil.containsKey(key)) { - if (isAdd) { - MyCacheUtil.put(key, new AtomicInteger(1), timeout); - } - return; - } - - AtomicInteger countAtomicInteger = MyCacheUtil.get(key); - int count = countAtomicInteger.getAndAdd(isAdd ? 1 : 0); - - // 失败时 时间将重新计时 - MyCacheUtil.put(key, countAtomicInteger, timeout); - - // 失败 10 次 - if (count < 10) { - return; - } - - log.debug("失败次数过多, 已限制登录 {}", ip); - Result result = new Result() - .setMessage(StrFormatter.format("失败次数过多, 已限制登录 {}", ip)) - .setCode(300); - throw new ResultException(result); - } } diff --git a/src/main/java/ani/rss/action/LogsAction.java b/ani-rss-application/src/main/java/ani/rss/action/LogsAction.java similarity index 100% rename from src/main/java/ani/rss/action/LogsAction.java rename to ani-rss-application/src/main/java/ani/rss/action/LogsAction.java diff --git a/src/main/java/ani/rss/action/MikanAction.java b/ani-rss-application/src/main/java/ani/rss/action/MikanAction.java similarity index 100% rename from src/main/java/ani/rss/action/MikanAction.java rename to ani-rss-application/src/main/java/ani/rss/action/MikanAction.java diff --git a/src/main/java/ani/rss/action/MikanGroupAction.java b/ani-rss-application/src/main/java/ani/rss/action/MikanGroupAction.java similarity index 98% rename from src/main/java/ani/rss/action/MikanGroupAction.java rename to ani-rss-application/src/main/java/ani/rss/action/MikanGroupAction.java index 842d453d..30ea9934 100644 --- a/src/main/java/ani/rss/action/MikanGroupAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/MikanGroupAction.java @@ -2,9 +2,9 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Mikan; import ani.rss.entity.TorrentsInfo; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.other.MikanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.http.server.HttpServerRequest; diff --git a/src/main/java/ani/rss/action/NotificationAction.java b/ani-rss-application/src/main/java/ani/rss/action/NotificationAction.java similarity index 92% rename from src/main/java/ani/rss/action/NotificationAction.java rename to ani-rss-application/src/main/java/ani/rss/action/NotificationAction.java index 6c11c1c1..8686171a 100644 --- a/src/main/java/ani/rss/action/NotificationAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/NotificationAction.java @@ -11,6 +11,7 @@ import ani.rss.enums.NotificationTypeEnum; import ani.rss.notification.BaseNotification; import ani.rss.util.other.AniUtil; import ani.rss.util.other.BgmUtil; +import ani.rss.util.other.NotificationUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.http.server.HttpServerRequest; import cn.hutool.http.server.HttpServerResponse; @@ -46,8 +47,9 @@ public class NotificationAction implements BaseAction { private void test() { NotificationConfig notificationConfig = getBody(NotificationConfig.class); NotificationTypeEnum notificationType = notificationConfig.getNotificationType(); - BaseNotification baseNotification = ReflectUtil.newInstance(notificationType.getAClass()); - Ani ani = Ani.createAni(); + Class aClass = NotificationUtil.NOTIFICATION_MAP.get(notificationType); + BaseNotification baseNotification = ReflectUtil.newInstance(aClass); + Ani ani = AniUtil.createAni(); ani.setBgmUrl("https://bgm.tv/subject/424883"); BgmInfo bgmInfo = BgmUtil.getBgmInfo(ani); String image = bgmInfo.getImage(); diff --git a/src/main/java/ani/rss/action/PlaylistAction.java b/ani-rss-application/src/main/java/ani/rss/action/PlaylistAction.java similarity index 90% rename from src/main/java/ani/rss/action/PlaylistAction.java rename to ani-rss-application/src/main/java/ani/rss/action/PlaylistAction.java index 7f8b6d32..da35e5da 100644 --- a/src/main/java/ani/rss/action/PlaylistAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/PlaylistAction.java @@ -3,16 +3,15 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; import ani.rss.auth.enums.AuthType; +import ani.rss.commons.FileUtil; import ani.rss.download.BaseDownload; import ani.rss.entity.Ani; import ani.rss.entity.PlayItem; import ani.rss.enums.StringEnum; import ani.rss.service.DownloadService; -import ani.rss.util.basic.MyFileUtil; import ani.rss.util.other.AniUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; @@ -60,7 +59,7 @@ public class PlaylistAction implements BaseAction { public List getPlayItem(File file) { List playItems = new ArrayList<>(); if (file.isDirectory()) { - File[] files = MyFileUtil.listFiles(file); + File[] files = FileUtil.listFiles(file); for (File itFile : files) { playItems.addAll(getPlayItem(itFile)); } @@ -76,7 +75,7 @@ public class PlaylistAction implements BaseAction { if (!ReUtil.contains(StringEnum.SEASON_REG, file.getName())) { return playItems; } - File[] files = MyFileUtil.listFiles(file.getParentFile()); + File[] files = FileUtil.listFiles(file.getParentFile()); List subtitles = Arrays.stream(files) .filter(f -> List.of("ass", "srt").contains(ObjectUtil.defaultIfNull(FileUtil.extName(f), ""))) .filter(f -> f.getName().startsWith(FileUtil.mainName(file.getName()))) @@ -85,13 +84,13 @@ public class PlaylistAction implements BaseAction { return new PlayItem.Subtitles() .setName(name) .setHtml(name.toUpperCase()) - .setUrl(Base64.encode(MyFileUtil.getAbsolutePath(f))) + .setUrl(Base64.encode(FileUtil.getAbsolutePath(f))) .setType(FileUtil.extName(f)); }).toList(); subtitles = CollUtil.distinct(subtitles, PlayItem.Subtitles::getName, true); PlayItem playItem = new PlayItem(); playItem.setSubtitles(subtitles); - playItem.setFilename(Base64.encode(MyFileUtil.getAbsolutePath(file))) + playItem.setFilename(Base64.encode(FileUtil.getAbsolutePath(file))) .setName(file.getName()) .setLastModify(file.lastModified()) .setTitle(ReUtil.get(StringEnum.SEASON_REG, file.getName(), 0)); diff --git a/src/main/java/ani/rss/action/ProxyAction.java b/ani-rss-application/src/main/java/ani/rss/action/ProxyAction.java similarity index 100% rename from src/main/java/ani/rss/action/ProxyAction.java rename to ani-rss-application/src/main/java/ani/rss/action/ProxyAction.java diff --git a/src/main/java/ani/rss/action/RssAction.java b/ani-rss-application/src/main/java/ani/rss/action/RssAction.java similarity index 97% rename from src/main/java/ani/rss/action/RssAction.java rename to ani-rss-application/src/main/java/ani/rss/action/RssAction.java index d5111024..fea33bbc 100644 --- a/src/main/java/ani/rss/action/RssAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/RssAction.java @@ -2,8 +2,8 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; +import ani.rss.commons.ExceptionUtil; import ani.rss.entity.Ani; -import ani.rss.util.basic.ExceptionUtil; import ani.rss.util.other.AniUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ReUtil; diff --git a/src/main/java/ani/rss/action/ScrapeAction.java b/ani-rss-application/src/main/java/ani/rss/action/ScrapeAction.java similarity index 100% rename from src/main/java/ani/rss/action/ScrapeAction.java rename to ani-rss-application/src/main/java/ani/rss/action/ScrapeAction.java diff --git a/src/main/java/ani/rss/action/StopAction.java b/ani-rss-application/src/main/java/ani/rss/action/StopAction.java similarity index 91% rename from src/main/java/ani/rss/action/StopAction.java rename to ani-rss-application/src/main/java/ani/rss/action/StopAction.java index 12711c3b..22aeb90e 100644 --- a/src/main/java/ani/rss/action/StopAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/StopAction.java @@ -2,8 +2,8 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; -import ani.rss.util.other.ServerUtil; -import ani.rss.util.other.UpdateUtil; +import ani.rss.commons.MavenUtil; +import ani.rss.util.ServerUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.RuntimeUtil; @@ -32,7 +32,7 @@ public class StopAction implements BaseAction { resultSuccessMsg("正在{}", s); ThreadUtil.execute(() -> { ThreadUtil.sleep(3000); - File jar = UpdateUtil.getJar(); + File jar = MavenUtil.getJar(); String extName = FileUtil.extName(jar); ServerUtil.stop(); if ("exe".equals(extName) && status == 0) { diff --git a/src/main/java/ani/rss/action/TelegramAction.java b/ani-rss-application/src/main/java/ani/rss/action/TelegramAction.java similarity index 100% rename from src/main/java/ani/rss/action/TelegramAction.java rename to ani-rss-application/src/main/java/ani/rss/action/TelegramAction.java diff --git a/src/main/java/ani/rss/action/TestAction.java b/ani-rss-application/src/main/java/ani/rss/action/TestAction.java similarity index 100% rename from src/main/java/ani/rss/action/TestAction.java rename to ani-rss-application/src/main/java/ani/rss/action/TestAction.java diff --git a/src/main/java/ani/rss/action/ThemoviedbAction.java b/ani-rss-application/src/main/java/ani/rss/action/ThemoviedbAction.java similarity index 100% rename from src/main/java/ani/rss/action/ThemoviedbAction.java rename to ani-rss-application/src/main/java/ani/rss/action/ThemoviedbAction.java diff --git a/src/main/java/ani/rss/action/TorrentAction.java b/ani-rss-application/src/main/java/ani/rss/action/TorrentAction.java similarity index 91% rename from src/main/java/ani/rss/action/TorrentAction.java rename to ani-rss-application/src/main/java/ani/rss/action/TorrentAction.java index b0edc383..e1d0ea9e 100644 --- a/src/main/java/ani/rss/action/TorrentAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/TorrentAction.java @@ -2,12 +2,11 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; +import ani.rss.commons.FileUtil; import ani.rss.entity.Ani; -import ani.rss.util.basic.MyFileUtil; +import ani.rss.util.ServerUtil; import ani.rss.util.other.AniUtil; -import ani.rss.util.other.ServerUtil; import ani.rss.util.other.TorrentUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.Method; import cn.hutool.http.server.HttpServerRequest; @@ -53,7 +52,7 @@ public class TorrentAction implements BaseAction { Ani ani = first.get(); File torrentDir = TorrentUtil.getTorrentDir(ani); - File[] files = MyFileUtil.listFiles(torrentDir); + File[] files = FileUtil.listFiles(torrentDir); for (File file : files) { String s = FileUtil.mainName(file); if (infoHashList.contains(s)) { diff --git a/src/main/java/ani/rss/action/TorrentsInfosAction.java b/ani-rss-application/src/main/java/ani/rss/action/TorrentsInfosAction.java similarity index 100% rename from src/main/java/ani/rss/action/TorrentsInfosAction.java rename to ani-rss-application/src/main/java/ani/rss/action/TorrentsInfosAction.java diff --git a/src/main/java/ani/rss/action/TrackersUpdateAction.java b/ani-rss-application/src/main/java/ani/rss/action/TrackersUpdateAction.java similarity index 100% rename from src/main/java/ani/rss/action/TrackersUpdateAction.java rename to ani-rss-application/src/main/java/ani/rss/action/TrackersUpdateAction.java diff --git a/src/main/java/ani/rss/action/UpdateAction.java b/ani-rss-application/src/main/java/ani/rss/action/UpdateAction.java similarity index 95% rename from src/main/java/ani/rss/action/UpdateAction.java rename to ani-rss-application/src/main/java/ani/rss/action/UpdateAction.java index 5eae1246..3594196f 100644 --- a/src/main/java/ani/rss/action/UpdateAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/UpdateAction.java @@ -2,8 +2,8 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; +import ani.rss.commons.ExceptionUtil; import ani.rss.entity.About; -import ani.rss.util.basic.ExceptionUtil; import ani.rss.util.other.UpdateUtil; import cn.hutool.http.server.HttpServerRequest; import cn.hutool.http.server.HttpServerResponse; diff --git a/src/main/java/ani/rss/action/UploadAction.java b/ani-rss-application/src/main/java/ani/rss/action/UploadAction.java similarity index 100% rename from src/main/java/ani/rss/action/UploadAction.java rename to ani-rss-application/src/main/java/ani/rss/action/UploadAction.java diff --git a/src/main/java/ani/rss/action/WebHookAction.java b/ani-rss-application/src/main/java/ani/rss/action/WebHookAction.java similarity index 67% rename from src/main/java/ani/rss/action/WebHookAction.java rename to ani-rss-application/src/main/java/ani/rss/action/WebHookAction.java index d90b31b0..0fc03f43 100644 --- a/src/main/java/ani/rss/action/WebHookAction.java +++ b/ani-rss-application/src/main/java/ani/rss/action/WebHookAction.java @@ -3,15 +3,14 @@ package ani.rss.action; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; import ani.rss.auth.enums.AuthType; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.EmbyWebHook; +import ani.rss.entity.tmdb.Tmdb; import ani.rss.enums.StringEnum; -import ani.rss.util.basic.GsonStatic; -import ani.rss.util.other.AniUtil; -import ani.rss.util.other.BgmUtil; -import ani.rss.util.other.ConfigUtil; -import ani.rss.util.other.ItemsUtil; +import ani.rss.service.DownloadService; +import ani.rss.util.other.*; import cn.hutool.core.thread.ExecutorBuilder; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; @@ -20,8 +19,10 @@ import cn.hutool.http.server.HttpServerResponse; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; +import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; @@ -94,7 +95,7 @@ public class WebHookAction implements BaseAction { // 优先匹配路径相同的 String subjectId = anis.stream() - .filter(embyWebHook::equalsAni) + .filter(ani -> embyEqualsAni(embyWebHook, ani)) .map(BgmUtil::getSubjectId) .findFirst() .orElseGet(() -> BgmUtil.getSubjectId(seriesName, season)); @@ -112,6 +113,69 @@ public class WebHookAction implements BaseAction { }); } + /** + * 是否匹配到订阅 + * + * @param ani + * @return + */ + public Boolean embyEqualsAni(EmbyWebHook embyWebHook, Ani ani) { + EmbyWebHook.Item item = embyWebHook.getItem(); + String fileName = item.getFileName(); + if (!ReUtil.contains(StringEnum.SEASON_REG, fileName)) { + return false; + } + + // 季 + int season = Integer.parseInt(ReUtil.get(StringEnum.SEASON_REG, fileName, 1)); + + if (season != ani.getSeason()) { + return false; + } + + String bgmUrl = ani.getBgmUrl(); + if (StrUtil.isBlank(bgmUrl)) { + // bgmUrl为空 + return false; + } + + String path = item.getPath(); + String parent = new File(path).getParent(); + String downloadPath = DownloadService.getDownloadPath(ani); + if (downloadPath.equals(parent)) { + // 路径相同 + return true; + } + + String title = ani.getTitle(); + title = RenameUtil.renameDel(title, false); + String seriesName = item.getSeriesName(); + if (title.equals(seriesName)) { + // 名称与季相同 + return true; + } + + Tmdb tmdb = ani.getTmdb(); + if (Objects.isNull(tmdb)) { + return false; + } + + // 对比tmdb名称 + String name = tmdb.getName(); + if (StrUtil.isNotBlank(name)) { + if (name.equals(seriesName)) { + return true; + } + } + + // 对比tmdb原名 + String originalName = tmdb.getOriginalName(); + if (StrUtil.isNotBlank(originalName)) { + return originalName.equals(seriesName); + } + return false; + } + /** * 获取播放状态 * diff --git a/src/main/resources/image/cover.png b/ani-rss-application/src/main/resources/image/cover.png similarity index 100% rename from src/main/resources/image/cover.png rename to ani-rss-application/src/main/resources/image/cover.png diff --git a/src/main/resources/image/icon-64.png b/ani-rss-application/src/main/resources/image/icon-64.png similarity index 100% rename from src/main/resources/image/icon-64.png rename to ani-rss-application/src/main/resources/image/icon-64.png diff --git a/ani-rss-commons/pom.xml b/ani-rss-commons/pom.xml new file mode 100644 index 00000000..7986b8da --- /dev/null +++ b/ani-rss-commons/pom.xml @@ -0,0 +1,39 @@ + + + 4.0.0 + + ani.rss + ani-rss + 2.4.8 + + + ani-rss-commons + + + 17 + 17 + UTF-8 + + + + + org.projectlombok + lombok + + + com.google.code.gson + gson + + + ch.qos.logback + logback-classic + + + cn.hutool + hutool-all + + + + diff --git a/ani-rss-commons/src/main/java/ani/rss/CommonsMain.java b/ani-rss-commons/src/main/java/ani/rss/CommonsMain.java new file mode 100644 index 00000000..fae8855b --- /dev/null +++ b/ani-rss-commons/src/main/java/ani/rss/CommonsMain.java @@ -0,0 +1,19 @@ +package ani.rss; + +import cn.hutool.core.util.ClassUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.Set; + +@Slf4j +public class CommonsMain { + public static void main(String[] args) { + Set> classSet = ClassUtil.scanPackage("ani.rss.commons"); + for (Class clazz : classSet) { + if (clazz.isMemberClass()) { + continue; + } + log.info(clazz.getName()); + } + } +} diff --git a/src/main/java/ani/rss/util/basic/MyCacheUtil.java b/ani-rss-commons/src/main/java/ani/rss/commons/CacheUtil.java similarity index 84% rename from src/main/java/ani/rss/util/basic/MyCacheUtil.java rename to ani-rss-commons/src/main/java/ani/rss/commons/CacheUtil.java index b13ea72a..524e947d 100644 --- a/src/main/java/ani/rss/util/basic/MyCacheUtil.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/CacheUtil.java @@ -1,13 +1,12 @@ -package ani.rss.util.basic; +package ani.rss.commons; -import cn.hutool.cache.CacheUtil; import cn.hutool.cache.impl.FIFOCache; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; @Slf4j -public class MyCacheUtil { - static final FIFOCache CACHE = CacheUtil.newFIFOCache(1024 * 8); +public class CacheUtil { + static final FIFOCache CACHE = cn.hutool.cache.CacheUtil.newFIFOCache(1024 * 8); @Synchronized("CACHE") public static V get(Object key) { diff --git a/src/main/java/ani/rss/util/basic/ExceptionUtil.java b/ani-rss-commons/src/main/java/ani/rss/commons/ExceptionUtil.java similarity index 96% rename from src/main/java/ani/rss/util/basic/ExceptionUtil.java rename to ani-rss-commons/src/main/java/ani/rss/commons/ExceptionUtil.java index 30d72ed2..796d97f3 100644 --- a/src/main/java/ani/rss/util/basic/ExceptionUtil.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/ExceptionUtil.java @@ -1,4 +1,4 @@ -package ani.rss.util.basic; +package ani.rss.commons; import cn.hutool.core.util.StrUtil; diff --git a/src/main/java/ani/rss/util/basic/MyFileUtil.java b/ani-rss-commons/src/main/java/ani/rss/commons/FileUtil.java similarity index 83% rename from src/main/java/ani/rss/util/basic/MyFileUtil.java rename to ani-rss-commons/src/main/java/ani/rss/commons/FileUtil.java index c257d703..a51e31c2 100644 --- a/src/main/java/ani/rss/util/basic/MyFileUtil.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/FileUtil.java @@ -1,6 +1,6 @@ -package ani.rss.util.basic; +package ani.rss.commons; -import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReUtil; @@ -8,7 +8,7 @@ import java.io.File; import java.util.List; import java.util.Objects; -public class MyFileUtil { +public class FileUtil extends cn.hutool.core.io.FileUtil { /** * 获取绝对路径 并把 windows 狗日的 \ 转换为 / @@ -55,7 +55,7 @@ public class MyFileUtil { public static String normalize(String path) { path = path.trim(); - String s = FileUtil.normalize(path); + String s = cn.hutool.core.io.FileUtil.normalize(path); while (s.endsWith("/")) { s = s.substring(0, s.length() - 1); } @@ -63,23 +63,14 @@ public class MyFileUtil { } /** - * 获取文件列表 不会存在空指针问题 + * 获得文件的扩展名(后缀名),扩展名不带“.” * - * @param path 文件夹位置 - * @return 文件列表 + * @param fileName 文件名 + * @return 扩展名 + * @see FileNameUtil#extName(String) */ - public static List listFileList(String path) { - return List.of(listFiles(path)); - } - - /** - * 获取文件列表 不会存在空指针问题 - * - * @param file 文件夹位置 - * @return 文件列表 - */ - public static List listFileList(File file) { - return List.of(listFiles(file)); + public static String extName(String fileName) { + return FileNameUtil.extName(fileName); } /** @@ -111,4 +102,7 @@ public class MyFileUtil { return new File[0]; } + public static List listFileList(String path) { + return List.of(listFiles(path)); + } } diff --git a/src/main/java/ani/rss/util/basic/GsonStatic.java b/ani-rss-commons/src/main/java/ani/rss/commons/GsonStatic.java similarity index 95% rename from src/main/java/ani/rss/util/basic/GsonStatic.java rename to ani-rss-commons/src/main/java/ani/rss/commons/GsonStatic.java index 14383c51..69735ee5 100644 --- a/src/main/java/ani/rss/util/basic/GsonStatic.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/GsonStatic.java @@ -1,6 +1,5 @@ -package ani.rss.util.basic; +package ani.rss.commons; -import ani.rss.other.TimeZoneSerializer; import cn.hutool.core.date.DatePattern; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/src/main/java/ani/rss/util/other/MavenUtil.java b/ani-rss-commons/src/main/java/ani/rss/commons/MavenUtil.java similarity index 75% rename from src/main/java/ani/rss/util/other/MavenUtil.java rename to ani-rss-commons/src/main/java/ani/rss/commons/MavenUtil.java index e00753bb..0f7433e7 100644 --- a/src/main/java/ani/rss/util/other/MavenUtil.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/MavenUtil.java @@ -1,9 +1,11 @@ -package ani.rss.util.other; +package ani.rss.commons; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.system.OsInfo; +import cn.hutool.system.SystemUtil; import lombok.Cleanup; import lombok.extern.slf4j.Slf4j; @@ -21,7 +23,7 @@ public class MavenUtil { public static JarFile JAR_FILE = null; static { - File jar = UpdateUtil.getJar(); + File jar = getJar(); try { if (isJar()) { JAR_FILE = new JarFile(jar); @@ -31,8 +33,16 @@ public class MavenUtil { } } + public static File getJar() { + OsInfo osInfo = SystemUtil.getOsInfo(); + String splitStr = osInfo.isWindows() ? ";" : ":"; + String s = System.getProperty("java.class.path") + .split(splitStr)[0]; + return new File(s); + } + public static Boolean isJar() { - File jar = UpdateUtil.getJar(); + File jar = getJar(); if (jar.isDirectory()) { return false; @@ -52,7 +62,8 @@ public class MavenUtil { } try { if (Objects.nonNull(JAR_FILE)) { - JarEntry jarEntry = JAR_FILE.getJarEntry("META-INF/maven/ani.rss/ani-rss/pom.xml"); + String pomPath = "META-INF/maven/ani.rss/ani-rss-application/pom.xml"; + JarEntry jarEntry = JAR_FILE.getJarEntry(pomPath); @Cleanup InputStream inputStream = JAR_FILE.getInputStream(jarEntry); String s = IoUtil.readUtf8(inputStream); diff --git a/src/main/java/ani/rss/util/other/Md5Util.java b/ani-rss-commons/src/main/java/ani/rss/commons/Md5Util.java similarity index 92% rename from src/main/java/ani/rss/util/other/Md5Util.java rename to ani-rss-commons/src/main/java/ani/rss/commons/Md5Util.java index 400442fc..da6f76ad 100644 --- a/src/main/java/ani/rss/util/other/Md5Util.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/Md5Util.java @@ -1,4 +1,4 @@ -package ani.rss.util.other; +package ani.rss.commons; import cn.hutool.core.util.StrUtil; diff --git a/src/main/java/ani/rss/util/basic/NumberFormatUtil.java b/ani-rss-commons/src/main/java/ani/rss/commons/NumberFormatUtil.java similarity index 95% rename from src/main/java/ani/rss/util/basic/NumberFormatUtil.java rename to ani-rss-commons/src/main/java/ani/rss/commons/NumberFormatUtil.java index 1c4fbf98..3cab9a1f 100644 --- a/src/main/java/ani/rss/util/basic/NumberFormatUtil.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/NumberFormatUtil.java @@ -1,4 +1,4 @@ -package ani.rss.util.basic; +package ani.rss.commons; import java.text.NumberFormat; diff --git a/src/main/java/ani/rss/other/TimeZoneSerializer.java b/ani-rss-commons/src/main/java/ani/rss/commons/TimeZoneSerializer.java similarity index 95% rename from src/main/java/ani/rss/other/TimeZoneSerializer.java rename to ani-rss-commons/src/main/java/ani/rss/commons/TimeZoneSerializer.java index 17f3a2b0..336c0dc7 100644 --- a/src/main/java/ani/rss/other/TimeZoneSerializer.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/TimeZoneSerializer.java @@ -1,4 +1,4 @@ -package ani.rss.other; +package ani.rss.commons; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -15,4 +15,4 @@ public class TimeZoneSerializer implements JsonSerializer { jsonObject.addProperty("id", src.getID()); return jsonObject; } -} \ No newline at end of file +} diff --git a/src/main/java/ani/rss/util/basic/MyURLUtil.java b/ani-rss-commons/src/main/java/ani/rss/commons/URLUtil.java similarity index 87% rename from src/main/java/ani/rss/util/basic/MyURLUtil.java rename to ani-rss-commons/src/main/java/ani/rss/commons/URLUtil.java index c20d8724..780319b0 100644 --- a/src/main/java/ani/rss/util/basic/MyURLUtil.java +++ b/ani-rss-commons/src/main/java/ani/rss/commons/URLUtil.java @@ -1,10 +1,10 @@ -package ani.rss.util.basic; +package ani.rss.commons; import cn.hutool.core.text.StrFormatter; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; -public class MyURLUtil { +public class URLUtil extends cn.hutool.core.util.URLUtil { /** * 自动添加http协议 * diff --git a/ani-rss-core/pom.xml b/ani-rss-core/pom.xml new file mode 100644 index 00000000..f1d3264e --- /dev/null +++ b/ani-rss-core/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ani.rss + ani-rss + 2.4.8 + + + ani-rss-core + + + 17 + 17 + UTF-8 + + + + + ani.rss + ani-rss-api + + + cn.hutool + hutool-all + + + org.eclipse + bittorrent + 0.3.0-v20070627-1030 + + + org.xerial + sqlite-jdbc + 3.50.3.0 + + + com.sun.mail + javax.mail + 1.6.2 + + + ch.qos.logback + logback-classic + 1.5.19 + + + io.github.biezhi + TinyPinyin + 2.0.3.RELEASE + + + org.jsoup + jsoup + 1.21.2 + + + + diff --git a/ani-rss-core/src/main/java/ani/rss/CoreMain.java b/ani-rss-core/src/main/java/ani/rss/CoreMain.java new file mode 100644 index 00000000..0db2601d --- /dev/null +++ b/ani-rss-core/src/main/java/ani/rss/CoreMain.java @@ -0,0 +1,12 @@ +package ani.rss; + +import ani.rss.commons.MavenUtil; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class CoreMain { + public static void main(String[] args) { + String version = MavenUtil.getVersion(); + log.info("version: {}", version); + } +} diff --git a/src/main/java/ani/rss/download/Aria2.java b/ani-rss-core/src/main/java/ani/rss/download/Aria2.java similarity index 98% rename from src/main/java/ani/rss/download/Aria2.java rename to ani-rss-core/src/main/java/ani/rss/download/Aria2.java index c7249dbe..0e8603d7 100644 --- a/src/main/java/ani/rss/download/Aria2.java +++ b/ani-rss-core/src/main/java/ani/rss/download/Aria2.java @@ -1,16 +1,15 @@ package ani.rss.download; +import ani.rss.commons.FileUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.Item; import ani.rss.entity.TorrentsInfo; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyFileUtil; import ani.rss.util.basic.RenameCacheUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrFormatter; @@ -113,7 +112,7 @@ public class Aria2 implements BaseDownload { .setName(name) .setHash(infoHash) .setState(state) - .setDownloadDir(MyFileUtil.getAbsolutePath(dir)) + .setDownloadDir(FileUtil.getAbsolutePath(dir)) .setFiles(() -> files); torrentsInfos.add(torrentsInfo); } diff --git a/src/main/java/ani/rss/download/BaseDownload.java b/ani-rss-core/src/main/java/ani/rss/download/BaseDownload.java similarity index 100% rename from src/main/java/ani/rss/download/BaseDownload.java rename to ani-rss-core/src/main/java/ani/rss/download/BaseDownload.java diff --git a/src/main/java/ani/rss/download/OpenList.java b/ani-rss-core/src/main/java/ani/rss/download/OpenList.java similarity index 99% rename from src/main/java/ani/rss/download/OpenList.java rename to ani-rss-core/src/main/java/ani/rss/download/OpenList.java index 0c8631ec..b35d5a91 100644 --- a/src/main/java/ani/rss/download/OpenList.java +++ b/ani-rss-core/src/main/java/ani/rss/download/OpenList.java @@ -1,13 +1,13 @@ package ani.rss.download; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.Item; import ani.rss.entity.TorrentsInfo; import ani.rss.enums.NotificationStatusEnum; import ani.rss.enums.StringEnum; -import ani.rss.util.basic.ExceptionUtil; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; import ani.rss.util.other.NotificationUtil; import ani.rss.util.other.TorrentUtil; diff --git a/src/main/java/ani/rss/download/Transmission.java b/ani-rss-core/src/main/java/ani/rss/download/Transmission.java similarity index 98% rename from src/main/java/ani/rss/download/Transmission.java rename to ani-rss-core/src/main/java/ani/rss/download/Transmission.java index 139df1bf..f29c8efc 100644 --- a/src/main/java/ani/rss/download/Transmission.java +++ b/ani-rss-core/src/main/java/ani/rss/download/Transmission.java @@ -1,16 +1,15 @@ package ani.rss.download; +import ani.rss.commons.FileUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.Item; import ani.rss.entity.TorrentsInfo; import ani.rss.enums.TorrentsTags; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyFileUtil; import ani.rss.util.basic.RenameCacheUtil; import cn.hutool.core.codec.Base64; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrFormatter; @@ -123,7 +122,7 @@ public class Transmission implements BaseDownload { .setHash(item.get("hashString").getAsString()) .setState(state) .setId(item.get("id").getAsString()) - .setDownloadDir(MyFileUtil.getAbsolutePath(downloadDir)) + .setDownloadDir(FileUtil.getAbsolutePath(downloadDir)) .setFiles(() -> files); torrentsInfos.add(torrentsInfo); } diff --git a/src/main/java/ani/rss/download/qBittorrent.java b/ani-rss-core/src/main/java/ani/rss/download/qBittorrent.java similarity index 98% rename from src/main/java/ani/rss/download/qBittorrent.java rename to ani-rss-core/src/main/java/ani/rss/download/qBittorrent.java index c49c9211..2ccbff27 100644 --- a/src/main/java/ani/rss/download/qBittorrent.java +++ b/ani-rss-core/src/main/java/ani/rss/download/qBittorrent.java @@ -1,5 +1,8 @@ package ani.rss.download; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.FileUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.Item; @@ -7,12 +10,8 @@ import ani.rss.entity.TorrentsInfo; import ani.rss.enums.StringEnum; import ani.rss.enums.TorrentsTags; import ani.rss.service.DownloadService; -import ani.rss.util.basic.ExceptionUtil; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyFileUtil; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.EnumUtil; @@ -252,7 +251,7 @@ public class qBittorrent implements BaseDownload { .progress(completed, size) .setName(name) .setHash(hash) - .setDownloadDir(MyFileUtil.getAbsolutePath(savePath)) + .setDownloadDir(FileUtil.getAbsolutePath(savePath)) .setTags(tagList) .setFiles(() -> files(torrentsInfo, true, config) diff --git a/src/main/java/ani/rss/dto/ImportAniDataDTO.java b/ani-rss-core/src/main/java/ani/rss/dto/ImportAniDataDTO.java similarity index 100% rename from src/main/java/ani/rss/dto/ImportAniDataDTO.java rename to ani-rss-core/src/main/java/ani/rss/dto/ImportAniDataDTO.java diff --git a/src/main/java/ani/rss/entity/Config.java b/ani-rss-core/src/main/java/ani/rss/entity/Config.java similarity index 100% rename from src/main/java/ani/rss/entity/Config.java rename to ani-rss-core/src/main/java/ani/rss/entity/Config.java diff --git a/src/main/java/ani/rss/exception/ResultException.java b/ani-rss-core/src/main/java/ani/rss/exception/ResultException.java similarity index 100% rename from src/main/java/ani/rss/exception/ResultException.java rename to ani-rss-core/src/main/java/ani/rss/exception/ResultException.java diff --git a/src/main/java/ani/rss/list/FixedSizeLinkedList.java b/ani-rss-core/src/main/java/ani/rss/list/FixedSizeLinkedList.java similarity index 100% rename from src/main/java/ani/rss/list/FixedSizeLinkedList.java rename to ani-rss-core/src/main/java/ani/rss/list/FixedSizeLinkedList.java diff --git a/src/main/java/ani/rss/notification/BaseNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/BaseNotification.java similarity index 99% rename from src/main/java/ani/rss/notification/BaseNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/BaseNotification.java index 03a8c01d..43a23216 100644 --- a/src/main/java/ani/rss/notification/BaseNotification.java +++ b/ani-rss-core/src/main/java/ani/rss/notification/BaseNotification.java @@ -1,5 +1,6 @@ package ani.rss.notification; +import ani.rss.commons.NumberFormatUtil; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.NotificationConfig; @@ -7,7 +8,6 @@ import ani.rss.entity.tmdb.Tmdb; import ani.rss.enums.NotificationStatusEnum; import ani.rss.enums.StringEnum; import ani.rss.service.DownloadService; -import ani.rss.util.basic.NumberFormatUtil; import ani.rss.util.other.ConfigUtil; import ani.rss.util.other.ItemsUtil; import ani.rss.util.other.RenameUtil; diff --git a/src/main/java/ani/rss/notification/EmbyRefreshNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/EmbyRefreshNotification.java similarity index 100% rename from src/main/java/ani/rss/notification/EmbyRefreshNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/EmbyRefreshNotification.java diff --git a/src/main/java/ani/rss/notification/MailNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/MailNotification.java similarity index 98% rename from src/main/java/ani/rss/notification/MailNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/MailNotification.java index 12735d7c..c29bd682 100644 --- a/src/main/java/ani/rss/notification/MailNotification.java +++ b/ani-rss-core/src/main/java/ani/rss/notification/MailNotification.java @@ -1,9 +1,9 @@ package ani.rss.notification; +import ani.rss.commons.ExceptionUtil; import ani.rss.entity.Ani; import ani.rss.entity.NotificationConfig; import ani.rss.enums.NotificationStatusEnum; -import ani.rss.util.basic.ExceptionUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrFormatter; import cn.hutool.extra.mail.MailAccount; diff --git a/src/main/java/ani/rss/notification/ServerChanNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/ServerChanNotification.java similarity index 98% rename from src/main/java/ani/rss/notification/ServerChanNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/ServerChanNotification.java index 4a3c366c..642f2c46 100644 --- a/src/main/java/ani/rss/notification/ServerChanNotification.java +++ b/ani-rss-core/src/main/java/ani/rss/notification/ServerChanNotification.java @@ -1,10 +1,10 @@ package ani.rss.notification; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.NotificationConfig; import ani.rss.enums.NotificationStatusEnum; import ani.rss.enums.ServerChanTypeEnum; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; import cn.hutool.core.text.StrFormatter; import cn.hutool.core.util.StrUtil; diff --git a/src/main/java/ani/rss/notification/ShellNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/ShellNotification.java similarity index 100% rename from src/main/java/ani/rss/notification/ShellNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/ShellNotification.java diff --git a/src/main/java/ani/rss/notification/SystemNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/SystemNotification.java similarity index 100% rename from src/main/java/ani/rss/notification/SystemNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/SystemNotification.java diff --git a/src/main/java/ani/rss/notification/TelegramNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/TelegramNotification.java similarity index 99% rename from src/main/java/ani/rss/notification/TelegramNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/TelegramNotification.java index d666258c..d206c937 100644 --- a/src/main/java/ani/rss/notification/TelegramNotification.java +++ b/ani-rss-core/src/main/java/ani/rss/notification/TelegramNotification.java @@ -1,9 +1,9 @@ package ani.rss.notification; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.NotificationConfig; import ani.rss.enums.NotificationStatusEnum; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; import ani.rss.util.other.ConfigUtil; import cn.hutool.core.text.StrFormatter; diff --git a/src/main/java/ani/rss/notification/WebHookNotification.java b/ani-rss-core/src/main/java/ani/rss/notification/WebHookNotification.java similarity index 100% rename from src/main/java/ani/rss/notification/WebHookNotification.java rename to ani-rss-core/src/main/java/ani/rss/notification/WebHookNotification.java diff --git a/src/main/java/ani/rss/other/Cron.java b/ani-rss-core/src/main/java/ani/rss/other/Cron.java similarity index 100% rename from src/main/java/ani/rss/other/Cron.java rename to ani-rss-core/src/main/java/ani/rss/other/Cron.java diff --git a/src/main/java/ani/rss/service/ClearService.java b/ani-rss-core/src/main/java/ani/rss/service/ClearService.java similarity index 100% rename from src/main/java/ani/rss/service/ClearService.java rename to ani-rss-core/src/main/java/ani/rss/service/ClearService.java diff --git a/src/main/java/ani/rss/service/DownloadService.java b/ani-rss-core/src/main/java/ani/rss/service/DownloadService.java similarity index 97% rename from src/main/java/ani/rss/service/DownloadService.java rename to ani-rss-core/src/main/java/ani/rss/service/DownloadService.java index a8036ee0..96e27091 100644 --- a/src/main/java/ani/rss/service/DownloadService.java +++ b/ani-rss-core/src/main/java/ani/rss/service/DownloadService.java @@ -1,18 +1,17 @@ package ani.rss.service; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.FileUtil; +import ani.rss.commons.GsonStatic; import ani.rss.download.BaseDownload; import ani.rss.entity.*; import ani.rss.entity.tmdb.Tmdb; import ani.rss.enums.NotificationStatusEnum; import ani.rss.enums.StringEnum; import ani.rss.enums.TorrentsTags; -import ani.rss.util.basic.ExceptionUtil; -import ani.rss.util.basic.GsonStatic; -import ani.rss.util.basic.MyFileUtil; import ani.rss.util.other.*; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Opt; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.text.StrFormatter; @@ -321,7 +320,7 @@ public class DownloadService { TorrentUtil.delete(standbyRSS, true, true); } - File[] files = MyFileUtil.listFiles(downloadPath); + File[] files = FileUtil.listFiles(downloadPath); for (File file : files) { String fileMainName = FileUtil.mainName(file); if (StrUtil.isBlank(fileMainName)) { @@ -357,12 +356,12 @@ public class DownloadService { isDel = true; } if (isDel) { - log.info("已开启备用RSS, 自动删除 {}", MyFileUtil.getAbsolutePath(file)); + log.info("已开启备用RSS, 自动删除 {}", FileUtil.getAbsolutePath(file)); try { FileUtil.del(file); - log.info("删除成功 {}", MyFileUtil.getAbsolutePath(file)); + log.info("删除成功 {}", FileUtil.getAbsolutePath(file)); } catch (Exception e) { - log.error("删除失败 {}", MyFileUtil.getAbsolutePath(file)); + log.error("删除失败 {}", FileUtil.getAbsolutePath(file)); log.error(e.getMessage(), e); } } @@ -390,11 +389,11 @@ public class DownloadService { log.info("添加下载 {}", name); if (!torrentFile.exists()) { - log.error("种子下载出现问题 {} {}", name, MyFileUtil.getAbsolutePath(torrentFile)); + log.error("种子下载出现问题 {} {}", name, FileUtil.getAbsolutePath(torrentFile)); return; } ThreadUtil.sleep(1000); - savePath = MyFileUtil.getAbsolutePath(savePath); + savePath = FileUtil.getAbsolutePath(savePath); String text = StrFormatter.format("{} 已更新", name); if (!master) { @@ -541,7 +540,7 @@ public class DownloadService { // 自定义下载位置 downloadPathTemplate = StrUtil.split(aniDownloadPath, "\n", true, true) .stream() - .map(MyFileUtil::getAbsolutePath) + .map(FileUtil::getAbsolutePath) .findFirst() .orElse(downloadPathTemplate); } @@ -616,7 +615,7 @@ public class DownloadService { downloadPathTemplate = downloadPathTemplate.replace("${jpTitle}", jpTitle); } - return MyFileUtil.getAbsolutePath(downloadPathTemplate); + return FileUtil.getAbsolutePath(downloadPathTemplate); } @@ -670,7 +669,7 @@ public class DownloadService { } } - List files = MyFileUtil.listFileList(downloadPath); + List files = FileUtil.listFileList(downloadPath); if (files.stream() .filter(file -> { diff --git a/src/main/java/ani/rss/service/NfoGenerator.java b/ani-rss-core/src/main/java/ani/rss/service/NfoGenerator.java similarity index 100% rename from src/main/java/ani/rss/service/NfoGenerator.java rename to ani-rss-core/src/main/java/ani/rss/service/NfoGenerator.java diff --git a/src/main/java/ani/rss/service/ScrapeService.java b/ani-rss-core/src/main/java/ani/rss/service/ScrapeService.java similarity index 97% rename from src/main/java/ani/rss/service/ScrapeService.java rename to ani-rss-core/src/main/java/ani/rss/service/ScrapeService.java index f9ba811b..d107f1db 100644 --- a/src/main/java/ani/rss/service/ScrapeService.java +++ b/ani-rss-core/src/main/java/ani/rss/service/ScrapeService.java @@ -1,14 +1,13 @@ package ani.rss.service; +import ani.rss.commons.FileUtil; import ani.rss.download.BaseDownload; import ani.rss.entity.Ani; import ani.rss.entity.tmdb.*; import ani.rss.enums.StringEnum; import ani.rss.enums.TmdbTypeEnum; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyFileUtil; import ani.rss.util.other.TmdbUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; @@ -70,7 +69,7 @@ public class ScrapeService { // 下载位置 String downloadPath = DownloadService.getDownloadPath(ani); - File[] files = MyFileUtil.listFiles(downloadPath); + File[] files = FileUtil.listFiles(downloadPath); if (ArrayUtil.isEmpty(files)) { return; @@ -197,7 +196,7 @@ public class ScrapeService { NfoGenerator.generateSeasonNfo(tmdbSeason, seasonNfoFile); } - File[] files = MyFileUtil.listFiles(downloadPath); + File[] files = FileUtil.listFiles(downloadPath); Map episodeMap = tmdbSeason .getEpisodes() diff --git a/src/main/java/ani/rss/service/TaskService.java b/ani-rss-core/src/main/java/ani/rss/service/TaskService.java similarity index 100% rename from src/main/java/ani/rss/service/TaskService.java rename to ani-rss-core/src/main/java/ani/rss/service/TaskService.java diff --git a/src/main/java/ani/rss/task/BgmTask.java b/ani-rss-core/src/main/java/ani/rss/task/BgmTask.java similarity index 100% rename from src/main/java/ani/rss/task/BgmTask.java rename to ani-rss-core/src/main/java/ani/rss/task/BgmTask.java diff --git a/src/main/java/ani/rss/task/GcTask.java b/ani-rss-core/src/main/java/ani/rss/task/GcTask.java similarity index 100% rename from src/main/java/ani/rss/task/GcTask.java rename to ani-rss-core/src/main/java/ani/rss/task/GcTask.java diff --git a/src/main/java/ani/rss/task/RenameTask.java b/ani-rss-core/src/main/java/ani/rss/task/RenameTask.java similarity index 98% rename from src/main/java/ani/rss/task/RenameTask.java rename to ani-rss-core/src/main/java/ani/rss/task/RenameTask.java index aa053f57..51f7efb4 100644 --- a/src/main/java/ani/rss/task/RenameTask.java +++ b/ani-rss-core/src/main/java/ani/rss/task/RenameTask.java @@ -1,9 +1,9 @@ package ani.rss.task; +import ani.rss.commons.ExceptionUtil; import ani.rss.entity.Config; import ani.rss.entity.TorrentsInfo; import ani.rss.service.DownloadService; -import ani.rss.util.basic.ExceptionUtil; import ani.rss.util.other.ConfigUtil; import ani.rss.util.other.TorrentUtil; import cn.hutool.core.thread.ThreadUtil; diff --git a/src/main/java/ani/rss/task/RssTask.java b/ani-rss-core/src/main/java/ani/rss/task/RssTask.java similarity index 98% rename from src/main/java/ani/rss/task/RssTask.java rename to ani-rss-core/src/main/java/ani/rss/task/RssTask.java index 7d4d7c41..ce13f75f 100644 --- a/src/main/java/ani/rss/task/RssTask.java +++ b/ani-rss-core/src/main/java/ani/rss/task/RssTask.java @@ -1,9 +1,9 @@ package ani.rss.task; +import ani.rss.commons.ExceptionUtil; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.service.DownloadService; -import ani.rss.util.basic.ExceptionUtil; import ani.rss.util.other.AniUtil; import ani.rss.util.other.ConfigUtil; import ani.rss.util.other.TorrentUtil; diff --git a/src/main/java/ani/rss/util/basic/CidrRangeChecker.java b/ani-rss-core/src/main/java/ani/rss/util/basic/CidrRangeChecker.java similarity index 100% rename from src/main/java/ani/rss/util/basic/CidrRangeChecker.java rename to ani-rss-core/src/main/java/ani/rss/util/basic/CidrRangeChecker.java diff --git a/src/main/java/ani/rss/util/basic/HttpReq.java b/ani-rss-core/src/main/java/ani/rss/util/basic/HttpReq.java similarity index 96% rename from src/main/java/ani/rss/util/basic/HttpReq.java rename to ani-rss-core/src/main/java/ani/rss/util/basic/HttpReq.java index 8de8e769..0e9e5e9f 100644 --- a/src/main/java/ani/rss/util/basic/HttpReq.java +++ b/ani-rss-core/src/main/java/ani/rss/util/basic/HttpReq.java @@ -1,5 +1,6 @@ package ani.rss.util.basic; +import ani.rss.commons.CacheUtil; import ani.rss.entity.Config; import ani.rss.util.other.ConfigUtil; import cn.hutool.core.lang.Assert; @@ -155,11 +156,11 @@ public class HttpReq { String key = StrFormatter.format("proxyList:{}", SecureUtil.md5(proxyList)); - List split = MyCacheUtil.get(key); + List split = CacheUtil.get(key); if (Objects.isNull(split)) { split = StrUtil.split(proxyList, "\n", true, true); - MyCacheUtil.put(key, split, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, split, TimeUnit.MINUTES.toMillis(10)); } if (split.isEmpty()) { diff --git a/src/main/java/ani/rss/util/basic/HttpRequestPlus.java b/ani-rss-core/src/main/java/ani/rss/util/basic/HttpRequestPlus.java similarity index 98% rename from src/main/java/ani/rss/util/basic/HttpRequestPlus.java rename to ani-rss-core/src/main/java/ani/rss/util/basic/HttpRequestPlus.java index 1e811189..57aeec0f 100644 --- a/src/main/java/ani/rss/util/basic/HttpRequestPlus.java +++ b/ani-rss-core/src/main/java/ani/rss/util/basic/HttpRequestPlus.java @@ -1,5 +1,6 @@ package ani.rss.util.basic; +import ani.rss.commons.ExceptionUtil; import ani.rss.entity.Config; import ani.rss.util.other.ConfigUtil; import cn.hutool.core.net.url.UrlBuilder; diff --git a/src/main/java/ani/rss/util/basic/LogUtil.java b/ani-rss-core/src/main/java/ani/rss/util/basic/LogUtil.java similarity index 100% rename from src/main/java/ani/rss/util/basic/LogUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/basic/LogUtil.java diff --git a/src/main/java/ani/rss/util/basic/RenameCacheUtil.java b/ani-rss-core/src/main/java/ani/rss/util/basic/RenameCacheUtil.java similarity index 96% rename from src/main/java/ani/rss/util/basic/RenameCacheUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/basic/RenameCacheUtil.java index a466d9c2..d50841a3 100644 --- a/src/main/java/ani/rss/util/basic/RenameCacheUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/basic/RenameCacheUtil.java @@ -1,6 +1,7 @@ package ani.rss.util.basic; +import ani.rss.commons.FileUtil; import ani.rss.util.other.ConfigUtil; import cn.hutool.core.text.StrFormatter; import cn.hutool.db.DbUtil; @@ -31,7 +32,7 @@ public class RenameCacheUtil { } File configDir = ConfigUtil.getConfigDir(); - String absolutePath = MyFileUtil.getAbsolutePath(configDir); + String absolutePath = FileUtil.getAbsolutePath(configDir); try { Class.forName("org.sqlite.JDBC"); connection = DriverManager.getConnection(StrFormatter.format("jdbc:sqlite:{}/database.db", absolutePath)); diff --git a/src/main/java/ani/rss/util/other/AfdianUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/AfdianUtil.java similarity index 98% rename from src/main/java/ani/rss/util/other/AfdianUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/AfdianUtil.java index ccdf9946..6f918166 100644 --- a/src/main/java/ani/rss/util/other/AfdianUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/AfdianUtil.java @@ -1,9 +1,9 @@ package ani.rss.util.other; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Config; import ani.rss.entity.Result; import ani.rss.entity.TryOut; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; diff --git a/src/main/java/ani/rss/util/other/AniListUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/AniListUtil.java similarity index 97% rename from src/main/java/ani/rss/util/other/AniListUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/AniListUtil.java index e4b29d4f..66381e6f 100644 --- a/src/main/java/ani/rss/util/other/AniListUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/AniListUtil.java @@ -1,6 +1,6 @@ package ani.rss.util.other; -import ani.rss.util.basic.GsonStatic; +import ani.rss.commons.GsonStatic; import ani.rss.util.basic.HttpReq; import cn.hutool.core.text.StrFormatter; import cn.hutool.core.util.StrUtil; diff --git a/src/main/java/ani/rss/util/other/AniUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/AniUtil.java similarity index 82% rename from src/main/java/ani/rss/util/other/AniUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/AniUtil.java index d6b45191..91a813d5 100644 --- a/src/main/java/ani/rss/util/other/AniUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/AniUtil.java @@ -1,14 +1,14 @@ package ani.rss.util.other; +import ani.rss.commons.FileUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.*; +import ani.rss.entity.tmdb.Tmdb; import ani.rss.service.ClearService; import ani.rss.service.DownloadService; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyFileUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.thread.ThreadUtil; @@ -59,7 +59,7 @@ public class AniUtil { .setOverride(false); for (Ani ani : anis) { - Ani newAni = Ani.createAni(); + Ani newAni = AniUtil.createAni(); BeanUtil.copyProperties(newAni, ani, copyOptions); ANI_LIST.add(ani); } @@ -96,7 +96,7 @@ public class AniUtil { type = StrUtil.blankToDefault(type, "mikan"); String subgroupId = MikanUtil.getSubgroupId(url); - Ani ani = Ani.createAni(); + Ani ani = AniUtil.createAni(); ani.setUrl(url.trim()); if ("mikan".equals(type)) { @@ -365,7 +365,7 @@ public class AniUtil { ThreadUtil.sleep(3000); } - File[] files = MyFileUtil.listFiles(oldPath); + File[] files = FileUtil.listFiles(oldPath); log.info("订阅已完结 {}, 移动已完结文件共 {} 个", title, files.length); @@ -381,5 +381,59 @@ public class AniUtil { } } + public static Ani createAni() { + Ani newAni = new Ani(); + Config config = ConfigUtil.CONFIG; + return newAni + .setId(UUID.randomUUID().toString()) + .setMikanTitle("") + .setStandbyRssList(new ArrayList<>()) + .setOffset(0) + .setYear(1970) + .setMonth(1) + .setDate(1) + .setEnable(true) + .setOva(false) + .setScore(0.0) + .setLastDownloadTime(0L) + .setImage("") + .setThemoviedbName("") + .setCustomDownloadPath(false) + .setDownloadPath("") + .setGlobalExclude(false) + .setCurrentEpisodeNumber(0) + .setTotalEpisodeNumber(0) + .setMatch(List.of()) + .setExclude(List.of("720[Pp]", "\\d-\\d", "合集", "特别篇")) + .setBgmUrl("") + .setSubgroup("") + .setCustomEpisode(config.getCustomEpisode()) + .setCustomEpisodeStr(config.getCustomEpisodeStr()) + .setCustomEpisodeGroupIndex(config.getCustomEpisodeGroupIndex()) + .setOmit(true) + .setDownloadNew(false) + .setNotDownload(new ArrayList<>()) + .setTmdb( + new Tmdb() + .setId("") + .setName("") + .setDate(new Date()) + ) + .setUpload(config.getUpload()) + .setProcrastinating(true) + .setCustomRenameTemplate(config.getRenameTemplate()) + .setCustomRenameTemplateEnable(false) + .setCustomPriorityKeywordsEnable(false) + .setCustomPriorityKeywords(new ArrayList<>()) + .setMessage(true) + .setAlistPath("") + .setCustomAlistPath(false) + .setCompleted(true) + .setCustomCompleted(false) + .setCustomCompletedPathTemplate("") + .setCustomTags(new ArrayList<>()) + .setCustomTagsEnable(false); + } + } diff --git a/src/main/java/ani/rss/util/other/BgmUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/BgmUtil.java similarity index 97% rename from src/main/java/ani/rss/util/other/BgmUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/BgmUtil.java index 928d063d..978f1349 100644 --- a/src/main/java/ani/rss/util/other/BgmUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/BgmUtil.java @@ -1,14 +1,14 @@ package ani.rss.util.other; +import ani.rss.commons.CacheUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.BgmInfo; import ani.rss.entity.Config; import ani.rss.entity.tmdb.Tmdb; import ani.rss.enums.BgmTokenTypeEnum; import ani.rss.service.DownloadService; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyCacheUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; @@ -151,8 +151,8 @@ public class BgmUtil { String key = "BGM_getSubjectId:" + bgmName; - if (MyCacheUtil.containsKey(key)) { - return MyCacheUtil.get(key); + if (CacheUtil.containsKey(key)) { + return CacheUtil.get(key); } List list = search(bgmName); if (list.isEmpty()) { @@ -184,7 +184,7 @@ public class BgmUtil { id = list.get(0).get("id").getAsString(); } ThreadUtil.sleep(1000); - MyCacheUtil.put(key, id, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, id, TimeUnit.MINUTES.toMillis(10)); return id; } @@ -259,7 +259,7 @@ public class BgmUtil { String key = "BGM_me:" + bgmToken; - String me = MyCacheUtil.get(key); + String me = CacheUtil.get(key); if (StrUtil.isNotBlank(me)) { return GsonStatic.fromJson(me, JsonObject.class); } @@ -270,7 +270,7 @@ public class BgmUtil { return GsonStatic.fromJson(res.body(), JsonObject.class); }); - MyCacheUtil.put(key, GsonStatic.toJson(jsonObject), TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, GsonStatic.toJson(jsonObject), TimeUnit.MINUTES.toMillis(10)); return jsonObject; } @@ -326,10 +326,10 @@ public class BgmUtil { Assert.notBlank(subjectId, "subjectId 不能为空"); String key = "BGM_collections:" + subjectId; - if (MyCacheUtil.containsKey(key)) { + if (CacheUtil.containsKey(key)) { return; } - MyCacheUtil.put(key, subjectId, TimeUnit.MINUTES.toMillis(5)); + CacheUtil.put(key, subjectId, TimeUnit.MINUTES.toMillis(5)); String username = username(); @@ -362,10 +362,10 @@ public class BgmUtil { String key = "BGM_getEpisodeId:" + subjectId; - List episodes = MyCacheUtil.get(key); + List episodes = CacheUtil.get(key); if (Objects.isNull(episodes)) { episodes = getEpisodes(subjectId, 0); - MyCacheUtil.put(key, episodes, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, episodes, TimeUnit.MINUTES.toMillis(10)); } for (JsonObject itemObject : episodes) { double ep = itemObject.get("ep").getAsDouble(); @@ -723,7 +723,7 @@ public class BgmUtil { String key = "BGM_getEpisodeTitleMap:" + subjectId; - Map> cacheMap = MyCacheUtil.get(key); + Map> cacheMap = CacheUtil.get(key); if (Objects.nonNull(cacheMap)) { return cacheMap; } @@ -753,7 +753,7 @@ public class BgmUtil { } catch (Exception e) { log.error(e.getMessage(), e); } - MyCacheUtil.put(key, episodeTitleMap, TimeUnit.MINUTES.toMillis(5)); + CacheUtil.put(key, episodeTitleMap, TimeUnit.MINUTES.toMillis(5)); return episodeTitleMap; } diff --git a/src/main/java/ani/rss/util/other/ConfigUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/ConfigUtil.java similarity index 96% rename from src/main/java/ani/rss/util/other/ConfigUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/ConfigUtil.java index be1ad6fe..2b27fc5e 100644 --- a/src/main/java/ani/rss/util/other/ConfigUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/ConfigUtil.java @@ -1,20 +1,19 @@ package ani.rss.util.other; +import ani.rss.commons.FileUtil; +import ani.rss.commons.GsonStatic; +import ani.rss.commons.URLUtil; import ani.rss.entity.Config; import ani.rss.entity.Login; import ani.rss.entity.NotificationConfig; import ani.rss.enums.BgmTokenTypeEnum; import ani.rss.enums.SortTypeEnum; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.LogUtil; -import ani.rss.util.basic.MyFileUtil; -import ani.rss.util.basic.MyURLUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.DynaBean; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.text.StrFormatter; @@ -52,9 +51,9 @@ public class ConfigUtil { rootPath = FileUtil.getUserHomePath() + "/Movies"; } - String downloadPath = MyFileUtil.getAbsolutePath(new File(rootPath + "/番剧")); - String ovaDownloadPath = MyFileUtil.getAbsolutePath(new File(rootPath + "/剧场版")); - String completedPath = MyFileUtil.getAbsolutePath(new File(rootPath + "/已完结番剧")); + String downloadPath = FileUtil.getAbsolutePath(new File(rootPath + "/番剧")); + String ovaDownloadPath = FileUtil.getAbsolutePath(new File(rootPath + "/剧场版")); + String completedPath = FileUtil.getAbsolutePath(new File(rootPath + "/已完结番剧")); String downloadPathTemplate = StrFormatter.format("{}/${letter}/${title}/Season ${season}", downloadPath); String ovaDownloadPathTemplate = StrFormatter.format("{}/${letter}/${title}", ovaDownloadPath); @@ -362,7 +361,7 @@ public class ConfigUtil { return !List.of(".DS_Store", ".DS_Store@SynoResource") .contains(pathname.getName()); } - File[] files = MyFileUtil.listFiles(pathname); + File[] files = FileUtil.listFiles(pathname); return !ArrayUtil.isEmpty(files); }, backupFiles.toArray(new File[0])); @@ -389,7 +388,7 @@ public class ConfigUtil { return; } - File[] files = MyFileUtil.listFiles(backupDir); + File[] files = FileUtil.listFiles(backupDir); if (ArrayUtil.isEmpty(files)) { return; } @@ -472,7 +471,7 @@ public class ConfigUtil { for (Func1 func1 : func1List) { String fieldName = LambdaUtil.getFieldName(func1); String v = func1.callWithRuntimeException(config); - v = MyURLUtil.getUrlStr(v); + v = URLUtil.getUrlStr(v); dynaBean.set(fieldName, v); } } @@ -496,7 +495,7 @@ public class ConfigUtil { for (Func1 func1 : func1List) { String fieldName = LambdaUtil.getFieldName(func1); String v = func1.callWithRuntimeException(config); - v = MyFileUtil.getAbsolutePath(v); + v = FileUtil.getAbsolutePath(v); dynaBean.set(fieldName, v); } } diff --git a/src/main/java/ani/rss/util/other/EmbyUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/EmbyUtil.java similarity index 98% rename from src/main/java/ani/rss/util/other/EmbyUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/EmbyUtil.java index 34a9b817..d3245c6e 100644 --- a/src/main/java/ani/rss/util/other/EmbyUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/EmbyUtil.java @@ -1,8 +1,8 @@ package ani.rss.util.other; +import ani.rss.commons.GsonStatic; import ani.rss.entity.EmbyViews; import ani.rss.entity.NotificationConfig; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; import cn.hutool.core.lang.Assert; import com.google.gson.JsonArray; diff --git a/src/main/java/ani/rss/util/other/ItemsUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/ItemsUtil.java similarity index 98% rename from src/main/java/ani/rss/util/other/ItemsUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/ItemsUtil.java index 4c56a7e0..596648ab 100644 --- a/src/main/java/ani/rss/util/other/ItemsUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/ItemsUtil.java @@ -1,5 +1,6 @@ package ani.rss.util.other; +import ani.rss.commons.CacheUtil; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.Item; @@ -7,7 +8,6 @@ import ani.rss.entity.StandbyRss; import ani.rss.enums.NotificationStatusEnum; import ani.rss.enums.StringEnum; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyCacheUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; @@ -333,13 +333,13 @@ public class ItemsUtil { for (Integer ep : list) { String s = StrFormatter.format("缺少集数 {} S{}E{}", title, String.format("%02d", season), String.format("%02d", ep)); String key = StrFormatter.format("omit:{}:ep-{}", id, ep); - if (MyCacheUtil.containsKey(key)) { + if (CacheUtil.containsKey(key)) { // 一天内已经提醒过了 continue; } log.info(s); // 缓存一天 不重复发送 - MyCacheUtil.put(key, s, TimeUnit.DAYS.toMillis(1)); + CacheUtil.put(key, s, TimeUnit.DAYS.toMillis(1)); sList.add(s); } @@ -442,12 +442,12 @@ public class ItemsUtil { String key = StrFormatter.format("procrastinating:{}", id); - if (MyCacheUtil.containsKey(key)) { + if (CacheUtil.containsKey(key)) { // 一天内已经提醒过了 return; } - MyCacheUtil.put(key, text, TimeUnit.DAYS.toMillis(1)); + CacheUtil.put(key, text, TimeUnit.DAYS.toMillis(1)); NotificationUtil.send(config, ani, text, NotificationStatusEnum.PROCRASTINATING); }); } diff --git a/src/main/java/ani/rss/util/other/MenuUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/MenuUtil.java similarity index 96% rename from src/main/java/ani/rss/util/other/MenuUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/MenuUtil.java index fef51374..299158e2 100644 --- a/src/main/java/ani/rss/util/other/MenuUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/MenuUtil.java @@ -1,6 +1,6 @@ package ani.rss.util.other; -import ani.rss.Main; +import ani.rss.entity.Global; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.thread.ThreadUtil; import lombok.extern.slf4j.Slf4j; @@ -20,7 +20,7 @@ public class MenuUtil { public static void start() { // 仅在添加--gui参数时启动托盘 - if (Main.ARGS.contains("--gui")) { + if (Global.ARGS.contains("--gui")) { try { showSystemTray(); log.info("启动系统托盘已启动"); @@ -83,7 +83,7 @@ public class MenuUtil { webui.addActionListener(e -> { if (Desktop.isDesktopSupported()) { try { - Desktop.getDesktop().browse(new URL("http://127.0.0.1:" + ServerUtil.HTTP_PORT).toURI()); + Desktop.getDesktop().browse(new URL("http://127.0.0.1:" + Global.HTTP_PORT).toURI()); } catch (Exception ex) { log.error("打开webui失败", ex); } @@ -107,7 +107,7 @@ public class MenuUtil { clicked.set(false); // 直接打开webui try { - Desktop.getDesktop().browse(new URL("http://127.0.0.1:" + ServerUtil.HTTP_PORT).toURI()); + Desktop.getDesktop().browse(new URL("http://127.0.0.1:" + Global.HTTP_PORT).toURI()); } catch (Exception ex) { log.error("打开webui失败", ex); } diff --git a/src/main/java/ani/rss/util/other/MikanUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/MikanUtil.java similarity index 99% rename from src/main/java/ani/rss/util/other/MikanUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/MikanUtil.java index fbad1524..3e0a3e1d 100644 --- a/src/main/java/ani/rss/util/other/MikanUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/MikanUtil.java @@ -1,10 +1,10 @@ package ani.rss.util.other; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.Mikan; import ani.rss.entity.TorrentsInfo; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.lang.Opt; diff --git a/src/main/java/ani/rss/util/other/NotificationUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/NotificationUtil.java similarity index 73% rename from src/main/java/ani/rss/util/other/NotificationUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/NotificationUtil.java index b18877f9..dade0d05 100644 --- a/src/main/java/ani/rss/util/other/NotificationUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/NotificationUtil.java @@ -5,13 +5,14 @@ import ani.rss.entity.Config; import ani.rss.entity.NotificationConfig; import ani.rss.enums.NotificationStatusEnum; import ani.rss.enums.NotificationTypeEnum; -import ani.rss.notification.BaseNotification; +import ani.rss.notification.*; import cn.hutool.core.thread.ExecutorBuilder; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ReflectUtil; import lombok.extern.slf4j.Slf4j; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; @@ -23,6 +24,18 @@ public class NotificationUtil { .setWorkQueue(new LinkedBlockingQueue<>(256)) .build(); + public final static Map> + NOTIFICATION_MAP = + Map.of( + NotificationTypeEnum.EMBY_REFRESH, EmbyRefreshNotification.class, + NotificationTypeEnum.MAIL, MailNotification.class, + NotificationTypeEnum.SERVER_CHAN, ServerChanNotification.class, + NotificationTypeEnum.SYSTEM, SystemNotification.class, + NotificationTypeEnum.TELEGRAM, TelegramNotification.class, + NotificationTypeEnum.WEB_HOOK, WebHookNotification.class, + NotificationTypeEnum.SHELL, ShellNotification.class + ); + /** * 发送通知 * @@ -57,7 +70,11 @@ public class NotificationUtil { continue; } - Class aClass = notificationType.getAClass(); + if (!NOTIFICATION_MAP.containsKey(notificationType)) { + return; + } + + Class aClass = NOTIFICATION_MAP.get(notificationType); BaseNotification baseNotification = ReflectUtil.newInstance(aClass); EXECUTOR_SERVICE.execute(() -> { diff --git a/src/main/java/ani/rss/util/other/OpenListUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/OpenListUtil.java similarity index 96% rename from src/main/java/ani/rss/util/other/OpenListUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/OpenListUtil.java index fe78eb7a..18848def 100644 --- a/src/main/java/ani/rss/util/other/OpenListUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/OpenListUtil.java @@ -1,15 +1,14 @@ package ani.rss.util.other; +import ani.rss.commons.FileUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.TorrentsInfo; import ani.rss.enums.NotificationStatusEnum; import ani.rss.enums.TorrentsTags; import ani.rss.service.DownloadService; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyFileUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrFormatter; @@ -73,7 +72,7 @@ public class OpenListUtil { TorrentUtil.addTags(torrentsInfo, TorrentsTags.OPEN_LIST.getValue()); - String downloadDir = MyFileUtil.getAbsolutePath(torrentsInfo.getDownloadDir()); + String downloadDir = FileUtil.getAbsolutePath(torrentsInfo.getDownloadDir()); List files = torrentsInfo.getFiles().get(); String filePath = getPath(ani); @@ -194,7 +193,7 @@ public class OpenListUtil { public static void verify() { Config config = ConfigUtil.CONFIG; String alistHost = config.getAlistHost(); - String alistPath = MyFileUtil.getAbsolutePath(config.getAlistPath()); + String alistPath = FileUtil.getAbsolutePath(config.getAlistPath()); String alistToken = config.getAlistToken(); Assert.notBlank(alistHost, "alistHost 未配置"); diff --git a/src/main/java/ani/rss/util/other/RenameUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/RenameUtil.java similarity index 99% rename from src/main/java/ani/rss/util/other/RenameUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/RenameUtil.java index 8912616d..e4323510 100644 --- a/src/main/java/ani/rss/util/other/RenameUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/RenameUtil.java @@ -1,12 +1,12 @@ package ani.rss.util.other; +import ani.rss.commons.NumberFormatUtil; import ani.rss.entity.Ani; import ani.rss.entity.BgmInfo; import ani.rss.entity.Config; import ani.rss.entity.Item; import ani.rss.entity.tmdb.Tmdb; import ani.rss.enums.StringEnum; -import ani.rss.util.basic.NumberFormatUtil; import cn.hutool.core.lang.Opt; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.lang.func.LambdaUtil; diff --git a/src/main/java/ani/rss/util/other/TmdbUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/TmdbUtil.java similarity index 98% rename from src/main/java/ani/rss/util/other/TmdbUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/TmdbUtil.java index ce87b537..f3fd8bf3 100644 --- a/src/main/java/ani/rss/util/other/TmdbUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/TmdbUtil.java @@ -1,13 +1,13 @@ package ani.rss.util.other; +import ani.rss.commons.CacheUtil; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Ani; import ani.rss.entity.Config; import ani.rss.entity.tmdb.*; import ani.rss.enums.TmdbTypeEnum; -import ani.rss.util.basic.ExceptionUtil; -import ani.rss.util.basic.GsonStatic; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyCacheUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollUtil; @@ -504,16 +504,16 @@ public class TmdbUtil { String key = StrFormatter.format("TMDB_getEpisodeTitleMap:{}:{}:{}", tmdbId, tmdbGroupId, season); - Map cacheMap = MyCacheUtil.get(key); + Map cacheMap = CacheUtil.get(key); if (Objects.nonNull(cacheMap)) { return cacheMap; } episodeTitleMap = getEpisodeTitleMap(tmdb, season); if (episodeTitleMap.isEmpty()) { - MyCacheUtil.put(key, episodeTitleMap, 1000 * 10); + CacheUtil.put(key, episodeTitleMap, 1000 * 10); } else { - MyCacheUtil.put(key, episodeTitleMap, TimeUnit.MINUTES.toMillis(5)); + CacheUtil.put(key, episodeTitleMap, TimeUnit.MINUTES.toMillis(5)); } return episodeTitleMap; } diff --git a/src/main/java/ani/rss/util/other/TorrentUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/TorrentUtil.java similarity index 98% rename from src/main/java/ani/rss/util/other/TorrentUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/TorrentUtil.java index 67a56a7b..0e082549 100644 --- a/src/main/java/ani/rss/util/other/TorrentUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/TorrentUtil.java @@ -1,5 +1,7 @@ package ani.rss.util.other; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.FileUtil; import ani.rss.download.BaseDownload; import ani.rss.entity.Ani; import ani.rss.entity.Config; @@ -8,10 +10,7 @@ import ani.rss.entity.TorrentsInfo; import ani.rss.enums.StringEnum; import ani.rss.enums.TorrentsTags; import ani.rss.service.ClearService; -import ani.rss.util.basic.ExceptionUtil; import ani.rss.util.basic.HttpReq; -import ani.rss.util.basic.MyFileUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.text.StrFormatter; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ReUtil; @@ -350,7 +349,7 @@ public class TorrentUtil { TorrentFile torrentFile = new TorrentFile(file); hexHash = torrentFile.getHexHash(); } catch (Exception e) { - log.error("转换种子为磁力链接时出现错误 {}", MyFileUtil.getAbsolutePath(file)); + log.error("转换种子为磁力链接时出现错误 {}", FileUtil.getAbsolutePath(file)); log.error(e.getMessage(), e); } return StrFormatter.format("magnet:?xt=urn:btih:{}", hexHash); diff --git a/src/main/java/ani/rss/util/other/UpdateUtil.java b/ani-rss-core/src/main/java/ani/rss/util/other/UpdateUtil.java similarity index 88% rename from src/main/java/ani/rss/util/other/UpdateUtil.java rename to ani-rss-core/src/main/java/ani/rss/util/other/UpdateUtil.java index 9ea14c2a..7377d7f7 100644 --- a/src/main/java/ani/rss/util/other/UpdateUtil.java +++ b/ani-rss-core/src/main/java/ani/rss/util/other/UpdateUtil.java @@ -1,11 +1,11 @@ package ani.rss.util.other; -import ani.rss.Main; +import ani.rss.commons.*; import ani.rss.entity.About; import ani.rss.entity.Config; -import ani.rss.util.basic.*; +import ani.rss.entity.Global; +import ani.rss.util.basic.HttpReq; import cn.hutool.core.comparator.VersionComparator; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrFormatter; @@ -15,8 +15,6 @@ import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.RuntimeUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; -import cn.hutool.system.OsInfo; -import cn.hutool.system.SystemUtil; import com.google.gson.JsonObject; import lombok.extern.slf4j.Slf4j; @@ -38,7 +36,7 @@ public class UpdateUtil { String key = StrFormatter.format("github#{} {} {}", github, customGithub, customGithubUrl); - About cacheAbout = MyCacheUtil.get(key); + About cacheAbout = CacheUtil.get(key); if (Objects.nonNull(cacheAbout)) { return cacheAbout; @@ -78,7 +76,7 @@ public class UpdateUtil { .setLatest(latest) .setMarkdownBody(jsonObject.get("markdown").getAsString()); String filename = "ani-rss-jar-with-dependencies.jar"; - File jar = getJar(); + File jar = MavenUtil.getJar(); if ("exe".equals(FileUtil.extName(jar))) { filename = "ani-rss-launcher.exe"; } @@ -97,7 +95,7 @@ public class UpdateUtil { log.error(message, e); } // 缓存一分钟 防止加速网站风控 - MyCacheUtil.put(key, about, 1000 * 60); + CacheUtil.put(key, about, 1000 * 60); return about; } @@ -109,7 +107,7 @@ public class UpdateUtil { Assert.isTrue(MavenUtil.isJar(), "不支持更新"); - File jar = getJar(); + File jar = MavenUtil.getJar(); String extName = StrUtil.blankToDefault(FileUtil.extName(jar), ""); File file = new File(jar + ".tmp"); @@ -139,7 +137,6 @@ public class UpdateUtil { ThreadUtil.execute(() -> { if ("jar".equals(extName)) { FileUtil.rename(file, jar.getName(), true); - ServerUtil.stop(); System.exit(0); return; } @@ -148,11 +145,10 @@ public class UpdateUtil { FileUtil.del(updateExe); try (InputStream stream = ResourceUtil.getStream(filename)) { FileUtil.writeFromStream(stream, updateExe, true); - ServerUtil.stop(); List strings = new ArrayList<>(); strings.add(updateExe.toString()); - strings.add(MyFileUtil.getAbsolutePath(jar)); - strings.addAll(Main.ARGS); + strings.add(FileUtil.getAbsolutePath(jar)); + strings.addAll(Global.ARGS); String[] array = ArrayUtil.toArray(strings, String.class); RuntimeUtil.exec(array); System.exit(0); @@ -162,12 +158,4 @@ public class UpdateUtil { }); } - public static File getJar() { - OsInfo osInfo = SystemUtil.getOsInfo(); - String splitStr = osInfo.isWindows() ? ";" : ":"; - String s = System.getProperty("java.class.path") - .split(splitStr)[0]; - return new File(s); - } - } diff --git a/src/main/resources/aria2/addTorrent.json b/ani-rss-core/src/main/resources/aria2/addTorrent.json similarity index 100% rename from src/main/resources/aria2/addTorrent.json rename to ani-rss-core/src/main/resources/aria2/addTorrent.json diff --git a/src/main/resources/aria2/addUri.json b/ani-rss-core/src/main/resources/aria2/addUri.json similarity index 100% rename from src/main/resources/aria2/addUri.json rename to ani-rss-core/src/main/resources/aria2/addUri.json diff --git a/src/main/resources/aria2/changeGlobalOption.json b/ani-rss-core/src/main/resources/aria2/changeGlobalOption.json similarity index 100% rename from src/main/resources/aria2/changeGlobalOption.json rename to ani-rss-core/src/main/resources/aria2/changeGlobalOption.json diff --git a/src/main/resources/aria2/getGlobalStat.json b/ani-rss-core/src/main/resources/aria2/getGlobalStat.json similarity index 100% rename from src/main/resources/aria2/getGlobalStat.json rename to ani-rss-core/src/main/resources/aria2/getGlobalStat.json diff --git a/src/main/resources/aria2/removeDownloadResult.json b/ani-rss-core/src/main/resources/aria2/removeDownloadResult.json similarity index 100% rename from src/main/resources/aria2/removeDownloadResult.json rename to ani-rss-core/src/main/resources/aria2/removeDownloadResult.json diff --git a/src/main/resources/aria2/tellActive.json b/ani-rss-core/src/main/resources/aria2/tellActive.json similarity index 100% rename from src/main/resources/aria2/tellActive.json rename to ani-rss-core/src/main/resources/aria2/tellActive.json diff --git a/src/main/resources/aria2/tellStopped.json b/ani-rss-core/src/main/resources/aria2/tellStopped.json similarity index 100% rename from src/main/resources/aria2/tellStopped.json rename to ani-rss-core/src/main/resources/aria2/tellStopped.json diff --git a/src/main/resources/aria2/tellWaiting.json b/ani-rss-core/src/main/resources/aria2/tellWaiting.json similarity index 100% rename from src/main/resources/aria2/tellWaiting.json rename to ani-rss-core/src/main/resources/aria2/tellWaiting.json diff --git a/src/main/resources/logback-template.xml b/ani-rss-core/src/main/resources/logback-template.xml similarity index 100% rename from src/main/resources/logback-template.xml rename to ani-rss-core/src/main/resources/logback-template.xml diff --git a/src/main/resources/transmission/torrent-add.json b/ani-rss-core/src/main/resources/transmission/torrent-add.json similarity index 100% rename from src/main/resources/transmission/torrent-add.json rename to ani-rss-core/src/main/resources/transmission/torrent-add.json diff --git a/src/main/resources/transmission/torrent-get.json b/ani-rss-core/src/main/resources/transmission/torrent-get.json similarity index 100% rename from src/main/resources/transmission/torrent-get.json rename to ani-rss-core/src/main/resources/transmission/torrent-get.json diff --git a/src/main/resources/transmission/torrent-remove.json b/ani-rss-core/src/main/resources/transmission/torrent-remove.json similarity index 100% rename from src/main/resources/transmission/torrent-remove.json rename to ani-rss-core/src/main/resources/transmission/torrent-remove.json diff --git a/src/main/resources/transmission/torrent-rename-path.json b/ani-rss-core/src/main/resources/transmission/torrent-rename-path.json similarity index 100% rename from src/main/resources/transmission/torrent-rename-path.json rename to ani-rss-core/src/main/resources/transmission/torrent-rename-path.json diff --git a/src/main/resources/transmission/torrent-set-location.json b/ani-rss-core/src/main/resources/transmission/torrent-set-location.json similarity index 100% rename from src/main/resources/transmission/torrent-set-location.json rename to ani-rss-core/src/main/resources/transmission/torrent-set-location.json diff --git a/src/main/resources/transmission/torrent-set.json b/ani-rss-core/src/main/resources/transmission/torrent-set.json similarity index 100% rename from src/main/resources/transmission/torrent-set.json rename to ani-rss-core/src/main/resources/transmission/torrent-set.json diff --git a/ani-rss-web/pom.xml b/ani-rss-web/pom.xml new file mode 100644 index 00000000..87b8dfcc --- /dev/null +++ b/ani-rss-web/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + ani.rss + ani-rss + 2.4.8 + + + ani-rss-web + + + 17 + 17 + UTF-8 + + + + + ani.rss + ani-rss-core + + + org.projectlombok + lombok + + + + diff --git a/ani-rss-web/src/main/java/ani/rss/WebMain.java b/ani-rss-web/src/main/java/ani/rss/WebMain.java new file mode 100644 index 00000000..9579d9bf --- /dev/null +++ b/ani-rss-web/src/main/java/ani/rss/WebMain.java @@ -0,0 +1,10 @@ +package ani.rss; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class WebMain { + public static void main(String[] args) { + log.info("Hello Word"); + } +} diff --git a/src/main/java/ani/rss/action/BaseAction.java b/ani-rss-web/src/main/java/ani/rss/action/BaseAction.java similarity index 96% rename from src/main/java/ani/rss/action/BaseAction.java rename to ani-rss-web/src/main/java/ani/rss/action/BaseAction.java index 83a987f4..19d2e857 100644 --- a/src/main/java/ani/rss/action/BaseAction.java +++ b/ani-rss-web/src/main/java/ani/rss/action/BaseAction.java @@ -1,8 +1,8 @@ package ani.rss.action; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Result; -import ani.rss.util.basic.GsonStatic; -import ani.rss.util.other.ServerUtil; +import ani.rss.util.ServerUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrFormatter; import cn.hutool.http.Header; diff --git a/src/main/java/ani/rss/action/RootAction.java b/ani-rss-web/src/main/java/ani/rss/action/RootAction.java similarity index 99% rename from src/main/java/ani/rss/action/RootAction.java rename to ani-rss-web/src/main/java/ani/rss/action/RootAction.java index 95dac1ff..5da999ef 100644 --- a/src/main/java/ani/rss/action/RootAction.java +++ b/ani-rss-web/src/main/java/ani/rss/action/RootAction.java @@ -1,7 +1,7 @@ package ani.rss.action; import ani.rss.annotation.Auth; -import ani.rss.util.other.MavenUtil; +import ani.rss.commons.MavenUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.EnumerationIter; import cn.hutool.core.io.FileUtil; diff --git a/src/main/java/ani/rss/annotation/Auth.java b/ani-rss-web/src/main/java/ani/rss/annotation/Auth.java similarity index 100% rename from src/main/java/ani/rss/annotation/Auth.java rename to ani-rss-web/src/main/java/ani/rss/annotation/Auth.java diff --git a/src/main/java/ani/rss/annotation/Path.java b/ani-rss-web/src/main/java/ani/rss/annotation/Path.java similarity index 100% rename from src/main/java/ani/rss/annotation/Path.java rename to ani-rss-web/src/main/java/ani/rss/annotation/Path.java diff --git a/src/main/java/ani/rss/auth/enums/AuthType.java b/ani-rss-web/src/main/java/ani/rss/auth/enums/AuthType.java similarity index 100% rename from src/main/java/ani/rss/auth/enums/AuthType.java rename to ani-rss-web/src/main/java/ani/rss/auth/enums/AuthType.java diff --git a/src/main/java/ani/rss/auth/fun/ApiKey.java b/ani-rss-web/src/main/java/ani/rss/auth/fun/ApiKey.java similarity index 100% rename from src/main/java/ani/rss/auth/fun/ApiKey.java rename to ani-rss-web/src/main/java/ani/rss/auth/fun/ApiKey.java diff --git a/src/main/java/ani/rss/auth/fun/Form.java b/ani-rss-web/src/main/java/ani/rss/auth/fun/Form.java similarity index 93% rename from src/main/java/ani/rss/auth/fun/Form.java rename to ani-rss-web/src/main/java/ani/rss/auth/fun/Form.java index c59e6b1c..3498825c 100644 --- a/src/main/java/ani/rss/auth/fun/Form.java +++ b/ani-rss-web/src/main/java/ani/rss/auth/fun/Form.java @@ -1,7 +1,7 @@ package ani.rss.auth.fun; -import ani.rss.auth.util.AuthUtil; import ani.rss.entity.Login; +import ani.rss.util.AuthUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.server.HttpServerRequest; diff --git a/src/main/java/ani/rss/auth/fun/Header.java b/ani-rss-web/src/main/java/ani/rss/auth/fun/Header.java similarity index 95% rename from src/main/java/ani/rss/auth/fun/Header.java rename to ani-rss-web/src/main/java/ani/rss/auth/fun/Header.java index ace1bf9c..e98a695f 100644 --- a/src/main/java/ani/rss/auth/fun/Header.java +++ b/ani-rss-web/src/main/java/ani/rss/auth/fun/Header.java @@ -1,7 +1,7 @@ package ani.rss.auth.fun; -import ani.rss.auth.util.AuthUtil; import ani.rss.entity.Login; +import ani.rss.util.AuthUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.server.HttpServerRequest; diff --git a/src/main/java/ani/rss/auth/fun/IpWhitelist.java b/ani-rss-web/src/main/java/ani/rss/auth/fun/IpWhitelist.java similarity index 86% rename from src/main/java/ani/rss/auth/fun/IpWhitelist.java rename to ani-rss-web/src/main/java/ani/rss/auth/fun/IpWhitelist.java index c4af86a8..3a91f111 100644 --- a/src/main/java/ani/rss/auth/fun/IpWhitelist.java +++ b/ani-rss-web/src/main/java/ani/rss/auth/fun/IpWhitelist.java @@ -1,9 +1,9 @@ package ani.rss.auth.fun; -import ani.rss.auth.util.AuthUtil; +import ani.rss.commons.CacheUtil; import ani.rss.entity.Config; +import ani.rss.util.AuthUtil; import ani.rss.util.basic.CidrRangeChecker; -import ani.rss.util.basic.MyCacheUtil; import ani.rss.util.other.ConfigUtil; import cn.hutool.core.lang.PatternPool; import cn.hutool.core.net.Ipv4Util; @@ -39,7 +39,7 @@ public class IpWhitelist implements Function { if (!PatternPool.IPV4.matcher(ip).matches() && !PatternPool.IPV6.matcher(ip).matches()) { return false; } - Boolean b = MyCacheUtil.get(key); + Boolean b = CacheUtil.get(key); if (Objects.nonNull(b)) { return b; } @@ -48,27 +48,27 @@ public class IpWhitelist implements Function { // 判断是否为 ipv4 或 ipv6 if (PatternPool.IPV4.matcher(string).matches() || PatternPool.IPV6.matcher(string).matches()) { if (string.equals(ip)) { - MyCacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); return true; } } // 通配符,如 192.168.*.1 if (string.contains("*")) { if (Ipv4Util.matches(string, ip)) { - MyCacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); return true; } } // X.X.X.X/X if (CidrRangeChecker.CIDR_PATTERN.matcher(string).matches()) { if (CidrRangeChecker.isIpInRange(ip, string)) { - MyCacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); return true; } } // X.X.X.X-X.X.X.X if (isIpInRange(ip, string)) { - MyCacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, Boolean.TRUE, TimeUnit.MINUTES.toMillis(10)); return true; } } @@ -76,7 +76,7 @@ public class IpWhitelist implements Function { log.error("ip白名单存在问题"); log.error(e.getMessage(), e); } - MyCacheUtil.put(key, Boolean.FALSE, TimeUnit.MINUTES.toMillis(10)); + CacheUtil.put(key, Boolean.FALSE, TimeUnit.MINUTES.toMillis(10)); return false; } diff --git a/src/main/java/ani/rss/auth/util/AuthUtil.java b/ani-rss-web/src/main/java/ani/rss/util/AuthUtil.java similarity index 65% rename from src/main/java/ani/rss/auth/util/AuthUtil.java rename to ani-rss-web/src/main/java/ani/rss/util/AuthUtil.java index 91555b2b..5bba0619 100644 --- a/src/main/java/ani/rss/auth/util/AuthUtil.java +++ b/ani-rss-web/src/main/java/ani/rss/util/AuthUtil.java @@ -1,15 +1,16 @@ -package ani.rss.auth.util; +package ani.rss.util; -import ani.rss.action.LoginAction; import ani.rss.annotation.Auth; import ani.rss.auth.enums.AuthType; +import ani.rss.commons.CacheUtil; +import ani.rss.commons.ExceptionUtil; +import ani.rss.commons.GsonStatic; import ani.rss.entity.Config; import ani.rss.entity.Login; -import ani.rss.util.basic.ExceptionUtil; -import ani.rss.util.basic.GsonStatic; -import ani.rss.util.basic.MyCacheUtil; +import ani.rss.entity.Result; +import ani.rss.exception.ResultException; import ani.rss.util.other.ConfigUtil; -import ani.rss.util.other.ServerUtil; +import cn.hutool.core.text.StrFormatter; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.ReflectUtil; @@ -23,6 +24,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; /** @@ -40,13 +42,13 @@ public class AuthUtil { * 刷新有效时间 */ public static void resetTime() { - String key = MyCacheUtil.get("auth_key"); + String key = CacheUtil.get("auth_key"); if (StrUtil.isBlank(key)) { return; } Config config = ConfigUtil.CONFIG; Integer loginEffectiveHours = config.getLoginEffectiveHours(); - MyCacheUtil.put("auth_key", key, TimeUnit.HOURS.toMillis(loginEffectiveHours)); + CacheUtil.put("auth_key", key, TimeUnit.HOURS.toMillis(loginEffectiveHours)); } /** @@ -65,12 +67,12 @@ public class AuthUtil { // 禁止多端登录 key = RandomUtil.randomString(128); } - MyCacheUtil.put("auth_key", key, TimeUnit.HOURS.toMillis(loginEffectiveHours)); + CacheUtil.put("auth_key", key, TimeUnit.HOURS.toMillis(loginEffectiveHours)); return key; } public static String getAuth(Login login) { - String key = MyCacheUtil.get("auth_key"); + String key = CacheUtil.get("auth_key"); if (StrUtil.isBlank(key)) { key = resetKey(); } @@ -114,7 +116,7 @@ public class AuthUtil { * @return */ public static Boolean test(HttpServerRequest request, Auth auth) { - LoginAction.limitLoginAttempts(false); + limitLoginAttempts(false); if (!auth.value()) { // 不进行校验 return true; @@ -125,7 +127,7 @@ public class AuthUtil { return true; } } - LoginAction.limitLoginAttempts(true); + limitLoginAttempts(true); return false; } @@ -147,4 +149,46 @@ public class AuthUtil { return function.apply(request); } + /** + * 限制尝试次数 + * + * @param isAdd 累加计数 + */ + public static void limitLoginAttempts(Boolean isAdd) { + Config config = ConfigUtil.CONFIG; + boolean limitLoginAttempts = config.getLimitLoginAttempts(); + if (!limitLoginAttempts) { + return; + } + String ip = AuthUtil.getIp(); + String key = "LimitLoginAttempts#" + ip; + + // 1 天内将不再允许尝试 + long timeout = TimeUnit.DAYS.toMillis(1); + + if (!CacheUtil.containsKey(key)) { + if (isAdd) { + CacheUtil.put(key, new AtomicInteger(1), timeout); + } + return; + } + + AtomicInteger countAtomicInteger = CacheUtil.get(key); + int count = countAtomicInteger.getAndAdd(isAdd ? 1 : 0); + + // 失败时 时间将重新计时 + CacheUtil.put(key, countAtomicInteger, timeout); + + // 失败 10 次 + if (count < 10) { + return; + } + + log.debug("失败次数过多, 已限制登录 {}", ip); + Result result = new Result() + .setMessage(StrFormatter.format("失败次数过多, 已限制登录 {}", ip)) + .setCode(300); + throw new ResultException(result); + } + } diff --git a/src/main/java/ani/rss/util/other/ServerUtil.java b/ani-rss-web/src/main/java/ani/rss/util/ServerUtil.java similarity index 84% rename from src/main/java/ani/rss/util/other/ServerUtil.java rename to ani-rss-web/src/main/java/ani/rss/util/ServerUtil.java index 04baee89..60c35631 100644 --- a/src/main/java/ani/rss/util/other/ServerUtil.java +++ b/ani-rss-web/src/main/java/ani/rss/util/ServerUtil.java @@ -1,20 +1,21 @@ -package ani.rss.util.other; +package ani.rss.util; -import ani.rss.Main; import ani.rss.action.BaseAction; import ani.rss.action.RootAction; import ani.rss.annotation.Auth; import ani.rss.annotation.Path; -import ani.rss.auth.util.AuthUtil; +import ani.rss.commons.ExceptionUtil; import ani.rss.entity.Config; +import ani.rss.entity.Global; import ani.rss.entity.Result; import ani.rss.exception.ResultException; -import ani.rss.util.basic.ExceptionUtil; +import ani.rss.util.other.ConfigUtil; import cn.hutool.core.lang.PatternPool; import cn.hutool.core.net.Ipv4Util; import cn.hutool.core.net.NetUtil; import cn.hutool.core.util.ClassUtil; import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.RuntimeUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.server.HttpServerRequest; import cn.hutool.http.server.HttpServerResponse; @@ -27,14 +28,12 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -import static ani.rss.auth.util.AuthUtil.getIp; +import static ani.rss.util.AuthUtil.getIp; @Slf4j public class ServerUtil { public static final ThreadLocal REQUEST = new ThreadLocal<>(); public static final ThreadLocal RESPONSE = new ThreadLocal<>(); - public static String HOST = ""; - public static String HTTP_PORT = "7789"; public static SimpleServer HTTP_SERVER; public static void start() { @@ -52,13 +51,15 @@ public class ServerUtil { InetSocketAddress address = HTTP_SERVER.getAddress(); String hostName = address.getHostName(); int port = address.getPort(); - HTTP_PORT = String.valueOf(port); + Global.HTTP_PORT = String.valueOf(port); log.info("Http Server listen on [{}:{}]", hostName, port); for (String ip : NetUtil.localIpv4s()) { log.info("http://{}:{}", ip, port); } + + RuntimeUtil.addShutdownHook(ServerUtil::stop); } /** @@ -66,30 +67,30 @@ public class ServerUtil { */ public static void createServer() { Map env = System.getenv(); - int i = Main.ARGS.indexOf("--port"); + int i = Global.ARGS.indexOf("--port"); if (i > -1) { - HTTP_PORT = Main.ARGS.get(i + 1); + Global.HTTP_PORT = Global.ARGS.get(i + 1); } - i = Main.ARGS.indexOf("--host"); + i = Global.ARGS.indexOf("--host"); if (i > -1) { - HOST = Main.ARGS.get(i + 1); + Global.HOST = Global.ARGS.get(i + 1); } - HTTP_PORT = env.getOrDefault("PORT", HTTP_PORT); - HOST = env.getOrDefault("HOST", HOST); + Global.HTTP_PORT = env.getOrDefault("PORT", Global.HTTP_PORT); + Global.HOST = env.getOrDefault("HOST", Global.HOST); - if (StrUtil.isBlank(HOST)) { - HTTP_SERVER = new SimpleServer(Integer.parseInt(HTTP_PORT)); + if (StrUtil.isBlank(Global.HOST)) { + HTTP_SERVER = new SimpleServer(Integer.parseInt(Global.HTTP_PORT)); return; } try { - HTTP_SERVER = new SimpleServer(HOST, Integer.parseInt(HTTP_PORT)); + HTTP_SERVER = new SimpleServer(Global.HOST, Integer.parseInt(Global.HTTP_PORT)); return; } catch (Exception e) { log.error(e.getMessage(), e); } - HTTP_SERVER = new SimpleServer(Integer.parseInt(HTTP_PORT)); + HTTP_SERVER = new SimpleServer(Integer.parseInt(Global.HTTP_PORT)); } public static void addFilter(SimpleServer server) { diff --git a/docker/Dockerfile b/docker/Dockerfile index e397daf9..ba1f5e56 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -2,7 +2,7 @@ FROM wushuo894/eclipse-temurin:25-jre-alpine COPY docker/run.sh /run.sh COPY docker/exec.sh /exec.sh -COPY target/ani-rss-jar-with-dependencies.jar /usr/app/ani-rss-jar-with-dependencies.jar +COPY ani-rss-application/target/ani-rss-jar-with-dependencies.jar /usr/app/ani-rss-jar-with-dependencies.jar WORKDIR /usr/app VOLUME /config ENV PUID=0 PGID=0 UMASK=022 diff --git a/docker/Dockerfile-arm32v7 b/docker/Dockerfile-arm32v7 index 6e4c00fe..d41e2b14 100644 --- a/docker/Dockerfile-arm32v7 +++ b/docker/Dockerfile-arm32v7 @@ -2,7 +2,7 @@ FROM wushuo894/eclipse-temurin:arm32v7 COPY docker/run.sh /run.sh COPY docker/exec.sh /exec.sh -COPY target/ani-rss-jar-with-dependencies.jar /usr/app/ani-rss-jar-with-dependencies.jar +COPY ani-rss-application/target/ani-rss-jar-with-dependencies.jar /usr/app/ani-rss-jar-with-dependencies.jar WORKDIR /usr/app VOLUME /config ENV PUID=0 PGID=0 UMASK=022 diff --git a/docker/Dockerfile-openj9 b/docker/Dockerfile-openj9 index 5186797c..2845de6c 100644 --- a/docker/Dockerfile-openj9 +++ b/docker/Dockerfile-openj9 @@ -2,7 +2,7 @@ FROM wushuo894/openj9:open-25-jre COPY docker/run.sh /run.sh COPY docker/exec.sh /exec.sh -COPY target/ani-rss-jar-with-dependencies.jar /usr/app/ani-rss-jar-with-dependencies.jar +COPY ani-rss-application/target/ani-rss-jar-with-dependencies.jar /usr/app/ani-rss-jar-with-dependencies.jar WORKDIR /usr/app VOLUME /config ENV PUID=0 PGID=0 UMASK=022 diff --git a/package-win.sh b/package-win.sh index 12851b0d..3750c4b7 100644 --- a/package-win.sh +++ b/package-win.sh @@ -26,11 +26,14 @@ GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' -if [ ! -f target/ani-rss-launcher.exe ]; then +base_path=$(pwd) +target_path=${base_path}/target + +if [ ! -f ${target_path}/ani-rss-launcher.exe ]; then bash package.sh fi -cd target +cd ${target_path} if [ -d ani-rss ]; then echo -e "${YELLOW}清理文件夹 ani-rss${NC}" diff --git a/package.sh b/package.sh index 5cfe00ae..14b7381f 100644 --- a/package.sh +++ b/package.sh @@ -1,8 +1,24 @@ #!/bin/bash -rm -rf src/main/resources/build_info -git rev-parse --short HEAD >> src/main/resources/build_info -git branch --show-current >> src/main/resources/build_info +# 起始位置 +base_path=$(pwd) + +# ui 位置 +ui_path=${base_path}/ui +# ani-rss-application 路径 +application_path=${base_path}/ani-rss-application +# dist 位置 +dist_path=${application_path}/src/main/resources/dist +# 更新程序位置 +update_exe_path=${application_path}/src/main/resources/ani-rss-update.exe +# build_info 位置 +build_info_path=${application_path}/src/main/resources/build_info +# target 位置 +target_path=${application_path}/target + +rm -rf ${build_info_path} +git rev-parse --short HEAD >> ${build_info_path} +git branch --show-current >> ${build_info_path} # 定义颜色代码 RED='\033[0;31m' @@ -10,14 +26,16 @@ GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' -cd ui -if [ -d ../src/main/resources/dist ]; then - echo -e "${YELLOW}清理 src/main/resources/dist${NC}" - rm -rf ../src/main/resources/dist/* + +cd ${ui_path} + +if [ -d ${dist_path} ]; then + echo -e "${YELLOW}清理 ${dist_path}${NC}" + rm -rf ${dist_path}/* else - echo -e "${YELLOW}创建文件夹 src/main/resources/dist${NC}" - mkdir -p ../src/main/resources/dist + echo -e "${YELLOW}创建文件夹 ${dist_path}${NC}" + mkdir -p ${dist_path} fi if ! command -v pnpm >/dev/null 2>&1; then @@ -35,12 +53,12 @@ fi echo -e "${GREEN}web编译完成${NC}" -cp -r dist/* ../src/main/resources/dist +cp -r dist/* ${dist_path} -if [ ! -e ../src/main/resources/ani-rss-update.exe ]; then +if [ ! -e ${update_exe_path} ]; then echo "下载 ani-rss-update.exe" wget https://github.com/wushuo894/ani-rss-update/releases/download/latest/ani-rss-update.exe - mv ani-rss-update.exe ../src/main/resources/ani-rss-update.exe + mv ani-rss-update.exe ${update_exe_path} else echo -e "${YELLOW}已存在 ani-rss-update.exe${NC}" fi @@ -55,9 +73,11 @@ fi echo -e "${GREEN}jar编译完成${NC}" -md5sum target/ani-rss-jar-with-dependencies.jar | awk '{print $1}' > target/ani-rss-jar-with-dependencies.jar.md5 -md5sum target/ani-rss-launcher.exe | awk '{print $1}' > target/ani-rss-launcher.exe.md5 + + +md5sum ${target_path}/ani-rss-jar-with-dependencies.jar | awk '{print $1}' > ${target_path}/ani-rss-jar-with-dependencies.jar.md5 +md5sum ${target_path}/ani-rss-launcher.exe | awk '{print $1}' > ${target_path}/ani-rss-launcher.exe.md5 echo "md5" -echo "ani-rss-jar-with-dependencies.jar $(cat target/ani-rss-jar-with-dependencies.jar.md5)" -echo "target/ani-rss-launcher.exe $(cat target/ani-rss-launcher.exe.md5)" +echo "ani-rss-jar-with-dependencies.jar $(cat ${target_path}/ani-rss-jar-with-dependencies.jar.md5)" +echo "ani-rss-launcher.exe $(cat ${target_path}/ani-rss-launcher.exe.md5)" diff --git a/pom.xml b/pom.xml index 36a9fda7..b931fa46 100644 --- a/pom.xml +++ b/pom.xml @@ -7,9 +7,17 @@ ani.rss ani-rss 2.4.8 + pom wushuo894 + + ani-rss-commons + ani-rss-application + ani-rss-web + ani-rss-core + ani-rss-api + 2025 基于RSS自动追番、订阅、下载、刮削 @@ -19,136 +27,54 @@ UTF-8 - - - org.eclipse - bittorrent - 0.3.0-v20070627-1030 - - - org.xerial - sqlite-jdbc - 3.50.3.0 - - - com.sun.mail - javax.mail - 1.6.2 - - - ch.qos.logback - logback-classic - 1.5.19 - - - io.github.biezhi - TinyPinyin - 2.0.3.RELEASE - - - org.projectlombok - lombok - 1.18.42 - provided - - - com.google.code.gson - gson - 2.13.2 - - - cn.hutool - hutool-all - 5.8.41 - - - org.jsoup - jsoup - 1.21.2 - - - junit - junit - 4.13.2 - test - - - - - ani-rss - - - org.apache.maven.plugins - maven-assembly-plugin - 3.7.1 - - - jar-with-dependencies - - - - true - ani.rss.Main - - - - - - make-assembly - package - - single - - - - - - com.akathist.maven.plugins.launch4j - launch4j-maven-plugin - 2.6.0 - - - l4j - package - - launch4j - - - gui - target/ani-rss-launcher.exe - target/ani-rss-jar-with-dependencies.jar - Java environment is required! - --gui - . - normal - https://adoptium.net/zh-CN/ - https://whichjdk.com/ - false - false - ui/public/favicon.ico - - jre/bin;%JAVA_HOME%/bin;%PATH% - 17 - - -Xms60m -Xmx1g -Xss256k - --enable-native-access=ALL-UNNAMED - --add-opens=java.base/java.net=ALL-UNNAMED - --add-opens=java.base/sun.net.www.protocol.https=ALL-UNNAMED - - - - https://docs.wushuo.top/ - Copyright (C) 2024-2025 - ${project.artifactId} - ${project.artifactId} - ani-rss-launcher.exe - SIMPLIFIED_CHINESE - - - - - - - + + + + ani.rss + ani-rss-commons + ${project.parent.version} + + + ani.rss + ani-rss-api + ${project.parent.version} + + + ani.rss + ani-rss-core + ${project.parent.version} + + + ani.rss + ani-rss-tmdb + ${project.parent.version} + + + ani.rss + ani-rss-web + ${project.parent.version} + + + org.projectlombok + lombok + 1.18.42 + + + cn.hutool + hutool-all + 5.8.41 + + + com.google.code.gson + gson + 2.13.2 + + + ch.qos.logback + logback-classic + 1.5.19 + + + diff --git a/src/main/java/ani/rss/entity/EmbyWebHook.java b/src/main/java/ani/rss/entity/EmbyWebHook.java deleted file mode 100644 index 836012f5..00000000 --- a/src/main/java/ani/rss/entity/EmbyWebHook.java +++ /dev/null @@ -1,116 +0,0 @@ -package ani.rss.entity; - -import ani.rss.entity.tmdb.Tmdb; -import ani.rss.enums.StringEnum; -import ani.rss.service.DownloadService; -import ani.rss.util.other.RenameUtil; -import cn.hutool.core.util.ReUtil; -import cn.hutool.core.util.StrUtil; -import com.google.gson.annotations.SerializedName; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.File; -import java.io.Serializable; -import java.util.Objects; - -/** - * EmbyWebHook - */ -@Data -@Accessors(chain = true) -public class EmbyWebHook implements Serializable { - - @SerializedName(value = "item", alternate = "Item") - private Item item; - - @SerializedName(value = "event", alternate = "Event") - private String event; - - @SerializedName(value = "playbackInfo", alternate = "PlaybackInfo") - private PlaybackInfo playbackInfo; - - @Data - @Accessors(chain = true) - public static class Item implements Serializable { - @SerializedName(value = "path", alternate = "Path") - private String path; - @SerializedName(value = "seriesName", alternate = "SeriesName") - private String seriesName; - @SerializedName(value = "fileName", alternate = "FileName") - private String fileName; - } - - @Data - @Accessors(chain = true) - public static class PlaybackInfo implements Serializable { - /** - * 是否播放完成 - */ - @SerializedName(value = "playedToCompletion", alternate = "PlayedToCompletion") - private Boolean playedToCompletion; - } - - /** - * 是否匹配到订阅 - * - * @param ani - * @return - */ - public Boolean equalsAni(Ani ani) { - String fileName = item.getFileName(); - if (!ReUtil.contains(StringEnum.SEASON_REG, fileName)) { - return false; - } - - // 季 - int season = Integer.parseInt(ReUtil.get(StringEnum.SEASON_REG, fileName, 1)); - - if (season != ani.getSeason()) { - return false; - } - - String bgmUrl = ani.getBgmUrl(); - if (StrUtil.isBlank(bgmUrl)) { - // bgmUrl为空 - return false; - } - - String path = item.getPath(); - String parent = new File(path).getParent(); - String downloadPath = DownloadService.getDownloadPath(ani); - if (downloadPath.equals(parent)) { - // 路径相同 - return true; - } - - String title = ani.getTitle(); - title = RenameUtil.renameDel(title, false); - String seriesName = item.getSeriesName(); - if (title.equals(seriesName)) { - // 名称与季相同 - return true; - } - - Tmdb tmdb = ani.getTmdb(); - if (Objects.isNull(tmdb)) { - return false; - } - - // 对比tmdb名称 - String name = tmdb.getName(); - if (StrUtil.isNotBlank(name)) { - if (name.equals(seriesName)) { - return true; - } - } - - // 对比tmdb原名 - String originalName = tmdb.getOriginalName(); - if (StrUtil.isNotBlank(originalName)) { - return originalName.equals(seriesName); - } - return false; - } - -} diff --git a/src/main/java/ani/rss/enums/NotificationTypeEnum.java b/src/main/java/ani/rss/enums/NotificationTypeEnum.java deleted file mode 100644 index fcdf859f..00000000 --- a/src/main/java/ani/rss/enums/NotificationTypeEnum.java +++ /dev/null @@ -1,19 +0,0 @@ -package ani.rss.enums; - -import ani.rss.notification.*; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@AllArgsConstructor -public enum NotificationTypeEnum { - EMBY_REFRESH(EmbyRefreshNotification.class), - MAIL(MailNotification.class), - SERVER_CHAN(ServerChanNotification.class), - SYSTEM(SystemNotification.class), - TELEGRAM(TelegramNotification.class), - WEB_HOOK(WebHookNotification.class), - SHELL(ShellNotification.class); - - @Getter - private final Class aClass; -} diff --git a/src/test/java/ScrapeTest.java b/src/test/java/ScrapeTest.java deleted file mode 100644 index 02df55c5..00000000 --- a/src/test/java/ScrapeTest.java +++ /dev/null @@ -1,59 +0,0 @@ -import ani.rss.entity.Ani; -import ani.rss.entity.tmdb.Tmdb; -import ani.rss.service.ScrapeService; -import ani.rss.util.other.ConfigUtil; -import ani.rss.util.other.TmdbUtil; -import org.junit.Test; - -/** - * 刮削测试 - */ -public class ScrapeTest { - - /** - * 刮削电影 - */ - @Test - public void scrapeMovie() { - ConfigUtil.load(); - - Tmdb tmdb = TmdbUtil.getTmdbMovie("你的名字"); - - Ani ani = Ani.createAni(); - ani.setTmdb(tmdb); - ani.setTitle("你的名字"); - ani.setOva(true); - ani.setSeason(1); - - try { - ScrapeService.scrapeMovie(ani, true); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } - - /** - * 刮削电视剧 - */ - @Test - public void scrapeTv() { - ConfigUtil.load(); - - Tmdb tmdb = TmdbUtil.getTmdbTv("Re:从零开始的异世界生活"); - tmdb.setTmdbGroupId("641eb9d6b234b9007ac67063"); - - Ani ani = Ani.createAni(); - ani.setTmdb(tmdb); - ani.setTitle("Re:从零开始的异世界生活"); - ani.setSeason(2); - - try { - ScrapeService.scrapeTv(ani, true); - } catch (Exception e) { - throw new RuntimeException(e); - } - - - } -}