mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 19:01:39 -04:00
Removing default download freqeuncy so channels will not be downloaded without a url and frequency. Adding channel unique url constraint. Handling when a Channel's directory may still be relative in DB. Adding TODOs to remove old favorites. Removing outdated favorites from config after favorites have been created. Testing that old-style favorited videos in the config are imported. Removing channels_by_link. Using list to store channels in config. Moving channel import function into lib. Supporting old channel import with links. Bumping version for channel.link removal. Removing all reference to Channel.link in app and api. Adding relative property to MediaPathType. Testing that a channel can be downloaded after it has a frequency added. All tests pass. Video and Channel tests pass without channel.link. Removing channel.link usage in channel api. Changing video Statistics page to About.
216 lines
3.9 KiB
Python
216 lines
3.9 KiB
Python
from dataclasses import dataclass, field
|
|
from datetime import date, datetime
|
|
from typing import List, Optional
|
|
|
|
from modules.videos.video.lib import DEFAULT_VIDEO_ORDER, VIDEO_QUERY_LIMIT
|
|
|
|
|
|
@dataclass
|
|
class ChannelPostRequest:
|
|
name: str
|
|
directory: str
|
|
calculate_duration: Optional[bool] = None
|
|
download_frequency: Optional[int] = None
|
|
generate_posters: Optional[bool] = None
|
|
match_regex: Optional[str] = None
|
|
mkdir: Optional[bool] = None
|
|
url: Optional[str] = None
|
|
source_id: Optional[str] = None
|
|
|
|
def __post_init__(self):
|
|
self.name = self.name.strip() or None
|
|
self.directory = self.directory.strip() or None
|
|
self.url = self.url.strip() if self.url else None
|
|
self.source_id = self.source_id.strip() if self.source_id else None
|
|
|
|
|
|
@dataclass
|
|
class ChannelPutRequest:
|
|
calculate_duration: Optional[bool] = None
|
|
directory: Optional[str] = None
|
|
download_frequency: Optional[int] = None
|
|
generate_posters: Optional[bool] = None
|
|
match_regex: Optional[str] = None
|
|
mkdir: Optional[bool] = None
|
|
name: Optional[str] = None
|
|
url: Optional[str] = None
|
|
|
|
def __post_init__(self):
|
|
self.name = self.name.strip() or None
|
|
self.directory = self.directory.strip() or None
|
|
self.url = self.url.strip() if self.url else None
|
|
self.match_regex = None if self.match_regex in ('None', '') else self.match_regex
|
|
|
|
|
|
@dataclass
|
|
class RefreshRequest:
|
|
channel_name: str
|
|
|
|
|
|
@dataclass
|
|
class ChannelModel:
|
|
id: int
|
|
url: str
|
|
name: str
|
|
match_regex: str
|
|
directory: str
|
|
|
|
|
|
@dataclass
|
|
class ChannelResponse:
|
|
channel = ChannelModel
|
|
|
|
|
|
@dataclass
|
|
class ChannelPostResponse:
|
|
success: str
|
|
|
|
|
|
@dataclass
|
|
class ChannelsChannelModel:
|
|
id: int
|
|
name: str
|
|
|
|
|
|
@dataclass
|
|
class ChannelsResponse:
|
|
channels: List[ChannelsChannelModel]
|
|
|
|
|
|
@dataclass
|
|
class StreamResponse:
|
|
success: str
|
|
stream_url: str
|
|
|
|
|
|
@dataclass
|
|
class Video:
|
|
id: int
|
|
description_path: str
|
|
ext: str
|
|
poster_path: str
|
|
source_id: str
|
|
title: str
|
|
upload_date: date
|
|
video_path: str
|
|
name: str
|
|
caption_path: str
|
|
idempotency: str
|
|
info_json_path: str
|
|
channel_id: int
|
|
|
|
|
|
@dataclass
|
|
class VideoWithChannel:
|
|
id: int
|
|
description_path: str
|
|
ext: str
|
|
poster_path: str
|
|
source_id: str
|
|
title: str
|
|
upload_date: date
|
|
video_path: str
|
|
name: str
|
|
caption_path: str
|
|
idempotency: str
|
|
info_json_path: str
|
|
channel_id: int
|
|
|
|
channel = ChannelModel
|
|
|
|
|
|
@dataclass
|
|
class ChannelVideosResponse:
|
|
videos: List[Video]
|
|
|
|
|
|
@dataclass
|
|
class ExtendedVideo(Video):
|
|
info_json: dict
|
|
|
|
|
|
@dataclass
|
|
class VideoResponse:
|
|
video = ExtendedVideo
|
|
|
|
|
|
@dataclass
|
|
class VideoSearchRequest:
|
|
search_str: Optional[str] = None
|
|
filters: List[str] = field(default_factory=list)
|
|
offset: Optional[int] = None
|
|
limit: Optional[int] = VIDEO_QUERY_LIMIT
|
|
order_by: Optional[str] = DEFAULT_VIDEO_ORDER
|
|
channel_id: Optional[int] = None
|
|
|
|
|
|
@dataclass
|
|
class VideoSearchResponse:
|
|
videos: List[VideoWithChannel]
|
|
tsquery: str
|
|
|
|
|
|
@dataclass
|
|
class PaginationQuery:
|
|
offset: int
|
|
|
|
|
|
@dataclass
|
|
class DirectoriesRequest:
|
|
search_str: Optional[str] = ''
|
|
|
|
|
|
@dataclass
|
|
class DirectoriesResponse:
|
|
directories: List[str]
|
|
|
|
|
|
@dataclass
|
|
class FavoriteRequest:
|
|
video_id: int
|
|
favorite: bool
|
|
|
|
|
|
@dataclass
|
|
class FavoriteResponse:
|
|
video_id: int
|
|
favorite: datetime
|
|
|
|
|
|
@dataclass
|
|
class WROLModeRequest:
|
|
enabled: bool
|
|
|
|
|
|
@dataclass
|
|
class VideoStatistics:
|
|
videos: int
|
|
favorites: int
|
|
week: int
|
|
month: int
|
|
year: int
|
|
sum_duration: int
|
|
sum_size: int
|
|
max_size: int
|
|
|
|
|
|
@dataclass
|
|
class ChannelStatistics:
|
|
channels: int
|
|
|
|
|
|
@dataclass
|
|
class VideosStatisticsResponse:
|
|
videos = VideoStatistics
|
|
channels = ChannelStatistics
|
|
|
|
|
|
@dataclass
|
|
class CensoredVideoRequest:
|
|
limit: int
|
|
offset: int
|
|
|
|
|
|
@dataclass
|
|
class CensoredVideoResponse:
|
|
videos: List[VideoWithChannel]
|