mirror of
https://github.com/TeamPiped/Piped-Backend.git
synced 2024-12-13 13:50:28 +05:30
Merge pull request #689 from TeamPiped/channel-save-video
Fix channel save new video handling
This commit is contained in:
commit
27350d2a47
@ -210,6 +210,57 @@ public class ChannelHandlers {
|
||||
|
||||
List<ContentItem> items = collectRelatedItems(info.getRelatedItems());
|
||||
|
||||
Multithreading.runAsync(() -> {
|
||||
|
||||
var channel = DatabaseHelper.getChannelFromId(info.getId());
|
||||
|
||||
if (channel != null) {
|
||||
try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) {
|
||||
var streamInfoItems = info.getRelatedItems()
|
||||
.stream()
|
||||
.parallel()
|
||||
.filter(StreamInfoItem.class::isInstance)
|
||||
.map(StreamInfoItem.class::cast)
|
||||
.toList();
|
||||
|
||||
var channelIds = streamInfoItems
|
||||
.stream()
|
||||
.map(item -> {
|
||||
try {
|
||||
return YOUTUBE_SERVICE.getStreamLHFactory().getId(item.getUrl());
|
||||
} catch (ParsingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}).collect(Collectors.toUnmodifiableSet());
|
||||
|
||||
List<String> videoIdsPresent = DatabaseHelper.getVideosFromIds(s, channelIds)
|
||||
.stream()
|
||||
.map(Video::getId)
|
||||
.toList();
|
||||
|
||||
streamInfoItems
|
||||
.stream()
|
||||
.parallel()
|
||||
.forEach(item -> {
|
||||
try {
|
||||
String id = YOUTUBE_SERVICE.getStreamLHFactory().getId(item.getUrl());
|
||||
if (videoIdsPresent.contains(id))
|
||||
VideoHelpers.updateVideo(id, item);
|
||||
else if (item.getUploadDate() != null) {
|
||||
// shorts tab doesn't have upload date
|
||||
// we don't want to fetch each video's upload date
|
||||
long time = item.getUploadDate().offsetDateTime().toInstant().toEpochMilli();
|
||||
if ((System.currentTimeMillis() - time) < TimeUnit.DAYS.toMillis(Constants.FEED_RETENTION))
|
||||
VideoHelpers.handleNewVideo(item.getUrl(), time, channel);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
String nextpage = null;
|
||||
if (info.hasNextPage()) {
|
||||
Page page = info.getNextPage();
|
||||
|
@ -214,9 +214,11 @@ public class DatabaseHelper {
|
||||
CollectionUtils.collectPreloadedTabs(info.getTabs())
|
||||
.stream()
|
||||
.parallel()
|
||||
.map(tab -> {
|
||||
.mapMulti((tab, consumer) -> {
|
||||
try {
|
||||
return ChannelTabInfo.getInfo(YOUTUBE_SERVICE, tab).getRelatedItems();
|
||||
ChannelTabInfo.getInfo(YOUTUBE_SERVICE, tab)
|
||||
.getRelatedItems()
|
||||
.forEach(consumer);
|
||||
} catch (ExtractionException | IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@ -224,11 +226,11 @@ public class DatabaseHelper {
|
||||
.filter(StreamInfoItem.class::isInstance)
|
||||
.map(StreamInfoItem.class::cast)
|
||||
.forEach(item -> {
|
||||
long time = item.getUploadDate() != null
|
||||
? item.getUploadDate().offsetDateTime().toInstant().toEpochMilli()
|
||||
: System.currentTimeMillis();
|
||||
if ((System.currentTimeMillis() - time) < TimeUnit.DAYS.toMillis(Constants.FEED_RETENTION))
|
||||
VideoHelpers.handleNewVideo(item.getUrl(), time, channel);
|
||||
long time = item.getUploadDate() != null
|
||||
? item.getUploadDate().offsetDateTime().toInstant().toEpochMilli()
|
||||
: System.currentTimeMillis();
|
||||
if ((System.currentTimeMillis() - time) < TimeUnit.DAYS.toMillis(Constants.FEED_RETENTION))
|
||||
VideoHelpers.handleNewVideo(item.getUrl(), time, channel);
|
||||
});
|
||||
});
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user