mirror of
https://github.com/chibicitiberiu/ytsm.git
synced 2024-02-24 05:43:31 +00:00
Finished CRUD operations for subscriptions and folders.
This commit is contained in:
@ -1,38 +0,0 @@
|
||||
from YtManagerApp.models import SubscriptionFolder, Subscription
|
||||
from typing import Callable, Union, Any, Optional
|
||||
from django.contrib.auth.models import User
|
||||
import logging
|
||||
from django.db.models.functions import Lower
|
||||
|
||||
|
||||
def traverse_tree(root_folder_id: Optional[int], user: User, visit_func: Callable[[Union[SubscriptionFolder, Subscription]], Any]):
|
||||
data_collected = []
|
||||
|
||||
def collect(data):
|
||||
if data is not None:
|
||||
data_collected.append(data)
|
||||
|
||||
# Visit root
|
||||
if root_folder_id is not None:
|
||||
root_folder = SubscriptionFolder.objects.get(id = root_folder_id)
|
||||
collect(visit_func(root_folder))
|
||||
|
||||
queue = [root_folder_id]
|
||||
visited = []
|
||||
|
||||
while len(queue) > 0:
|
||||
folder_id = queue.pop()
|
||||
|
||||
if folder_id in visited:
|
||||
logging.error('Found folder tree cycle for folder id %d.', folder_id)
|
||||
continue
|
||||
visited.append(folder_id)
|
||||
|
||||
for folder in SubscriptionFolder.objects.filter(parent_id=folder_id, user=user).order_by(Lower('name')):
|
||||
collect(visit_func(folder))
|
||||
queue.append(folder.id)
|
||||
|
||||
for subscription in Subscription.objects.filter(parent_folder_id=folder_id, user=user).order_by(Lower('name')):
|
||||
collect(visit_func(subscription))
|
||||
|
||||
return data_collected
|
@ -112,53 +112,3 @@ class SubscriptionManager(object):
|
||||
|
||||
sub.save()
|
||||
|
||||
@staticmethod
|
||||
def list_videos(fid: int):
|
||||
sub = Subscription.objects.get(id=fid)
|
||||
return Video.objects.filter(subscription=sub).order_by('playlist_index')
|
||||
|
||||
@staticmethod
|
||||
def __get_or_create_channel(url_type, url_id, yt_api: YoutubeAPI):
|
||||
|
||||
channel: Channel = None
|
||||
info_channel: YoutubeChannelInfo = None
|
||||
|
||||
if url_type == 'user':
|
||||
channel = Channel.find_by_username(url_id)
|
||||
if not channel:
|
||||
info_channel = yt_api.get_channel_info_by_username(url_id)
|
||||
channel = Channel.find_by_channel_id(info_channel.getId())
|
||||
|
||||
elif url_type == 'channel_id':
|
||||
channel = Channel.find_by_channel_id(url_id)
|
||||
if not channel:
|
||||
info_channel = yt_api.get_channel_info(url_id)
|
||||
|
||||
elif url_type == 'channel_custom':
|
||||
channel = Channel.find_by_custom_url(url_id)
|
||||
if not channel:
|
||||
found_channel_id = yt_api.search_channel(url_id)
|
||||
channel = Channel.find_by_channel_id(found_channel_id)
|
||||
if not channel:
|
||||
info_channel = yt_api.get_channel_info(found_channel_id)
|
||||
|
||||
# Store information about the channel
|
||||
if info_channel:
|
||||
if not channel:
|
||||
channel = Channel()
|
||||
if url_type == 'user':
|
||||
channel.username = url_id
|
||||
SubscriptionManager.__update_channel(channel, info_channel)
|
||||
|
||||
return channel
|
||||
|
||||
@staticmethod
|
||||
def __update_channel(channel: Channel, yt_info: YoutubeChannelInfo):
|
||||
channel.channel_id = yt_info.getId()
|
||||
channel.custom_url = yt_info.getCustomUrl()
|
||||
channel.name = yt_info.getTitle()
|
||||
channel.description = yt_info.getDescription()
|
||||
channel.icon_default = yt_info.getDefaultThumbnailUrl()
|
||||
channel.icon_best = yt_info.getBestThumbnailUrl()
|
||||
channel.upload_playlist_id = yt_info.getUploadsPlaylist()
|
||||
channel.save()
|
||||
|
@ -1,9 +1,8 @@
|
||||
from YtManagerApp.models import Subscription, Video
|
||||
from YtManagerApp.models import Subscription, Video, SubscriptionFolder
|
||||
from YtManagerApp.utils.youtube import YoutubePlaylistItem
|
||||
from typing import Optional
|
||||
import re
|
||||
from django.db.models import Q
|
||||
from YtManagerApp.management.folders import traverse_tree
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
||||
@ -57,7 +56,7 @@ def get_videos(user: User,
|
||||
if isinstance(node, Subscription):
|
||||
return node.id
|
||||
return None
|
||||
filter_kwargs['subscription_id__in'] = traverse_tree(folder_id, user, visit)
|
||||
filter_kwargs['subscription_id__in'] = SubscriptionFolder.traverse(folder_id, user, visit)
|
||||
|
||||
# Only watched
|
||||
if only_watched is not None:
|
||||
|
Reference in New Issue
Block a user