mirror of
https://github.com/tcsenpai/swingmusic.git
synced 2025-07-29 06:02:06 +00:00
calculate playlist duration
- use python's `sum()` method to add durations instead of for loop
This commit is contained in:
parent
5bc0eaf8e6
commit
b318c0d324
@ -60,12 +60,16 @@ def get_album():
|
|||||||
|
|
||||||
album.count = len(tracks)
|
album.count = len(tracks)
|
||||||
try:
|
try:
|
||||||
album.duration = albumslib.get_album_duration(tracks)
|
album.duration = sum([t.length for t in tracks])
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
album.duration = 0
|
album.duration = 0
|
||||||
|
|
||||||
if (album.count == 1 and tracks[0].title == album.title
|
if (
|
||||||
and tracks[0].tracknumber == 1 and tracks[0].disknumber == 1):
|
album.count == 1
|
||||||
|
and tracks[0].title == album.title
|
||||||
|
and tracks[0].tracknumber == 1
|
||||||
|
and tracks[0].disknumber == 1
|
||||||
|
):
|
||||||
album.is_single = True
|
album.is_single = True
|
||||||
|
|
||||||
return {"tracks": tracks, "info": album}
|
return {"tracks": tracks, "info": album}
|
||||||
|
@ -84,7 +84,12 @@ def get_playlist(playlistid: str):
|
|||||||
playlist = models.Playlist(p)
|
playlist = models.Playlist(p)
|
||||||
|
|
||||||
tracks = playlistlib.create_playlist_tracks(playlist.pretracks)
|
tracks = playlistlib.create_playlist_tracks(playlist.pretracks)
|
||||||
return {"info": serializer.Playlist(playlist), "tracks": tracks}
|
|
||||||
|
duration = sum([t.length for t in tracks])
|
||||||
|
playlist = serializer.Playlist(playlist)
|
||||||
|
playlist.duration = duration
|
||||||
|
|
||||||
|
return {"info": playlist, "tracks": tracks}
|
||||||
|
|
||||||
|
|
||||||
@playlist_bp.route("/playlist/<playlistid>/update", methods=["PUT"])
|
@playlist_bp.route("/playlist/<playlistid>/update", methods=["PUT"])
|
||||||
|
@ -85,19 +85,6 @@ class ValidateAlbumThumbs:
|
|||||||
self.find_lost_thumbnails()
|
self.find_lost_thumbnails()
|
||||||
|
|
||||||
|
|
||||||
def get_album_duration(album: List[models.Track]) -> int:
|
|
||||||
"""
|
|
||||||
Gets the duration of an album.
|
|
||||||
"""
|
|
||||||
|
|
||||||
album_duration = 0
|
|
||||||
|
|
||||||
for track in album:
|
|
||||||
album_duration += track.length
|
|
||||||
|
|
||||||
return album_duration
|
|
||||||
|
|
||||||
|
|
||||||
def use_defaults() -> str:
|
def use_defaults() -> str:
|
||||||
"""
|
"""
|
||||||
Returns a path to a random image in the defaults directory.
|
Returns a path to a random image in the defaults directory.
|
||||||
|
@ -59,10 +59,9 @@ class Playlist:
|
|||||||
lastUpdated: int
|
lastUpdated: int
|
||||||
description: str
|
description: str
|
||||||
count: int = 0
|
count: int = 0
|
||||||
|
duration: int = 0
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self, p: models.Playlist, construct_last_updated: bool = True) -> None:
|
||||||
p: models.Playlist,
|
|
||||||
construct_last_updated: bool = True) -> None:
|
|
||||||
self.playlistid = p.playlistid
|
self.playlistid = p.playlistid
|
||||||
self.name = p.name
|
self.name = p.name
|
||||||
self.image = p.image
|
self.image = p.image
|
||||||
@ -72,7 +71,8 @@ class Playlist:
|
|||||||
self.count = p.count
|
self.count = p.count
|
||||||
|
|
||||||
if construct_last_updated:
|
if construct_last_updated:
|
||||||
self.lastUpdated = self.l_updated(p.lastUpdated)
|
self.lastUpdated = self.get_l_updated(p.lastUpdated)
|
||||||
|
|
||||||
def l_updated(self, date: str) -> str:
|
@staticmethod
|
||||||
|
def get_l_updated(date: str) -> str:
|
||||||
return date_string_to_time_passed(date)
|
return date_string_to_time_passed(date)
|
||||||
|
@ -27,7 +27,8 @@
|
|||||||
<span v-else-if="props.info.count == 1"
|
<span v-else-if="props.info.count == 1"
|
||||||
>{{ props.info.count }} Track</span
|
>{{ props.info.count }} Track</span
|
||||||
>
|
>
|
||||||
<span v-else>{{ props.info.count }} Tracks</span> • 3 Hours
|
<span v-else>{{ props.info.count }} Tracks</span> •
|
||||||
|
{{ formatSeconds(props.info.duration, true) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="desc">
|
<div class="desc">
|
||||||
{{ props.info.description }}
|
{{ props.info.description }}
|
||||||
@ -58,6 +59,7 @@ import useContextStore from "../../stores/context";
|
|||||||
import useModalStore from "../../stores/modal";
|
import useModalStore from "../../stores/modal";
|
||||||
import Option from "../shared/Option.vue";
|
import Option from "../shared/Option.vue";
|
||||||
import PlayBtnRect from "../shared/PlayBtnRect.vue";
|
import PlayBtnRect from "../shared/PlayBtnRect.vue";
|
||||||
|
import { formatSeconds } from "@/composables/perks";
|
||||||
|
|
||||||
const imguri = paths.images.playlist;
|
const imguri = paths.images.playlist;
|
||||||
const context = useContextStore();
|
const context = useContextStore();
|
||||||
|
@ -37,9 +37,12 @@ function getElem(id: string, type: string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts seconds into minutes and hours.
|
||||||
|
* @param seconds The seconds to convert
|
||||||
|
* @param long Whether to provide the time in the long format
|
||||||
|
*/
|
||||||
function formatSeconds(seconds: number, long?: boolean) {
|
function formatSeconds(seconds: number, long?: boolean) {
|
||||||
// check if there are arguments
|
|
||||||
|
|
||||||
const date = new Date(seconds * 1000);
|
const date = new Date(seconds * 1000);
|
||||||
|
|
||||||
const hh = date.getUTCHours();
|
const hh = date.getUTCHours();
|
||||||
|
@ -64,6 +64,7 @@ export interface Playlist {
|
|||||||
count?: number;
|
count?: number;
|
||||||
lastUpdated?: string;
|
lastUpdated?: string;
|
||||||
thumb?: string;
|
thumb?: string;
|
||||||
|
duration?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Notif {
|
export interface Notif {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user