diff --git a/vripper-electron/pom.xml b/vripper-electron/pom.xml index a3dd794..6d27642 100644 --- a/vripper-electron/pom.xml +++ b/vripper-electron/pom.xml @@ -1,77 +1,77 @@ - - 4.0.0 - - tn.mnlr - vripper - 3.2.0 - - vripper-electron - vripper-electron - - - - maven-jar-plugin - - ${buildClassifier} - - - - - - - electron - - electron - - - - tn.mnlr - vripper-server - ${project.version} - runtime - ${buildClassifier} - - - + + 4.0.0 + + tn.mnlr + vripper + 3.2.0 + + vripper-electron + vripper-electron + - - com.github.eirslett - frontend-maven-plugin - 1.3 - - v12.2.0 - 6.9.0 - build-dir - - - - install node and npm - - install-node-and-npm - - - - npm install - - npm - - - - npm run build - - npm - + + maven-jar-plugin - run dist + ${buildClassifier} - generate-resources - - - + - - - + + + + electron + + electron + + + + tn.mnlr + vripper-server + ${project.version} + runtime + ${buildClassifier} + + + + + + com.github.eirslett + frontend-maven-plugin + 1.3 + + v12.2.0 + 6.9.0 + build-dir + + + + install node and npm + + install-node-and-npm + + + + npm install + + npm + + + + npm run build + + npm + + + run dist + + generate-resources + + + + + + + diff --git a/vripper-electron/pre-build.js b/vripper-electron/pre-build.js index 3327e65..ec379c4 100644 --- a/vripper-electron/pre-build.js +++ b/vripper-electron/pre-build.js @@ -2,7 +2,7 @@ const cheerio = require('cheerio'); const fs = require('fs'); const rimraf = require("rimraf"); const copydir = require("copy-dir"); -const { execSync } = require("child_process"); +const {execSync} = require("child_process"); rimraf.sync('./build/vripper-ui'); copydir.sync('../vripper-ui/dist/vripper-ui', './build/vripper-ui', {}); @@ -19,7 +19,7 @@ fs.writeFileSync('./build/vripper-ui/index.html', $.html()); console.log('Building runtime environment'); rimraf.sync('java-runtime'); execSync('jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.desktop,java.instrument,java.management,java.naming,java.prefs,java.rmi,java.scripting,java.security.jgss,java.sql,jdk.httpserver,jdk.unsupported,jdk.crypto.ec --output java-runtime'); -if(process.platform === 'linux') { +if (process.platform === 'linux') { console.log('Stripping libjvm.so'); execSync('strip -p --strip-unneeded java-runtime/lib/server/libjvm.so'); -} \ No newline at end of file +} diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/VripperApplication.java b/vripper-server/src/main/java/tn/mnlr/vripper/VripperApplication.java index 2ca4b62..249bcf3 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/VripperApplication.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/VripperApplication.java @@ -1,12 +1,9 @@ package tn.mnlr.vripper; import lombok.extern.slf4j.Slf4j; -import net.jodah.failsafe.RetryPolicy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import java.time.temporal.ChronoUnit; - @SpringBootApplication @Slf4j public class VripperApplication { diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadJob.java b/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadJob.java index 9d8cfbe..1e9ce38 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadJob.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadJob.java @@ -32,41 +32,20 @@ import java.util.*; @Slf4j public class DownloadJob implements CheckedRunnable { - public enum ContextAttributes { - OPEN_CONNECTION("OPEN_CONNECTION"); - - private final String value; - - ContextAttributes(String value) { - this.value = value; - } - - @Override - public String toString() { - return value; - } - } - private static final Object LOCK = new Object(); private static final int READ_BUFFER_SIZE = 8192; - private final DataService dataService; private final PathService pathService; private final ConnectionService cm; private final VGAuthService authService; private final DownloadSpeedService downloadSpeedService; private final SettingsService settingsService; - private final HttpClientContext context; - @Getter private final Image image; - @Getter private final Post post; - private boolean stopped = false; - @Getter private boolean finished = false; @@ -280,4 +259,19 @@ public class DownloadJob implements CheckedRunnable { } this.stopped = true; } + + public enum ContextAttributes { + OPEN_CONNECTION("OPEN_CONNECTION"); + + private final String value; + + ContextAttributes(String value) { + this.value = value; + } + + @Override + public String toString() { + return value; + } + } } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java b/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java index eb1b725..59e085b 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/download/DownloadService.java @@ -8,12 +8,11 @@ import tn.mnlr.vripper.host.Host; import tn.mnlr.vripper.jpa.domain.Image; import tn.mnlr.vripper.jpa.domain.Post; import tn.mnlr.vripper.jpa.domain.enums.Status; -import tn.mnlr.vripper.services.SettingsService; import tn.mnlr.vripper.services.DataService; import tn.mnlr.vripper.services.PostService; +import tn.mnlr.vripper.services.SettingsService; import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/download/PendingQueue.java b/vripper-server/src/main/java/tn/mnlr/vripper/download/PendingQueue.java index b5c333e..842d741 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/download/PendingQueue.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/download/PendingQueue.java @@ -6,8 +6,8 @@ import org.springframework.stereotype.Service; import tn.mnlr.vripper.host.Host; import tn.mnlr.vripper.jpa.domain.Image; import tn.mnlr.vripper.jpa.domain.Post; -import tn.mnlr.vripper.services.SettingsService; import tn.mnlr.vripper.services.DataService; +import tn.mnlr.vripper.services.SettingsService; import javax.annotation.PostConstruct; import java.util.*; diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/exception/HostException.java b/vripper-server/src/main/java/tn/mnlr/vripper/exception/HostException.java index 8e2ab89..8505265 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/exception/HostException.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/exception/HostException.java @@ -10,6 +10,6 @@ public class HostException extends Exception { } public HostException(String message, Throwable e) { - super(message,e); + super(message, e); } } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/jpa/repositories/IRepository.java b/vripper-server/src/main/java/tn/mnlr/vripper/jpa/repositories/IRepository.java index fac82c4..0fb5fa0 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/jpa/repositories/IRepository.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/jpa/repositories/IRepository.java @@ -2,5 +2,5 @@ package tn.mnlr.vripper.jpa.repositories; public interface IRepository { - public void init(); + void init(); } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedRemoveEventListener.java b/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedRemoveEventListener.java index a180a37..3124efb 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedRemoveEventListener.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedRemoveEventListener.java @@ -13,7 +13,7 @@ import javax.annotation.PreDestroy; @Slf4j public class QueuedRemoveEventListener implements ApplicationListener, DataEventListener { - private Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); + private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); @Override public void onApplicationEvent(QueuedRemoveEvent event) { diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedUpdateEventListener.java b/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedUpdateEventListener.java index adeb81b..1970db9 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedUpdateEventListener.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/listener/QueuedUpdateEventListener.java @@ -13,7 +13,7 @@ import javax.annotation.PreDestroy; @Slf4j public class QueuedUpdateEventListener implements ApplicationListener, DataEventListener { - private Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); + private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); @Override public void onApplicationEvent(QueuedUpdateEvent event) { diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/ConnectionService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/ConnectionService.java index ec0d3c5..73a5dbe 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/ConnectionService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/ConnectionService.java @@ -46,11 +46,11 @@ public class ConnectionService { maxAttempts = settingsService.getSettings().getMaxAttempts(); Flux settingsFlux = settingsService.getSettingsFlux(); disposable = settingsFlux.subscribe(settings -> { - if(connectionTimeout != settings.getConnectionTimeout()) { + if (connectionTimeout != settings.getConnectionTimeout()) { connectionTimeout = settings.getConnectionTimeout(); buildRequestConfig(); } - if(maxAttempts != settings.getMaxAttempts()) { + if (maxAttempts != settings.getMaxAttempts()) { maxAttempts = settings.getMaxAttempts(); buildRetryPolicy(); } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/DownloadSpeedService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/DownloadSpeedService.java index 8204891..da4fe86 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/DownloadSpeedService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/DownloadSpeedService.java @@ -16,18 +16,15 @@ import java.util.concurrent.atomic.AtomicLong; public class DownloadSpeedService { private final AtomicLong read = new AtomicLong(0); - + private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); @Getter private long currentValue; - - private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); + private boolean allowWrite = false; public Flux getReadBytesPerSecond() { return sink.asFlux(); } - private boolean allowWrite = false; - public void increase(long read) { if (allowWrite) { this.read.addAndGet(read); diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/GlobalStateService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/GlobalStateService.java index 6efbf51..c80e928 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/GlobalStateService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/GlobalStateService.java @@ -21,16 +21,10 @@ public class GlobalStateService { private final PendingQueue pendingQueue; private final DownloadService downloadService; private final DataService dataService; - + private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); @Getter private GlobalState currentState; - private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); - - public Flux getGlobalState() { - return sink.asFlux(); - } - @Autowired public GlobalStateService(PendingQueue pendingQueue, DownloadService downloadService, DataService dataService) { this.pendingQueue = pendingQueue; @@ -38,6 +32,10 @@ public class GlobalStateService { this.dataService = dataService; } + public Flux getGlobalState() { + return sink.asFlux(); + } + @Scheduled(fixedDelay = 3000) private void interval() { GlobalState newGlobalState = new GlobalState( diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/HostService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/HostService.java index 5370962..b715958 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/HostService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/HostService.java @@ -31,31 +31,6 @@ public class HostService { this.htmlProcessorService = htmlProcessorService; } - @Getter - public static class Response { - - private final Document document; - private final Header[] headers; - - protected Response(Document document, Header[] headers) { - this.document = document; - this.headers = headers; - } - } - - @Getter - public static class NameUrl { - - private String name; - private String url; - - public NameUrl(String name, String url) { - this.name = name; - this.url = url; - } - } - - public Response getResponse(final String url, final HttpClientContext context) throws HostException { String basePage; @@ -102,4 +77,28 @@ public class HostService { log.debug(String.format("Extracting name from url %s: %s", imgUrl, imageTitle)); return imgUrl; } + + @Getter + public static class Response { + + private final Document document; + private final Header[] headers; + + protected Response(Document document, Header[] headers) { + this.document = document; + this.headers = headers; + } + } + + @Getter + public static class NameUrl { + + private final String name; + private final String url; + + public NameUrl(String name, String url) { + this.name = name; + this.url = url; + } + } } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/MetadataService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/MetadataService.java index 5699c2f..1a078f2 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/MetadataService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/MetadataService.java @@ -15,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.w3c.dom.Document; import org.w3c.dom.Node; -import tn.mnlr.vripper.VripperApplication; import tn.mnlr.vripper.exception.DownloadException; import tn.mnlr.vripper.exception.PostParseException; import tn.mnlr.vripper.jpa.domain.Metadata; @@ -34,40 +33,12 @@ import java.util.stream.Collectors; @Service public class MetadataService { - @Getter - static class Key { - private final String postId; - private final String threadId; - private final String url; - - Key(String postId, String threadId, String url) { - this.postId = postId; - this.threadId = threadId; - this.url = url; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Key key = (Key) o; - return Objects.equals(postId, key.postId); - } - - @Override - public int hashCode() { - return Objects.hash(postId); - } - } - private static final List dictionary = Arrays.asList("download", "link", "rapidgator", "filefactory", "filefox"); - private final LoadingCache cache; private final ConnectionService cm; private final VGAuthService VGAuthService; private final HtmlProcessorService htmlProcessorService; private final XpathService xpathService; - @Autowired public MetadataService(ConnectionService cm, VGAuthService VGAuthService, HtmlProcessorService htmlProcessorService, XpathService xpathService) { this.cm = cm; @@ -162,4 +133,30 @@ public class MetadataService { } } } + + @Getter + static class Key { + private final String postId; + private final String threadId; + private final String url; + + Key(String postId, String threadId, String url) { + this.postId = postId; + this.threadId = threadId; + this.url = url; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Key key = (Key) o; + return Objects.equals(postId, key.postId); + } + + @Override + public int hashCode() { + return Objects.hash(postId); + } + } } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/PostService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/PostService.java index 0e3cd34..750105c 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/PostService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/PostService.java @@ -141,7 +141,7 @@ public class PostService { } log.debug(String.format("threadId %s, postId %s is added automatically for download", queued.getThreadId(), queued.getPostId())); } else { - if(dataService.findQueuedByThreadId(queued.getThreadId()).isEmpty()) { + if (dataService.findQueuedByThreadId(queued.getThreadId()).isEmpty()) { dataService.newQueueLink(queued); } else { log.info(String.format("Thread with id = %s is already loaded", queued.getThreadId())); diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/SettingsService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/SettingsService.java index f9384b9..32caaab 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/SettingsService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/SettingsService.java @@ -199,11 +199,11 @@ public class SettingsService { throw new ValidationException(String.format("Invalid max concurrent download settings, values must be in [%d,%d]", 1, 4)); } - if(settings.getConnectionTimeout() < 1 || settings.getConnectionTimeout() > 300) { + if (settings.getConnectionTimeout() < 1 || settings.getConnectionTimeout() > 300) { throw new ValidationException(String.format("Invalid connection timeout settings, values must be in [%d,%d]", 1, 300)); } - if(settings.getMaxAttempts() < 1 || settings.getMaxAttempts() > 10) { + if (settings.getMaxAttempts() < 1 || settings.getMaxAttempts() > 10) { throw new ValidationException(String.format("Invalid maximum attempts settings, values must be in [%d,%d]", 1, 10)); } } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/VGAuthService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/VGAuthService.java index e2cbf70..ca075c3 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/VGAuthService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/VGAuthService.java @@ -39,15 +39,12 @@ public class VGAuthService { @Getter private final HttpClientContext context = HttpClientContext.create(); - + private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); @Getter private boolean authenticated = false; - @Getter private String loggedUser = ""; - private final Sinks.Many sink = Sinks.many().multicast().onBackpressureBuffer(); - @Autowired public VGAuthService(ConnectionService cm, SettingsService settingsService, ThreadPoolService threadPoolService, DataService dataService) { this.cm = cm; diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/XpathService.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/XpathService.java index dba28d5..da0aaa1 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/XpathService.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/XpathService.java @@ -12,7 +12,7 @@ import javax.xml.xpath.XPathFactory; @Service public class XpathService { - private XPath xpath = XPathFactory.newInstance().newXPath(); + private final XPath xpath = XPathFactory.newInstance().newXPath(); public Node getAsNode(Node source, String xpathExpression) throws XpathException { try { diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiPostHandler.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiPostHandler.java index baaba6b..9db8320 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiPostHandler.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiPostHandler.java @@ -7,7 +7,6 @@ import tn.mnlr.vripper.SpringContext; import tn.mnlr.vripper.host.Host; import tn.mnlr.vripper.jpa.domain.Image; import tn.mnlr.vripper.jpa.domain.Post; -import tn.mnlr.vripper.services.domain.ApiPost; import java.util.Collection; import java.util.HashSet; @@ -96,7 +95,7 @@ class ApiPostHandler extends DefaultHandler { @Override public void endElement(String uri, String localName, String qName) { - if ("post".equals(qName.toLowerCase())) { + if ("post".equalsIgnoreCase(qName)) { parsedPost.setTotal(images.size()); if (!previews.isEmpty()) { parsedPost.setPreviews(previews); diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiThreadHandler.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiThreadHandler.java index fcf3048..ce793a7 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiThreadHandler.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/ApiThreadHandler.java @@ -16,6 +16,8 @@ public class ApiThreadHandler extends DefaultHandler { private final Queued queued; private final Collection supportedHosts; private final Map hostMap = new HashMap<>(); + @Getter + private final List posts = new ArrayList<>(); private List previews = new ArrayList<>(); private String threadTitle; private String postId; @@ -24,9 +26,6 @@ public class ApiThreadHandler extends DefaultHandler { private int postCounter; private int previewCounter = 0; - @Getter - private final List posts = new ArrayList<>(); - public ApiThreadHandler(Queued queued) { this.queued = queued; this.supportedHosts = SpringContext.getBeansOfType(Host.class).values(); @@ -63,7 +62,7 @@ public class ApiThreadHandler extends DefaultHandler { @Override public void endElement(String uri, String localName, String qName) { - if ("post".equals(qName.toLowerCase())) { + if ("post".equalsIgnoreCase(qName)) { if (imageCount != 0) { posts.add(new MultiPostItem( queued.getThreadId(), diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/MetadataRunnable.java b/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/MetadataRunnable.java index 6464330..8fec657 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/MetadataRunnable.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/services/domain/MetadataRunnable.java @@ -29,7 +29,7 @@ public class MetadataRunnable implements Runnable { @Override public void run() { try { - if(Thread.interrupted()) { + if (Thread.interrupted()) { log.debug(String.format("Metadata fetching for postId=%s, threadId=%s interrupted", post.getPostId(), post.getThreadId())); return; } diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/PostRestEndpoint.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/PostRestEndpoint.java index cfc8505..1b666ec 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/PostRestEndpoint.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/PostRestEndpoint.java @@ -10,13 +10,12 @@ import tn.mnlr.vripper.exception.PostParseException; import tn.mnlr.vripper.jpa.domain.Metadata; import tn.mnlr.vripper.jpa.domain.Post; import tn.mnlr.vripper.jpa.domain.Queued; -import tn.mnlr.vripper.services.ThreadPoolService; import tn.mnlr.vripper.services.DataService; import tn.mnlr.vripper.services.PathService; -import tn.mnlr.vripper.services.domain.MultiPostItem; import tn.mnlr.vripper.services.PostService; +import tn.mnlr.vripper.services.ThreadPoolService; +import tn.mnlr.vripper.services.domain.MultiPostItem; import tn.mnlr.vripper.web.restendpoints.domain.*; -import tn.mnlr.vripper.web.restendpoints.domain.PostId; import tn.mnlr.vripper.web.restendpoints.exceptions.BadRequestException; import tn.mnlr.vripper.web.restendpoints.exceptions.NotFoundException; import tn.mnlr.vripper.web.restendpoints.exceptions.ServerErrorException; @@ -36,15 +35,13 @@ import java.util.stream.Collectors; public class PostRestEndpoint { private static final Pattern VG_URL_PATTERN = Pattern.compile("https://vipergirls\\.to/threads/(\\d+)((.*p=)(\\d+))?"); - + private static final Object LOCK = new Object(); private final DataService dataService; private final PathService pathService; private final DownloadService downloadService; private final PostService postService; private final ThreadPoolService threadPoolService; - private static final Object LOCK = new Object(); - @Autowired public PostRestEndpoint(DataService dataService, PathService pathService, DownloadService downloadService, PostService postService, ThreadPoolService threadPoolService) { this.dataService = dataService; diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/SettingsRestEndpoint.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/SettingsRestEndpoint.java index 8761b56..67d0a9a 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/SettingsRestEndpoint.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/SettingsRestEndpoint.java @@ -6,7 +6,6 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import tn.mnlr.vripper.exception.ValidationException; import tn.mnlr.vripper.services.SettingsService; -import tn.mnlr.vripper.services.VGAuthService; import tn.mnlr.vripper.web.restendpoints.exceptions.BadRequestException; @RestController diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/AltPostName.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/AltPostName.java index 864df0d..bf724ee 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/AltPostName.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/AltPostName.java @@ -1,6 +1,9 @@ package tn.mnlr.vripper.web.restendpoints.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; @Getter @Setter diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/DownloadPath.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/DownloadPath.java index e05e524..469341f 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/DownloadPath.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/DownloadPath.java @@ -1,6 +1,9 @@ package tn.mnlr.vripper.web.restendpoints.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; @Getter @Setter diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/PostToAdd.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/PostToAdd.java index e815ef3..0c3d784 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/PostToAdd.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/PostToAdd.java @@ -1,6 +1,9 @@ package tn.mnlr.vripper.web.restendpoints.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; @Getter @Setter diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveAllResult.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveAllResult.java index d5d89c2..93f871f 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveAllResult.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveAllResult.java @@ -1,6 +1,9 @@ package tn.mnlr.vripper.web.restendpoints.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import java.util.List; diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveResult.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveResult.java index 49ba5f4..5775f48 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveResult.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/RemoveResult.java @@ -1,6 +1,9 @@ package tn.mnlr.vripper.web.restendpoints.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; @Getter @Setter diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadId.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadId.java index 99230b3..4d63134 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadId.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadId.java @@ -1,6 +1,9 @@ package tn.mnlr.vripper.web.restendpoints.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; @Getter @Setter diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadUrl.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadUrl.java index 3bbe989..383126d 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadUrl.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/restendpoints/domain/ThreadUrl.java @@ -1,6 +1,9 @@ package tn.mnlr.vripper.web.restendpoints.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; @Getter @Setter diff --git a/vripper-server/src/main/java/tn/mnlr/vripper/web/wsendpoints/DataController.java b/vripper-server/src/main/java/tn/mnlr/vripper/web/wsendpoints/DataController.java index 1759270..586027e 100644 --- a/vripper-server/src/main/java/tn/mnlr/vripper/web/wsendpoints/DataController.java +++ b/vripper-server/src/main/java/tn/mnlr/vripper/web/wsendpoints/DataController.java @@ -8,7 +8,10 @@ import org.springframework.stereotype.Controller; import tn.mnlr.vripper.jpa.domain.Image; import tn.mnlr.vripper.jpa.domain.Post; import tn.mnlr.vripper.jpa.domain.Queued; -import tn.mnlr.vripper.services.*; +import tn.mnlr.vripper.services.DataService; +import tn.mnlr.vripper.services.DownloadSpeedService; +import tn.mnlr.vripper.services.GlobalStateService; +import tn.mnlr.vripper.services.VGAuthService; import tn.mnlr.vripper.services.domain.DownloadSpeed; import tn.mnlr.vripper.services.domain.GlobalState; @@ -33,16 +36,6 @@ public class DataController { this.dataService = dataService; } - @Getter - public static class LoggedUser { - - private final String user; - - LoggedUser(String user) { - this.user = user; - } - } - @SubscribeMapping("/user") public LoggedUser user() { return new LoggedUser(VGAuthService.getLoggedUser()); @@ -72,4 +65,14 @@ public class DataController { public Collection queued() { return StreamSupport.stream(dataService.findAllQueued().spliterator(), false).collect(Collectors.toList()); } + + @Getter + public static class LoggedUser { + + private final String user; + + LoggedUser(String user) { + this.user = user; + } + } } diff --git a/vripper-ui/src/app/app-routing.module.ts b/vripper-ui/src/app/app-routing.module.ts index c907e74..78530df 100644 --- a/vripper-ui/src/app/app-routing.module.ts +++ b/vripper-ui/src/app/app-routing.module.ts @@ -1,6 +1,6 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule} from '@angular/router'; -import { HomeComponent } from './home/home.component'; +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; +import {HomeComponent} from './home/home.component'; const routes: Routes = [ @@ -10,10 +10,11 @@ const routes: Routes = [ @NgModule({ imports: [ - RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' }) + RouterModule.forRoot(routes, {relativeLinkResolution: 'legacy'}) ], exports: [ RouterModule ] }) -export class AppRoutingModule { } +export class AppRoutingModule { +} diff --git a/vripper-ui/src/app/app.component.scss b/vripper-ui/src/app/app.component.scss index f0f29ba..6a67985 100644 --- a/vripper-ui/src/app/app.component.scss +++ b/vripper-ui/src/app/app.component.scss @@ -46,31 +46,71 @@ animation: sk-chase-dot-before 2.0s infinite ease-in-out both; } -.sk-chase-dot:nth-child(1) { animation-delay: -1.1s; } -.sk-chase-dot:nth-child(2) { animation-delay: -1.0s; } -.sk-chase-dot:nth-child(3) { animation-delay: -0.9s; } -.sk-chase-dot:nth-child(4) { animation-delay: -0.8s; } -.sk-chase-dot:nth-child(5) { animation-delay: -0.7s; } -.sk-chase-dot:nth-child(6) { animation-delay: -0.6s; } -.sk-chase-dot:nth-child(1):before { animation-delay: -1.1s; } -.sk-chase-dot:nth-child(2):before { animation-delay: -1.0s; } -.sk-chase-dot:nth-child(3):before { animation-delay: -0.9s; } -.sk-chase-dot:nth-child(4):before { animation-delay: -0.8s; } -.sk-chase-dot:nth-child(5):before { animation-delay: -0.7s; } -.sk-chase-dot:nth-child(6):before { animation-delay: -0.6s; } +.sk-chase-dot:nth-child(1) { + animation-delay: -1.1s; +} + +.sk-chase-dot:nth-child(2) { + animation-delay: -1.0s; +} + +.sk-chase-dot:nth-child(3) { + animation-delay: -0.9s; +} + +.sk-chase-dot:nth-child(4) { + animation-delay: -0.8s; +} + +.sk-chase-dot:nth-child(5) { + animation-delay: -0.7s; +} + +.sk-chase-dot:nth-child(6) { + animation-delay: -0.6s; +} + +.sk-chase-dot:nth-child(1):before { + animation-delay: -1.1s; +} + +.sk-chase-dot:nth-child(2):before { + animation-delay: -1.0s; +} + +.sk-chase-dot:nth-child(3):before { + animation-delay: -0.9s; +} + +.sk-chase-dot:nth-child(4):before { + animation-delay: -0.8s; +} + +.sk-chase-dot:nth-child(5):before { + animation-delay: -0.7s; +} + +.sk-chase-dot:nth-child(6):before { + animation-delay: -0.6s; +} @keyframes sk-chase { - 100% { transform: rotate(360deg); } + 100% { + transform: rotate(360deg); + } } @keyframes sk-chase-dot { - 80%, 100% { transform: rotate(360deg); } + 80%, 100% { + transform: rotate(360deg); + } } @keyframes sk-chase-dot-before { 50% { transform: scale(0.4); - } 100%, 0% { + } + 100%, 0% { transform: scale(1.0); } } diff --git a/vripper-ui/src/app/app.component.ts b/vripper-ui/src/app/app.component.ts index 60045c7..0c8fa65 100644 --- a/vripper-ui/src/app/app.component.ts +++ b/vripper-ui/src/app/app.component.ts @@ -14,6 +14,10 @@ import {RxStompState} from '@stomp/rx-stomp'; changeDetection: ChangeDetectionStrategy.OnPush }) export class AppComponent implements OnDestroy, AfterViewInit { + electron: Subject; + loaded: Subject = new BehaviorSubject(false); + private subscriptions: Subscription[] = []; + constructor( private dialog: MatDialog, public ws: WsConnectionService, @@ -26,11 +30,6 @@ export class AppComponent implements OnDestroy, AfterViewInit { this.electron = new BehaviorSubject(electronService.isElectronApp); } - private subscriptions: Subscription[] = []; - electron: Subject; - - loaded: Subject = new BehaviorSubject(false); - ngAfterViewInit() { this.appService.renderer = this.renderer; this.subscriptions.push( diff --git a/vripper-ui/src/app/confirmation-component/confirmation-dialog.ts b/vripper-ui/src/app/confirmation-component/confirmation-dialog.ts index 23b5632..3a1a3f1 100644 --- a/vripper-ui/src/app/confirmation-component/confirmation-dialog.ts +++ b/vripper-ui/src/app/confirmation-component/confirmation-dialog.ts @@ -11,5 +11,6 @@ export interface DialogConfirmation { templateUrl: 'confirmation-dialog.html' }) export class ConfirmDialogComponent { - constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: DialogConfirmation) {} + constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: DialogConfirmation) { + } } diff --git a/vripper-ui/src/app/domain/credential.model.ts b/vripper-ui/src/app/domain/credential.model.ts index 4df1569..279aabe 100644 --- a/vripper-ui/src/app/domain/credential.model.ts +++ b/vripper-ui/src/app/domain/credential.model.ts @@ -1,4 +1,4 @@ export interface Credentials { - username: string; - password: string; -} \ No newline at end of file + username: string; + password: string; +} diff --git a/vripper-ui/src/app/domain/download-path.model.ts b/vripper-ui/src/app/domain/download-path.model.ts index a9bcb4e..6579456 100644 --- a/vripper-ui/src/app/domain/download-path.model.ts +++ b/vripper-ui/src/app/domain/download-path.model.ts @@ -1,3 +1,3 @@ export interface DownloadPath { - path: string; + path: string; } diff --git a/vripper-ui/src/app/domain/download-speed.model.ts b/vripper-ui/src/app/domain/download-speed.model.ts index a00081f..959f3fc 100644 --- a/vripper-ui/src/app/domain/download-speed.model.ts +++ b/vripper-ui/src/app/domain/download-speed.model.ts @@ -1,3 +1,4 @@ export class DownloadSpeed { - constructor(public speed: string) {} + constructor(public speed: string) { + } } diff --git a/vripper-ui/src/app/domain/global-state.model.ts b/vripper-ui/src/app/domain/global-state.model.ts index c12b621..fa0e8c7 100644 --- a/vripper-ui/src/app/domain/global-state.model.ts +++ b/vripper-ui/src/app/domain/global-state.model.ts @@ -1,4 +1,4 @@ export class GlobalState { - constructor(public running: number, public remaining: number, public error: number) { - } + constructor(public running: number, public remaining: number, public error: number) { + } } diff --git a/vripper-ui/src/app/domain/multi-post.model.ts b/vripper-ui/src/app/domain/multi-post.model.ts index 6716cd7..a992982 100644 --- a/vripper-ui/src/app/domain/multi-post.model.ts +++ b/vripper-ui/src/app/domain/multi-post.model.ts @@ -7,5 +7,6 @@ export class MultiPostModel { public removed: boolean, public total: number, public loading: boolean - ) {} + ) { + } } diff --git a/vripper-ui/src/app/domain/photo-model.ts b/vripper-ui/src/app/domain/photo-model.ts index 19bc982..4b7d587 100644 --- a/vripper-ui/src/app/domain/photo-model.ts +++ b/vripper-ui/src/app/domain/photo-model.ts @@ -5,5 +5,6 @@ export class Photo { public progress: number, public status: string, public index: number - ) {} + ) { + } } diff --git a/vripper-ui/src/app/domain/remove-all-response.model.ts b/vripper-ui/src/app/domain/remove-all-response.model.ts index 0ff5585..2c1f1be 100644 --- a/vripper-ui/src/app/domain/remove-all-response.model.ts +++ b/vripper-ui/src/app/domain/remove-all-response.model.ts @@ -1,4 +1,4 @@ export interface RemoveAllResponse { - removed: number; - postIds: string[]; -} \ No newline at end of file + removed: number; + postIds: string[]; +} diff --git a/vripper-ui/src/app/domain/remove-response.model.ts b/vripper-ui/src/app/domain/remove-response.model.ts index 3114932..76c761c 100644 --- a/vripper-ui/src/app/domain/remove-response.model.ts +++ b/vripper-ui/src/app/domain/remove-response.model.ts @@ -1,3 +1,3 @@ export interface RemoveResponse { - postId: string; -} \ No newline at end of file + postId: string; +} diff --git a/vripper-ui/src/app/domain/vr-post-parse.model.ts b/vripper-ui/src/app/domain/vr-post-parse.model.ts index cce613d..e706979 100644 --- a/vripper-ui/src/app/domain/vr-post-parse.model.ts +++ b/vripper-ui/src/app/domain/vr-post-parse.model.ts @@ -8,5 +8,6 @@ export class MultiPostItem { public url: string, public previews: string[], public hosts: string - ) {} + ) { + } } diff --git a/vripper-ui/src/app/domain/ws-message.model.ts b/vripper-ui/src/app/domain/ws-message.model.ts index 2fa94b7..b690d75 100644 --- a/vripper-ui/src/app/domain/ws-message.model.ts +++ b/vripper-ui/src/app/domain/ws-message.model.ts @@ -1,6 +1,6 @@ export class WSMessage { - constructor(public destination: string, public payload?: string) { - } + constructor(public destination: string, public payload?: string) { + } } diff --git a/vripper-ui/src/app/grid-custom-cells/post-alt-renderer.native.ts b/vripper-ui/src/app/grid-custom-cells/post-alt-renderer.native.ts index f8b6a34..74de5b5 100644 --- a/vripper-ui/src/app/grid-custom-cells/post-alt-renderer.native.ts +++ b/vripper-ui/src/app/grid-custom-cells/post-alt-renderer.native.ts @@ -10,7 +10,7 @@ export class PostAltRendererNative implements ICellRendererComp { private contextMenuService: PostContextMenuService; destroy(): void { - if(this.gui) { + if (this.gui) { this.gui.removeEventListener('contextmenu', this.context.bind(this)); } } diff --git a/vripper-ui/src/app/grid-custom-cells/post-files-renderer.native.ts b/vripper-ui/src/app/grid-custom-cells/post-files-renderer.native.ts index b9ea727..62694b3 100644 --- a/vripper-ui/src/app/grid-custom-cells/post-files-renderer.native.ts +++ b/vripper-ui/src/app/grid-custom-cells/post-files-renderer.native.ts @@ -13,7 +13,7 @@ export class PostFilesRendererNative implements ICellRendererComp { private contextMenuService: PostContextMenuService; destroy(): void { - if(this.gui) { + if (this.gui) { this.gui.removeEventListener('contextmenu', this.context.bind(this)); } } diff --git a/vripper-ui/src/app/grid-custom-cells/post-progress-renderer.native.ts b/vripper-ui/src/app/grid-custom-cells/post-progress-renderer.native.ts index 1625797..a14dc58 100644 --- a/vripper-ui/src/app/grid-custom-cells/post-progress-renderer.native.ts +++ b/vripper-ui/src/app/grid-custom-cells/post-progress-renderer.native.ts @@ -9,7 +9,7 @@ export class PostProgressRendererNative extends ProgressRendererNative { private contextMenuService: PostContextMenuService; destroy(): void { - if(this.gui) { + if (this.gui) { this.gui.removeEventListener('contextmenu', this.context.bind(this)); } } diff --git a/vripper-ui/src/app/grid-custom-cells/post-status-renderer.native.ts b/vripper-ui/src/app/grid-custom-cells/post-status-renderer.native.ts index 70d9f3f..816d2df 100644 --- a/vripper-ui/src/app/grid-custom-cells/post-status-renderer.native.ts +++ b/vripper-ui/src/app/grid-custom-cells/post-status-renderer.native.ts @@ -9,7 +9,7 @@ export class PostStatusRendererNative extends StatusRendererNative { private contextMenuService: PostContextMenuService; destroy(): void { - if(this.gui) { + if (this.gui) { this.gui.removeEventListener('contextmenu', this.context.bind(this)); } } diff --git a/vripper-ui/src/app/grid-custom-cells/title-renderer.native.ts b/vripper-ui/src/app/grid-custom-cells/title-renderer.native.ts index 0d58d58..95b380a 100644 --- a/vripper-ui/src/app/grid-custom-cells/title-renderer.native.ts +++ b/vripper-ui/src/app/grid-custom-cells/title-renderer.native.ts @@ -6,30 +6,28 @@ import {AppPreviewComponent} from '../preview-tooltip/preview-tooltip.component' import {ComponentRef, NgZone} from '@angular/core'; export class TitleRendererNative implements ICellRendererComp { + tooltipPortal = new ComponentPortal(AppPreviewComponent); + appPreview: string[]; private gui: HTMLElement; private text: HTMLSpanElement; private gridApi: GridApi; private node: RowNode; private contextMenuService: PostContextMenuService; private icon: HTMLSpanElement; - private overlayPositionBuilder: OverlayPositionBuilder; private overlay: Overlay; private zone: NgZone; - private overlayRef: OverlayRef; - tooltipPortal = new ComponentPortal(AppPreviewComponent); - appPreview: string[]; destroy(): void { - if(this.gui) { + if (this.gui) { this.gui.removeEventListener('contextmenu', this.context.bind(this)); } - if(this.overlayRef) { + if (this.overlayRef) { this.overlayRef.dispose(); } - if(this.icon) { + if (this.icon) { this.icon.removeEventListener('mouseenter', this.mouseenter.bind(this)); this.icon.removeEventListener('mouseleave', this.mouseout.bind(this)); } @@ -86,7 +84,7 @@ export class TitleRendererNative implements ICellRendererComp { overlayY: 'bottom' } ]); - this.overlayRef = this.overlay.create({ positionStrategy, scrollStrategy: this.overlay.scrollStrategies.close() }); + this.overlayRef = this.overlay.create({positionStrategy, scrollStrategy: this.overlay.scrollStrategies.close()}); this.icon.addEventListener('mouseenter', this.mouseenter.bind(this)); this.icon.addEventListener('mouseleave', this.mouseout.bind(this)); diff --git a/vripper-ui/src/app/grid-custom-cells/url-renderer.native.ts b/vripper-ui/src/app/grid-custom-cells/url-renderer.native.ts index 0a724e2..ac4c6f2 100644 --- a/vripper-ui/src/app/grid-custom-cells/url-renderer.native.ts +++ b/vripper-ui/src/app/grid-custom-cells/url-renderer.native.ts @@ -10,7 +10,7 @@ export class UrlRendererNative implements ICellRendererComp { private url: string; destroy(): void { - if(this.link) { + if (this.link) { this.link.removeEventListener('click', this.goTo.bind(this)); } } diff --git a/vripper-ui/src/app/home/home.component.html b/vripper-ui/src/app/home/home.component.html index 21a1db8..671ce56 100644 --- a/vripper-ui/src/app/home/home.component.html +++ b/vripper-ui/src/app/home/home.component.html @@ -1,6 +1,6 @@ - + diff --git a/vripper-ui/src/app/home/home.component.ts b/vripper-ui/src/app/home/home.component.ts index 4fd9f3e..c75fbcf 100644 --- a/vripper-ui/src/app/home/home.component.ts +++ b/vripper-ui/src/app/home/home.component.ts @@ -14,6 +14,8 @@ import {HttpClient} from '@angular/common/http'; changeDetection: ChangeDetectionStrategy.OnPush }) export class HomeComponent implements OnInit, OnDestroy { + clipboardSub: Subscription; + constructor( private clipboardService: ClipboardService, public dialog: MatDialog, @@ -22,15 +24,14 @@ export class HomeComponent implements OnInit, OnDestroy { private _snackBar: MatSnackBar, private ngZone: NgZone, public linkCollectorService: LinkCollectorService - ) {} - - clipboardSub: Subscription; + ) { + } ngOnInit() { this.clipboardSub = this.clipboardService.links.subscribe(e => { this.ngZone.run(() => { this.httpClient - .post<{ threadId: string; postId: string }>(this.serverService.baseUrl + '/post', { url: e }) + .post<{ threadId: string; postId: string }>(this.serverService.baseUrl + '/post', {url: e}) .subscribe( response => { this._snackBar.open('Clipboard scan complete', null, { diff --git a/vripper-ui/src/app/material.module.ts b/vripper-ui/src/app/material.module.ts index 6db51fb..fd0f6a2 100644 --- a/vripper-ui/src/app/material.module.ts +++ b/vripper-ui/src/app/material.module.ts @@ -17,7 +17,7 @@ import {MatSlideToggleModule} from '@angular/material/slide-toggle'; import {MatSnackBar, MatSnackBarModule} from '@angular/material/snack-bar'; import {MatTabsModule} from '@angular/material/tabs'; import {MatToolbarModule} from '@angular/material/toolbar'; -import {MatSelectModule} from "@angular/material/select"; +import {MatSelectModule} from '@angular/material/select'; import {MatTooltipModule} from '@angular/material/tooltip'; @NgModule({ diff --git a/vripper-ui/src/app/multi-post-grid/multi-post-grid-data.source.ts b/vripper-ui/src/app/multi-post-grid/multi-post-grid-data.source.ts index 0761601..ecc713b 100644 --- a/vripper-ui/src/app/multi-post-grid/multi-post-grid-data.source.ts +++ b/vripper-ui/src/app/multi-post-grid/multi-post-grid-data.source.ts @@ -5,6 +5,8 @@ import {GridOptions, RowNode} from 'ag-grid-community'; import {NgZone} from '@angular/core'; export class MultiPostGridDataSource { + subscriptions: Subscription[] = []; + constructor( private ws: WsConnectionService, private gridOptions: GridOptions, @@ -12,8 +14,6 @@ export class MultiPostGridDataSource { ) { } - subscriptions: Subscription[] = []; - connect() { this.subscriptions.push(this.ws.multiPosts$.subscribe((e: MultiPostModel[]) => { this.zone.run(() => { diff --git a/vripper-ui/src/app/multi-post-grid/multi-post-grid.component.ts b/vripper-ui/src/app/multi-post-grid/multi-post-grid.component.ts index aa917d9..9f482ba 100644 --- a/vripper-ui/src/app/multi-post-grid/multi-post-grid.component.ts +++ b/vripper-ui/src/app/multi-post-grid/multi-post-grid.component.ts @@ -1,6 +1,6 @@ import {LinkCollectorService} from '../services/link-collector.service'; import {MultiPostGridDataSource} from './multi-post-grid-data.source'; -import {ChangeDetectionStrategy, Component, NgZone, OnDestroy, OnInit} from '@angular/core'; +import {ChangeDetectionStrategy, Component, NgZone, OnDestroy} from '@angular/core'; import {GridOptions} from 'ag-grid-community'; import {WsConnectionService} from '../services/ws-connection.service'; import {CollectorActionsRendererNative} from '../grid-custom-cells/collector-actions-renderer.native'; @@ -32,7 +32,7 @@ export class MultiPostGridComponent implements OnDestroy { sort: 'asc', cellRenderer: 'urlCellRenderer', cellRendererParams: { - electronService: this.electronService + electronService: this.electronService }, flex: 1 }, { diff --git a/vripper-ui/src/app/multi-post-items/multi-post-items.component.scss b/vripper-ui/src/app/multi-post-items/multi-post-items.component.scss index 171b582..65f3a34 100644 --- a/vripper-ui/src/app/multi-post-items/multi-post-items.component.scss +++ b/vripper-ui/src/app/multi-post-items/multi-post-items.component.scss @@ -1,9 +1,9 @@ $cell-space: 8px; .title-cell { - margin-right: $cell-space; + margin-right: $cell-space; } .progress-cell { - margin-left: $cell-space; -} \ No newline at end of file + margin-left: $cell-space; +} diff --git a/vripper-ui/src/app/multi-post-items/multi-post-items.component.ts b/vripper-ui/src/app/multi-post-items/multi-post-items.component.ts index 8c635b8..47d0efc 100644 --- a/vripper-ui/src/app/multi-post-items/multi-post-items.component.ts +++ b/vripper-ui/src/app/multi-post-items/multi-post-items.component.ts @@ -124,7 +124,8 @@ export class MultiPostItemsComponent { }) ) .subscribe( - () => {}, + () => { + }, error => { this._snackBar.open(error?.error?.message || 'Unexpected error, check log file', null, { duration: 5000 diff --git a/vripper-ui/src/app/photos/photos.component.html b/vripper-ui/src/app/photos/photos.component.html index 7cce910..6a7c751 100644 --- a/vripper-ui/src/app/photos/photos.component.html +++ b/vripper-ui/src/app/photos/photos.component.html @@ -1,12 +1,12 @@ -
+
-

{{ dialogData.title }}

+

{{ dialogData.title }}

- + - - + +
diff --git a/vripper-ui/src/app/photos/photos.component.scss b/vripper-ui/src/app/photos/photos.component.scss index 171b582..65f3a34 100644 --- a/vripper-ui/src/app/photos/photos.component.scss +++ b/vripper-ui/src/app/photos/photos.component.scss @@ -1,9 +1,9 @@ $cell-space: 8px; .title-cell { - margin-right: $cell-space; + margin-right: $cell-space; } .progress-cell { - margin-left: $cell-space; -} \ No newline at end of file + margin-left: $cell-space; +} diff --git a/vripper-ui/src/app/photos/photos.component.ts b/vripper-ui/src/app/photos/photos.component.ts index 7b681dd..61d2e2f 100644 --- a/vripper-ui/src/app/photos/photos.component.ts +++ b/vripper-ui/src/app/photos/photos.component.ts @@ -17,6 +17,9 @@ import {ElectronService} from 'ngx-electron'; }) export class PhotosComponent implements OnInit, OnDestroy { + gridOptions: GridOptions; + dataSource: PhotosDatasource; + constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public dialogData: Post, @@ -79,9 +82,6 @@ export class PhotosComponent implements OnInit, OnDestroy { } - gridOptions: GridOptions; - dataSource: PhotosDatasource; - ngOnInit() { } diff --git a/vripper-ui/src/app/photos/photos.datasource.ts b/vripper-ui/src/app/photos/photos.datasource.ts index 45dce8a..2032cca 100644 --- a/vripper-ui/src/app/photos/photos.datasource.ts +++ b/vripper-ui/src/app/photos/photos.datasource.ts @@ -4,6 +4,9 @@ import {WsConnectionService} from '../services/ws-connection.service'; import {NgZone} from '@angular/core'; export class PhotosDatasource { + subscriptions: Subscription[] = []; + postDetailsSub: Subscription; + constructor( private ws: WsConnectionService, private gridOptions: GridOptions, @@ -12,9 +15,6 @@ export class PhotosDatasource { ) { } - subscriptions: Subscription[] = []; - postDetailsSub: Subscription; - connect() { this.postDetailsSub = this.ws.postDetails$(this.postId).subscribe(e => { this.zone.run(() => { diff --git a/vripper-ui/src/app/posts/alternative-title/alternative-title.component.html b/vripper-ui/src/app/posts/alternative-title/alternative-title.component.html index 3676d6f..77e8c06 100644 --- a/vripper-ui/src/app/posts/alternative-title/alternative-title.component.html +++ b/vripper-ui/src/app/posts/alternative-title/alternative-title.component.html @@ -1,8 +1,8 @@ -
-

Alternative title

+
+

Alternative title

-
+ Choose a title @@ -16,9 +16,9 @@
- - - + diff --git a/vripper-ui/src/app/posts/alternative-title/alternative-title.component.ts b/vripper-ui/src/app/posts/alternative-title/alternative-title.component.ts index 70f82f7..8b1a0f2 100644 --- a/vripper-ui/src/app/posts/alternative-title/alternative-title.component.ts +++ b/vripper-ui/src/app/posts/alternative-title/alternative-title.component.ts @@ -19,6 +19,11 @@ export interface AlternativeTitleDialog { }) export class AlternativeTitleComponent implements OnInit { + form = new FormGroup({ + altNameSelect: new FormControl(''), + altNameInput: new FormControl('', Validators.required) + }); + constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: AlternativeTitleDialog, @@ -34,11 +39,6 @@ export class AlternativeTitleComponent implements OnInit { } } - form = new FormGroup({ - altNameSelect: new FormControl(''), - altNameInput: new FormControl('', Validators.required) - }); - rename() { this.httpClient.post(this.serverService.baseUrl + '/post/rename', [{ postId: this.data.post.postId, diff --git a/vripper-ui/src/app/posts/context-menu/post-context-menu.component.ts b/vripper-ui/src/app/posts/context-menu/post-context-menu.component.ts index d722a27..f3eca7d 100644 --- a/vripper-ui/src/app/posts/context-menu/post-context-menu.component.ts +++ b/vripper-ui/src/app/posts/context-menu/post-context-menu.component.ts @@ -58,7 +58,8 @@ export class PostContextMenuComponent { restart() { this.contextMenuService.closePostContextMenu(); this.httpClient.post(this.serverService.baseUrl + '/post/restart', [this.post.postId]).subscribe( - () => {}, + () => { + }, error => { this._snackBar.open(error?.error?.message || 'Unexpected error, check log file', null, { duration: 5000 @@ -140,7 +141,8 @@ export class PostContextMenuComponent { stop() { this.contextMenuService.closePostContextMenu(); this.httpClient.post(this.serverService.baseUrl + '/post/stop', [this.post.postId]).subscribe( - () => {}, + () => { + }, error => { this._snackBar.open(error?.error?.message || 'Unexpected error, check log file', null, { duration: 5000 diff --git a/vripper-ui/src/app/posts/posts.component.html b/vripper-ui/src/app/posts/posts.component.html index 719e523..fdae3ef 100644 --- a/vripper-ui/src/app/posts/posts.component.html +++ b/vripper-ui/src/app/posts/posts.component.html @@ -1,4 +1,4 @@
- +
diff --git a/vripper-ui/src/app/posts/posts.component.ts b/vripper-ui/src/app/posts/posts.component.ts index f1c8d14..d6baf3f 100644 --- a/vripper-ui/src/app/posts/posts.component.ts +++ b/vripper-ui/src/app/posts/posts.component.ts @@ -19,6 +19,10 @@ import {PostsService} from '../services/posts.service'; changeDetection: ChangeDetectionStrategy.OnPush }) export class PostsComponent implements OnDestroy { + dialogOpen: Subject = new Subject(); + gridOptions: GridOptions; + dataSource: PostsDataSource; + constructor( private wsConnection: WsConnectionService, private zone: NgZone, @@ -110,10 +114,6 @@ export class PostsComponent implements OnDestroy { }; } - dialogOpen: Subject = new Subject(); - gridOptions: GridOptions; - dataSource: PostsDataSource; - ngOnDestroy(): void { this.dataSource.disconnect(); } diff --git a/vripper-ui/src/app/posts/posts.datasource.ts b/vripper-ui/src/app/posts/posts.datasource.ts index 9ec4333..51e88e5 100644 --- a/vripper-ui/src/app/posts/posts.datasource.ts +++ b/vripper-ui/src/app/posts/posts.datasource.ts @@ -5,11 +5,11 @@ import {GridOptions, RowNode} from 'ag-grid-community'; import {NgZone} from '@angular/core'; export class PostsDataSource { + subscriptions: Subscription[] = []; + constructor(private ws: WsConnectionService, private gridOptions: GridOptions, private zone: NgZone) { } - subscriptions: Subscription[] = []; - connect() { this.subscriptions.push(this.ws.posts$.subscribe((e: Post[]) => { this.zone.run(() => { diff --git a/vripper-ui/src/app/preview-tooltip/preview-tooltip.directive.ts b/vripper-ui/src/app/preview-tooltip/preview-tooltip.directive.ts index 8d52942..b22ac7a 100644 --- a/vripper-ui/src/app/preview-tooltip/preview-tooltip.directive.ts +++ b/vripper-ui/src/app/preview-tooltip/preview-tooltip.directive.ts @@ -5,17 +5,17 @@ import {ComponentPortal} from '@angular/cdk/portal'; @Directive({selector: '[appPreview]'}) export class AppPreviewDirective implements OnInit, OnDestroy { - private overlayRef: OverlayRef; tooltipPortal = new ComponentPortal(AppPreviewComponent); - @Input() appPreview: string[]; + private overlayRef: OverlayRef; constructor( private overlayPositionBuilder: OverlayPositionBuilder, private elementRef: ElementRef, private overlay: Overlay, private ngZone: NgZone - ) {} + ) { + } ngOnInit() { const positionStrategy = this.overlayPositionBuilder @@ -36,7 +36,7 @@ export class AppPreviewDirective implements OnInit, OnDestroy { overlayY: 'bottom' } ]); - this.overlayRef = this.overlay.create({ positionStrategy, scrollStrategy: this.overlay.scrollStrategies.close() }); + this.overlayRef = this.overlay.create({positionStrategy, scrollStrategy: this.overlay.scrollStrategies.close()}); } ngOnDestroy() { diff --git a/vripper-ui/src/app/scan/scan.component.scss b/vripper-ui/src/app/scan/scan.component.scss index 4fe28d0..225a91b 100644 --- a/vripper-ui/src/app/scan/scan.component.scss +++ b/vripper-ui/src/app/scan/scan.component.scss @@ -1,3 +1,3 @@ :host ::ng-deep .ag-cell { - background-color: snow !important; + background-color: snow !important; } diff --git a/vripper-ui/src/app/scan/scan.component.ts b/vripper-ui/src/app/scan/scan.component.ts index 4390786..90d717a 100644 --- a/vripper-ui/src/app/scan/scan.component.ts +++ b/vripper-ui/src/app/scan/scan.component.ts @@ -13,6 +13,9 @@ import {BehaviorSubject, Subject} from 'rxjs'; changeDetection: ChangeDetectionStrategy.OnPush }) export class ScanComponent implements OnInit, AfterViewInit { + input: string; + loading: Subject = new BehaviorSubject(false); + constructor( private ngZone: NgZone, private httpClient: HttpClient, @@ -20,10 +23,8 @@ export class ScanComponent implements OnInit, AfterViewInit { private _snackBar: MatSnackBar, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: DialogData - ) {} - - input: string; - loading: Subject = new BehaviorSubject(false); + ) { + } submit() { this.ngZone.run(() => { @@ -42,22 +43,24 @@ export class ScanComponent implements OnInit, AfterViewInit { processUrl(url: string) { this.loading.next(true); this.httpClient - .post<{ threadId: string; postId: string }>(this.serverService.baseUrl + '/post', { url: url }) + .post<{ threadId: string; postId: string }>(this.serverService.baseUrl + '/post', {url: url}) .pipe( finalize(() => { this.close(); this.loading.next(false); }) ) - .subscribe(response => {}, - error => { - this._snackBar.open(error?.error?.message || 'Unexpected error, check log file', null, { - duration: 5000 + .subscribe(response => { + }, + error => { + this._snackBar.open(error?.error?.message || 'Unexpected error, check log file', null, { + duration: 5000 + }); }); - }); } - ngOnInit() {} + ngOnInit() { + } ngAfterViewInit(): void { this.ngZone.run(() => { diff --git a/vripper-ui/src/app/services/app.service.ts b/vripper-ui/src/app/services/app.service.ts index e9cc254..db980ff 100644 --- a/vripper-ui/src/app/services/app.service.ts +++ b/vripper-ui/src/app/services/app.service.ts @@ -14,6 +14,8 @@ import {Title} from '@angular/platform-browser'; providedIn: 'root' }) export class AppService { + isExtraSmall: Observable = this.breakpointObserver.observe(Breakpoints.XSmall); + constructor( private httpClient: HttpClient, private serverService: ServerService, @@ -25,23 +27,23 @@ export class AppService { } private _darkTheme = false; - private _settings: Settings; - private _renderer: Renderer2; - - get settings(): Settings { - return { ...this._settings }; - } get darkTheme(): boolean { return this._darkTheme; } + private _settings: Settings; + + get settings(): Settings { + return {...this._settings}; + } + + private _renderer: Renderer2; + set renderer(renderer: Renderer2) { this._renderer = renderer; } - isExtraSmall: Observable = this.breakpointObserver.observe(Breakpoints.XSmall); - updateTheme(darkTheme: boolean) { this._darkTheme = darkTheme; if (this._darkTheme) { diff --git a/vripper-ui/src/app/services/clipboard.service.ts b/vripper-ui/src/app/services/clipboard.service.ts index e6a4734..518a938 100644 --- a/vripper-ui/src/app/services/clipboard.service.ts +++ b/vripper-ui/src/app/services/clipboard.service.ts @@ -18,7 +18,12 @@ export class ClipboardService { private electronService: ElectronService, private serverService: ServerService, private httpClient: HttpClient - ) {} + ) { + } + + get links(): Observable { + return this.links$.asObservable(); + } init(settings?: Settings) { if (!settings) { @@ -64,8 +69,4 @@ export class ClipboardService { private textHasDiff(a, b) { return a && b !== a; } - - get links(): Observable { - return this.links$.asObservable(); - } } diff --git a/vripper-ui/src/app/services/link-collector.service.ts b/vripper-ui/src/app/services/link-collector.service.ts index cba18ee..b89d39c 100644 --- a/vripper-ui/src/app/services/link-collector.service.ts +++ b/vripper-ui/src/app/services/link-collector.service.ts @@ -10,9 +10,9 @@ export class LinkCollectorService { get count(): Observable { return this._count$.asObservable(); - } + } - setCount(count: number) { - this._count$.next(count); - } + setCount(count: number) { + this._count$.next(count); + } } diff --git a/vripper-ui/src/app/services/multi-post.service.ts b/vripper-ui/src/app/services/multi-post.service.ts index b451215..48fa27a 100644 --- a/vripper-ui/src/app/services/multi-post.service.ts +++ b/vripper-ui/src/app/services/multi-post.service.ts @@ -4,7 +4,7 @@ import {MultiPostModel} from '../domain/multi-post.model'; import {MatDialog} from '@angular/material/dialog'; import {HttpClient} from '@angular/common/http'; import {ServerService} from './server-service'; -import { GridApi } from 'ag-grid-community'; +import {GridApi} from 'ag-grid-community'; interface ThreadId { threadId: string; @@ -20,6 +20,15 @@ export class MultiPostService { private serverService: ServerService) { } + private static removeFromGrid(api: GridApi, data: ThreadId) { + const removeTx = []; + const nodeToDelete = api.getRowNode(data.threadId); + if (nodeToDelete != null) { + removeTx.push(nodeToDelete.data); + } + api.applyTransaction({remove: removeTx}); + } + selectItems(multiPostModel: MultiPostModel) { this.dialog.open(MultiPostItemsComponent, { width: '90%', @@ -38,13 +47,4 @@ export class MultiPostService { ); } - private static removeFromGrid(api: GridApi, data: ThreadId) { - const removeTx = []; - const nodeToDelete = api.getRowNode(data.threadId); - if (nodeToDelete != null) { - removeTx.push(nodeToDelete.data); - } - api.applyTransaction({remove: removeTx}); - } - } diff --git a/vripper-ui/src/app/services/post-context-menu.service.ts b/vripper-ui/src/app/services/post-context-menu.service.ts index 055b032..ad77ba6 100644 --- a/vripper-ui/src/app/services/post-context-menu.service.ts +++ b/vripper-ui/src/app/services/post-context-menu.service.ts @@ -1,23 +1,23 @@ import {ComponentRef, Injectable} from '@angular/core'; -import {ComponentPortal} from "@angular/cdk/portal"; -import {PostContextMenuComponent} from "../posts/context-menu/post-context-menu.component"; -import {Overlay, OverlayPositionBuilder, OverlayRef} from "@angular/cdk/overlay"; -import {fromEvent, Subscription} from "rxjs"; -import {Post} from "../domain/post-state.model"; -import {filter, take} from "rxjs/operators"; +import {ComponentPortal} from '@angular/cdk/portal'; +import {PostContextMenuComponent} from '../posts/context-menu/post-context-menu.component'; +import {Overlay, OverlayPositionBuilder, OverlayRef} from '@angular/cdk/overlay'; +import {fromEvent, Subscription} from 'rxjs'; +import {Post} from '../domain/post-state.model'; +import {filter, take} from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class PostContextMenuService { + postContextMenuPortal = new ComponentPortal(PostContextMenuComponent); + postContext: Subscription; + private postContextMenuOverlayRef: OverlayRef; + constructor(private overlayPositionBuilder: OverlayPositionBuilder, private overlay: Overlay) { } - postContextMenuPortal = new ComponentPortal(PostContextMenuComponent); - private postContextMenuOverlayRef: OverlayRef; - postContext: Subscription; - openPostContextMenu(mouseEvent: MouseEvent, post: Post) { mouseEvent.preventDefault(); this.closePostContextMenu(); diff --git a/vripper-ui/src/app/services/selection-service.ts b/vripper-ui/src/app/services/selection-service.ts index d531c92..9323606 100644 --- a/vripper-ui/src/app/services/selection-service.ts +++ b/vripper-ui/src/app/services/selection-service.ts @@ -11,9 +11,9 @@ export class SelectionService { get selected$(): Observable { return this._selected$.asObservable(); - } + } - public onSelectionChanged(selected: RowNode[]) { - this._selected$.next(selected); - } + public onSelectionChanged(selected: RowNode[]) { + this._selected$.next(selected); + } } diff --git a/vripper-ui/src/app/services/server-service.ts b/vripper-ui/src/app/services/server-service.ts index c46ab78..85a5c5c 100644 --- a/vripper-ui/src/app/services/server-service.ts +++ b/vripper-ui/src/app/services/server-service.ts @@ -5,24 +5,26 @@ import {Injectable} from '@angular/core'; }) export class ServerService { - private _baseUrl: string; - private _wsBaseUrl: string; - - constructor() {} - - set baseUrl(baseUrl: string) { - this._baseUrl = baseUrl; + constructor() { } + private _baseUrl: string; + get baseUrl(): string { return this._baseUrl; } - set wsBaseUrl(wsBaseUrl: string) { - this._wsBaseUrl = wsBaseUrl; + set baseUrl(baseUrl: string) { + this._baseUrl = baseUrl; } + private _wsBaseUrl: string; + get wsBaseUrl(): string { return this._wsBaseUrl; } + + set wsBaseUrl(wsBaseUrl: string) { + this._wsBaseUrl = wsBaseUrl; + } } diff --git a/vripper-ui/src/app/services/ws-connection.service.ts b/vripper-ui/src/app/services/ws-connection.service.ts index 7eeffb0..38ea2cf 100644 --- a/vripper-ui/src/app/services/ws-connection.service.ts +++ b/vripper-ui/src/app/services/ws-connection.service.ts @@ -9,7 +9,7 @@ import {Post} from '../domain/post-state.model'; import {LoggedUser} from '../domain/logged-user.model'; import {DownloadSpeed} from '../domain/download-speed.model'; import {GlobalState} from '../domain/global-state.model'; -import {map, share, throttleTime} from 'rxjs/operators'; +import {map, share} from 'rxjs/operators'; import {RxStomp, RxStompConfig, RxStompState} from '@stomp/rx-stomp'; import {ElectronService} from 'ngx-electron'; @@ -35,6 +35,38 @@ export class WsConnectionService { this.init(); } + public get state(): Observable { + return this.connectionState$.asObservable(); + } + + get globalState$(): Observable { + return this.globalState; + } + + get speed$(): Observable { + return this.speed; + } + + get user$(): Observable { + return this.user; + } + + get posts$(): Observable { + return this.posts; + } + + get postsRemove$(): Observable { + return this.postsRemove; + } + + get queuedRemove$(): Observable { + return this.queuedRemove; + } + + get multiPosts$(): Observable { + return this.multiPostModels; + } + init() { if (this.electronService.isElectronApp) { const portRequest = setInterval(() => { @@ -74,10 +106,6 @@ export class WsConnectionService { this.rxStomp.activate(); } - public get state(): Observable { - return this.connectionState$.asObservable(); - } - disconnect() { this.rxStomp.deactivate(); } @@ -162,30 +190,6 @@ export class WsConnectionService { ); } - get globalState$(): Observable { - return this.globalState; - } - - get speed$(): Observable { - return this.speed; - } - - get user$(): Observable { - return this.user; - } - - get posts$(): Observable { - return this.posts; - } - - get postsRemove$(): Observable { - return this.postsRemove; - } - - get queuedRemove$(): Observable { - return this.queuedRemove; - } - postDetails$(postId: string): Observable { if (this.postDetails != null && this.postIdDetails === postId) { return this.postDetails; @@ -212,10 +216,6 @@ export class WsConnectionService { return this.postDetails; } - get multiPosts$(): Observable { - return this.multiPostModels; - } - send(wsMessage: WSMessage) { this.rxStomp.publish({destination: wsMessage.destination, body: wsMessage.payload}); } diff --git a/vripper-ui/src/app/settings/settings.component.html b/vripper-ui/src/app/settings/settings.component.html index df106a4..fad43b9 100644 --- a/vripper-ui/src/app/settings/settings.component.html +++ b/vripper-ui/src/app/settings/settings.component.html @@ -1,4 +1,4 @@ -
+

Preferences

- + -
-
+ +
-
@@ -29,14 +29,17 @@ Auto start downloads - +
Save posts in sub folders - +
@@ -46,39 +49,45 @@ name="threadSubLocation" >Create a subfolder per thread - +
Order images - +
Append post id to download folder - +
Clear Finished - +
-
+ - + Enable ViperGirls Authentication -
+
@@ -137,26 +146,30 @@
Leave thanks - +
- Leave thanks when download starts + Leave + thanks when download starts - +
- +
- - + + diff --git a/vripper-ui/src/app/settings/settings.component.scss b/vripper-ui/src/app/settings/settings.component.scss index 3405f2c..75e682e 100644 --- a/vripper-ui/src/app/settings/settings.component.scss +++ b/vripper-ui/src/app/settings/settings.component.scss @@ -8,6 +8,7 @@ form { .input { display: flex; + > :first-child { margin-right: 5px; } diff --git a/vripper-ui/src/app/status-bar/status-bar.component.scss b/vripper-ui/src/app/status-bar/status-bar.component.scss index 8b28ae0..9906734 100644 --- a/vripper-ui/src/app/status-bar/status-bar.component.scss +++ b/vripper-ui/src/app/status-bar/status-bar.component.scss @@ -1,15 +1,15 @@ .status-bar { - position: fixed; - width: 100%; - bottom: 0; - left: 0; - white-space: nowrap; - padding: 2px 0; - z-index: 9999; + position: fixed; + width: 100%; + bottom: 0; + left: 0; + white-space: nowrap; + padding: 2px 0; + z-index: 9999; } span { - margin: 0 8px; - user-select: none; - font-size: small; + margin: 0 8px; + user-select: none; + font-size: small; } diff --git a/vripper-ui/src/app/status-bar/status-bar.component.ts b/vripper-ui/src/app/status-bar/status-bar.component.ts index 48537b0..357a81f 100644 --- a/vripper-ui/src/app/status-bar/status-bar.component.ts +++ b/vripper-ui/src/app/status-bar/status-bar.component.ts @@ -12,14 +12,14 @@ import {GlobalState} from '../domain/global-state.model'; changeDetection: ChangeDetectionStrategy.OnPush }) export class StatusBarComponent implements OnInit, OnDestroy { - constructor(private ws: WsConnectionService, private ngZone: NgZone, private selectionService: SelectionService) { - } - downloadSpeed$: Subject = new BehaviorSubject(new DownloadSpeed('0 B')); globalState$: Subject = new BehaviorSubject(new GlobalState(0, 0, 0)); selected$: Subject = new BehaviorSubject(0); subscriptions: Subscription[] = []; + constructor(private ws: WsConnectionService, private ngZone: NgZone, private selectionService: SelectionService) { + } + ngOnInit() { this.subscriptions.push(this.ws.speed$.subscribe(e => this.ngZone.run(() => this.downloadSpeed$.next(e)))); this.subscriptions.push(this.ws.globalState$.subscribe(e => this.ngZone.run(() => this.globalState$.next(e)))); diff --git a/vripper-ui/src/app/toolbar/toolbar.component.html b/vripper-ui/src/app/toolbar/toolbar.component.html index 626b502..f840bf6 100644 --- a/vripper-ui/src/app/toolbar/toolbar.component.html +++ b/vripper-ui/src/app/toolbar/toolbar.component.html @@ -1,7 +1,7 @@
-
-