mirror of
https://github.com/Arrowar/StreamingCommunity.git
synced 2025-06-07 20:15:24 +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
|
||||||
db.sqlite3-journal
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
|
||||||
# Vue stuff:
|
# Vue stuff:
|
||||||
frontend/dist/
|
frontend/dist/
|
||||||
frontend/node_modules/
|
frontend/node_modules/
|
||||||
@ -64,3 +65,5 @@ venv.bak/
|
|||||||
# Other
|
# Other
|
||||||
Video
|
Video
|
||||||
.idea/
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
.DS_Store
|
||||||
|
@ -46,6 +46,21 @@ class Episode:
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Episode(id={self.id}, number={self.number}, name='{self.name}', plot='{self.plot}', duration={self.duration} sec)"
|
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:
|
class EpisodeManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -37,10 +37,33 @@ class MediaItem:
|
|||||||
self.last_air_date: str = data.get('last_air_date')
|
self.last_air_date: str = data.get('last_air_date')
|
||||||
self.seasons_count: int = data.get('seasons_count')
|
self.seasons_count: int = data.get('seasons_count')
|
||||||
self.images: List[Image] = [Image(image_data) for image_data in data.get('images', [])]
|
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):
|
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})"
|
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:
|
class MediaManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -28,6 +28,19 @@ class Image:
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Image(id={self.id}, filename='{self.filename}', type='{self.type}', imageable_type='{self.imageable_type}', url='{self.url}')"
|
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:
|
class Episode:
|
||||||
def __init__(self, data: Dict[str, Any]):
|
def __init__(self, data: Dict[str, Any]):
|
||||||
@ -46,6 +59,21 @@ class Episode:
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Episode(id={self.id}, number={self.number}, name='{self.name}', plot='{self.plot}', duration={self.duration} sec)"
|
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:
|
class EpisodeManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -37,6 +37,8 @@ class MediaItem:
|
|||||||
self.last_air_date: str = data.get('last_air_date')
|
self.last_air_date: str = data.get('last_air_date')
|
||||||
self.seasons_count: int = data.get('seasons_count')
|
self.seasons_count: int = data.get('seasons_count')
|
||||||
self.images: List[Image] = [Image(image_data) for image_data in data.get('images', [])]
|
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):
|
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})"
|
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,
|
"last_air_date": self.last_air_date,
|
||||||
"seasons_count": self.seasons_count,
|
"seasons_count": self.seasons_count,
|
||||||
"images": [image.__dict__ for image in self.images],
|
"images": [image.__dict__ for image in self.images],
|
||||||
"comment": self.comment
|
"comment": self.comment,
|
||||||
|
"plot": self.plot
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
|
|
||||||
from .views import SearchView, DownloadView
|
from .views import SearchView#, DownloadView
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
|
|
||||||
router.register(r"search", SearchView, basename="search")
|
router.register(r"search", SearchView, basename="search")
|
||||||
router.register(r"download", DownloadView, basename="download")
|
#router.register(r"download", DownloadView, basename="download")
|
||||||
|
|
||||||
urlpatterns = router.urls
|
urlpatterns = router.urls
|
||||||
|
@ -7,15 +7,13 @@ from rest_framework import viewsets
|
|||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from Src.Api import search, get_version_and_domain, download_film, anime_download_film
|
from Src.Api.Animeunity import title_search as anime_search
|
||||||
from Src.Api.anime import EpisodeDownloader
|
from Src.Api.Animeunity.Core.Vix_player.player import VideoSource as anime_source
|
||||||
from Src.Api.Class.Video import VideoSource
|
from Src.Api.Animeunity.site import media_search_manager as anime_media_manager
|
||||||
from Src.Api.film import ROOT_PATH
|
|
||||||
from Src.Api.series import SERIES_FOLDER, STREAM_SITE_NAME
|
from Src.Api.Streamingcommunity import title_search as sc_search, get_version_and_domain
|
||||||
from Src.Api.site import media_search_manager, anime_search
|
from Src.Api.Streamingcommunity.Core.Vix_player.player import VideoSource as film_video_source
|
||||||
from Src.Lib.FFmpeg.my_m3u8 import Downloader
|
from Src.Api.Streamingcommunity.site import media_search_manager as film_media_manager
|
||||||
from Src.Util.mapper import map_episode_title
|
|
||||||
from Src.Util.os import remove_special_characters
|
|
||||||
|
|
||||||
|
|
||||||
class SearchView(viewsets.ViewSet):
|
class SearchView(viewsets.ViewSet):
|
||||||
@ -24,15 +22,16 @@ class SearchView(viewsets.ViewSet):
|
|||||||
self.search_query = request.query_params.get("search_terms")
|
self.search_query = request.query_params.get("search_terms")
|
||||||
self.type_search = request.query_params.get("type")
|
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
|
self.len_database = 0
|
||||||
if self.type_search == "film":
|
if self.type_search == "film":
|
||||||
_, self.domain = get_version_and_domain()
|
_, 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":
|
elif self.type_search == "anime":
|
||||||
self.len_database = anime_search(self.search_query)
|
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:
|
if self.len_database != 0:
|
||||||
data_to_return = []
|
data_to_return = []
|
||||||
@ -51,7 +50,7 @@ class SearchView(viewsets.ViewSet):
|
|||||||
@action(detail=False, methods=["get"])
|
@action(detail=False, methods=["get"])
|
||||||
def get_episodes_info(self, request):
|
def get_episodes_info(self, request):
|
||||||
self.media_id = request.query_params.get("media_id")
|
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")
|
self.type_media = request.query_params.get("type_media")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -59,15 +58,15 @@ class SearchView(viewsets.ViewSet):
|
|||||||
case "TV":
|
case "TV":
|
||||||
|
|
||||||
def stream_episodes():
|
def stream_episodes():
|
||||||
self.site_version, self.domain = get_version_and_domain()
|
self.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)
|
|
||||||
|
|
||||||
|
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()
|
video_source.collect_info_seasons()
|
||||||
seasons_count = video_source.obj_title_manager.get_length()
|
seasons_count = video_source.obj_title_manager.get_length()
|
||||||
|
|
||||||
@ -83,7 +82,7 @@ class SearchView(viewsets.ViewSet):
|
|||||||
episode = video_source.obj_episode_manager.episodes[
|
episode = video_source.obj_episode_manager.episodes[
|
||||||
i_episode - 1
|
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'
|
yield f'{json.dumps({"episodes": episodes})}\n\n'
|
||||||
|
|
||||||
@ -93,17 +92,16 @@ class SearchView(viewsets.ViewSet):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
case "TV_ANIME":
|
case "TV_ANIME":
|
||||||
|
|
||||||
def stream_episodes():
|
def stream_episodes():
|
||||||
episodes_downloader = EpisodeDownloader(
|
video_source = anime_source()
|
||||||
self.media_id, self.media_slug
|
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):
|
for i in range(0, episoded_count):
|
||||||
episode_info = episodes_downloader.get_info_episode(
|
episode_info = video_source.get_info_episode(i).to_dict()
|
||||||
index_ep=i
|
|
||||||
)
|
|
||||||
episode_info["episode_id"] = i
|
episode_info["episode_id"] = i
|
||||||
episode_info["episode_total"] = episoded_count
|
episode_info["episode_total"] = episoded_count
|
||||||
print(f"Getting episode {i} of {episoded_count} info...")
|
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"})
|
return Response({"error": "No media found with that search query"})
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
class DownloadView(viewsets.ViewSet):
|
class DownloadView(viewsets.ViewSet):
|
||||||
|
|
||||||
def create(self, request):
|
def create(self, request):
|
||||||
@ -211,3 +210,4 @@ class DownloadView(viewsets.ViewSet):
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Response(response_dict)
|
return Response(response_dict)
|
||||||
|
'''
|
||||||
|
@ -19,12 +19,12 @@ const toggleOption = () => {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="switch-container">
|
<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">
|
<label class="switch">
|
||||||
<input type="checkbox" :checked="isAnimeSelected" @change="toggleOption">
|
<input type="checkbox" :checked="isAnimeSelected" @change="toggleOption">
|
||||||
<span class="slider round"></span>
|
<span class="slider round"></span>
|
||||||
</label>
|
</label>
|
||||||
<span class="switch-label-right">Anime</span>
|
<span :style="{'color':isAnimeSelected ? 'green':'', 'font-weight': isAnimeSelected ? 'bold':''}" class="switch-label-right">Anime</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ const selectingEpisodes = ref(false)
|
|||||||
const selectedEpisodes = ref<Episode[]>([])
|
const selectedEpisodes = ref<Episode[]>([])
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
console.log(item)
|
||||||
if (['MOVIE', 'OVA', 'SPECIAL'].includes(item.type)) {
|
if (['MOVIE', 'OVA', 'SPECIAL'].includes(item.type)) {
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
@ -127,8 +128,7 @@ const downloadAllItems = async () => {
|
|||||||
<h1 class="details-title">{{ item.name }}</h1>
|
<h1 class="details-title">{{ item.name }}</h1>
|
||||||
<h3>★ {{ item.score }}</h3>
|
<h3>★ {{ item.score }}</h3>
|
||||||
<div class="details-description">
|
<div class="details-description">
|
||||||
<p v-if="['TV_ANIME', 'OVA', 'SPECIAL'].includes(item.type)">{{ item.plot }}</p>
|
<p>{{ item.plot }}</p>
|
||||||
<p v-else-if="tvShowEpisodes.length > 0">{{ tvShowEpisodes[0][0].plot }}</p>
|
|
||||||
</div>
|
</div>
|
||||||
<h3 v-if="animeEpisodes.length > 0 && !loading">Numero episodi: {{ totalEpisodes }}</h3>
|
<h3 v-if="animeEpisodes.length > 0 && !loading">Numero episodi: {{ totalEpisodes }}</h3>
|
||||||
<h3 v-if="tvShowEpisodes.length > 0 && !loading">Numero stagioni: {{ tvShowEpisodes.length }}</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">
|
@click="selectingEpisodes ? toggleEpisodeSelect(episode) : null">
|
||||||
<div class="episode-title">Episodio {{ episode.number }}</div>
|
<div class="episode-title">Episodio {{ episode.number }}</div>
|
||||||
</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="season-title">Stagione {{ index + 1 }}</div>
|
||||||
<div class="episode-container">
|
<div class="episode-container">
|
||||||
<div v-for="episode in season" :key="episode.id">
|
<div v-for="episode in season" :key="episode.id">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user