start refactoring to version 2.0

This commit is contained in:
Francesco Grazioso 2024-05-25 19:48:18 +02:00
parent ca4d9ddb31
commit 59535f08ce
9 changed files with 110 additions and 38 deletions

3
.gitignore vendored
View File

@ -42,6 +42,7 @@ local_settings.py
db.sqlite3
db.sqlite3-journal
# Vue stuff:
frontend/dist/
frontend/node_modules/
@ -64,3 +65,5 @@ venv.bak/
# Other
Video
.idea/
.vscode/
.DS_Store

View File

@ -46,6 +46,21 @@ class Episode:
def __str__(self):
return f"Episode(id={self.id}, number={self.number}, name='{self.name}', plot='{self.plot}', duration={self.duration} sec)"
def to_dict(self) -> Dict[str, Any]:
return {
"id": self.id,
"number": self.number,
"name": self.name,
"plot": self.plot,
"duration": self.duration,
"scws_id": self.scws_id,
"season_id": self.season_id,
"created_by": self.created_by,
"created_at": self.created_at,
"updated_at": self.updated_at,
"images": [image.__dict__ for image in self.images]
}
class EpisodeManager:
def __init__(self):

View File

@ -37,10 +37,33 @@ class MediaItem:
self.last_air_date: str = data.get('last_air_date')
self.seasons_count: int = data.get('seasons_count')
self.images: List[Image] = [Image(image_data) for image_data in data.get('images', [])]
self.comment: str = data.get('comment')
self.plot: str = data.get('plot')
def __str__(self):
return f"MediaItem(id={self.id}, slug='{self.slug}', name='{self.name}', type='{self.type}', score='{self.score}', sub_ita={self.sub_ita}, last_air_date='{self.last_air_date}', seasons_count={self.seasons_count}, images={self.images})"
@property
def to_dict(self) -> dict:
"""
Convert the MediaItem to a dictionary.
Returns:
dict: The MediaItem as a dictionary.
"""
return {
"id": self.id,
"slug": self.slug,
"name": self.name,
"type": self.type.upper(),
"score": self.score,
"sub_ita": self.sub_ita,
"last_air_date": self.last_air_date,
"seasons_count": self.seasons_count,
"images": [image.__dict__ for image in self.images],
"comment": self.comment,
"plot": self.plot
}
class MediaManager:
def __init__(self):

View File

@ -28,6 +28,19 @@ class Image:
def __str__(self):
return f"Image(id={self.id}, filename='{self.filename}', type='{self.type}', imageable_type='{self.imageable_type}', url='{self.url}')"
def to_dict(self) -> Dict[str, Any]:
return {
'id': self.id,
'filename': self.filename,
'type': self.type,
'imageable_type': self.imageable_type,
'imageable_id': self.imageable_id,
'created_at': self.created_at,
'updated_at': self.updated_at,
'original_url_field': self.original_url_field,
'url': self.url
}
class Episode:
def __init__(self, data: Dict[str, Any]):
@ -46,6 +59,21 @@ class Episode:
def __str__(self):
return f"Episode(id={self.id}, number={self.number}, name='{self.name}', plot='{self.plot}', duration={self.duration} sec)"
def to_dict(self) -> Dict[str, Any]:
return {
'id': self.id,
'number': self.number,
'name': self.name,
'plot': self.plot,
'duration': self.duration,
'scws_id': self.scws_id,
'season_id': self.season_id,
'created_by': self.created_by,
'created_at': self.created_at,
'updated_at': self.updated_at,
'images': [image.to_dict() for image in self.images]
}
class EpisodeManager:
def __init__(self):

View File

@ -37,6 +37,8 @@ class MediaItem:
self.last_air_date: str = data.get('last_air_date')
self.seasons_count: int = data.get('seasons_count')
self.images: List[Image] = [Image(image_data) for image_data in data.get('images', [])]
self.comment: str = data.get('comment')
self.plot: str = data.get('plot')
def __str__(self):
return f"MediaItem(id={self.id}, slug='{self.slug}', name='{self.name}', type='{self.type}', score='{self.score}', sub_ita={self.sub_ita}, last_air_date='{self.last_air_date}', seasons_count={self.seasons_count}, images={self.images})"
@ -59,7 +61,8 @@ class MediaItem:
"last_air_date": self.last_air_date,
"seasons_count": self.seasons_count,
"images": [image.__dict__ for image in self.images],
"comment": self.comment
"comment": self.comment,
"plot": self.plot
}
@property

View File

@ -1,10 +1,10 @@
from rest_framework import routers
from .views import SearchView, DownloadView
from .views import SearchView#, DownloadView
router = routers.DefaultRouter()
router.register(r"search", SearchView, basename="search")
router.register(r"download", DownloadView, basename="download")
#router.register(r"download", DownloadView, basename="download")
urlpatterns = router.urls

View File

