From 7a18a6e6b22c5f8e804360fa44d2ffdbfecd35f5 Mon Sep 17 00:00:00 2001 From: FireMasterK <20838718+FireMasterK@users.noreply.github.com> Date: Wed, 14 Jul 2021 15:43:20 +0530 Subject: [PATCH] Update video views on channel visits. --- .../me/kavin/piped/utils/ResponseHelper.java | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/kavin/piped/utils/ResponseHelper.java b/src/main/java/me/kavin/piped/utils/ResponseHelper.java index 49b270c..953a439 100644 --- a/src/main/java/me/kavin/piped/utils/ResponseHelper.java +++ b/src/main/java/me/kavin/piped/utils/ResponseHelper.java @@ -164,9 +164,10 @@ public class ResponseHelper { info.getStreamSegments().forEach( segment -> segments.add(new ChapterSegment(segment.getTitle(), segment.getStartTimeSeconds()))); - if (info.getUploadDate() != null && System.currentTimeMillis() - - info.getUploadDate().offsetDateTime().toInstant().toEpochMilli() < TimeUnit.DAYS.toMillis(10)) - updateViews(info.getId(), info.getViewCount()); + long time = info.getUploadDate().offsetDateTime().toInstant().toEpochMilli(); + + if (info.getUploadDate() != null && System.currentTimeMillis() - time < TimeUnit.DAYS.toMillis(10)) + updateViews(info.getId(), info.getViewCount(), time, false); final Streams streams = new Streams(info.getName(), info.getDescription().getContent(), info.getTextualUploadDate(), info.getUploaderName(), info.getUploaderUrl().substring(23), @@ -191,6 +192,25 @@ public class ResponseHelper { item.getTextualUploadDate(), item.getDuration(), item.getViewCount())); }); + Multithreading.runAsync(() -> { + Session s = DatabaseSessionFactory.createSession(); + + me.kavin.piped.utils.obj.db.Channel channel = DatabaseHelper.getChannelFromId(s, info.getId()); + + if (channel != null) { + for (StreamInfoItem item : info.getRelatedItems()) { + long time = item.getUploadDate() != null + ? item.getUploadDate().offsetDateTime().toInstant().toEpochMilli() + : System.currentTimeMillis(); + if (System.currentTimeMillis() - time < TimeUnit.DAYS.toMillis(10)) + updateViews(item.getUrl().substring("https://www.youtube.com/watch?v=".length()), + item.getViewCount(), time, true); + } + } + + s.close(); + }); + String nextpage = null; if (info.hasNextPage()) { Page page = info.getNextPage(); @@ -544,7 +564,7 @@ public class ResponseHelper { Session s = DatabaseSessionFactory.createSession(); - User user = DatabaseHelper.getUserFromSession(s, session); + User user = DatabaseHelper.getUserFromSessionWithSubscribed(s, session); if (user != null) { if (!user.getSubscribed().contains(channelId)) { @@ -713,7 +733,7 @@ public class ResponseHelper { long infoTime = info.getUploadDate() != null ? info.getUploadDate().offsetDateTime().toInstant().toEpochMilli() : System.currentTimeMillis(); - Video video; + Video video = null; if (channel != null && (video = DatabaseHelper.getVideoFromId(s, info.getId())) == null && (System.currentTimeMillis() - infoTime) < TimeUnit.DAYS.toMillis(10)) { @@ -723,6 +743,12 @@ public class ResponseHelper { s.save(video); + s.beginTransaction().commit(); + } else if (video != null) { + video.setViews(info.getViewCount()); + + s.update(video); + s.beginTransaction().commit(); } @@ -730,7 +756,7 @@ public class ResponseHelper { } - private static void updateViews(String id, long views) { + private static void updateViews(String id, long views, long time, boolean addIfNonExistent) { Multithreading.runAsync(() -> { try { Session s = DatabaseSessionFactory.createSession(); @@ -741,7 +767,8 @@ public class ResponseHelper { video.setViews(views); s.update(video); s.beginTransaction().commit(); - } + } else if (addIfNonExistent) + handleNewVideo("https://www.youtube.com/watch?v=" + id, time); s.close();