Merge 8fcb513cf1
into 784f90b16d
This commit is contained in:
commit
eef11ac3b1
|
@ -38,7 +38,11 @@ class ChannelSubscription:
|
|||
return all_channels
|
||||
|
||||
def get_last_youtube_videos(
|
||||
self, channel_id, limit=True, query_filter=VideoTypeEnum.UNKNOWN
|
||||
self,
|
||||
channel_id,
|
||||
limit=True,
|
||||
query_filter=VideoTypeEnum.UNKNOWN,
|
||||
channel_overwrites=None,
|
||||
):
|
||||
"""get a list of last videos from channel"""
|
||||
queries = self._build_queries(query_filter, limit)
|
||||
|
@ -50,18 +54,50 @@ class ChannelSubscription:
|
|||
"skip_download": True,
|
||||
"extract_flat": True,
|
||||
}
|
||||
|
||||
vid_type = vid_type_enum.value
|
||||
|
||||
limit_amount = 0
|
||||
|
||||
if channel_overwrites:
|
||||
if (
|
||||
vid_type == "videos"
|
||||
and "subscriptions_channel_size" in channel_overwrites
|
||||
):
|
||||
limit_amount = channel_overwrites[
|
||||
"subscriptions_channel_size"
|
||||
]
|
||||
if (
|
||||
vid_type == "shorts"
|
||||
and "subscriptions_shorts_channel_size"
|
||||
in channel_overwrites
|
||||
):
|
||||
limit_amount = channel_overwrites[
|
||||
"subscriptions_shorts_channel_size"
|
||||
]
|
||||
if (
|
||||
vid_type == "streams"
|
||||
and "subscriptions_live_channel_size" in channel_overwrites
|
||||
):
|
||||
limit_amount = channel_overwrites[
|
||||
"subscriptions_live_channel_size"
|
||||
]
|
||||
|
||||
if limit:
|
||||
obs["playlistend"] = limit_amount
|
||||
|
||||
vid_type = vid_type_enum.value
|
||||
channel = YtWrap(obs, self.config).extract(
|
||||
f"https://www.youtube.com/channel/{channel_id}/{vid_type}"
|
||||
)
|
||||
if not channel:
|
||||
continue
|
||||
last_videos.extend(
|
||||
[(i["id"], i["title"], vid_type) for i in channel["entries"]]
|
||||
)
|
||||
if not limit or limit_amount > 0:
|
||||
channel_query = YtWrap(obs, self.config).extract(
|
||||
f"https://www.youtube.com/channel/{channel_id}/{vid_type}"
|
||||
)
|
||||
if not channel_query:
|
||||
continue
|
||||
last_videos.extend(
|
||||
[
|
||||
(i["id"], i["title"], vid_type)
|
||||
for i in channel_query["entries"]
|
||||
]
|
||||
)
|
||||
|
||||
return last_videos
|
||||
|
||||
|
@ -86,10 +122,6 @@ class ChannelSubscription:
|
|||
return queries
|
||||
|
||||
for query_item, default_limit in limit_map.items():
|
||||
if not default_limit:
|
||||
# is deactivated in config
|
||||
continue
|
||||
|
||||
if limit:
|
||||
query_limit = default_limit
|
||||
else:
|
||||
|
@ -115,7 +147,10 @@ class ChannelSubscription:
|
|||
for idx, channel in enumerate(all_channels):
|
||||
channel_id = channel["channel_id"]
|
||||
print(f"{channel_id}: find missing videos.")
|
||||
last_videos = self.get_last_youtube_videos(channel_id)
|
||||
last_videos = self.get_last_youtube_videos(
|
||||
channel_id,
|
||||
channel_overwrites=channel.get("channel_overwrites"),
|
||||
)
|
||||
|
||||
if last_videos:
|
||||
for video_id, _, vid_type in last_videos:
|
||||
|
|
|
@ -303,3 +303,12 @@ class ChannelOverwriteForm(forms.Form):
|
|||
integrate_sponsorblock = forms.ChoiceField(
|
||||
widget=forms.Select, choices=SP_CHOICES, required=False
|
||||
)
|
||||
subscriptions_channel_size = forms.IntegerField(
|
||||
label=False, required=False
|
||||
)
|
||||
subscriptions_live_channel_size = forms.IntegerField(
|
||||
label=False, required=False
|
||||
)
|
||||
subscriptions_shorts_channel_size = forms.IntegerField(
|
||||
label=False, required=False
|
||||
)
|
||||
|
|
|
@ -345,23 +345,30 @@ class YoutubeChannel(YouTubeItem):
|
|||
"autodelete_days",
|
||||
"index_playlists",
|
||||
"integrate_sponsorblock",
|
||||
"subscriptions_channel_size",
|
||||
"subscriptions_live_channel_size",
|
||||
"subscriptions_shorts_channel_size",
|
||||
]
|
||||
|
||||
to_write = self.json_data.get("channel_overwrites", {})
|
||||
for key, value in overwrites.items():
|
||||
if key not in valid_keys:
|
||||
raise ValueError(f"invalid overwrite key: {key}")
|
||||
if value == "disable":
|
||||
elif value == "disable":
|
||||
to_write[key] = False
|
||||
continue
|
||||
if value in [0, "0"]:
|
||||
elif value == "0":
|
||||
if key in to_write:
|
||||
del to_write[key]
|
||||
continue
|
||||
if value == "1":
|
||||
elif value == "1":
|
||||
to_write[key] = True
|
||||
continue
|
||||
if value:
|
||||
elif isinstance(value, int) and int(value) < 0:
|
||||
if key in to_write:
|
||||
del to_write[key]
|
||||
continue
|
||||
elif value is not None and value != "":
|
||||
to_write.update({key: value})
|
||||
|
||||
self.json_data["channel_overwrites"] = to_write
|
||||
|
|
|
@ -107,16 +107,20 @@
|
|||
{{ channel_info.channel_overwrites.download_format }}
|
||||
{% else %}
|
||||
False
|
||||
{% endif %}</span></p>
|
||||
{% endif %}</span><br>
|
||||
Enter "disable" to disable this override.
|
||||
</p>
|
||||
{{ channel_overwrite_form.download_format }}<br>
|
||||
</div>
|
||||
<div class="overwrite-form-item">
|
||||
<p>Auto delete watched videos after x days: <span class="settings-current">
|
||||
{% if channel_info.channel_overwrites.autodelete_days %}
|
||||
{% if channel_info.channel_overwrites.autodelete_days is not None %}
|
||||
{{ channel_info.channel_overwrites.autodelete_days }}
|
||||
{% else %}
|
||||
False
|
||||
{% endif %}</span></p>
|
||||
{% endif %}</span><br>
|
||||
Enter a negative number to disable this override.
|
||||
</p>
|
||||
{{ channel_overwrite_form.autodelete_days }}<br>
|
||||
</div>
|
||||
<div class="overwrite-form-item">
|
||||
|
@ -139,6 +143,39 @@
|
|||
{% endif %}</span></p>
|
||||
{{ channel_overwrite_form.integrate_sponsorblock }}<br>
|
||||
</div>
|
||||
<h3>Page Size Overrides</h3><br>
|
||||
<p>Disable standard videos, shorts, or streams for this channel by setting their page size to 0 (zero).</p><br>
|
||||
<p>Disable page size overwrite for channel by setting to negative value.</p><br>
|
||||
<div class="overwrite-form-item">
|
||||
<p>YouTube page size: <span class="settings-current">
|
||||
{% if channel_info.channel_overwrites.subscriptions_channel_size is not None %}
|
||||
{{ channel_info.channel_overwrites.subscriptions_channel_size }}
|
||||
{% else %}
|
||||
False
|
||||
{% endif %}</span></p>
|
||||
<i>Videos to scan to find new items for the <b>Rescan subscriptions</b> task, max recommended 50.</i><br>
|
||||
{{ channel_overwrite_form.subscriptions_channel_size }}<br>
|
||||
</div>
|
||||
<div class="overwrite-form-item">
|
||||
<p>YouTube Live page size: <span class="settings-current">
|
||||
{% if channel_info.channel_overwrites.subscriptions_live_channel_size is not None %}
|
||||
{{ channel_info.channel_overwrites.subscriptions_live_channel_size }}
|
||||
{% else %}
|
||||
False
|
||||
{% endif %}</span></p>
|
||||
<i>Live Videos to scan to find new items for the <b>Rescan subscriptions</b> task, max recommended 50.</i><br>
|
||||
{{ channel_overwrite_form.subscriptions_live_channel_size }}<br>
|
||||
</div>
|
||||
<div class="overwrite-form-item">
|
||||
<p>YouTube Shorts page size: <span class="settings-current">
|
||||
{% if channel_info.channel_overwrites.subscriptions_shorts_channel_size is not None %}
|
||||
{{ channel_info.channel_overwrites.subscriptions_shorts_channel_size }}
|
||||
{% else %}
|
||||
False
|
||||
{% endif %}</span></p>
|
||||
<i>Shorts Videos to scan to find new items for the <b>Rescan subscriptions</b> task, max recommended 50.</i><br>
|
||||
{{ channel_overwrite_form.subscriptions_shorts_channel_size }}<br>
|
||||
</div><br>
|
||||
<button type="submit">Save Channel Overwrites</button>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -146,4 +183,4 @@
|
|||
{% endif %}
|
||||
</div>
|
||||
<script type="text/javascript" src="{% static 'progress.js' %}"></script>
|
||||
{% endblock content %}
|
||||
{% endblock content %}
|
||||
|
|
Loading…
Reference in New Issue