@ -7,15 +7,13 @@ from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from Src.Api import search, get_version_and_domain, download_film, anime_download_film
from Src.Api.anime import EpisodeDownloader
from Src.Api.Class.Video import VideoSource
from Src.Api.film import ROOT_PATH
from Src.Api.series import SERIES_FOLDER, STREAM_SITE_NAME
from Src.Api.site import media_search_manager, anime_search
from Src.Lib.FFmpeg.my_m3u8 import Downloader
from Src.Util.mapper import map_episode_title
from Src.Util.os import remove_special_characters
from Src.Api.Animeunity import title_search as anime_search
from Src.Api.Animeunity.Core.Vix_player.player import VideoSource as anime_source
from Src.Api.Animeunity.site import media_search_manager as anime_media_manager
from Src.Api.Streamingcommunity import title_search as sc_search, get_version_and_domain
from Src.Api.Streamingcommunity.Core.Vix_player.player import VideoSource as film_video_source
from Src.Api.Streamingcommunity.site import media_search_manager as film_media_manager
class SearchView(viewsets.ViewSet):
@ -24,15 +22,16 @@ class SearchView(viewsets.ViewSet):
self.search_query = request.query_params.get("search_terms")
self.type_search = request.query_params.get("type")
media_search_manager.media_list = []
media_manager = anime_media_manager if self.type_search == "anime" else film_media_manager
media_manager.media_list = []
self.len_database = 0
if self.type_search == "film":
_, self.domain = get_version_and_domain()
self.len_database = search(self.search_query, self.domain)
self.len_database = sc_search(self.search_query, self.domain)
elif self.type_search == "anime":
self.len_database = anime_search(self.search_query)
media_list = media_search_manager.media_list
media_list = media_manager.media_list
if self.len_database != 0:
data_to_return = []
@ -51,7 +50,7 @@ class SearchView(viewsets.ViewSet):
@action(detail=False, methods=["get"])
def get_episodes_info(self, request):
self.media_id = request.query_params.get("media_id")
self.media_slug = request.data.get("media_slug")
self.media_slug = request.query_params.get("media_slug")
self.type_media = request.query_params.get("type_media")
try:
@ -59,15 +58,15 @@ class SearchView(viewsets.ViewSet):
case "TV":
def stream_episodes():
self.site_version, self.domain = get_version_and_domain()
video_source = VideoSource()
video_source.set_url_base_name(STREAM_SITE_NAME)
video_source.set_version(self.site_version)
video_source.set_domain(self.domain)
video_source.set_series_name(self.media_slug)
video_source.set_media_id(self.media_id)
self.version, self.domain = get_version_and_domain()
video_source = film_video_source()
video_source.setup(
version=self.version,
domain=self.domain,
media_id=self.media_id,
series_name=self.media_slug
)
video_source.collect_info_seasons()
seasons_count = video_source.obj_title_manager.get_length()
@ -83,7 +82,7 @@ class SearchView(viewsets.ViewSet):
episode = video_source.obj_episode_manager.episodes[
i_episode - 1
]
episodes[i_season][i_episode] = episode.__dict__
episodes[i_season][i_episode] = episode.to_dict()
yield f'{json.dumps({"episodes": episodes})}\n\n'
@ -93,17 +92,16 @@ class SearchView(viewsets.ViewSet):
return response
case "TV_ANIME":
def stream_episodes():
episodes_downloader = EpisodeDownloader(
self.media_id, self.media_slug
video_source = anime_source()
video_source.setup(
media_id = self.media_id,
series_name = self.media_slug
)
episoded_count = episodes_downloader.get_count_episodes()
episoded_count = video_source.get_count_episodes()
for i in range(1, episoded_count + 1):
episode_info = episodes_downloader.get_info_episode(
index_ep=i
)
for i in range(0, episoded_count):
episode_info = video_source.get_info_episode(i).to_dict()
episode_info["episode_id"] = i
episode_info["episode_total"] = episoded_count
print(f"Getting episode {i} of {episoded_count} info...")
@ -125,6 +123,7 @@ class SearchView(viewsets.ViewSet):
return Response({"error": "No media found with that search query"})
'''
class DownloadView(viewsets.ViewSet):
def create(self, request):
@ -211,3 +210,4 @@ class DownloadView(viewsets.ViewSet):
}
return Response(response_dict)
'''

View File

@ -19,12 +19,12 @@ const toggleOption = () => {
<template>
<div class="switch-container">
<span class="switch-label-left">Film/Serie TV</span>
<span :style="{'color':isAnimeSelected ? '':'green', 'font-weight': isAnimeSelected ? '':'bold'}" class="switch-label-left">Film/Serie TV</span>
<label class="switch">
<input type="checkbox" :checked="isAnimeSelected" @change="toggleOption">
<span class="slider round"></span>
</label>
<span class="switch-label-right">Anime</span>
<span :style="{'color':isAnimeSelected ? 'green':'', 'font-weight': isAnimeSelected ? 'bold':''}" class="switch-label-right">Anime</span>
</div>
</template>

View File

@ -24,6 +24,7 @@ const selectingEpisodes = ref(false)
const selectedEpisodes = ref<Episode[]>([])
onMounted(async () => {
console.log(item)
if (['MOVIE', 'OVA', 'SPECIAL'].includes(item.type)) {
return
} else {
@ -127,8 +128,7 @@ const downloadAllItems = async () => {
<h1 class="details-title">{{ item.name }}</h1>
<h3> {{ item.score }}</h3>
<div class="details-description">
<p v-if="['TV_ANIME', 'OVA', 'SPECIAL'].includes(item.type)">{{ item.plot }}</p>
<p v-else-if="tvShowEpisodes.length > 0">{{ tvShowEpisodes[0][0].plot }}</p>
<p>{{ item.plot }}</p>
</div>
<h3 v-if="animeEpisodes.length > 0 && !loading">Numero episodi: {{ totalEpisodes }}</h3>
<h3 v-if="tvShowEpisodes.length > 0 && !loading">Numero stagioni: {{ tvShowEpisodes.length }}</h3>
@ -167,7 +167,7 @@ const downloadAllItems = async () => {
@click="selectingEpisodes ? toggleEpisodeSelect(episode) : null">
<div class="episode-title">Episodio {{ episode.number }}</div>
</div>
<div v-else-if="item.type == 'TV'" v-for="(season, index) in tvShowEpisodes" class="season-item">
<div v-else-if="item.type == 'TV'" v-for="(season, index) in tvShowEpisodes" v-bind:key="season.number" class="season-item">
<div class="season-title">Stagione {{ index + 1 }}</div>
<div class="episode-container">
<div v-for="episode in season" :key="episode.id">