From cda330ddbd61f19db55010c18c3fc3e63373f00e Mon Sep 17 00:00:00 2001
From: 0xboobface <0xboobface@gmail.com>
Date: Sun, 18 Nov 2018 22:42:13 +0100
Subject: [PATCH] Split up project into client, server, common and master
---
client/.project | 2 +-
client/pom.xml | 35 +--
.../ctbrec/sites/cam4/Cam4HttpClient.java | 125 ----------
.../src/main/java/ctbrec/ui/JavaFxModel.java | 3 +
.../src/main/java/ctbrec/ui/SettingsTab.java | 2 +-
.../src/main/java/ctbrec/ui/SiteTabPane.java | 3 +-
client/src/main/java/ctbrec/ui/SiteUI.java | 12 +
.../main/java/ctbrec/ui/SiteUiFactory.java | 53 +++++
client/src/main/java/ctbrec/ui/ThumbCell.java | 2 +
.../main/java/ctbrec/ui/ThumbOverviewTab.java | 4 +-
client/src/main/java/ctbrec/ui/TipDialog.java | 1 +
.../src/main/java/ctbrec/ui/TokenLabel.java | 1 +
.../sites/bonga/BongaCamsConfigUI.java | 3 +-
.../sites/bonga/BongaCamsLoginDialog.java | 3 +-
.../ui/sites/bonga/BongaCamsSiteUi.java | 112 +++++++++
.../sites/bonga/BongaCamsTabProvider.java | 7 +-
.../sites/bonga/BongaCamsUpdateService.java | 4 +-
.../{ => ui}/sites/cam4/Cam4ConfigUI.java | 3 +-
.../{ => ui}/sites/cam4/Cam4FollowedTab.java | 3 +-
.../sites/cam4/Cam4FollowedUpdateService.java | 11 +-
.../{ => ui}/sites/cam4/Cam4LoginDialog.java | 3 +-
.../java/ctbrec/ui/sites/cam4/Cam4SiteUi.java | 113 +++++++++
.../{ => ui}/sites/cam4/Cam4TabProvider.java | 7 +-
.../sites/cam4/Cam4UpdateService.java | 14 +-
.../sites/camsoda/CamsodaConfigUI.java | 3 +-
.../sites/camsoda/CamsodaFollowedTab.java | 3 +-
.../camsoda/CamsodaFollowedUpdateService.java | 8 +-
.../sites/camsoda/CamsodaLoginDialog.java | 3 +-
.../sites/camsoda/CamsodaShowsTab.java | 5 +-
.../ui/sites/camsoda/CamsodaSiteUi.java | 107 +++++++++
.../sites/camsoda/CamsodaTabProvider.java | 7 +-
.../sites/camsoda/CamsodaUpdateService.java | 12 +-
.../sites/chaturbate/ChaturbateConfigUi.java | 3 +-
.../chaturbate/ChaturbateFollowedTab.java | 3 +-
.../ui/sites/chaturbate/ChaturbateSiteUi.java | 37 +++
.../chaturbate/ChaturbateTabProvider.java | 7 +-
.../chaturbate/ChaturbateUpdateService.java | 12 +-
.../myfreecams}/FriendsUpdateService.java | 13 +-
.../myfreecams}/HDCamsUpdateService.java | 3 +-
.../sites/myfreecams}/MyFreeCamsConfigUI.java | 3 +-
.../myfreecams}/MyFreeCamsFriendsTab.java | 5 +-
.../ui/sites/myfreecams/MyFreeCamsSiteUi.java | 37 +++
.../myfreecams}/MyFreeCamsTabProvider.java | 7 +-
.../myfreecams}/OnlineCamsUpdateService.java | 3 +-
.../myfreecams}/PopularModelService.java | 3 +-
common/.classpath | 15 ++
common/.gitignore | 2 +
common/.project | 23 ++
.../org.eclipse.core.resources.prefs | 2 +
common/.settings/org.eclipse.jdt.core.prefs | 13 +
common/.settings/org.eclipse.m2e.core.prefs | 4 +
common/pom.xml | 65 +++++
.../src}/ctbrec/AbstractModel.java | 0
.../java => common/src}/ctbrec/Config.java | 0
.../main/java => common/src}/ctbrec/Hmac.java | 0
.../main/java => common/src}/ctbrec/Java.java | 0
.../src}/ctbrec/LoggingInterceptor.java | 0
.../java => common/src}/ctbrec/Model.java | 0
.../main/java => common/src}/ctbrec/OS.java | 0
.../java => common/src}/ctbrec/Recording.java | 0
.../java => common/src}/ctbrec/Settings.java | 0
common/src/ctbrec/StringUtil.java | 11 +
.../java => common/src}/ctbrec/Version.java | 0
.../ctbrec/io/CookieContainerJsonAdapter.java | 0
.../src}/ctbrec/io/CookieJarImpl.java | 0
.../src}/ctbrec/io/CookieJsonAdapter.java | 0
.../src}/ctbrec/io/DevNull.java | 0
.../src/ctbrec/io}/HtmlParser.java | 2 +-
.../src}/ctbrec/io/HttpClient.java | 28 ++-
.../src}/ctbrec/io/HttpException.java | 0
.../src}/ctbrec/io/InstantJsonAdapter.java | 0
.../src}/ctbrec/io/ModelJsonAdapter.java | 0
.../src}/ctbrec/io/StreamRedirectThread.java | 0
.../src}/ctbrec/recorder/LocalRecorder.java | 7 +-
.../ctbrec/recorder/PlaylistGenerator.java | 0
.../ctbrec/recorder/ProgressListener.java | 0
.../src}/ctbrec/recorder/Recorder.java | 3 +
.../ctbrec/recorder}/RecorderHttpClient.java | 2 +-
.../src}/ctbrec/recorder/RemoteRecorder.java | 5 +
.../download/AbstractHlsDownload.java | 0
.../ctbrec/recorder/download/Download.java | 0
.../ctbrec/recorder/download/HlsDownload.java | 0
.../recorder/download/MergedHlsDownload.java | 0
.../recorder/download/StreamSource.java | 0
.../src}/ctbrec/sites/AbstractSite.java | 13 +
.../src}/ctbrec/sites/ConfigUI.java | 0
.../sites/NeedsManualLoginException.java | 7 +
.../src}/ctbrec/sites/Site.java | 6 +-
.../src}/ctbrec/sites/bonga/BongaCams.java | 29 +--
.../sites/bonga/BongaCamsHttpClient.java | 62 +----
.../ctbrec/sites/bonga/BongaCamsModel.java | 2 +-
.../src}/ctbrec/sites/cam4/Cam4.java | 32 +--
.../src/ctbrec/sites/cam4/Cam4HttpClient.java | 65 +++++
.../src}/ctbrec/sites/cam4/Cam4Model.java | 9 +-
.../src}/ctbrec/sites/camsoda/Camsoda.java | 31 +--
.../sites/camsoda/CamsodaHttpClient.java | 67 +-----
.../ctbrec/sites/camsoda/CamsodaModel.java | 6 +-
.../ctbrec/sites/chaturbate/Chaturbate.java | 44 +---
.../chaturbate/ChaturbateHttpClient.java | 6 +-
.../sites/chaturbate/ChaturbateModel.java | 2 +-
.../chaturbate/ChaturbateModelParser.java | 2 +-
.../ctbrec/sites/chaturbate/StreamInfo.java | 0
.../src}/ctbrec/sites/mfc/Fcext.java | 0
.../src}/ctbrec/sites/mfc/Message.java | 0
.../src}/ctbrec/sites/mfc/MessageTypes.java | 0
.../src}/ctbrec/sites/mfc/Model.java | 0
.../src}/ctbrec/sites/mfc/MyFreeCams.java | 31 +--
.../ctbrec/sites/mfc/MyFreeCamsClient.java | 4 +-
.../sites/mfc/MyFreeCamsHttpClient.java | 2 +-
.../ctbrec/sites/mfc/MyFreeCamsModel.java | 4 +-
.../src}/ctbrec/sites/mfc/ServerConfig.java | 0
.../src}/ctbrec/sites/mfc/SessionState.java | 0
.../src}/ctbrec/sites/mfc/Share.java | 0
.../src}/ctbrec/sites/mfc/State.java | 0
.../src}/ctbrec/sites/mfc/User.java | 0
.../src}/ctbrec/sites/mfc/X.java | 0
.../src}/org/taktik/CHANGELOG.md | 0
.../src}/org/taktik/ioutils/NIOUtils.java | 0
.../src}/org/taktik/mpegts/Constants.java | 0
.../src}/org/taktik/mpegts/MTSPacket.java | 0
.../src}/org/taktik/mpegts/Merger.java | 0
.../src}/org/taktik/mpegts/PATSection.java | 0
.../src}/org/taktik/mpegts/PMTSection.java | 0
.../src}/org/taktik/mpegts/PSISection.java | 0
.../src}/org/taktik/mpegts/PacketSupport.java | 0
.../src}/org/taktik/mpegts/Streamer.java | 0
.../src}/org/taktik/mpegts/StreamerTest.java | 0
.../taktik/mpegts/sinks/ByteChannelSink.java | 0
.../src}/org/taktik/mpegts/sinks/MTSSink.java | 0
.../org/taktik/mpegts/sinks/UDPTransport.java | 0
.../sources/AbstractByteChannelMTSSource.java | 0
.../mpegts/sources/AbstractMTSSource.java | 0
.../sources/BlockingMultiMTSSource.java | 0
.../mpegts/sources/ByteChannelMTSSource.java | 0
.../mpegts/sources/ByteSourceMTSSource.java | 0
.../sources/ConcatenatingMTSSource.java | 0
.../mpegts/sources/ContinuityFixer.java | 0
.../sources/ContinuityFixingMTSSource.java | 0
.../mpegts/sources/FixedBitrateMTSSource.java | 0
.../mpegts/sources/InputStreamMTSSource.java | 0
.../mpegts/sources/LoopingMTSSource.java | 0
.../org/taktik/mpegts/sources/MTSSource.java | 0
.../org/taktik/mpegts/sources/MTSSources.java | 0
.../mpegts/sources/MultiplexingMTSSource.java | 0
.../mpegts/sources/NullPacketSource.java | 0
.../mpegts/sources/ResettableMTSSource.java | 0
.../sources/SeekableByteChannelMTSSource.java | 0
master/pom.xml | 187 ++++++---------
server/.classpath | 13 +-
server/.gitignore | 1 +
server/.project | 6 +
.../org.eclipse.core.resources.prefs | 2 +
server/.settings/org.eclipse.jdt.core.prefs | 9 +-
server/.settings/org.eclipse.m2e.core.prefs | 4 +
server/pom.xml | 222 +-----------------
.../server/AbstractCtbrecServlet.java | 0
.../ctbrec/recorder/server/HlsServlet.java | 0
.../ctbrec/recorder/server/HttpServer.java | 0
.../recorder/server/RecorderServlet.java | 0
159 files changed, 1016 insertions(+), 844 deletions(-)
delete mode 100644 client/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java
create mode 100644 client/src/main/java/ctbrec/ui/SiteUI.java
create mode 100644 client/src/main/java/ctbrec/ui/SiteUiFactory.java
rename client/src/main/java/ctbrec/{ => ui}/sites/bonga/BongaCamsConfigUI.java (97%)
rename client/src/main/java/ctbrec/{ => ui}/sites/bonga/BongaCamsLoginDialog.java (98%)
create mode 100644 client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java
rename client/src/main/java/ctbrec/{ => ui}/sites/bonga/BongaCamsTabProvider.java (93%)
rename client/src/main/java/ctbrec/{ => ui}/sites/bonga/BongaCamsUpdateService.java (96%)
rename client/src/main/java/ctbrec/{ => ui}/sites/cam4/Cam4ConfigUI.java (97%)
rename client/src/main/java/ctbrec/{ => ui}/sites/cam4/Cam4FollowedTab.java (97%)
rename client/src/main/java/ctbrec/{ => ui}/sites/cam4/Cam4FollowedUpdateService.java (93%)
rename client/src/main/java/ctbrec/{ => ui}/sites/cam4/Cam4LoginDialog.java (98%)
create mode 100644 client/src/main/java/ctbrec/ui/sites/cam4/Cam4SiteUi.java
rename client/src/main/java/ctbrec/{ => ui}/sites/cam4/Cam4TabProvider.java (91%)
rename client/src/main/java/ctbrec/{ => ui}/sites/cam4/Cam4UpdateService.java (92%)
rename client/src/main/java/ctbrec/{ => ui}/sites/camsoda/CamsodaConfigUI.java (96%)
rename client/src/main/java/ctbrec/{ => ui}/sites/camsoda/CamsodaFollowedTab.java (97%)
rename client/src/main/java/ctbrec/{ => ui}/sites/camsoda/CamsodaFollowedUpdateService.java (93%)
rename client/src/main/java/ctbrec/{ => ui}/sites/camsoda/CamsodaLoginDialog.java (98%)
rename client/src/main/java/ctbrec/{ => ui}/sites/camsoda/CamsodaShowsTab.java (98%)
create mode 100644 client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaSiteUi.java
rename client/src/main/java/ctbrec/{ => ui}/sites/camsoda/CamsodaTabProvider.java (88%)
rename client/src/main/java/ctbrec/{ => ui}/sites/camsoda/CamsodaUpdateService.java (95%)
rename client/src/main/java/ctbrec/{ => ui}/sites/chaturbate/ChaturbateConfigUi.java (96%)
rename client/src/main/java/ctbrec/{ => ui}/sites/chaturbate/ChaturbateFollowedTab.java (97%)
create mode 100644 client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateSiteUi.java
rename client/src/main/java/ctbrec/{ => ui}/sites/chaturbate/ChaturbateTabProvider.java (89%)
rename client/src/main/java/ctbrec/{ => ui}/sites/chaturbate/ChaturbateUpdateService.java (88%)
rename client/src/main/java/ctbrec/{sites/mfc => ui/sites/myfreecams}/FriendsUpdateService.java (92%)
rename client/src/main/java/ctbrec/{sites/mfc => ui/sites/myfreecams}/HDCamsUpdateService.java (94%)
rename client/src/main/java/ctbrec/{sites/mfc => ui/sites/myfreecams}/MyFreeCamsConfigUI.java (96%)
rename client/src/main/java/ctbrec/{sites/mfc => ui/sites/myfreecams}/MyFreeCamsFriendsTab.java (93%)
create mode 100644 client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsSiteUi.java
rename client/src/main/java/ctbrec/{sites/mfc => ui/sites/myfreecams}/MyFreeCamsTabProvider.java (90%)
rename client/src/main/java/ctbrec/{sites/mfc => ui/sites/myfreecams}/OnlineCamsUpdateService.java (94%)
rename client/src/main/java/ctbrec/{sites/mfc => ui/sites/myfreecams}/PopularModelService.java (94%)
create mode 100644 common/.classpath
create mode 100644 common/.gitignore
create mode 100644 common/.project
create mode 100644 common/.settings/org.eclipse.core.resources.prefs
create mode 100644 common/.settings/org.eclipse.jdt.core.prefs
create mode 100644 common/.settings/org.eclipse.m2e.core.prefs
create mode 100644 common/pom.xml
rename {client/src/main/java => common/src}/ctbrec/AbstractModel.java (100%)
rename {client/src/main/java => common/src}/ctbrec/Config.java (100%)
rename {client/src/main/java => common/src}/ctbrec/Hmac.java (100%)
rename {client/src/main/java => common/src}/ctbrec/Java.java (100%)
rename {client/src/main/java => common/src}/ctbrec/LoggingInterceptor.java (100%)
rename {client/src/main/java => common/src}/ctbrec/Model.java (100%)
rename {client/src/main/java => common/src}/ctbrec/OS.java (100%)
rename {client/src/main/java => common/src}/ctbrec/Recording.java (100%)
rename {client/src/main/java => common/src}/ctbrec/Settings.java (100%)
create mode 100644 common/src/ctbrec/StringUtil.java
rename {client/src/main/java => common/src}/ctbrec/Version.java (100%)
rename {client/src/main/java => common/src}/ctbrec/io/CookieContainerJsonAdapter.java (100%)
rename {client/src/main/java => common/src}/ctbrec/io/CookieJarImpl.java (100%)
rename {client/src/main/java => common/src}/ctbrec/io/CookieJsonAdapter.java (100%)
rename {client/src/main/java => common/src}/ctbrec/io/DevNull.java (100%)
rename {client/src/main/java/ctbrec/ui => common/src/ctbrec/io}/HtmlParser.java (98%)
rename {client/src/main/java => common/src}/ctbrec/io/HttpClient.java (92%)
rename {client/src/main/java => common/src}/ctbrec/io/HttpException.java (100%)
rename {client/src/main/java => common/src}/ctbrec/io/InstantJsonAdapter.java (100%)
rename {client/src/main/java => common/src}/ctbrec/io/ModelJsonAdapter.java (100%)
rename {client/src/main/java => common/src}/ctbrec/io/StreamRedirectThread.java (100%)
rename {client/src/main/java => common/src}/ctbrec/recorder/LocalRecorder.java (99%)
rename {client/src/main/java => common/src}/ctbrec/recorder/PlaylistGenerator.java (100%)
rename {client/src/main/java => common/src}/ctbrec/recorder/ProgressListener.java (100%)
rename {client/src/main/java => common/src}/ctbrec/recorder/Recorder.java (96%)
rename {client/src/main/java/ctbrec/recorder/server => common/src/ctbrec/recorder}/RecorderHttpClient.java (89%)
rename {client/src/main/java => common/src}/ctbrec/recorder/RemoteRecorder.java (99%)
rename {client/src/main/java => common/src}/ctbrec/recorder/download/AbstractHlsDownload.java (100%)
rename {client/src/main/java => common/src}/ctbrec/recorder/download/Download.java (100%)
rename {client/src/main/java => common/src}/ctbrec/recorder/download/HlsDownload.java (100%)
rename {client/src/main/java => common/src}/ctbrec/recorder/download/MergedHlsDownload.java (100%)
rename {client/src/main/java => common/src}/ctbrec/recorder/download/StreamSource.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/AbstractSite.java (53%)
rename {client/src/main/java => common/src}/ctbrec/sites/ConfigUI.java (100%)
create mode 100644 common/src/ctbrec/sites/NeedsManualLoginException.java
rename {client/src/main/java => common/src}/ctbrec/sites/Site.java (83%)
rename {client/src/main/java => common/src}/ctbrec/sites/bonga/BongaCams.java (82%)
rename {client/src/main/java => common/src}/ctbrec/sites/bonga/BongaCamsHttpClient.java (77%)
rename {client/src/main/java => common/src}/ctbrec/sites/bonga/BongaCamsModel.java (99%)
rename {client/src/main/java => common/src}/ctbrec/sites/cam4/Cam4.java (71%)
create mode 100644 common/src/ctbrec/sites/cam4/Cam4HttpClient.java
rename {client/src/main/java => common/src}/ctbrec/sites/cam4/Cam4Model.java (97%)
rename {client/src/main/java => common/src}/ctbrec/sites/camsoda/Camsoda.java (78%)
rename {client/src/main/java => common/src}/ctbrec/sites/camsoda/CamsodaHttpClient.java (59%)
rename {client/src/main/java => common/src}/ctbrec/sites/camsoda/CamsodaModel.java (99%)
rename {client/src/main/java => common/src}/ctbrec/sites/chaturbate/Chaturbate.java (89%)
rename {client/src/main/java => common/src}/ctbrec/sites/chaturbate/ChaturbateHttpClient.java (95%)
rename {client/src/main/java => common/src}/ctbrec/sites/chaturbate/ChaturbateModel.java (99%)
rename {client/src/main/java => common/src}/ctbrec/sites/chaturbate/ChaturbateModelParser.java (98%)
rename {client/src/main/java => common/src}/ctbrec/sites/chaturbate/StreamInfo.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/Fcext.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/Message.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/MessageTypes.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/Model.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/MyFreeCams.java (77%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/MyFreeCamsClient.java (99%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/MyFreeCamsHttpClient.java (99%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/MyFreeCamsModel.java (99%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/ServerConfig.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/SessionState.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/Share.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/State.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/User.java (100%)
rename {client/src/main/java => common/src}/ctbrec/sites/mfc/X.java (100%)
rename {client/src/main/java => common/src}/org/taktik/CHANGELOG.md (100%)
rename {client/src/main/java => common/src}/org/taktik/ioutils/NIOUtils.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/Constants.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/MTSPacket.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/Merger.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/PATSection.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/PMTSection.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/PSISection.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/PacketSupport.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/Streamer.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/StreamerTest.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sinks/ByteChannelSink.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sinks/MTSSink.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sinks/UDPTransport.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/AbstractByteChannelMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/AbstractMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/BlockingMultiMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/ByteChannelMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/ByteSourceMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/ConcatenatingMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/ContinuityFixer.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/ContinuityFixingMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/FixedBitrateMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/InputStreamMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/LoopingMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/MTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/MTSSources.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/MultiplexingMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/NullPacketSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/ResettableMTSSource.java (100%)
rename {client/src/main/java => common/src}/org/taktik/mpegts/sources/SeekableByteChannelMTSSource.java (100%)
create mode 100644 server/.gitignore
create mode 100644 server/.settings/org.eclipse.core.resources.prefs
create mode 100644 server/.settings/org.eclipse.m2e.core.prefs
rename {client => server}/src/main/java/ctbrec/recorder/server/AbstractCtbrecServlet.java (100%)
rename {client => server}/src/main/java/ctbrec/recorder/server/HlsServlet.java (100%)
rename {client => server}/src/main/java/ctbrec/recorder/server/HttpServer.java (100%)
rename {client => server}/src/main/java/ctbrec/recorder/server/RecorderServlet.java (100%)
diff --git a/client/.project b/client/.project
index 93146da6..d2d61fca 100644
--- a/client/.project
+++ b/client/.project
@@ -1,6 +1,6 @@
- ctbrec
+ ctbrec-client
diff --git a/client/pom.xml b/client/pom.xml
index c5d1764e..0c12d37b 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -3,9 +3,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- ctbrec
client
- 1.9.0
+
+
+ ctbrec
+ master
+ 1.9.0
+ ../master
+
UTF-8
@@ -60,76 +65,58 @@
+
+ ctbrec
+ common
+
org.jsoup
jsoup
- 1.10.3
com.squareup.okhttp3
okhttp
- 3.10.0
com.squareup.moshi
moshi
- 1.5.0
org.json
json
- 20180130
org.slf4j
slf4j-api
- 1.7.25
ch.qos.logback
logback-classic
- 1.2.3
runtime
-
- org.eclipse.jetty
- jetty-server
- [9.3.24.v20180605,)
-
-
- org.eclipse.jetty
- jetty-servlet
- [9.3.24.v20180605,)
-
com.iheartradio.m3u8
open-m3u8
- 0.2.4
org.jcodec
jcodec
- 0.2.3
org.openjfx
javafx-controls
- 11
org.openjfx
javafx-web
- 11
com.google.guava
guava
- 17.0
junit
junit
- 4.12
test
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java b/client/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java
deleted file mode 100644
index b1b6d3ff..00000000
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4HttpClient.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package ctbrec.sites.cam4;
-
-import java.io.IOException;
-import java.net.HttpCookie;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import ctbrec.io.HttpClient;
-import javafx.application.Platform;
-import okhttp3.Cookie;
-import okhttp3.HttpUrl;
-import okhttp3.Request;
-import okhttp3.Response;
-
-public class Cam4HttpClient extends HttpClient {
-
- private static final transient Logger LOG = LoggerFactory.getLogger(Cam4HttpClient.class);
-
- public Cam4HttpClient() {
- super("cam4");
- }
-
- @Override
- public synchronized boolean login() throws IOException {
- if(loggedIn) {
- return true;
- }
-
- boolean cookiesWorked = checkLoginSuccess();
- if(cookiesWorked) {
- loggedIn = true;
- LOG.debug("Logged in with cookies");
- return true;
- }
-
- BlockingQueue queue = new LinkedBlockingQueue<>();
-
- Runnable showDialog = () -> {
- // login with javafx WebView
- Cam4LoginDialog loginDialog = new Cam4LoginDialog();
-
- // transfer cookies from WebView to OkHttp cookie jar
- transferCookies(loginDialog);
-
- try {
- queue.put(true);
- } catch (InterruptedException e) {
- LOG.error("Error while signaling termination", e);
- }
- };
-
- if(Platform.isFxApplicationThread()) {
- showDialog.run();
- } else {
- Platform.runLater(showDialog);
- try {
- queue.take();
- } catch (InterruptedException e) {
- LOG.error("Error while waiting for login dialog to close", e);
- throw new IOException(e);
- }
- }
-
- loggedIn = checkLoginSuccess();
- return loggedIn;
- }
-
- /**
- * check, if the login worked by requesting unchecked mail
- * @throws IOException
- */
- private boolean checkLoginSuccess() throws IOException {
- String mailUrl = Cam4.BASE_URI + "/mail/unreadThreads";
- Request req = new Request.Builder()
- .url(mailUrl)
- .addHeader("X-Requested-With", "XMLHttpRequest")
- .build();
- Response response = execute(req);
- if(response.isSuccessful() && response.body().contentLength() > 0) {
- JSONObject json = new JSONObject(response.body().string());
- return json.has("status") && Objects.equals("success", json.getString("status"));
- } else {
- response.close();
- return false;
- }
- }
-
- private void transferCookies(Cam4LoginDialog loginDialog) {
- HttpUrl redirectedUrl = HttpUrl.parse(loginDialog.getUrl());
- List cookies = new ArrayList<>();
- for (HttpCookie webViewCookie : loginDialog.getCookies()) {
- if(webViewCookie.getDomain().contains("cam4")) {
- Cookie cookie = Cookie.parse(redirectedUrl, webViewCookie.toString());
- LOG.debug("{} {} {}", webViewCookie.getDomain(), webViewCookie.getName(), webViewCookie.getValue());
- cookies.add(cookie);
- }
- }
- cookieJar.saveFromResponse(redirectedUrl, cookies);
-
- HttpUrl origUrl = HttpUrl.parse(Cam4LoginDialog.URL);
- cookies = new ArrayList<>();
- for (HttpCookie webViewCookie : loginDialog.getCookies()) {
- if(webViewCookie.getDomain().contains("cam4")) {
- Cookie cookie = Cookie.parse(origUrl, webViewCookie.toString());
- cookies.add(cookie);
- }
- }
- cookieJar.saveFromResponse(origUrl, cookies);
- }
-
- protected int getTokenBalance() throws IOException {
- if(!loggedIn) {
- login();
- }
-
- throw new RuntimeException("Not implemented, yet");
- }
-}
diff --git a/client/src/main/java/ctbrec/ui/JavaFxModel.java b/client/src/main/java/ctbrec/ui/JavaFxModel.java
index 7d94afb4..fccdd9e3 100644
--- a/client/src/main/java/ctbrec/ui/JavaFxModel.java
+++ b/client/src/main/java/ctbrec/ui/JavaFxModel.java
@@ -126,6 +126,7 @@ public class JavaFxModel implements Model {
@Override
public void receiveTip(int tokens) throws IOException {
+ SiteUiFactory.getUi(getSite()).login();
delegate.receiveTip(tokens);
}
@@ -136,11 +137,13 @@ public class JavaFxModel implements Model {
@Override
public boolean follow() throws IOException {
+ SiteUiFactory.getUi(getSite()).login();
return delegate.follow();
}
@Override
public boolean unfollow() throws IOException {
+ SiteUiFactory.getUi(getSite()).login();
return delegate.unfollow();
}
diff --git a/client/src/main/java/ctbrec/ui/SettingsTab.java b/client/src/main/java/ctbrec/ui/SettingsTab.java
index e0b1c27a..87ecf4b9 100644
--- a/client/src/main/java/ctbrec/ui/SettingsTab.java
+++ b/client/src/main/java/ctbrec/ui/SettingsTab.java
@@ -126,7 +126,7 @@ public class SettingsTab extends Tab implements TabSelectionListener {
rightSide.getChildren().add(credentialsAccordion);
for (int i = 0; i < sites.size(); i++) {
Site site = sites.get(i);
- ConfigUI siteConfig = site.getConfigurationGui();
+ ConfigUI siteConfig = SiteUiFactory.getUi(site).getConfigUI();
if(siteConfig != null) {
TitledPane pane = new TitledPane(site.getName(), siteConfig.createConfigPanel());
credentialsAccordion.getPanes().add(pane);
diff --git a/client/src/main/java/ctbrec/ui/SiteTabPane.java b/client/src/main/java/ctbrec/ui/SiteTabPane.java
index 38785bfd..2902935f 100644
--- a/client/src/main/java/ctbrec/ui/SiteTabPane.java
+++ b/client/src/main/java/ctbrec/ui/SiteTabPane.java
@@ -14,7 +14,8 @@ public class SiteTabPane extends TabPane {
setSide(Side.LEFT);
// add all tabs
- for (Tab tab : site.getTabProvider().getTabs(scene)) {
+ TabProvider tabProvider = SiteUiFactory.getUi(site).getTabProvider();
+ for (Tab tab : tabProvider.getTabs(scene)) {
getTabs().add(tab);
}
diff --git a/client/src/main/java/ctbrec/ui/SiteUI.java b/client/src/main/java/ctbrec/ui/SiteUI.java
new file mode 100644
index 00000000..865b1b53
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/SiteUI.java
@@ -0,0 +1,12 @@
+package ctbrec.ui;
+
+import java.io.IOException;
+
+import ctbrec.sites.ConfigUI;
+
+public interface SiteUI {
+
+ public TabProvider getTabProvider();
+ public ConfigUI getConfigUI();
+ public boolean login() throws IOException;
+}
diff --git a/client/src/main/java/ctbrec/ui/SiteUiFactory.java b/client/src/main/java/ctbrec/ui/SiteUiFactory.java
new file mode 100644
index 00000000..94352c1e
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/SiteUiFactory.java
@@ -0,0 +1,53 @@
+package ctbrec.ui;
+
+import ctbrec.sites.Site;
+import ctbrec.sites.bonga.BongaCams;
+import ctbrec.sites.cam4.Cam4;
+import ctbrec.sites.camsoda.Camsoda;
+import ctbrec.sites.chaturbate.Chaturbate;
+import ctbrec.sites.mfc.MyFreeCams;
+import ctbrec.ui.sites.bonga.BongaCamsSiteUi;
+import ctbrec.ui.sites.cam4.Cam4SiteUi;
+import ctbrec.ui.sites.camsoda.CamsodaSiteUi;
+import ctbrec.ui.sites.chaturbate.ChaturbateSiteUi;
+import ctbrec.ui.sites.myfreecams.MyFreeCamsSiteUi;
+
+public class SiteUiFactory {
+
+ private static BongaCamsSiteUi bongaSiteUi;
+ private static Cam4SiteUi cam4SiteUi;
+ private static CamsodaSiteUi camsodaSiteUi;
+ private static ChaturbateSiteUi ctbSiteUi;
+ private static MyFreeCamsSiteUi mfcSiteUi;
+
+ public static SiteUI getUi(Site site) {
+ if (site instanceof BongaCams) {
+ if (bongaSiteUi == null) {
+ bongaSiteUi = new BongaCamsSiteUi((BongaCams) site);
+ }
+ return bongaSiteUi;
+ } else if (site instanceof Cam4) {
+ if (cam4SiteUi == null) {
+ cam4SiteUi = new Cam4SiteUi((Cam4) site);
+ }
+ return cam4SiteUi;
+ } else if (site instanceof Camsoda) {
+ if (camsodaSiteUi == null) {
+ camsodaSiteUi = new CamsodaSiteUi((Camsoda) site);
+ }
+ return camsodaSiteUi;
+ } else if (site instanceof Chaturbate) {
+ if (ctbSiteUi == null) {
+ ctbSiteUi = new ChaturbateSiteUi((Chaturbate) site);
+ }
+ return ctbSiteUi;
+ } else if (site instanceof MyFreeCams) {
+ if (mfcSiteUi == null) {
+ mfcSiteUi = new MyFreeCamsSiteUi((MyFreeCams) site);
+ }
+ return mfcSiteUi;
+ }
+ throw new RuntimeException("Unknown site " + site.getName());
+ }
+
+}
diff --git a/client/src/main/java/ctbrec/ui/ThumbCell.java b/client/src/main/java/ctbrec/ui/ThumbCell.java
index f7441965..146cd680 100644
--- a/client/src/main/java/ctbrec/ui/ThumbCell.java
+++ b/client/src/main/java/ctbrec/ui/ThumbCell.java
@@ -401,6 +401,7 @@ public class ThumbCell extends StackPane {
return CompletableFuture.supplyAsync(() -> {
try {
if(follow) {
+ SiteUiFactory.getUi(model.getSite()).login();
boolean followed = model.follow();
if(followed) {
return true;
@@ -415,6 +416,7 @@ public class ThumbCell extends StackPane {
return false;
}
} else {
+ SiteUiFactory.getUi(model.getSite()).login();
boolean unfollowed = model.unfollow();
if(unfollowed) {
Platform.runLater(() -> thumbCellList.remove(ThumbCell.this));
diff --git a/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java b/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java
index 958ac30c..ba77291a 100644
--- a/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java
+++ b/client/src/main/java/ctbrec/ui/ThumbOverviewTab.java
@@ -366,6 +366,7 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
if(tipText.matches("[1-9]\\d*")) {
int tokens = Integer.parseInt(tipText);
try {
+ SiteUiFactory.getUi(site).login();
cell.getModel().receiveTip(tokens);
Map event = new HashMap<>();
event.put("event", "tokens.sent");
@@ -485,7 +486,8 @@ public class ThumbOverviewTab extends Tab implements TabSelectionListener {
}
private double getFollowedTabYPosition() {
- Tab followedTab = site.getTabProvider().getFollowedTab();
+ TabProvider tabProvider = SiteUiFactory.getUi(site).getTabProvider();
+ Tab followedTab = tabProvider.getFollowedTab();
TabPane tabPane = getTabPane();
int idx = tabPane.getTabs().indexOf(followedTab);
for (Node node : tabPane.getChildrenUnmodifiable()) {
diff --git a/client/src/main/java/ctbrec/ui/TipDialog.java b/client/src/main/java/ctbrec/ui/TipDialog.java
index aa9dca22..2b4dfcf0 100644
--- a/client/src/main/java/ctbrec/ui/TipDialog.java
+++ b/client/src/main/java/ctbrec/ui/TipDialog.java
@@ -35,6 +35,7 @@ public class TipDialog extends TextInputDialog {
@Override
protected Integer call() throws Exception {
if (!Objects.equals(System.getenv("CTBREC_DEV"), "1")) {
+ SiteUiFactory.getUi(site).login();
return site.getTokenBalance();
} else {
return 1_000_000;
diff --git a/client/src/main/java/ctbrec/ui/TokenLabel.java b/client/src/main/java/ctbrec/ui/TokenLabel.java
index 30471ab8..d19b16d0 100644
--- a/client/src/main/java/ctbrec/ui/TokenLabel.java
+++ b/client/src/main/java/ctbrec/ui/TokenLabel.java
@@ -58,6 +58,7 @@ public class TokenLabel extends Label {
@Override
protected Integer call() throws Exception {
if (!Objects.equals(System.getenv("CTBREC_DEV"), "1")) {
+ SiteUiFactory.getUi(site).login();
return site.getTokenBalance();
} else {
return 1_000_000;
diff --git a/client/src/main/java/ctbrec/sites/bonga/BongaCamsConfigUI.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsConfigUI.java
similarity index 97%
rename from client/src/main/java/ctbrec/sites/bonga/BongaCamsConfigUI.java
rename to client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsConfigUI.java
index 24bdc287..4c74d258 100644
--- a/client/src/main/java/ctbrec/sites/bonga/BongaCamsConfigUI.java
+++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsConfigUI.java
@@ -1,7 +1,8 @@
-package ctbrec.sites.bonga;
+package ctbrec.ui.sites.bonga;
import ctbrec.Config;
import ctbrec.sites.ConfigUI;
+import ctbrec.sites.bonga.BongaCams;
import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.SettingsTab;
import javafx.geometry.Insets;
diff --git a/client/src/main/java/ctbrec/sites/bonga/BongaCamsLoginDialog.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsLoginDialog.java
similarity index 98%
rename from client/src/main/java/ctbrec/sites/bonga/BongaCamsLoginDialog.java
rename to client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsLoginDialog.java
index 626667d3..099d0c7c 100644
--- a/client/src/main/java/ctbrec/sites/bonga/BongaCamsLoginDialog.java
+++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsLoginDialog.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.bonga;
+package ctbrec.ui.sites.bonga;
import java.io.File;
import java.io.InputStream;
@@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
import ctbrec.Config;
import ctbrec.OS;
+import ctbrec.sites.bonga.BongaCams;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
diff --git a/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java
new file mode 100644
index 00000000..328528bc
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsSiteUi.java
@@ -0,0 +1,112 @@
+package ctbrec.ui.sites.bonga;
+
+import java.io.IOException;
+import java.net.HttpCookie;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import ctbrec.sites.ConfigUI;
+import ctbrec.sites.bonga.BongaCams;
+import ctbrec.sites.bonga.BongaCamsHttpClient;
+import ctbrec.ui.SiteUI;
+import ctbrec.ui.TabProvider;
+import javafx.application.Platform;
+import okhttp3.Cookie;
+import okhttp3.CookieJar;
+import okhttp3.HttpUrl;
+
+public class BongaCamsSiteUi implements SiteUI {
+
+ private static final transient Logger LOG = LoggerFactory.getLogger(BongaCamsSiteUi.class);
+ private BongaCamsTabProvider tabProvider;
+ private BongaCamsConfigUI configUi;
+ private BongaCams bongaCams;
+
+ public BongaCamsSiteUi(BongaCams bongaCams) {
+ this.bongaCams = bongaCams;
+ tabProvider = new BongaCamsTabProvider(bongaCams);
+ configUi = new BongaCamsConfigUI(bongaCams);
+ }
+
+ @Override
+ public TabProvider getTabProvider() {
+ return tabProvider;
+ }
+
+ @Override
+ public ConfigUI getConfigUI() {
+ return configUi;
+ }
+
+ @Override
+ public boolean login() throws IOException {
+ boolean automaticLogin = bongaCams.login();
+ if(automaticLogin) {
+ return true;
+ } else {
+ BlockingQueue queue = new LinkedBlockingQueue<>();
+
+ Runnable showDialog = () -> {
+ // login with javafx WebView
+ BongaCamsLoginDialog loginDialog = new BongaCamsLoginDialog();
+
+ // transfer cookies from WebView to OkHttp cookie jar
+ transferCookies(loginDialog);
+
+ try {
+ queue.put(true);
+ } catch (InterruptedException e) {
+ LOG.error("Error while signaling termination", e);
+ }
+ };
+
+ if(Platform.isFxApplicationThread()) {
+ showDialog.run();
+ } else {
+ Platform.runLater(showDialog);
+ try {
+ queue.take();
+ } catch (InterruptedException e) {
+ LOG.error("Error while waiting for login dialog to close", e);
+ throw new IOException(e);
+ }
+ }
+
+ BongaCamsHttpClient httpClient = (BongaCamsHttpClient)bongaCams.getHttpClient();
+ boolean loggedIn = httpClient.checkLoginSuccess();
+ if(loggedIn) {
+ LOG.info("Logged in. User ID is {}", httpClient.getUserId());
+ } else {
+ LOG.info("Login failed");
+ }
+ return loggedIn;
+ }
+ }
+
+
+ private void transferCookies(BongaCamsLoginDialog loginDialog) {
+ BongaCamsHttpClient httpClient = (BongaCamsHttpClient)bongaCams.getHttpClient();
+ CookieJar cookieJar = httpClient.getCookieJar();
+
+ HttpUrl redirectedUrl = HttpUrl.parse(loginDialog.getUrl());
+ List cookies = new ArrayList<>();
+ for (HttpCookie webViewCookie : loginDialog.getCookies()) {
+ Cookie cookie = Cookie.parse(redirectedUrl, webViewCookie.toString());
+ cookies.add(cookie);
+ }
+ cookieJar.saveFromResponse(redirectedUrl, cookies);
+
+ HttpUrl origUrl = HttpUrl.parse(BongaCamsLoginDialog.URL);
+ cookies = new ArrayList<>();
+ for (HttpCookie webViewCookie : loginDialog.getCookies()) {
+ Cookie cookie = Cookie.parse(origUrl, webViewCookie.toString());
+ cookies.add(cookie);
+ }
+ cookieJar.saveFromResponse(origUrl, cookies);
+ }
+}
diff --git a/client/src/main/java/ctbrec/sites/bonga/BongaCamsTabProvider.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsTabProvider.java
similarity index 93%
rename from client/src/main/java/ctbrec/sites/bonga/BongaCamsTabProvider.java
rename to client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsTabProvider.java
index d54420dc..a0171d9a 100644
--- a/client/src/main/java/ctbrec/sites/bonga/BongaCamsTabProvider.java
+++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsTabProvider.java
@@ -1,9 +1,10 @@
-package ctbrec.sites.bonga;
+package ctbrec.ui.sites.bonga;
import java.util.ArrayList;
import java.util.List;
import ctbrec.recorder.Recorder;
+import ctbrec.sites.bonga.BongaCams;
import ctbrec.ui.PaginatedScheduledService;
import ctbrec.ui.TabProvider;
import ctbrec.ui.ThumbOverviewTab;
@@ -16,9 +17,9 @@ public class BongaCamsTabProvider extends TabProvider {
private Recorder recorder;
private Tab friendsTab;
- public BongaCamsTabProvider(Recorder recorder, BongaCams bongaCams) {
- this.recorder = recorder;
+ public BongaCamsTabProvider(BongaCams bongaCams) {
this.bongaCams = bongaCams;
+ this.recorder = bongaCams.getRecorder();
}
@Override
diff --git a/client/src/main/java/ctbrec/sites/bonga/BongaCamsUpdateService.java b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsUpdateService.java
similarity index 96%
rename from client/src/main/java/ctbrec/sites/bonga/BongaCamsUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsUpdateService.java
index 9761be92..80f979fe 100644
--- a/client/src/main/java/ctbrec/sites/bonga/BongaCamsUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/bonga/BongaCamsUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.bonga;
+package ctbrec.ui.sites.bonga;
import java.io.IOException;
import java.util.ArrayList;
@@ -11,6 +11,8 @@ import org.slf4j.LoggerFactory;
import ctbrec.Config;
import ctbrec.Model;
+import ctbrec.sites.bonga.BongaCams;
+import ctbrec.sites.bonga.BongaCamsModel;
import ctbrec.ui.PaginatedScheduledService;
import javafx.concurrent.Task;
import okhttp3.Request;
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4ConfigUI.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4ConfigUI.java
similarity index 97%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4ConfigUI.java
rename to client/src/main/java/ctbrec/ui/sites/cam4/Cam4ConfigUI.java
index 04ad5c9a..4429c729 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4ConfigUI.java
+++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4ConfigUI.java
@@ -1,7 +1,8 @@
-package ctbrec.sites.cam4;
+package ctbrec.ui.sites.cam4;
import ctbrec.Config;
import ctbrec.sites.ConfigUI;
+import ctbrec.sites.cam4.Cam4;
import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.SettingsTab;
import javafx.geometry.Insets;
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4FollowedTab.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4FollowedTab.java
similarity index 97%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4FollowedTab.java
rename to client/src/main/java/ctbrec/ui/sites/cam4/Cam4FollowedTab.java
index bd25fa90..f56a4743 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4FollowedTab.java
+++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4FollowedTab.java
@@ -1,5 +1,6 @@
-package ctbrec.sites.cam4;
+package ctbrec.ui.sites.cam4;
+import ctbrec.sites.cam4.Cam4;
import ctbrec.ui.FollowedTab;
import ctbrec.ui.ThumbOverviewTab;
import javafx.concurrent.WorkerStateEvent;
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4FollowedUpdateService.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4FollowedUpdateService.java
similarity index 93%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4FollowedUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/cam4/Cam4FollowedUpdateService.java
index a3757293..60047998 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4FollowedUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4FollowedUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.cam4;
+package ctbrec.ui.sites.cam4;
import java.io.IOException;
import java.util.ArrayList;
@@ -16,9 +16,12 @@ import org.slf4j.LoggerFactory;
import ctbrec.Config;
import ctbrec.Model;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpException;
-import ctbrec.ui.HtmlParser;
+import ctbrec.sites.cam4.Cam4;
+import ctbrec.sites.cam4.Cam4Model;
import ctbrec.ui.PaginatedScheduledService;
+import ctbrec.ui.SiteUiFactory;
import javafx.concurrent.Task;
import okhttp3.Request;
import okhttp3.Response;
@@ -48,11 +51,13 @@ public class Cam4FollowedUpdateService extends PaginatedScheduledService {
return new Task>() {
@Override
public List call() throws IOException {
+ // login first
+ SiteUiFactory.getUi(site).login();
List models = new ArrayList<>();
String username = Config.getInstance().getSettings().cam4Username;
String url = site.getBaseUrl() + '/' + username + "/edit/friends_favorites";
Request req = new Request.Builder().url(url).build();
- try(Response response = site.getHttpClient().execute(req, true)) {
+ try(Response response = site.getHttpClient().execute(req)) {
if(response.isSuccessful()) {
String content = response.body().string();
Elements cells = HtmlParser.getTags(content, "div#favorites div.ff_thumb");
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4LoginDialog.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4LoginDialog.java
similarity index 98%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4LoginDialog.java
rename to client/src/main/java/ctbrec/ui/sites/cam4/Cam4LoginDialog.java
index bb862bed..65c13019 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4LoginDialog.java
+++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4LoginDialog.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.cam4;
+package ctbrec.ui.sites.cam4;
import java.io.File;
import java.io.InputStream;
@@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
import ctbrec.Config;
import ctbrec.OS;
+import ctbrec.sites.cam4.Cam4;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
diff --git a/client/src/main/java/ctbrec/ui/sites/cam4/Cam4SiteUi.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4SiteUi.java
new file mode 100644
index 00000000..d0c5d2b5
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4SiteUi.java
@@ -0,0 +1,113 @@
+package ctbrec.ui.sites.cam4;
+
+import java.io.IOException;
+import java.net.HttpCookie;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import ctbrec.sites.ConfigUI;
+import ctbrec.sites.cam4.Cam4;
+import ctbrec.sites.cam4.Cam4HttpClient;
+import ctbrec.ui.SiteUI;
+import ctbrec.ui.TabProvider;
+import javafx.application.Platform;
+import okhttp3.Cookie;
+import okhttp3.CookieJar;
+import okhttp3.HttpUrl;
+
+public class Cam4SiteUi implements SiteUI {
+ private static final transient Logger LOG = LoggerFactory.getLogger(Cam4SiteUi.class);
+
+ private Cam4TabProvider tabProvider;
+ private Cam4ConfigUI configUI;
+ private Cam4 cam4;
+
+ public Cam4SiteUi(Cam4 cam4) {
+ this.cam4 = cam4;
+ tabProvider = new Cam4TabProvider(cam4);
+ configUI = new Cam4ConfigUI();
+ }
+
+ @Override
+ public TabProvider getTabProvider() {
+ return tabProvider;
+ }
+
+ @Override
+ public ConfigUI getConfigUI() {
+ return configUI;
+ }
+
+ @Override
+ public boolean login() throws IOException {
+ boolean automaticLogin = cam4.login();
+ if(automaticLogin) {
+ return true;
+ } else {
+
+ BlockingQueue queue = new LinkedBlockingQueue<>();
+
+ Runnable showDialog = () -> {
+ // login with javafx WebView
+ Cam4LoginDialog loginDialog = new Cam4LoginDialog();
+
+ // transfer cookies from WebView to OkHttp cookie jar
+ transferCookies(loginDialog);
+
+ try {
+ queue.put(true);
+ } catch (InterruptedException e) {
+ LOG.error("Error while signaling termination", e);
+ }
+ };
+
+ if(Platform.isFxApplicationThread()) {
+ showDialog.run();
+ } else {
+ Platform.runLater(showDialog);
+ try {
+ queue.take();
+ } catch (InterruptedException e) {
+ LOG.error("Error while waiting for login dialog to close", e);
+ throw new IOException(e);
+ }
+ }
+
+ Cam4HttpClient httpClient = (Cam4HttpClient) cam4.getHttpClient();
+ boolean loggedIn = httpClient.checkLoginSuccess();
+ return loggedIn;
+ }
+ }
+
+
+ private void transferCookies(Cam4LoginDialog loginDialog) {
+ Cam4HttpClient httpClient = (Cam4HttpClient) cam4.getHttpClient();
+ CookieJar cookieJar = httpClient.getCookieJar();
+
+ HttpUrl redirectedUrl = HttpUrl.parse(loginDialog.getUrl());
+ List cookies = new ArrayList<>();
+ for (HttpCookie webViewCookie : loginDialog.getCookies()) {
+ if(webViewCookie.getDomain().contains("cam4")) {
+ Cookie cookie = Cookie.parse(redirectedUrl, webViewCookie.toString());
+ LOG.debug("{} {} {}", webViewCookie.getDomain(), webViewCookie.getName(), webViewCookie.getValue());
+ cookies.add(cookie);
+ }
+ }
+ cookieJar.saveFromResponse(redirectedUrl, cookies);
+
+ HttpUrl origUrl = HttpUrl.parse(Cam4LoginDialog.URL);
+ cookies = new ArrayList<>();
+ for (HttpCookie webViewCookie : loginDialog.getCookies()) {
+ if(webViewCookie.getDomain().contains("cam4")) {
+ Cookie cookie = Cookie.parse(origUrl, webViewCookie.toString());
+ cookies.add(cookie);
+ }
+ }
+ cookieJar.saveFromResponse(origUrl, cookies);
+ }
+}
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4TabProvider.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4TabProvider.java
similarity index 91%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4TabProvider.java
rename to client/src/main/java/ctbrec/ui/sites/cam4/Cam4TabProvider.java
index fc8d0acf..38fd1745 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4TabProvider.java
+++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4TabProvider.java
@@ -1,9 +1,10 @@
-package ctbrec.sites.cam4;
+package ctbrec.ui.sites.cam4;
import java.util.ArrayList;
import java.util.List;
import ctbrec.recorder.Recorder;
+import ctbrec.sites.cam4.Cam4;
import ctbrec.ui.TabProvider;
import ctbrec.ui.ThumbOverviewTab;
import javafx.scene.Scene;
@@ -15,9 +16,9 @@ public class Cam4TabProvider extends TabProvider {
private Recorder recorder;
private Cam4FollowedTab followed;
- public Cam4TabProvider(Cam4 cam4, Recorder recorder) {
+ public Cam4TabProvider(Cam4 cam4) {
this.cam4 = cam4;
- this.recorder = recorder;
+ this.recorder = cam4.getRecorder();
}
@Override
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4UpdateService.java b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4UpdateService.java
similarity index 92%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4UpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/cam4/Cam4UpdateService.java
index da6ea05f..40905828 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4UpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/cam4/Cam4UpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.cam4;
+package ctbrec.ui.sites.cam4;
import java.io.IOException;
import java.util.ArrayList;
@@ -8,7 +8,6 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
-import org.eclipse.jetty.util.StringUtil;
import org.json.JSONObject;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
@@ -17,9 +16,13 @@ import org.slf4j.LoggerFactory;
import ctbrec.Config;
import ctbrec.Model;
+import ctbrec.StringUtil;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpException;
-import ctbrec.ui.HtmlParser;
+import ctbrec.sites.cam4.Cam4;
+import ctbrec.sites.cam4.Cam4Model;
import ctbrec.ui.PaginatedScheduledService;
+import ctbrec.ui.SiteUiFactory;
import javafx.concurrent.Task;
import okhttp3.Request;
import okhttp3.Response;
@@ -58,8 +61,11 @@ public class Cam4UpdateService extends PaginatedScheduledService {
} else {
String url = Cam4UpdateService.this.url + "&page=" + page;
LOG.debug("Fetching page {}", url);
+ if(loginRequired) {
+ SiteUiFactory.getUi(site).login();
+ }
Request request = new Request.Builder().url(url).build();
- try (Response response = site.getHttpClient().execute(request, loginRequired)) {
+ try (Response response = site.getHttpClient().execute(request)) {
if (response.isSuccessful()) {
JSONObject json = new JSONObject(response.body().string());
String html = json.getString("html");
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaConfigUI.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaConfigUI.java
similarity index 96%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaConfigUI.java
rename to client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaConfigUI.java
index 9669e865..c8468a82 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaConfigUI.java
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaConfigUI.java
@@ -1,7 +1,8 @@
-package ctbrec.sites.camsoda;
+package ctbrec.ui.sites.camsoda;
import ctbrec.Config;
import ctbrec.sites.ConfigUI;
+import ctbrec.sites.camsoda.Camsoda;
import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.SettingsTab;
import javafx.geometry.Insets;
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaFollowedTab.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaFollowedTab.java
similarity index 97%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaFollowedTab.java
rename to client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaFollowedTab.java
index bc95672b..d1d5a8c6 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaFollowedTab.java
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaFollowedTab.java
@@ -1,5 +1,6 @@
-package ctbrec.sites.camsoda;
+package ctbrec.ui.sites.camsoda;
+import ctbrec.sites.camsoda.Camsoda;
import ctbrec.ui.FollowedTab;
import ctbrec.ui.ThumbOverviewTab;
import javafx.concurrent.WorkerStateEvent;
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaFollowedUpdateService.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaFollowedUpdateService.java
similarity index 93%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaFollowedUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaFollowedUpdateService.java
index 16b45af7..4e92d25c 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaFollowedUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaFollowedUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.camsoda;
+package ctbrec.ui.sites.camsoda;
import java.io.IOException;
import java.util.ArrayList;
@@ -12,7 +12,10 @@ import org.json.JSONObject;
import ctbrec.Model;
import ctbrec.io.HttpException;
+import ctbrec.sites.camsoda.Camsoda;
+import ctbrec.sites.camsoda.CamsodaModel;
import ctbrec.ui.PaginatedScheduledService;
+import ctbrec.ui.SiteUiFactory;
import javafx.concurrent.Task;
import okhttp3.Request;
import okhttp3.Response;
@@ -32,8 +35,9 @@ public class CamsodaFollowedUpdateService extends PaginatedScheduledService {
public List call() throws IOException {
List models = new ArrayList<>();
String url = camsoda.getBaseUrl() + "/api/v1/user/current";
+ SiteUiFactory.getUi(camsoda).login();
Request request = new Request.Builder().url(url).build();
- try(Response response = camsoda.getHttpClient().execute(request, true)) {
+ try(Response response = camsoda.getHttpClient().execute(request)) {
if (response.isSuccessful()) {
JSONObject json = new JSONObject(response.body().string());
if(json.has("status") && json.getBoolean("status")) {
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaLoginDialog.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaLoginDialog.java
similarity index 98%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaLoginDialog.java
rename to client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaLoginDialog.java
index 6668babf..e08731ea 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaLoginDialog.java
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaLoginDialog.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.camsoda;
+package ctbrec.ui.sites.camsoda;
import java.io.File;
import java.io.InputStream;
@@ -9,6 +9,7 @@ import java.util.Base64;
import java.util.List;
import ctbrec.OS;
+import ctbrec.sites.camsoda.Camsoda;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaShowsTab.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaShowsTab.java
similarity index 98%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaShowsTab.java
rename to client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaShowsTab.java
index 8ebcb4bb..377797ee 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaShowsTab.java
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaShowsTab.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.camsoda;
+package ctbrec.ui.sites.camsoda;
import java.io.IOException;
import java.security.InvalidKeyException;
@@ -21,8 +21,10 @@ import org.slf4j.LoggerFactory;
import ctbrec.Model;
import ctbrec.recorder.Recorder;
+import ctbrec.sites.camsoda.Camsoda;
import ctbrec.ui.AutosizeAlert;
import ctbrec.ui.DesktopIntegration;
+import ctbrec.ui.SiteUiFactory;
import ctbrec.ui.TabSelectionListener;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
@@ -203,6 +205,7 @@ public class CamsodaShowsTab extends Tab implements TabSelectionListener {
setCursor(Cursor.WAIT);
new Thread(() -> {
try {
+ SiteUiFactory.getUi(model.getSite()).login();
model.follow();
} catch (Exception e) {
LOG.error("Couldn't follow model {}", model, e);
diff --git a/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaSiteUi.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaSiteUi.java
new file mode 100644
index 00000000..a86f72e3
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaSiteUi.java
@@ -0,0 +1,107 @@
+package ctbrec.ui.sites.camsoda;
+
+import java.io.IOException;
+import java.net.HttpCookie;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import ctbrec.sites.ConfigUI;
+import ctbrec.sites.camsoda.Camsoda;
+import ctbrec.sites.camsoda.CamsodaHttpClient;
+import ctbrec.ui.SiteUI;
+import ctbrec.ui.TabProvider;
+import ctbrec.ui.sites.cam4.Cam4LoginDialog;
+import javafx.application.Platform;
+import okhttp3.Cookie;
+import okhttp3.HttpUrl;
+
+public class CamsodaSiteUi implements SiteUI {
+
+ private static final transient Logger LOG = LoggerFactory.getLogger(CamsodaSiteUi.class);
+
+ private CamsodaTabProvider tabProvider;
+ private CamsodaConfigUI configUi;
+ private Camsoda camsoda;
+
+ public CamsodaSiteUi(Camsoda camsoda) {
+ this.camsoda = camsoda;
+ tabProvider = new CamsodaTabProvider(camsoda);
+ configUi = new CamsodaConfigUI(camsoda);
+ }
+
+ @Override
+ public TabProvider getTabProvider() {
+ return tabProvider;
+ }
+
+ @Override
+ public ConfigUI getConfigUI() {
+ return configUi;
+ }
+
+ @Override
+ public boolean login() throws IOException {
+ boolean automaticLogin = camsoda.login();
+ return automaticLogin;
+ }
+
+
+ @SuppressWarnings("unused")
+ private boolean loginWithDialog() throws IOException {
+ BlockingQueue queue = new LinkedBlockingQueue<>();
+
+ Runnable showDialog = () -> {
+ // login with javafx WebView
+ CamsodaLoginDialog loginDialog = new CamsodaLoginDialog();
+
+ // transfer cookies from WebView to OkHttp cookie jar
+ transferCookies(loginDialog);
+
+ try {
+ queue.put(true);
+ } catch (InterruptedException e) {
+ LOG.error("Error while signaling termination", e);
+ }
+ };
+
+ if(Platform.isFxApplicationThread()) {
+ showDialog.run();
+ } else {
+ Platform.runLater(showDialog);
+ try {
+ queue.take();
+ } catch (InterruptedException e) {
+ LOG.error("Error while waiting for login dialog to close", e);
+ throw new IOException(e);
+ }
+ }
+
+ CamsodaHttpClient httpClient = (CamsodaHttpClient)camsoda.getHttpClient();
+ boolean loggedIn = httpClient.checkLoginSuccess();
+ return loggedIn;
+ }
+
+ private void transferCookies(CamsodaLoginDialog loginDialog) {
+ HttpUrl redirectedUrl = HttpUrl.parse(loginDialog.getUrl());
+ List cookies = new ArrayList<>();
+ for (HttpCookie webViewCookie : loginDialog.getCookies()) {
+ Cookie cookie = Cookie.parse(redirectedUrl, webViewCookie.toString());
+ cookies.add(cookie);
+ }
+ camsoda.getHttpClient().getCookieJar().saveFromResponse(redirectedUrl, cookies);
+
+ HttpUrl origUrl = HttpUrl.parse(Cam4LoginDialog.URL);
+ cookies = new ArrayList<>();
+ for (HttpCookie webViewCookie : loginDialog.getCookies()) {
+ Cookie cookie = Cookie.parse(origUrl, webViewCookie.toString());
+ cookies.add(cookie);
+ }
+ camsoda.getHttpClient().getCookieJar().saveFromResponse(origUrl, cookies);
+ }
+
+}
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaTabProvider.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java
similarity index 88%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaTabProvider.java
rename to client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java
index 7ac423a6..5873b9cf 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaTabProvider.java
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaTabProvider.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.camsoda;
+package ctbrec.ui.sites.camsoda;
import static ctbrec.sites.camsoda.Camsoda.*;
@@ -6,6 +6,7 @@ import java.util.ArrayList;
import java.util.List;
import ctbrec.recorder.Recorder;
+import ctbrec.sites.camsoda.Camsoda;
import ctbrec.ui.TabProvider;
import ctbrec.ui.ThumbOverviewTab;
import javafx.scene.Scene;
@@ -17,9 +18,9 @@ public class CamsodaTabProvider extends TabProvider {
private Recorder recorder;
CamsodaFollowedTab followedTab;
- public CamsodaTabProvider(Camsoda camsoda, Recorder recorder) {
+ public CamsodaTabProvider(Camsoda camsoda) {
this.camsoda = camsoda;
- this.recorder = recorder;
+ this.recorder = camsoda.getRecorder();
followedTab = new CamsodaFollowedTab("Followed", camsoda);
}
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaUpdateService.java b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java
similarity index 95%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java
index c76b3c28..f7b6e321 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/camsoda/CamsodaUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.camsoda;
+package ctbrec.ui.sites.camsoda;
import java.io.IOException;
import java.util.ArrayList;
@@ -6,15 +6,18 @@ import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import org.eclipse.jetty.util.StringUtil;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Model;
+import ctbrec.StringUtil;
import ctbrec.io.HttpException;
+import ctbrec.sites.camsoda.Camsoda;
+import ctbrec.sites.camsoda.CamsodaModel;
import ctbrec.ui.PaginatedScheduledService;
+import ctbrec.ui.SiteUiFactory;
import javafx.concurrent.Task;
import okhttp3.Request;
import okhttp3.Response;
@@ -45,8 +48,11 @@ public class CamsodaUpdateService extends PaginatedScheduledService {
} else {
String url = CamsodaUpdateService.this.url;
LOG.debug("Fetching page {}", url);
+ if(loginRequired) {
+ SiteUiFactory.getUi(camsoda).login();
+ }
Request request = new Request.Builder().url(url).build();
- try(Response response = camsoda.getHttpClient().execute(request, loginRequired)) {
+ try(Response response = camsoda.getHttpClient().execute(request)) {
if (response.isSuccessful()) {
JSONObject json = new JSONObject(response.body().string());
if(json.has("status") && json.getBoolean("status")) {
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateConfigUi.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateConfigUi.java
similarity index 96%
rename from client/src/main/java/ctbrec/sites/chaturbate/ChaturbateConfigUi.java
rename to client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateConfigUi.java
index ee5c6b68..1a824c0c 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateConfigUi.java
+++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateConfigUi.java
@@ -1,7 +1,8 @@
-package ctbrec.sites.chaturbate;
+package ctbrec.ui.sites.chaturbate;
import ctbrec.Config;
import ctbrec.sites.ConfigUI;
+import ctbrec.sites.chaturbate.Chaturbate;
import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.SettingsTab;
import javafx.geometry.Insets;
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateFollowedTab.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateFollowedTab.java
similarity index 97%
rename from client/src/main/java/ctbrec/sites/chaturbate/ChaturbateFollowedTab.java
rename to client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateFollowedTab.java
index 16e5220a..a94b986f 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateFollowedTab.java
+++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateFollowedTab.java
@@ -1,5 +1,6 @@
-package ctbrec.sites.chaturbate;
+package ctbrec.ui.sites.chaturbate;
+import ctbrec.sites.chaturbate.Chaturbate;
import ctbrec.ui.FollowedTab;
import ctbrec.ui.ThumbOverviewTab;
import javafx.concurrent.WorkerStateEvent;
diff --git a/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateSiteUi.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateSiteUi.java
new file mode 100644
index 00000000..7765e717
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateSiteUi.java
@@ -0,0 +1,37 @@
+package ctbrec.ui.sites.chaturbate;
+
+import java.io.IOException;
+
+import ctbrec.sites.ConfigUI;
+import ctbrec.sites.chaturbate.Chaturbate;
+import ctbrec.ui.SiteUI;
+import ctbrec.ui.TabProvider;
+
+public class ChaturbateSiteUi implements SiteUI {
+
+ private ChaturbateTabProvider tabProvider;
+ private ChaturbateConfigUi configUi;
+ private Chaturbate chaturbate;
+
+ public ChaturbateSiteUi(Chaturbate chaturbate) {
+ this.chaturbate = chaturbate;
+ tabProvider = new ChaturbateTabProvider(chaturbate);
+ configUi = new ChaturbateConfigUi();
+ }
+
+ @Override
+ public TabProvider getTabProvider() {
+ return tabProvider;
+ }
+
+ @Override
+ public ConfigUI getConfigUI() {
+ return configUi;
+ }
+
+ @Override
+ public boolean login() throws IOException {
+ return chaturbate.login();
+ }
+
+}
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateTabProvider.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateTabProvider.java
similarity index 89%
rename from client/src/main/java/ctbrec/sites/chaturbate/ChaturbateTabProvider.java
rename to client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateTabProvider.java
index 3d01dd7d..b9864907 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateTabProvider.java
+++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateTabProvider.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.chaturbate;
+package ctbrec.ui.sites.chaturbate;
import static ctbrec.sites.chaturbate.Chaturbate.*;
@@ -6,6 +6,7 @@ import java.util.ArrayList;
import java.util.List;
import ctbrec.recorder.Recorder;
+import ctbrec.sites.chaturbate.Chaturbate;
import ctbrec.ui.TabProvider;
import ctbrec.ui.ThumbOverviewTab;
import javafx.scene.Scene;
@@ -17,9 +18,9 @@ public class ChaturbateTabProvider extends TabProvider {
private Recorder recorder;
private ChaturbateFollowedTab followedTab;
- public ChaturbateTabProvider(Chaturbate chaturbate, Recorder recorder) {
+ public ChaturbateTabProvider(Chaturbate chaturbate) {
this.chaturbate = chaturbate;
- this.recorder = recorder;
+ this.recorder = chaturbate.getRecorder();
this.followedTab = new ChaturbateFollowedTab("Followed", BASE_URI + "/followed-cams/", chaturbate);
}
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateUpdateService.java b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateUpdateService.java
similarity index 88%
rename from client/src/main/java/ctbrec/sites/chaturbate/ChaturbateUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateUpdateService.java
index 612602c0..84d5cdc2 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/chaturbate/ChaturbateUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.chaturbate;
+package ctbrec.ui.sites.chaturbate;
import java.io.IOException;
import java.util.Collections;
@@ -7,12 +7,15 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
-import org.eclipse.jetty.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Model;
+import ctbrec.StringUtil;
+import ctbrec.sites.chaturbate.Chaturbate;
+import ctbrec.sites.chaturbate.ChaturbateModelParser;
import ctbrec.ui.PaginatedScheduledService;
+import ctbrec.ui.SiteUiFactory;
import javafx.concurrent.Task;
import okhttp3.Request;
import okhttp3.Response;
@@ -51,8 +54,11 @@ public class ChaturbateUpdateService extends PaginatedScheduledService {
} else {
String url = ChaturbateUpdateService.this.url + "?page="+page+"&keywords=&_=" + System.currentTimeMillis();
LOG.debug("Fetching page {}", url);
+ if(loginRequired) {
+ SiteUiFactory.getUi(chaturbate).login();
+ }
Request request = new Request.Builder().url(url).build();
- Response response = chaturbate.getHttpClient().execute(request, loginRequired);
+ Response response = chaturbate.getHttpClient().execute(request);
if (response.isSuccessful()) {
List models = ChaturbateModelParser.parseModels(chaturbate, response.body().string());
response.close();
diff --git a/client/src/main/java/ctbrec/sites/mfc/FriendsUpdateService.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/FriendsUpdateService.java
similarity index 92%
rename from client/src/main/java/ctbrec/sites/mfc/FriendsUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/myfreecams/FriendsUpdateService.java
index 08ac013c..75ddff18 100644
--- a/client/src/main/java/ctbrec/sites/mfc/FriendsUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/FriendsUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.mfc;
+package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
@@ -7,13 +7,19 @@ import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import org.eclipse.jetty.util.StringUtil;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Model;
+import ctbrec.StringUtil;
+import ctbrec.sites.mfc.MyFreeCams;
+import ctbrec.sites.mfc.MyFreeCamsClient;
+import ctbrec.sites.mfc.MyFreeCamsModel;
+import ctbrec.sites.mfc.SessionState;
+import ctbrec.sites.mfc.User;
import ctbrec.ui.PaginatedScheduledService;
+import ctbrec.ui.SiteUiFactory;
import javafx.concurrent.Task;
import okhttp3.Request;
import okhttp3.Response;
@@ -42,12 +48,13 @@ public class FriendsUpdateService extends PaginatedScheduledService {
return Collections.emptyList();
} else {
List models = new ArrayList<>();
+ SiteUiFactory.getUi(myFreeCams).login();
String url = myFreeCams.getBaseUrl() + "/php/manage_lists2.php?passcode=&list_type=friends&data_mode=online&get_user_list=1";
Request req = new Request.Builder()
.url(url)
.header("Referer", myFreeCams.getBaseUrl())
.build();
- try(Response resp = myFreeCams.getHttpClient().execute(req, true)) {
+ try(Response resp = myFreeCams.getHttpClient().execute(req)) {
if(resp.isSuccessful()) {
String body = resp.body().string().substring(4);
try {
diff --git a/client/src/main/java/ctbrec/sites/mfc/HDCamsUpdateService.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/HDCamsUpdateService.java
similarity index 94%
rename from client/src/main/java/ctbrec/sites/mfc/HDCamsUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/myfreecams/HDCamsUpdateService.java
index 9ed26925..9fd990ac 100644
--- a/client/src/main/java/ctbrec/sites/mfc/HDCamsUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/HDCamsUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.mfc;
+package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
@@ -6,6 +6,7 @@ import java.util.List;
import java.util.stream.Collectors;
import ctbrec.Model;
+import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.ui.PaginatedScheduledService;
import javafx.concurrent.Task;
diff --git a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsConfigUI.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsConfigUI.java
similarity index 96%
rename from client/src/main/java/ctbrec/sites/mfc/MyFreeCamsConfigUI.java
rename to client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsConfigUI.java
index 2f26f1d9..e74f63d8 100644
--- a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsConfigUI.java
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsConfigUI.java
@@ -1,7 +1,8 @@
-package ctbrec.sites.mfc;
+package ctbrec.ui.sites.myfreecams;
import ctbrec.Config;
import ctbrec.sites.ConfigUI;
+import ctbrec.sites.mfc.MyFreeCams;
import ctbrec.ui.DesktopIntegration;
import ctbrec.ui.SettingsTab;
import javafx.geometry.Insets;
diff --git a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsFriendsTab.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsFriendsTab.java
similarity index 93%
rename from client/src/main/java/ctbrec/sites/mfc/MyFreeCamsFriendsTab.java
rename to client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsFriendsTab.java
index eb1f7e31..5b2e2a31 100644
--- a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsFriendsTab.java
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsFriendsTab.java
@@ -1,8 +1,9 @@
-package ctbrec.sites.mfc;
-import static ctbrec.sites.mfc.FriendsUpdateService.Mode.*;
+package ctbrec.ui.sites.myfreecams;
+import static ctbrec.ui.sites.myfreecams.FriendsUpdateService.Mode.*;
import java.util.concurrent.TimeUnit;
+import ctbrec.sites.mfc.MyFreeCams;
import ctbrec.ui.FollowedTab;
import ctbrec.ui.ThumbOverviewTab;
import javafx.geometry.Insets;
diff --git a/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsSiteUi.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsSiteUi.java
new file mode 100644
index 00000000..f98528ed
--- /dev/null
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsSiteUi.java
@@ -0,0 +1,37 @@
+package ctbrec.ui.sites.myfreecams;
+
+import java.io.IOException;
+
+import ctbrec.sites.ConfigUI;
+import ctbrec.sites.mfc.MyFreeCams;
+import ctbrec.ui.SiteUI;
+import ctbrec.ui.TabProvider;
+
+public class MyFreeCamsSiteUi implements SiteUI {
+
+ private MyFreeCamsTabProvider tabProvider;
+ private MyFreeCamsConfigUI configUi;
+ private MyFreeCams myFreeCams;
+
+ public MyFreeCamsSiteUi(MyFreeCams myFreeCams) {
+ this.myFreeCams = myFreeCams;
+ tabProvider = new MyFreeCamsTabProvider(myFreeCams);
+ configUi = new MyFreeCamsConfigUI(myFreeCams);
+ }
+
+ @Override
+ public TabProvider getTabProvider() {
+ return tabProvider;
+ }
+
+ @Override
+ public ConfigUI getConfigUI() {
+ return configUi;
+ }
+
+ @Override
+ public boolean login() throws IOException {
+ return myFreeCams.login();
+ }
+
+}
diff --git a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsTabProvider.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTabProvider.java
similarity index 90%
rename from client/src/main/java/ctbrec/sites/mfc/MyFreeCamsTabProvider.java
rename to client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTabProvider.java
index 5035c28d..ad5eb961 100644
--- a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsTabProvider.java
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/MyFreeCamsTabProvider.java
@@ -1,10 +1,11 @@
-package ctbrec.sites.mfc;
+package ctbrec.ui.sites.myfreecams;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import ctbrec.recorder.Recorder;
+import ctbrec.sites.mfc.MyFreeCams;
import ctbrec.ui.PaginatedScheduledService;
import ctbrec.ui.TabProvider;
import ctbrec.ui.ThumbOverviewTab;
@@ -17,9 +18,9 @@ public class MyFreeCamsTabProvider extends TabProvider {
private MyFreeCams myFreeCams;
private MyFreeCamsFriendsTab friends;
- public MyFreeCamsTabProvider(MyFreeCamsClient client, Recorder recorder, MyFreeCams myFreeCams) {
- this.recorder = recorder;
+ public MyFreeCamsTabProvider(MyFreeCams myFreeCams) {
this.myFreeCams = myFreeCams;
+ this.recorder = myFreeCams.getRecorder();
}
@Override
diff --git a/client/src/main/java/ctbrec/sites/mfc/OnlineCamsUpdateService.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/OnlineCamsUpdateService.java
similarity index 94%
rename from client/src/main/java/ctbrec/sites/mfc/OnlineCamsUpdateService.java
rename to client/src/main/java/ctbrec/ui/sites/myfreecams/OnlineCamsUpdateService.java
index 6ecaf5ba..320aae5c 100644
--- a/client/src/main/java/ctbrec/sites/mfc/OnlineCamsUpdateService.java
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/OnlineCamsUpdateService.java
@@ -1,4 +1,4 @@
-package ctbrec.sites.mfc;
+package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
@@ -6,6 +6,7 @@ import java.util.List;
import java.util.stream.Collectors;
import ctbrec.Model;
+import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.ui.PaginatedScheduledService;
import javafx.concurrent.Task;
diff --git a/client/src/main/java/ctbrec/sites/mfc/PopularModelService.java b/client/src/main/java/ctbrec/ui/sites/myfreecams/PopularModelService.java
similarity index 94%
rename from client/src/main/java/ctbrec/sites/mfc/PopularModelService.java
rename to client/src/main/java/ctbrec/ui/sites/myfreecams/PopularModelService.java
index fea5f2fd..9d60eebd 100644
--- a/client/src/main/java/ctbrec/sites/mfc/PopularModelService.java
+++ b/client/src/main/java/ctbrec/ui/sites/myfreecams/PopularModelService.java
@@ -1,10 +1,11 @@
-package ctbrec.sites.mfc;
+package ctbrec.ui.sites.myfreecams;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import ctbrec.Model;
+import ctbrec.sites.mfc.MyFreeCamsClient;
import ctbrec.ui.PaginatedScheduledService;
import javafx.concurrent.Task;
diff --git a/common/.classpath b/common/.classpath
new file mode 100644
index 00000000..e1b830e8
--- /dev/null
+++ b/common/.classpath
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/common/.gitignore b/common/.gitignore
new file mode 100644
index 00000000..09e3bc9b
--- /dev/null
+++ b/common/.gitignore
@@ -0,0 +1,2 @@
+/bin/
+/target/
diff --git a/common/.project b/common/.project
new file mode 100644
index 00000000..22727067
--- /dev/null
+++ b/common/.project
@@ -0,0 +1,23 @@
+
+
+ ctbrec-common
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/common/.settings/org.eclipse.core.resources.prefs b/common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/common/.settings/org.eclipse.jdt.core.prefs b/common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..8445b6b1
--- /dev/null
+++ b/common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,13 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/common/.settings/org.eclipse.m2e.core.prefs b/common/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000..f897a7f1
--- /dev/null
+++ b/common/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/common/pom.xml b/common/pom.xml
new file mode 100644
index 00000000..1ffda026
--- /dev/null
+++ b/common/pom.xml
@@ -0,0 +1,65 @@
+
+
+ 4.0.0
+ common
+
+
+ ctbrec
+ master
+ 1.9.0
+ ../master
+
+
+
+ 1.8
+ 1.8
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.jsoup
+ jsoup
+
+
+ com.squareup.okhttp3
+ okhttp
+
+
+ com.squareup.moshi
+ moshi
+
+
+ org.json
+ json
+
+
+ com.iheartradio.m3u8
+ open-m3u8
+
+
+ org.jcodec
+ jcodec
+
+
+ com.google.guava
+ guava
+
+
+ org.openjfx
+ javafx-controls
+ provided
+
+
+ org.openjfx
+ javafx-web
+ provided
+
+
+
+
diff --git a/client/src/main/java/ctbrec/AbstractModel.java b/common/src/ctbrec/AbstractModel.java
similarity index 100%
rename from client/src/main/java/ctbrec/AbstractModel.java
rename to common/src/ctbrec/AbstractModel.java
diff --git a/client/src/main/java/ctbrec/Config.java b/common/src/ctbrec/Config.java
similarity index 100%
rename from client/src/main/java/ctbrec/Config.java
rename to common/src/ctbrec/Config.java
diff --git a/client/src/main/java/ctbrec/Hmac.java b/common/src/ctbrec/Hmac.java
similarity index 100%
rename from client/src/main/java/ctbrec/Hmac.java
rename to common/src/ctbrec/Hmac.java
diff --git a/client/src/main/java/ctbrec/Java.java b/common/src/ctbrec/Java.java
similarity index 100%
rename from client/src/main/java/ctbrec/Java.java
rename to common/src/ctbrec/Java.java
diff --git a/client/src/main/java/ctbrec/LoggingInterceptor.java b/common/src/ctbrec/LoggingInterceptor.java
similarity index 100%
rename from client/src/main/java/ctbrec/LoggingInterceptor.java
rename to common/src/ctbrec/LoggingInterceptor.java
diff --git a/client/src/main/java/ctbrec/Model.java b/common/src/ctbrec/Model.java
similarity index 100%
rename from client/src/main/java/ctbrec/Model.java
rename to common/src/ctbrec/Model.java
diff --git a/client/src/main/java/ctbrec/OS.java b/common/src/ctbrec/OS.java
similarity index 100%
rename from client/src/main/java/ctbrec/OS.java
rename to common/src/ctbrec/OS.java
diff --git a/client/src/main/java/ctbrec/Recording.java b/common/src/ctbrec/Recording.java
similarity index 100%
rename from client/src/main/java/ctbrec/Recording.java
rename to common/src/ctbrec/Recording.java
diff --git a/client/src/main/java/ctbrec/Settings.java b/common/src/ctbrec/Settings.java
similarity index 100%
rename from client/src/main/java/ctbrec/Settings.java
rename to common/src/ctbrec/Settings.java
diff --git a/common/src/ctbrec/StringUtil.java b/common/src/ctbrec/StringUtil.java
new file mode 100644
index 00000000..229e44b1
--- /dev/null
+++ b/common/src/ctbrec/StringUtil.java
@@ -0,0 +1,11 @@
+package ctbrec;
+
+public class StringUtil {
+ public static boolean isBlank(String s) {
+ return s == null || s.trim().isEmpty();
+ }
+
+ public static boolean isNotBlank(String s) {
+ return !isBlank(s);
+ }
+}
diff --git a/client/src/main/java/ctbrec/Version.java b/common/src/ctbrec/Version.java
similarity index 100%
rename from client/src/main/java/ctbrec/Version.java
rename to common/src/ctbrec/Version.java
diff --git a/client/src/main/java/ctbrec/io/CookieContainerJsonAdapter.java b/common/src/ctbrec/io/CookieContainerJsonAdapter.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/CookieContainerJsonAdapter.java
rename to common/src/ctbrec/io/CookieContainerJsonAdapter.java
diff --git a/client/src/main/java/ctbrec/io/CookieJarImpl.java b/common/src/ctbrec/io/CookieJarImpl.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/CookieJarImpl.java
rename to common/src/ctbrec/io/CookieJarImpl.java
diff --git a/client/src/main/java/ctbrec/io/CookieJsonAdapter.java b/common/src/ctbrec/io/CookieJsonAdapter.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/CookieJsonAdapter.java
rename to common/src/ctbrec/io/CookieJsonAdapter.java
diff --git a/client/src/main/java/ctbrec/io/DevNull.java b/common/src/ctbrec/io/DevNull.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/DevNull.java
rename to common/src/ctbrec/io/DevNull.java
diff --git a/client/src/main/java/ctbrec/ui/HtmlParser.java b/common/src/ctbrec/io/HtmlParser.java
similarity index 98%
rename from client/src/main/java/ctbrec/ui/HtmlParser.java
rename to common/src/ctbrec/io/HtmlParser.java
index d2d545b9..121d494c 100644
--- a/client/src/main/java/ctbrec/ui/HtmlParser.java
+++ b/common/src/ctbrec/io/HtmlParser.java
@@ -1,4 +1,4 @@
-package ctbrec.ui;
+package ctbrec.io;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
diff --git a/client/src/main/java/ctbrec/io/HttpClient.java b/common/src/ctbrec/io/HttpClient.java
similarity index 92%
rename from client/src/main/java/ctbrec/io/HttpClient.java
rename to common/src/ctbrec/io/HttpClient.java
index f1afed9b..df03cf52 100644
--- a/client/src/main/java/ctbrec/io/HttpClient.java
+++ b/common/src/ctbrec/io/HttpClient.java
@@ -23,6 +23,7 @@ import ctbrec.Config;
import ctbrec.Settings.ProxyType;
import okhttp3.ConnectionPool;
import okhttp3.Cookie;
+import okhttp3.CookieJar;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.OkHttpClient.Builder;
@@ -91,18 +92,19 @@ public abstract class HttpClient {
}
}
- public Response execute(Request request) throws IOException {
- Response resp = execute(request, false);
- return resp;
- }
+ // public Response execute(Request request) throws IOException {
+ // Response resp = execute(request, false);
+ // return resp;
+ // }
- public Response execute(Request req, boolean requiresLogin) throws IOException {
- if(requiresLogin && !loggedIn) {
- loggedIn = login();
- if(!loggedIn) {
- throw new IOException("403 Unauthorized");
- }
- }
+ // public Response execute(Request req, boolean requiresLogin) throws IOException {
+ public Response execute(Request req) throws IOException {
+ // if(requiresLogin && !loggedIn) {
+ // loggedIn = login();
+ // if(!loggedIn) {
+ // throw new IOException("403 Unauthorized");
+ // }
+ // }
Response resp = client.newCall(req).execute();
return resp;
}
@@ -209,4 +211,8 @@ public abstract class HttpClient {
return auth;
}
}
+
+ public CookieJar getCookieJar() {
+ return cookieJar;
+ }
}
diff --git a/client/src/main/java/ctbrec/io/HttpException.java b/common/src/ctbrec/io/HttpException.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/HttpException.java
rename to common/src/ctbrec/io/HttpException.java
diff --git a/client/src/main/java/ctbrec/io/InstantJsonAdapter.java b/common/src/ctbrec/io/InstantJsonAdapter.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/InstantJsonAdapter.java
rename to common/src/ctbrec/io/InstantJsonAdapter.java
diff --git a/client/src/main/java/ctbrec/io/ModelJsonAdapter.java b/common/src/ctbrec/io/ModelJsonAdapter.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/ModelJsonAdapter.java
rename to common/src/ctbrec/io/ModelJsonAdapter.java
diff --git a/client/src/main/java/ctbrec/io/StreamRedirectThread.java b/common/src/ctbrec/io/StreamRedirectThread.java
similarity index 100%
rename from client/src/main/java/ctbrec/io/StreamRedirectThread.java
rename to common/src/ctbrec/io/StreamRedirectThread.java
diff --git a/client/src/main/java/ctbrec/recorder/LocalRecorder.java b/common/src/ctbrec/recorder/LocalRecorder.java
similarity index 99%
rename from client/src/main/java/ctbrec/recorder/LocalRecorder.java
rename to common/src/ctbrec/recorder/LocalRecorder.java
index 00b7b077..381a276a 100644
--- a/client/src/main/java/ctbrec/recorder/LocalRecorder.java
+++ b/common/src/ctbrec/recorder/LocalRecorder.java
@@ -36,13 +36,13 @@ import ctbrec.Model;
import ctbrec.OS;
import ctbrec.Recording;
import ctbrec.Recording.STATUS;
+import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
import ctbrec.io.StreamRedirectThread;
import ctbrec.recorder.PlaylistGenerator.InvalidPlaylistException;
import ctbrec.recorder.download.Download;
import ctbrec.recorder.download.HlsDownload;
import ctbrec.recorder.download.MergedHlsDownload;
-import ctbrec.recorder.server.RecorderHttpClient;
public class LocalRecorder implements Recorder {
@@ -722,4 +722,9 @@ public class LocalRecorder implements Recorder {
lock.unlock();
}
}
+
+ @Override
+ public HttpClient getHttpClient() {
+ return client;
+ }
}
diff --git a/client/src/main/java/ctbrec/recorder/PlaylistGenerator.java b/common/src/ctbrec/recorder/PlaylistGenerator.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/PlaylistGenerator.java
rename to common/src/ctbrec/recorder/PlaylistGenerator.java
diff --git a/client/src/main/java/ctbrec/recorder/ProgressListener.java b/common/src/ctbrec/recorder/ProgressListener.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/ProgressListener.java
rename to common/src/ctbrec/recorder/ProgressListener.java
diff --git a/client/src/main/java/ctbrec/recorder/Recorder.java b/common/src/ctbrec/recorder/Recorder.java
similarity index 96%
rename from client/src/main/java/ctbrec/recorder/Recorder.java
rename to common/src/ctbrec/recorder/Recorder.java
index e1ffa76b..bc4e60cf 100644
--- a/client/src/main/java/ctbrec/recorder/Recorder.java
+++ b/common/src/ctbrec/recorder/Recorder.java
@@ -7,6 +7,7 @@ import java.util.List;
import ctbrec.Model;
import ctbrec.Recording;
+import ctbrec.io.HttpClient;
public interface Recorder {
public void startRecording(Model model) throws IOException, InvalidKeyException, NoSuchAlgorithmException, IllegalStateException;
@@ -39,4 +40,6 @@ public interface Recorder {
* @return
*/
public List getOnlineModels();
+
+ public HttpClient getHttpClient();
}
diff --git a/client/src/main/java/ctbrec/recorder/server/RecorderHttpClient.java b/common/src/ctbrec/recorder/RecorderHttpClient.java
similarity index 89%
rename from client/src/main/java/ctbrec/recorder/server/RecorderHttpClient.java
rename to common/src/ctbrec/recorder/RecorderHttpClient.java
index 7b3170e7..a965ee67 100644
--- a/client/src/main/java/ctbrec/recorder/server/RecorderHttpClient.java
+++ b/common/src/ctbrec/recorder/RecorderHttpClient.java
@@ -1,4 +1,4 @@
-package ctbrec.recorder.server;
+package ctbrec.recorder;
import java.io.IOException;
diff --git a/client/src/main/java/ctbrec/recorder/RemoteRecorder.java b/common/src/ctbrec/recorder/RemoteRecorder.java
similarity index 99%
rename from client/src/main/java/ctbrec/recorder/RemoteRecorder.java
rename to common/src/ctbrec/recorder/RemoteRecorder.java
index 84d1a38e..dd648301 100644
--- a/client/src/main/java/ctbrec/recorder/RemoteRecorder.java
+++ b/common/src/ctbrec/recorder/RemoteRecorder.java
@@ -357,4 +357,9 @@ public class RemoteRecorder implements Recorder {
public List getOnlineModels() {
return onlineModels;
}
+
+ @Override
+ public HttpClient getHttpClient() {
+ return client;
+ }
}
diff --git a/client/src/main/java/ctbrec/recorder/download/AbstractHlsDownload.java b/common/src/ctbrec/recorder/download/AbstractHlsDownload.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/download/AbstractHlsDownload.java
rename to common/src/ctbrec/recorder/download/AbstractHlsDownload.java
diff --git a/client/src/main/java/ctbrec/recorder/download/Download.java b/common/src/ctbrec/recorder/download/Download.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/download/Download.java
rename to common/src/ctbrec/recorder/download/Download.java
diff --git a/client/src/main/java/ctbrec/recorder/download/HlsDownload.java b/common/src/ctbrec/recorder/download/HlsDownload.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/download/HlsDownload.java
rename to common/src/ctbrec/recorder/download/HlsDownload.java
diff --git a/client/src/main/java/ctbrec/recorder/download/MergedHlsDownload.java b/common/src/ctbrec/recorder/download/MergedHlsDownload.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/download/MergedHlsDownload.java
rename to common/src/ctbrec/recorder/download/MergedHlsDownload.java
diff --git a/client/src/main/java/ctbrec/recorder/download/StreamSource.java b/common/src/ctbrec/recorder/download/StreamSource.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/download/StreamSource.java
rename to common/src/ctbrec/recorder/download/StreamSource.java
diff --git a/client/src/main/java/ctbrec/sites/AbstractSite.java b/common/src/ctbrec/sites/AbstractSite.java
similarity index 53%
rename from client/src/main/java/ctbrec/sites/AbstractSite.java
rename to common/src/ctbrec/sites/AbstractSite.java
index 05f98d69..1d50d186 100644
--- a/client/src/main/java/ctbrec/sites/AbstractSite.java
+++ b/common/src/ctbrec/sites/AbstractSite.java
@@ -1,8 +1,11 @@
package ctbrec.sites;
+import ctbrec.recorder.Recorder;
+
public abstract class AbstractSite implements Site {
private boolean enabled;
+ private Recorder recorder;
@Override
public void setEnabled(boolean enabled) {
@@ -13,4 +16,14 @@ public abstract class AbstractSite implements Site {
public boolean isEnabled() {
return enabled;
}
+
+ @Override
+ public void setRecorder(Recorder recorder) {
+ this.recorder = recorder;
+ }
+
+ @Override
+ public Recorder getRecorder() {
+ return recorder;
+ }
}
diff --git a/client/src/main/java/ctbrec/sites/ConfigUI.java b/common/src/ctbrec/sites/ConfigUI.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/ConfigUI.java
rename to common/src/ctbrec/sites/ConfigUI.java
diff --git a/common/src/ctbrec/sites/NeedsManualLoginException.java b/common/src/ctbrec/sites/NeedsManualLoginException.java
new file mode 100644
index 00000000..2c13ad8c
--- /dev/null
+++ b/common/src/ctbrec/sites/NeedsManualLoginException.java
@@ -0,0 +1,7 @@
+package ctbrec.sites;
+
+import java.io.IOException;
+
+public class NeedsManualLoginException extends IOException {
+
+}
diff --git a/client/src/main/java/ctbrec/sites/Site.java b/common/src/ctbrec/sites/Site.java
similarity index 83%
rename from client/src/main/java/ctbrec/sites/Site.java
rename to common/src/ctbrec/sites/Site.java
index 29a0e226..08fef0f4 100644
--- a/client/src/main/java/ctbrec/sites/Site.java
+++ b/common/src/ctbrec/sites/Site.java
@@ -5,25 +5,23 @@ import java.io.IOException;
import ctbrec.Model;
import ctbrec.io.HttpClient;
import ctbrec.recorder.Recorder;
-import ctbrec.ui.TabProvider;
public interface Site {
public String getName();
public String getBaseUrl();
public String getAffiliateLink();
public void setRecorder(Recorder recorder);
- public TabProvider getTabProvider();
+ public Recorder getRecorder();
public Model createModel(String name);
public Integer getTokenBalance() throws IOException;
public String getBuyTokensLink();
- public void login() throws IOException;
+ public boolean login() throws IOException;
public HttpClient getHttpClient();
public void init() throws IOException;
public void shutdown();
public boolean supportsTips();
public boolean supportsFollow();
public boolean isSiteForModel(Model m);
- public ConfigUI getConfigurationGui();
public boolean credentialsAvailable();
public void setEnabled(boolean enabled);
public boolean isEnabled();
diff --git a/client/src/main/java/ctbrec/sites/bonga/BongaCams.java b/common/src/ctbrec/sites/bonga/BongaCams.java
similarity index 82%
rename from client/src/main/java/ctbrec/sites/bonga/BongaCams.java
rename to common/src/ctbrec/sites/bonga/BongaCams.java
index cad99f0a..f763bccc 100644
--- a/client/src/main/java/ctbrec/sites/bonga/BongaCams.java
+++ b/common/src/ctbrec/sites/bonga/BongaCams.java
@@ -8,10 +8,7 @@ import ctbrec.Config;
import ctbrec.Model;
import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
-import ctbrec.recorder.Recorder;
import ctbrec.sites.AbstractSite;
-import ctbrec.sites.ConfigUI;
-import ctbrec.ui.TabProvider;
import okhttp3.FormBody;
import okhttp3.Request;
import okhttp3.RequestBody;
@@ -22,8 +19,6 @@ public class BongaCams extends AbstractSite {
public static final String BASE_URL = "https://bongacams.com";
private BongaCamsHttpClient httpClient;
- private Recorder recorder;
- private BongaCamsTabProvider tabProvider;
@Override
public String getName() {
@@ -40,19 +35,6 @@ public class BongaCams extends AbstractSite {
return "http://bongacams2.com/track?c=610249";
}
- @Override
- public void setRecorder(Recorder recorder) {
- this.recorder = recorder;
- }
-
- @Override
- public TabProvider getTabProvider() {
- if(tabProvider == null) {
- tabProvider = new BongaCamsTabProvider(recorder, this);
- }
- return tabProvider;
- }
-
@Override
public Model createModel(String name) {
BongaCamsModel model = new BongaCamsModel();
@@ -80,7 +62,7 @@ public class BongaCams extends AbstractSite {
.addHeader("X-Requested-With", "XMLHttpRequest")
.post(body)
.build();
- try(Response response = getHttpClient().execute(request, true)) {
+ try(Response response = getHttpClient().execute(request)) {
if(response.isSuccessful()) {
JSONObject json = new JSONObject(response.body().string());
if(json.optString("status").equals("online")) {
@@ -101,8 +83,8 @@ public class BongaCams extends AbstractSite {
}
@Override
- public void login() throws IOException {
- getHttpClient().login();
+ public boolean login() throws IOException {
+ return credentialsAvailable() && getHttpClient().login();
}
@Override
@@ -139,11 +121,6 @@ public class BongaCams extends AbstractSite {
return m instanceof BongaCamsModel;
}
- @Override
- public ConfigUI getConfigurationGui() {
- return new BongaCamsConfigUI(this);
- }
-
@Override
public boolean credentialsAvailable() {
String username = Config.getInstance().getSettings().bongaUsername;
diff --git a/client/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java b/common/src/ctbrec/sites/bonga/BongaCamsHttpClient.java
similarity index 77%
rename from client/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java
rename to common/src/ctbrec/sites/bonga/BongaCamsHttpClient.java
index b082b127..9f77da35 100644
--- a/client/src/main/java/ctbrec/sites/bonga/BongaCamsHttpClient.java
+++ b/common/src/ctbrec/sites/bonga/BongaCamsHttpClient.java
@@ -1,14 +1,10 @@
package ctbrec.sites.bonga;
import java.io.IOException;
-import java.net.HttpCookie;
-import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -18,10 +14,8 @@ import org.slf4j.LoggerFactory;
import ctbrec.Config;
import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
-import javafx.application.Platform;
import okhttp3.Cookie;
import okhttp3.FormBody;
-import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
@@ -72,48 +66,14 @@ public class BongaCamsHttpClient extends HttpClient {
return true;
}
- BlockingQueue queue = new LinkedBlockingQueue<>();
-
- Runnable showDialog = () -> {
- // login with javafx WebView
- BongaCamsLoginDialog loginDialog = new BongaCamsLoginDialog();
-
- // transfer cookies from WebView to OkHttp cookie jar
- transferCookies(loginDialog);
-
- try {
- queue.put(true);
- } catch (InterruptedException e) {
- LOG.error("Error while signaling termination", e);
- }
- };
-
- if(Platform.isFxApplicationThread()) {
- showDialog.run();
- } else {
- Platform.runLater(showDialog);
- try {
- queue.take();
- } catch (InterruptedException e) {
- LOG.error("Error while waiting for login dialog to close", e);
- throw new IOException(e);
- }
- }
-
- loggedIn = checkLoginSuccess();
- if(loggedIn) {
- LOG.info("Logged in. User ID is {}", userId);
- } else {
- LOG.info("Login failed");
- }
- return loggedIn;
+ return false;
}
/**
* Check, if the login worked by requesting roomdata and looking
* @throws IOException
*/
- private boolean checkLoginSuccess() throws IOException {
+ public boolean checkLoginSuccess() throws IOException {
String modelName = getAnyModelName();
// we request the roomData of a random model, because it contains
// user data, if the user is logged in, which we can use to verify, that the login worked
@@ -180,24 +140,6 @@ public class BongaCamsHttpClient extends HttpClient {
}
}
- private void transferCookies(BongaCamsLoginDialog loginDialog) {
- HttpUrl redirectedUrl = HttpUrl.parse(loginDialog.getUrl());
- List cookies = new ArrayList<>();
- for (HttpCookie webViewCookie : loginDialog.getCookies()) {
- Cookie cookie = Cookie.parse(redirectedUrl, webViewCookie.toString());
- cookies.add(cookie);
- }
- cookieJar.saveFromResponse(redirectedUrl, cookies);
-
- HttpUrl origUrl = HttpUrl.parse(BongaCamsLoginDialog.URL);
- cookies = new ArrayList<>();
- for (HttpCookie webViewCookie : loginDialog.getCookies()) {
- Cookie cookie = Cookie.parse(origUrl, webViewCookie.toString());
- cookies.add(cookie);
- }
- cookieJar.saveFromResponse(origUrl, cookies);
- }
-
// @Override
// public boolean login() throws IOException {
// String url = BongaCams.BASE_URL + "/login";
diff --git a/client/src/main/java/ctbrec/sites/bonga/BongaCamsModel.java b/common/src/ctbrec/sites/bonga/BongaCamsModel.java
similarity index 99%
rename from client/src/main/java/ctbrec/sites/bonga/BongaCamsModel.java
rename to common/src/ctbrec/sites/bonga/BongaCamsModel.java
index bcf9d77e..210ada4f 100644
--- a/client/src/main/java/ctbrec/sites/bonga/BongaCamsModel.java
+++ b/common/src/ctbrec/sites/bonga/BongaCamsModel.java
@@ -165,7 +165,7 @@ public class BongaCamsModel extends AbstractModel {
.addHeader("X-Requested-With", "XMLHttpRequest")
.post(body)
.build();
- try(Response response = site.getHttpClient().execute(request, true)) {
+ try(Response response = site.getHttpClient().execute(request)) {
if(response.isSuccessful()) {
JSONObject json = new JSONObject(response.body().string());
if(!json.optString("status").equals("success")) {
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4.java b/common/src/ctbrec/sites/cam4/Cam4.java
similarity index 71%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4.java
rename to common/src/ctbrec/sites/cam4/Cam4.java
index 1ac2c7f3..d63ef050 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4.java
+++ b/common/src/ctbrec/sites/cam4/Cam4.java
@@ -2,15 +2,10 @@ package ctbrec.sites.cam4;
import java.io.IOException;
-import org.slf4j.LoggerFactory;
-
import ctbrec.Config;
import ctbrec.Model;
import ctbrec.io.HttpClient;
-import ctbrec.recorder.Recorder;
import ctbrec.sites.AbstractSite;
-import ctbrec.sites.ConfigUI;
-import ctbrec.ui.TabProvider;
public class Cam4 extends AbstractSite {
@@ -19,8 +14,6 @@ public class Cam4 extends AbstractSite {
public static final String AFFILIATE_LINK = BASE_URI + "/?referrerId=1514a80d87b5effb456cca02f6743aa1";
private HttpClient httpClient;
- private Recorder recorder;
- private Cam4TabProvider tabProvider;
@Override
public String getName() {
@@ -37,19 +30,6 @@ public class Cam4 extends AbstractSite {
return AFFILIATE_LINK;
}
- @Override
- public void setRecorder(Recorder recorder) {
- this.recorder = recorder;
- }
-
- @Override
- public TabProvider getTabProvider() {
- if(tabProvider == null) {
- tabProvider = new Cam4TabProvider(this, recorder);
- }
- return tabProvider;
- }
-
@Override
public Model createModel(String name) {
Cam4Model m = new Cam4Model();
@@ -73,11 +53,8 @@ public class Cam4 extends AbstractSite {
}
@Override
- public void login() throws IOException {
- if (credentialsAvailable()) {
- boolean success = getHttpClient().login();
- LoggerFactory.getLogger(getClass()).debug("Login success: {}", success);
- }
+ public boolean login() throws IOException {
+ return credentialsAvailable() && getHttpClient().login();
}
@Override
@@ -117,9 +94,4 @@ public class Cam4 extends AbstractSite {
String username = Config.getInstance().getSettings().cam4Username;
return username != null && !username.trim().isEmpty();
}
-
- @Override
- public ConfigUI getConfigurationGui() {
- return new Cam4ConfigUI();
- }
}
diff --git a/common/src/ctbrec/sites/cam4/Cam4HttpClient.java b/common/src/ctbrec/sites/cam4/Cam4HttpClient.java
new file mode 100644
index 00000000..a9d8abd7
--- /dev/null
+++ b/common/src/ctbrec/sites/cam4/Cam4HttpClient.java
@@ -0,0 +1,65 @@
+package ctbrec.sites.cam4;
+
+import java.io.IOException;
+import java.util.Objects;
+
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import ctbrec.io.HttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+
+public class Cam4HttpClient extends HttpClient {
+
+ private static final transient Logger LOG = LoggerFactory.getLogger(Cam4HttpClient.class);
+
+ public Cam4HttpClient() {
+ super("cam4");
+ }
+
+ @Override
+ public synchronized boolean login() throws IOException {
+ if(loggedIn) {
+ return true;
+ }
+
+ boolean cookiesWorked = checkLoginSuccess();
+ if(cookiesWorked) {
+ loggedIn = true;
+ LOG.debug("Logged in with cookies");
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * check, if the login worked by requesting unchecked mail
+ * @throws IOException
+ */
+ public boolean checkLoginSuccess() throws IOException {
+ String mailUrl = Cam4.BASE_URI + "/mail/unreadThreads";
+ Request req = new Request.Builder()
+ .url(mailUrl)
+ .addHeader("X-Requested-With", "XMLHttpRequest")
+ .build();
+ Response response = execute(req);
+ if(response.isSuccessful() && response.body().contentLength() > 0) {
+ JSONObject json = new JSONObject(response.body().string());
+ return json.has("status") && Objects.equals("success", json.getString("status"));
+ } else {
+ response.close();
+ return false;
+ }
+ }
+
+ protected int getTokenBalance() throws IOException {
+ if(!loggedIn) {
+ login();
+ }
+
+ throw new RuntimeException("Not implemented, yet");
+ }
+}
diff --git a/client/src/main/java/ctbrec/sites/cam4/Cam4Model.java b/common/src/ctbrec/sites/cam4/Cam4Model.java
similarity index 97%
rename from client/src/main/java/ctbrec/sites/cam4/Cam4Model.java
rename to common/src/ctbrec/sites/cam4/Cam4Model.java
index 1e7c05e1..96e63317 100644
--- a/client/src/main/java/ctbrec/sites/cam4/Cam4Model.java
+++ b/common/src/ctbrec/sites/cam4/Cam4Model.java
@@ -24,11 +24,10 @@ import com.iheartradio.m3u8.data.PlaylistData;
import ctbrec.AbstractModel;
import ctbrec.Config;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpException;
import ctbrec.recorder.download.StreamSource;
import ctbrec.sites.Site;
-import ctbrec.ui.CamrecApplication;
-import ctbrec.ui.HtmlParser;
import okhttp3.FormBody;
import okhttp3.Request;
import okhttp3.RequestBody;
@@ -168,7 +167,7 @@ public class Cam4Model extends AbstractModel {
.url(url)
.addHeader("X-Requested-With", "XMLHttpRequest")
.build();
- Response response = site.getHttpClient().execute(req, true);
+ Response response = site.getHttpClient().execute(req);
boolean success = response.isSuccessful();
response.close();
return success;
@@ -185,7 +184,7 @@ public class Cam4Model extends AbstractModel {
// we have to use a client without any cam4 cookies here, otherwise
// this request is redirected to the login page. no idea why
- try(Response response = CamrecApplication.httpClient.execute(req)) {
+ try(Response response = site.getRecorder().getHttpClient().execute(req)) {
String broadCasterId = null;
if(response.isSuccessful()) {
String content = response.body().string();
@@ -209,7 +208,7 @@ public class Cam4Model extends AbstractModel {
.post(body)
.addHeader("X-Requested-With", "XMLHttpRequest")
.build();
- Response resp = site.getHttpClient().execute(req, true);
+ Response resp = site.getHttpClient().execute(req);
if(resp.isSuccessful()) {
return Objects.equals(resp.body().string(), "Ok");
} else {
diff --git a/client/src/main/java/ctbrec/sites/camsoda/Camsoda.java b/common/src/ctbrec/sites/camsoda/Camsoda.java
similarity index 78%
rename from client/src/main/java/ctbrec/sites/camsoda/Camsoda.java
rename to common/src/ctbrec/sites/camsoda/Camsoda.java
index e3c813ab..c8750bc5 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/Camsoda.java
+++ b/common/src/ctbrec/sites/camsoda/Camsoda.java
@@ -8,19 +8,14 @@ import ctbrec.Config;
import ctbrec.Model;
import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
-import ctbrec.recorder.Recorder;
import ctbrec.sites.AbstractSite;
-import ctbrec.sites.ConfigUI;
-import ctbrec.ui.TabProvider;
import okhttp3.Request;
import okhttp3.Response;
public class Camsoda extends AbstractSite {
public static final String BASE_URI = "https://www.camsoda.com";
- private Recorder recorder;
private HttpClient httpClient;
- private CamsodaTabProvider tabProvider;
@Override
public String getName() {
@@ -42,19 +37,6 @@ public class Camsoda extends AbstractSite {
return BASE_URI;
}
- @Override
- public void setRecorder(Recorder recorder) {
- this.recorder = recorder;
- }
-
- @Override
- public TabProvider getTabProvider() {
- if(tabProvider == null) {
- tabProvider = new CamsodaTabProvider(this, recorder);
- }
- return tabProvider;
- }
-
@Override
public Model createModel(String name) {
CamsodaModel model = new CamsodaModel();
@@ -73,7 +55,7 @@ public class Camsoda extends AbstractSite {
String username = Config.getInstance().getSettings().camsodaUsername;
String url = BASE_URI + "/api/v1/user/" + username;
Request request = new Request.Builder().url(url).build();
- try(Response response = getHttpClient().execute(request, true)) {
+ try(Response response = getHttpClient().execute(request)) {
if(response.isSuccessful()) {
JSONObject json = new JSONObject(response.body().string());
if(json.has("user")) {
@@ -90,10 +72,8 @@ public class Camsoda extends AbstractSite {
}
@Override
- public void login() throws IOException {
- if(credentialsAvailable()) {
- getHttpClient().login();
- }
+ public boolean login() throws IOException {
+ return credentialsAvailable() && getHttpClient().login();
}
@Override
@@ -135,9 +115,4 @@ public class Camsoda extends AbstractSite {
String username = Config.getInstance().getSettings().camsodaUsername;
return username != null && !username.trim().isEmpty();
}
-
- @Override
- public ConfigUI getConfigurationGui() {
- return new CamsodaConfigUI(this);
- }
}
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaHttpClient.java b/common/src/ctbrec/sites/camsoda/CamsodaHttpClient.java
similarity index 59%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaHttpClient.java
rename to common/src/ctbrec/sites/camsoda/CamsodaHttpClient.java
index d4905bbf..d37f58d1 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaHttpClient.java
+++ b/common/src/ctbrec/sites/camsoda/CamsodaHttpClient.java
@@ -1,12 +1,7 @@
package ctbrec.sites.camsoda;
import java.io.IOException;
-import java.net.HttpCookie;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Objects;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
import org.json.JSONObject;
import org.jsoup.nodes.Element;
@@ -14,14 +9,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Config;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
-import ctbrec.sites.cam4.Cam4LoginDialog;
-import ctbrec.ui.HtmlParser;
-import javafx.application.Platform;
-import okhttp3.Cookie;
import okhttp3.FormBody;
-import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.Response;
@@ -76,45 +67,11 @@ public class CamsodaHttpClient extends HttpClient {
}
}
- @SuppressWarnings("unused")
- private boolean loginWithDialog() throws IOException {
- BlockingQueue queue = new LinkedBlockingQueue<>();
-
- Runnable showDialog = () -> {
- // login with javafx WebView
- CamsodaLoginDialog loginDialog = new CamsodaLoginDialog();
-
- // transfer cookies from WebView to OkHttp cookie jar
- transferCookies(loginDialog);
-
- try {
- queue.put(true);
- } catch (InterruptedException e) {
- LOG.error("Error while signaling termination", e);
- }
- };
-
- if(Platform.isFxApplicationThread()) {
- showDialog.run();
- } else {
- Platform.runLater(showDialog);
- try {
- queue.take();
- } catch (InterruptedException e) {
- LOG.error("Error while waiting for login dialog to close", e);
- throw new IOException(e);
- }
- }
-
- loggedIn = checkLoginSuccess();
- return loggedIn;
- }
-
/**
* check, if the login worked
* @throws IOException
*/
- private boolean checkLoginSuccess() throws IOException {
+ public boolean checkLoginSuccess() throws IOException {
String url = Camsoda.BASE_URI + "/api/v1/user/current";
Request request = new Request.Builder().url(url).build();
try(Response response = execute(request)) {
@@ -127,29 +84,11 @@ public class CamsodaHttpClient extends HttpClient {
}
}
- private void transferCookies(CamsodaLoginDialog loginDialog) {
- HttpUrl redirectedUrl = HttpUrl.parse(loginDialog.getUrl());
- List cookies = new ArrayList<>();
- for (HttpCookie webViewCookie : loginDialog.getCookies()) {
- Cookie cookie = Cookie.parse(redirectedUrl, webViewCookie.toString());
- cookies.add(cookie);
- }
- cookieJar.saveFromResponse(redirectedUrl, cookies);
-
- HttpUrl origUrl = HttpUrl.parse(Cam4LoginDialog.URL);
- cookies = new ArrayList<>();
- for (HttpCookie webViewCookie : loginDialog.getCookies()) {
- Cookie cookie = Cookie.parse(origUrl, webViewCookie.toString());
- cookies.add(cookie);
- }
- cookieJar.saveFromResponse(origUrl, cookies);
- }
-
protected String getCsrfToken() throws IOException {
if(csrfToken == null) {
String url = Camsoda.BASE_URI;
Request request = new Request.Builder().url(url).build();
- try(Response response = execute(request, true)) {
+ try(Response response = execute(request)) {
if(response.isSuccessful()) {
Element meta = HtmlParser.getTag(response.body().string(), "meta[name=\"_token\"]");
csrfToken = meta.attr("content");
diff --git a/client/src/main/java/ctbrec/sites/camsoda/CamsodaModel.java b/common/src/ctbrec/sites/camsoda/CamsodaModel.java
similarity index 99%
rename from client/src/main/java/ctbrec/sites/camsoda/CamsodaModel.java
rename to common/src/ctbrec/sites/camsoda/CamsodaModel.java
index ef45e4e7..6177991e 100644
--- a/client/src/main/java/ctbrec/sites/camsoda/CamsodaModel.java
+++ b/common/src/ctbrec/sites/camsoda/CamsodaModel.java
@@ -188,7 +188,7 @@ public class CamsodaModel extends AbstractModel {
.addHeader("Accept-Language", "en")
.addHeader("X-CSRF-Token", csrfToken)
.build();
- try(Response response = site.getHttpClient().execute(request, true)) {
+ try(Response response = site.getHttpClient().execute(request)) {
if(!response.isSuccessful()) {
throw new HttpException(response.code(), response.message());
}
@@ -210,7 +210,7 @@ public class CamsodaModel extends AbstractModel {
.addHeader("Accept-Language", "en")
.addHeader("X-CSRF-Token", csrfToken)
.build();
- try(Response response = site.getHttpClient().execute(request, true)) {
+ try(Response response = site.getHttpClient().execute(request)) {
if (response.isSuccessful()) {
return true;
} else {
@@ -233,7 +233,7 @@ public class CamsodaModel extends AbstractModel {
.addHeader("Accept-Language", "en")
.addHeader("X-CSRF-Token", csrfToken)
.build();
- try (Response response = site.getHttpClient().execute(request, true)) {
+ try (Response response = site.getHttpClient().execute(request)) {
if (response.isSuccessful()) {
return true;
} else {
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java b/common/src/ctbrec/sites/chaturbate/Chaturbate.java
similarity index 89%
rename from client/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java
rename to common/src/ctbrec/sites/chaturbate/Chaturbate.java
index e6f3cf4e..105be013 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/Chaturbate.java
+++ b/common/src/ctbrec/sites/chaturbate/Chaturbate.java
@@ -26,13 +26,10 @@ import com.squareup.moshi.Moshi;
import ctbrec.Config;
import ctbrec.Model;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
-import ctbrec.recorder.Recorder;
import ctbrec.sites.AbstractSite;
-import ctbrec.sites.ConfigUI;
-import ctbrec.ui.HtmlParser;
-import ctbrec.ui.TabProvider;
import okhttp3.FormBody;
import okhttp3.Request;
import okhttp3.RequestBody;
@@ -44,9 +41,7 @@ public class Chaturbate extends AbstractSite {
public static final String BASE_URI = "https://chaturbate.com";
public static final String AFFILIATE_LINK = BASE_URI + "/in/?track=default&tour=grq0&campaign=55vTi";
public static final String REGISTRATION_LINK = BASE_URI + "/in/?track=default&tour=g4pe&campaign=55vTi";
- private Recorder recorder;
private ChaturbateHttpClient httpClient;
- private ChaturbateTabProvider tabProvider;
@Override
public void init() throws IOException {
@@ -68,19 +63,6 @@ public class Chaturbate extends AbstractSite {
return getBaseUrl() + "/in/?track=default&tour=LQps&campaign=55vTi&room=0xb00bface";
}
- @Override
- public TabProvider getTabProvider() {
- if(tabProvider == null) {
- tabProvider = new ChaturbateTabProvider(this, recorder);
- }
- return tabProvider;
- }
-
- @Override
- public void setRecorder(Recorder recorder) {
- this.recorder = recorder;
- }
-
@Override
public Model createModel(String name) {
ChaturbateModel m = new ChaturbateModel(this);
@@ -98,7 +80,7 @@ public class Chaturbate extends AbstractSite {
String url = "https://chaturbate.com/p/" + username + "/";
Request req = new Request.Builder().url(url).build();
- Response resp = getHttpClient().execute(req, true);
+ Response resp = getHttpClient().execute(req);
if (resp.isSuccessful()) {
String profilePage = resp.body().string();
String tokenText = HtmlParser.getText(profilePage, "span.tokencount");
@@ -115,19 +97,8 @@ public class Chaturbate extends AbstractSite {
}
@Override
- public void login() {
- if (credentialsAvailable()) {
- new Thread() {
- @Override
- public void run() {
- try {
- getHttpClient().login();
- } catch (IOException e1) {
- LOG.warn("Initial login failed", e1);
- }
- };
- }.start();
- }
+ public boolean login() throws IOException {
+ return credentialsAvailable() && getHttpClient().login();
}
@Override
@@ -196,7 +167,7 @@ public class Chaturbate extends AbstractSite {
.addHeader("Referer", "https://chaturbate.com/"+name+"/")
.addHeader("X-Requested-With", "XMLHttpRequest")
.build();
- try(Response response = getHttpClient().execute(req, true)) {
+ try(Response response = getHttpClient().execute(req)) {
if(!response.isSuccessful()) {
throw new IOException(response.code() + " " + response.message());
}
@@ -312,11 +283,6 @@ public class Chaturbate extends AbstractSite {
}
}
- @Override
- public ConfigUI getConfigurationGui() {
- return new ChaturbateConfigUi();
- }
-
@Override
public boolean credentialsAvailable() {
String username = Config.getInstance().getSettings().username;
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateHttpClient.java b/common/src/ctbrec/sites/chaturbate/ChaturbateHttpClient.java
similarity index 95%
rename from client/src/main/java/ctbrec/sites/chaturbate/ChaturbateHttpClient.java
rename to common/src/ctbrec/sites/chaturbate/ChaturbateHttpClient.java
index 58e1f059..9950bccd 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateHttpClient.java
+++ b/common/src/ctbrec/sites/chaturbate/ChaturbateHttpClient.java
@@ -7,8 +7,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Config;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpClient;
-import ctbrec.ui.HtmlParser;
import okhttp3.Cookie;
import okhttp3.FormBody;
import okhttp3.Request;
@@ -115,8 +115,8 @@ public class ChaturbateHttpClient extends HttpClient {
}
@Override
- public Response execute(Request req, boolean requiresLogin) throws IOException {
- Response resp = super.execute(req, requiresLogin);
+ public Response execute(Request req) throws IOException {
+ Response resp = super.execute(req);
extractCsrfToken(req);
return resp;
}
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java b/common/src/ctbrec/sites/chaturbate/ChaturbateModel.java
similarity index 99%
rename from client/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java
rename to common/src/ctbrec/sites/chaturbate/ChaturbateModel.java
index d635994b..840e902a 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateModel.java
+++ b/common/src/ctbrec/sites/chaturbate/ChaturbateModel.java
@@ -152,7 +152,7 @@ public class ChaturbateModel extends AbstractModel {
.header("X-CSRFToken", ((ChaturbateHttpClient)site.getHttpClient()).getToken())
.header("X-Requested-With", "XMLHttpRequest")
.build();
- resp = site.getHttpClient().execute(req, true);
+ resp = site.getHttpClient().execute(req);
if(resp.isSuccessful()) {
String msg = resp.body().string();
if(!msg.equalsIgnoreCase("ok")) {
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateModelParser.java b/common/src/ctbrec/sites/chaturbate/ChaturbateModelParser.java
similarity index 98%
rename from client/src/main/java/ctbrec/sites/chaturbate/ChaturbateModelParser.java
rename to common/src/ctbrec/sites/chaturbate/ChaturbateModelParser.java
index dec5690d..89dafc83 100644
--- a/client/src/main/java/ctbrec/sites/chaturbate/ChaturbateModelParser.java
+++ b/common/src/ctbrec/sites/chaturbate/ChaturbateModelParser.java
@@ -9,7 +9,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Model;
-import ctbrec.ui.HtmlParser;
+import ctbrec.io.HtmlParser;
public class ChaturbateModelParser {
private static final transient Logger LOG = LoggerFactory.getLogger(ChaturbateModelParser.class);
diff --git a/client/src/main/java/ctbrec/sites/chaturbate/StreamInfo.java b/common/src/ctbrec/sites/chaturbate/StreamInfo.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/chaturbate/StreamInfo.java
rename to common/src/ctbrec/sites/chaturbate/StreamInfo.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/Fcext.java b/common/src/ctbrec/sites/mfc/Fcext.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/Fcext.java
rename to common/src/ctbrec/sites/mfc/Fcext.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/Message.java b/common/src/ctbrec/sites/mfc/Message.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/Message.java
rename to common/src/ctbrec/sites/mfc/Message.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/MessageTypes.java b/common/src/ctbrec/sites/mfc/MessageTypes.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/MessageTypes.java
rename to common/src/ctbrec/sites/mfc/MessageTypes.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/Model.java b/common/src/ctbrec/sites/mfc/Model.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/Model.java
rename to common/src/ctbrec/sites/mfc/Model.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/MyFreeCams.java b/common/src/ctbrec/sites/mfc/MyFreeCams.java
similarity index 77%
rename from client/src/main/java/ctbrec/sites/mfc/MyFreeCams.java
rename to common/src/ctbrec/sites/mfc/MyFreeCams.java
index 56fc5de4..bb0d4c13 100644
--- a/client/src/main/java/ctbrec/sites/mfc/MyFreeCams.java
+++ b/common/src/ctbrec/sites/mfc/MyFreeCams.java
@@ -6,12 +6,9 @@ import org.jsoup.select.Elements;
import ctbrec.Config;
import ctbrec.Model;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpException;
-import ctbrec.recorder.Recorder;
import ctbrec.sites.AbstractSite;
-import ctbrec.sites.ConfigUI;
-import ctbrec.ui.HtmlParser;
-import ctbrec.ui.TabProvider;
import okhttp3.Request;
import okhttp3.Response;
@@ -19,10 +16,8 @@ public class MyFreeCams extends AbstractSite {
public static final String BASE_URI = "https://www.myfreecams.com";
- private Recorder recorder;
private MyFreeCamsClient client;
private MyFreeCamsHttpClient httpClient;
- private MyFreeCamsTabProvider tabProvider;
@Override
public void init() throws IOException {
@@ -32,8 +27,8 @@ public class MyFreeCams extends AbstractSite {
}
@Override
- public void login() throws IOException {
- getHttpClient().login();
+ public boolean login() throws IOException {
+ return credentialsAvailable() && getHttpClient().login();
}
@Override
@@ -51,19 +46,6 @@ public class MyFreeCams extends AbstractSite {
return BASE_URI + "/?baf=8127165";
}
- @Override
- public void setRecorder(Recorder recorder) {
- this.recorder = recorder;
- }
-
- @Override
- public TabProvider getTabProvider() {
- if(tabProvider == null) {
- tabProvider = new MyFreeCamsTabProvider(client, recorder, this);
- }
- return tabProvider;
- }
-
@Override
public MyFreeCamsModel createModel(String name) {
MyFreeCamsModel model = new MyFreeCamsModel(this);
@@ -75,7 +57,7 @@ public class MyFreeCams extends AbstractSite {
@Override
public Integer getTokenBalance() throws IOException {
Request req = new Request.Builder().url(BASE_URI + "/php/account.php?request=status").build();
- try(Response response = getHttpClient().execute(req, true)) {
+ try(Response response = getHttpClient().execute(req)) {
if(response.isSuccessful()) {
String content = response.body().string();
Elements tags = HtmlParser.getTags(content, "div.content > p > b");
@@ -124,11 +106,6 @@ public class MyFreeCams extends AbstractSite {
return client;
}
- @Override
- public ConfigUI getConfigurationGui() {
- return new MyFreeCamsConfigUI(this);
- }
-
@Override
public boolean credentialsAvailable() {
String username = Config.getInstance().getSettings().mfcUsername;
diff --git a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java b/common/src/ctbrec/sites/mfc/MyFreeCamsClient.java
similarity index 99%
rename from client/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
rename to common/src/ctbrec/sites/mfc/MyFreeCamsClient.java
index d66a28a5..7a5ef0c6 100644
--- a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
+++ b/common/src/ctbrec/sites/mfc/MyFreeCamsClient.java
@@ -16,7 +16,6 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-import org.eclipse.jetty.util.StringUtil;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
@@ -29,6 +28,7 @@ import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;
import ctbrec.Config;
+import ctbrec.StringUtil;
import okhttp3.Cookie;
import okhttp3.Request;
import okhttp3.Response;
@@ -509,7 +509,7 @@ public class MyFreeCamsClient {
}
}
- String getStreamUrl(SessionState state) {
+ public String getStreamUrl(SessionState state) {
Integer camserv = state.getU().getCamserv();
if(camserv != null) {
int userChannel = 100000000 + state.getUid();
diff --git a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java b/common/src/ctbrec/sites/mfc/MyFreeCamsHttpClient.java
similarity index 99%
rename from client/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java
rename to common/src/ctbrec/sites/mfc/MyFreeCamsHttpClient.java
index 7924f5d4..1225ee45 100644
--- a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsHttpClient.java
+++ b/common/src/ctbrec/sites/mfc/MyFreeCamsHttpClient.java
@@ -10,9 +10,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ctbrec.Config;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpClient;
import ctbrec.io.HttpException;
-import ctbrec.ui.HtmlParser;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.FormBody;
diff --git a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java b/common/src/ctbrec/sites/mfc/MyFreeCamsModel.java
similarity index 99%
rename from client/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java
rename to common/src/ctbrec/sites/mfc/MyFreeCamsModel.java
index 6378ce99..649c44f6 100644
--- a/client/src/main/java/ctbrec/sites/mfc/MyFreeCamsModel.java
+++ b/common/src/ctbrec/sites/mfc/MyFreeCamsModel.java
@@ -27,10 +27,10 @@ import com.squareup.moshi.JsonReader;
import com.squareup.moshi.JsonWriter;
import ctbrec.AbstractModel;
+import ctbrec.io.HtmlParser;
import ctbrec.io.HttpException;
import ctbrec.recorder.download.StreamSource;
import ctbrec.sites.Site;
-import ctbrec.ui.HtmlParser;
import okhttp3.FormBody;
import okhttp3.Request;
import okhttp3.RequestBody;
@@ -153,7 +153,7 @@ public class MyFreeCamsModel extends AbstractModel {
.post(body)
.addHeader("Referer", initUrl)
.build();
- try(Response response = site.getHttpClient().execute(req, true)) {
+ try(Response response = site.getHttpClient().execute(req)) {
if(!response.isSuccessful()) {
throw new HttpException(response.code(), response.message());
}
diff --git a/client/src/main/java/ctbrec/sites/mfc/ServerConfig.java b/common/src/ctbrec/sites/mfc/ServerConfig.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/ServerConfig.java
rename to common/src/ctbrec/sites/mfc/ServerConfig.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/SessionState.java b/common/src/ctbrec/sites/mfc/SessionState.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/SessionState.java
rename to common/src/ctbrec/sites/mfc/SessionState.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/Share.java b/common/src/ctbrec/sites/mfc/Share.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/Share.java
rename to common/src/ctbrec/sites/mfc/Share.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/State.java b/common/src/ctbrec/sites/mfc/State.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/State.java
rename to common/src/ctbrec/sites/mfc/State.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/User.java b/common/src/ctbrec/sites/mfc/User.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/User.java
rename to common/src/ctbrec/sites/mfc/User.java
diff --git a/client/src/main/java/ctbrec/sites/mfc/X.java b/common/src/ctbrec/sites/mfc/X.java
similarity index 100%
rename from client/src/main/java/ctbrec/sites/mfc/X.java
rename to common/src/ctbrec/sites/mfc/X.java
diff --git a/client/src/main/java/org/taktik/CHANGELOG.md b/common/src/org/taktik/CHANGELOG.md
similarity index 100%
rename from client/src/main/java/org/taktik/CHANGELOG.md
rename to common/src/org/taktik/CHANGELOG.md
diff --git a/client/src/main/java/org/taktik/ioutils/NIOUtils.java b/common/src/org/taktik/ioutils/NIOUtils.java
similarity index 100%
rename from client/src/main/java/org/taktik/ioutils/NIOUtils.java
rename to common/src/org/taktik/ioutils/NIOUtils.java
diff --git a/client/src/main/java/org/taktik/mpegts/Constants.java b/common/src/org/taktik/mpegts/Constants.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/Constants.java
rename to common/src/org/taktik/mpegts/Constants.java
diff --git a/client/src/main/java/org/taktik/mpegts/MTSPacket.java b/common/src/org/taktik/mpegts/MTSPacket.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/MTSPacket.java
rename to common/src/org/taktik/mpegts/MTSPacket.java
diff --git a/client/src/main/java/org/taktik/mpegts/Merger.java b/common/src/org/taktik/mpegts/Merger.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/Merger.java
rename to common/src/org/taktik/mpegts/Merger.java
diff --git a/client/src/main/java/org/taktik/mpegts/PATSection.java b/common/src/org/taktik/mpegts/PATSection.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/PATSection.java
rename to common/src/org/taktik/mpegts/PATSection.java
diff --git a/client/src/main/java/org/taktik/mpegts/PMTSection.java b/common/src/org/taktik/mpegts/PMTSection.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/PMTSection.java
rename to common/src/org/taktik/mpegts/PMTSection.java
diff --git a/client/src/main/java/org/taktik/mpegts/PSISection.java b/common/src/org/taktik/mpegts/PSISection.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/PSISection.java
rename to common/src/org/taktik/mpegts/PSISection.java
diff --git a/client/src/main/java/org/taktik/mpegts/PacketSupport.java b/common/src/org/taktik/mpegts/PacketSupport.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/PacketSupport.java
rename to common/src/org/taktik/mpegts/PacketSupport.java
diff --git a/client/src/main/java/org/taktik/mpegts/Streamer.java b/common/src/org/taktik/mpegts/Streamer.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/Streamer.java
rename to common/src/org/taktik/mpegts/Streamer.java
diff --git a/client/src/main/java/org/taktik/mpegts/StreamerTest.java b/common/src/org/taktik/mpegts/StreamerTest.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/StreamerTest.java
rename to common/src/org/taktik/mpegts/StreamerTest.java
diff --git a/client/src/main/java/org/taktik/mpegts/sinks/ByteChannelSink.java b/common/src/org/taktik/mpegts/sinks/ByteChannelSink.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sinks/ByteChannelSink.java
rename to common/src/org/taktik/mpegts/sinks/ByteChannelSink.java
diff --git a/client/src/main/java/org/taktik/mpegts/sinks/MTSSink.java b/common/src/org/taktik/mpegts/sinks/MTSSink.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sinks/MTSSink.java
rename to common/src/org/taktik/mpegts/sinks/MTSSink.java
diff --git a/client/src/main/java/org/taktik/mpegts/sinks/UDPTransport.java b/common/src/org/taktik/mpegts/sinks/UDPTransport.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sinks/UDPTransport.java
rename to common/src/org/taktik/mpegts/sinks/UDPTransport.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/AbstractByteChannelMTSSource.java b/common/src/org/taktik/mpegts/sources/AbstractByteChannelMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/AbstractByteChannelMTSSource.java
rename to common/src/org/taktik/mpegts/sources/AbstractByteChannelMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/AbstractMTSSource.java b/common/src/org/taktik/mpegts/sources/AbstractMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/AbstractMTSSource.java
rename to common/src/org/taktik/mpegts/sources/AbstractMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/BlockingMultiMTSSource.java b/common/src/org/taktik/mpegts/sources/BlockingMultiMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/BlockingMultiMTSSource.java
rename to common/src/org/taktik/mpegts/sources/BlockingMultiMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/ByteChannelMTSSource.java b/common/src/org/taktik/mpegts/sources/ByteChannelMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/ByteChannelMTSSource.java
rename to common/src/org/taktik/mpegts/sources/ByteChannelMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/ByteSourceMTSSource.java b/common/src/org/taktik/mpegts/sources/ByteSourceMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/ByteSourceMTSSource.java
rename to common/src/org/taktik/mpegts/sources/ByteSourceMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/ConcatenatingMTSSource.java b/common/src/org/taktik/mpegts/sources/ConcatenatingMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/ConcatenatingMTSSource.java
rename to common/src/org/taktik/mpegts/sources/ConcatenatingMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/ContinuityFixer.java b/common/src/org/taktik/mpegts/sources/ContinuityFixer.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/ContinuityFixer.java
rename to common/src/org/taktik/mpegts/sources/ContinuityFixer.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/ContinuityFixingMTSSource.java b/common/src/org/taktik/mpegts/sources/ContinuityFixingMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/ContinuityFixingMTSSource.java
rename to common/src/org/taktik/mpegts/sources/ContinuityFixingMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/FixedBitrateMTSSource.java b/common/src/org/taktik/mpegts/sources/FixedBitrateMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/FixedBitrateMTSSource.java
rename to common/src/org/taktik/mpegts/sources/FixedBitrateMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/InputStreamMTSSource.java b/common/src/org/taktik/mpegts/sources/InputStreamMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/InputStreamMTSSource.java
rename to common/src/org/taktik/mpegts/sources/InputStreamMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/LoopingMTSSource.java b/common/src/org/taktik/mpegts/sources/LoopingMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/LoopingMTSSource.java
rename to common/src/org/taktik/mpegts/sources/LoopingMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/MTSSource.java b/common/src/org/taktik/mpegts/sources/MTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/MTSSource.java
rename to common/src/org/taktik/mpegts/sources/MTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/MTSSources.java b/common/src/org/taktik/mpegts/sources/MTSSources.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/MTSSources.java
rename to common/src/org/taktik/mpegts/sources/MTSSources.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/MultiplexingMTSSource.java b/common/src/org/taktik/mpegts/sources/MultiplexingMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/MultiplexingMTSSource.java
rename to common/src/org/taktik/mpegts/sources/MultiplexingMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/NullPacketSource.java b/common/src/org/taktik/mpegts/sources/NullPacketSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/NullPacketSource.java
rename to common/src/org/taktik/mpegts/sources/NullPacketSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/ResettableMTSSource.java b/common/src/org/taktik/mpegts/sources/ResettableMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/ResettableMTSSource.java
rename to common/src/org/taktik/mpegts/sources/ResettableMTSSource.java
diff --git a/client/src/main/java/org/taktik/mpegts/sources/SeekableByteChannelMTSSource.java b/common/src/org/taktik/mpegts/sources/SeekableByteChannelMTSSource.java
similarity index 100%
rename from client/src/main/java/org/taktik/mpegts/sources/SeekableByteChannelMTSSource.java
rename to common/src/org/taktik/mpegts/sources/SeekableByteChannelMTSSource.java
diff --git a/master/pom.xml b/master/pom.xml
index 6778e809..23b60583 100644
--- a/master/pom.xml
+++ b/master/pom.xml
@@ -7,128 +7,95 @@
master
pom
1.9.0
+
+
+ ../common
+ ../client
+ ../server
+
UTF-8
-
-
- src/main/resources
- false
-
-
- src/main/java
- false
-
- **/*.css
-
-
-
- src/main/resources
- true
-
- version
-
-
-
maven-assembly-plugin
3.1.0
-
-
- assembly
- package
-
- single
-
-
- ${name.final}
- false
-
- jar-with-dependencies
-
-
-
-
-
-
- org.jsoup
- jsoup
- 1.10.3
-
-
- com.squareup.okhttp3
- okhttp
- 3.10.0
-
-
- com.squareup.moshi
- moshi
- 1.5.0
-
-
- org.json
- json
- 20180130
-
-
- org.slf4j
- slf4j-api
- 1.7.25
-
-
- ch.qos.logback
- logback-classic
- 1.2.3
- runtime
-
-
- org.eclipse.jetty
- jetty-server
- [9.3.24.v20180605,)
-
-
- org.eclipse.jetty
- jetty-servlet
- [9.3.24.v20180605,)
-
-
- com.iheartradio.m3u8
- open-m3u8
- 0.2.4
-
-
- org.jcodec
- jcodec
- 0.2.3
-
-
- org.openjfx
- javafx-controls
- 11
-
-
- org.openjfx
- javafx-web
- 11
-
-
- com.google.guava
- guava
- 17.0
-
-
- junit
- junit
- 4.12
- test
-
-
+
+
+
+ ctbrec
+ common
+ ${project.version}
+
+
+ org.jsoup
+ jsoup
+ 1.10.3
+
+
+ com.squareup.okhttp3
+ okhttp
+ 3.10.0
+
+
+ com.squareup.moshi
+ moshi
+ 1.5.0
+
+
+ org.json
+ json
+ 20180130
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.25
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.3
+ runtime
+
+
+ com.iheartradio.m3u8
+ open-m3u8
+ 0.2.4
+
+
+ org.jcodec
+ jcodec
+ 0.2.3
+
+
+ org.openjfx
+ javafx-controls
+ 11
+
+
+ org.openjfx
+ javafx-web
+ 11
+
+
+ com.google.guava
+ guava
+ 17.0
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
diff --git a/server/.classpath b/server/.classpath
index d6554125..434c0f84 100644
--- a/server/.classpath
+++ b/server/.classpath
@@ -1,10 +1,15 @@
-
+
+
-
+
-
-
+
+
+
+
+
+
diff --git a/server/.gitignore b/server/.gitignore
new file mode 100644
index 00000000..b83d2226
--- /dev/null
+++ b/server/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/server/.project b/server/.project
index d837ad8a..28cfc354 100644
--- a/server/.project
+++ b/server/.project
@@ -10,8 +10,14 @@
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+ org.eclipse.m2e.core.maven2Nature
org.eclipse.jdt.core.javanature
diff --git a/server/.settings/org.eclipse.core.resources.prefs b/server/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/server/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/server/.settings/org.eclipse.jdt.core.prefs b/server/.settings/org.eclipse.jdt.core.prefs
index a54bb93c..8445b6b1 100644
--- a/server/.settings/org.eclipse.jdt.core.prefs
+++ b/server/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,13 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=10
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=10
+org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=10
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/server/.settings/org.eclipse.m2e.core.prefs b/server/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000..f897a7f1
--- /dev/null
+++ b/server/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/server/pom.xml b/server/pom.xml
index 9aed519b..875b4b43 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -3,14 +3,18 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- ctbrec
server
- 1.9.0
+
+
+ ctbrec
+ master
+ 1.9.0
+ ../master
+
- UTF-8
- 10
- 10
+ 1.8
+ 1.8
${project.artifactId}-${project.version}-final
@@ -20,13 +24,6 @@
src/main/resources
false
-
- src/main/java
- false
-
- **/*.css
-
-
src/main/resources
true
@@ -61,34 +58,12 @@
- org.jsoup
- jsoup
- 1.10.3
-
-
- com.squareup.okhttp3
- okhttp
- 3.10.0
-
-
- com.squareup.moshi
- moshi
- 1.5.0
-
-
- org.json
- json
- 20180130
-
-
- org.slf4j
- slf4j-api
- 1.7.25
+ ctbrec
+ common
ch.qos.logback
logback-classic
- 1.2.3
runtime
@@ -101,185 +76,10 @@
jetty-servlet
[9.3.24.v20180605,)
-
- com.iheartradio.m3u8
- open-m3u8
- 0.2.4
-
-
- org.jcodec
- jcodec
- 0.2.3
-
-
- org.openjfx
- javafx-controls
- 11
-
-
- org.openjfx
- javafx-web
- 11
-
-
- com.google.guava
- guava
- 17.0
-
junit
junit
- 4.12
test
-
-
-
- win
-
-
- javafx.platform
- win
-
-
-
-
-
- com.akathist.maven.plugins.launch4j
- launch4j-maven-plugin
- 1.7.22
-
-
- l4j-win
- package
-
- launch4j
-
-
- gui
- target/ctbrec.exe
- ${name.final}.jar
- true
- src/main/resources/icon.ico
- ctbrec
-
- ctbrec.ui.Launcher
- false
- anything
-
-
- jre
- true
- 1.8.0
- 512
-
-
- ${project.version}.0
- ${project.version}
- Recorder for Charturbate streams
- 2018 0xboobface
- ${project.version}.0
- ${project.version}
- CTB Recorder
- ctbrec
- ctbrec.exe
-
-
- src/main/resources/splash.bmp
- true
- 60
- true
-
-
-
-
-
-
- maven-assembly-plugin
- 3.1.0
-
-
- zip
- verify
-
- single
-
-
-
- src/assembly/win64.xml
- src/assembly/win64-jre.xml
-
-
-
-
-
-
-
-
-
- linux
-
-
- javafx.platform
- linux
-
-
-
-
-
- maven-assembly-plugin
- 3.1.0
-
-
- zip
- verify
-
- single
-
-
-
- src/assembly/linux.xml
- src/assembly/linux-jre.xml
-
-
-
-
-
-
-
-
-
- macos
-
-
- javafx.platform
- mac
-
-
-
-
-
- maven-assembly-plugin
- 3.1.0
-
-
- zip
- verify
-
- single
-
-
-
- src/assembly/macos.xml
- src/assembly/macos-jre.xml
-
-
-
-
-
-
-
-
-
diff --git a/client/src/main/java/ctbrec/recorder/server/AbstractCtbrecServlet.java b/server/src/main/java/ctbrec/recorder/server/AbstractCtbrecServlet.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/server/AbstractCtbrecServlet.java
rename to server/src/main/java/ctbrec/recorder/server/AbstractCtbrecServlet.java
diff --git a/client/src/main/java/ctbrec/recorder/server/HlsServlet.java b/server/src/main/java/ctbrec/recorder/server/HlsServlet.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/server/HlsServlet.java
rename to server/src/main/java/ctbrec/recorder/server/HlsServlet.java
diff --git a/client/src/main/java/ctbrec/recorder/server/HttpServer.java b/server/src/main/java/ctbrec/recorder/server/HttpServer.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/server/HttpServer.java
rename to server/src/main/java/ctbrec/recorder/server/HttpServer.java
diff --git a/client/src/main/java/ctbrec/recorder/server/RecorderServlet.java b/server/src/main/java/ctbrec/recorder/server/RecorderServlet.java
similarity index 100%
rename from client/src/main/java/ctbrec/recorder/server/RecorderServlet.java
rename to server/src/main/java/ctbrec/recorder/server/RecorderServlet.java