mirror of
https://github.com/Arrowar/StreamingCommunity.git
synced 2025-06-07 12:05:35 +00:00
start refactoring to version 2.0
This commit is contained in:
parent
ca4d9ddb31
commit
59535f08ce
3
.gitignore
vendored
3
.gitignore
vendored
@ -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
|
||||
|
@ -45,6 +45,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:
|
||||
|
@ -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):
|
||||
|
@ -27,6 +27,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:
|
||||
@ -45,6 +58,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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
'''
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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">
|
||||
|
Loading…
x
Reference in New Issue
Block a user