mirror of
				https://github.com/devine-dl/devine.git
				synced 2025-11-04 03:44:49 +00:00 
			
		
		
		
	Add rich tree generator to sorted title wrappers
This commit is contained in:
		
							parent
							
								
									92774dcfe6
								
							
						
					
					
						commit
						f7c4d72108
					
				@ -1,9 +1,11 @@
 | 
			
		||||
import re
 | 
			
		||||
from abc import ABC
 | 
			
		||||
from collections import Counter
 | 
			
		||||
from typing import Any, Iterable, Optional, Union
 | 
			
		||||
 | 
			
		||||
from langcodes import Language
 | 
			
		||||
from pymediainfo import MediaInfo
 | 
			
		||||
from rich.tree import Tree
 | 
			
		||||
from sortedcontainers import SortedKeyList
 | 
			
		||||
 | 
			
		||||
from devine.core.config import config
 | 
			
		||||
@ -178,5 +180,29 @@ class Series(SortedKeyList, ABC):
 | 
			
		||||
            return super().__str__()
 | 
			
		||||
        return self[0].title + (f" ({self[0].year})" if self[0].year else "")
 | 
			
		||||
 | 
			
		||||
    def tree(self, verbose: bool = False) -> Tree:
 | 
			
		||||
        seasons = Counter(x.season for x in self)
 | 
			
		||||
        num_seasons = len(seasons)
 | 
			
		||||
        num_episodes = sum(seasons.values())
 | 
			
		||||
        tree = Tree(
 | 
			
		||||
            f"{num_seasons} Season{['s', ''][num_seasons == 1]}, {num_episodes} Episode{['s', ''][num_episodes == 1]}",
 | 
			
		||||
            guide_style="bright_black"
 | 
			
		||||
        )
 | 
			
		||||
        if verbose:
 | 
			
		||||
            for season, episodes in seasons.items():
 | 
			
		||||
                season_tree = tree.add(
 | 
			
		||||
                    f"[bold]Season {str(season).zfill(len(str(num_seasons)))}[/]: [bright_black]{episodes} episodes",
 | 
			
		||||
                    guide_style="bright_black"
 | 
			
		||||
                )
 | 
			
		||||
                for episode in self:
 | 
			
		||||
                    if episode.season == season:
 | 
			
		||||
                        season_tree.add(
 | 
			
		||||
                            f"[bold]{str(episode.number).zfill(len(str(episodes)))}" + (
 | 
			
		||||
                                f".[/] [bright_black]{episode.name}"
 | 
			
		||||
                            ) if episode.name else ""
 | 
			
		||||
                        )
 | 
			
		||||
 | 
			
		||||
        return tree
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__ALL__ = (Episode, Series)
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ from typing import Any, Iterable, Optional, Union
 | 
			
		||||
 | 
			
		||||
from langcodes import Language
 | 
			
		||||
from pymediainfo import MediaInfo
 | 
			
		||||
from rich.tree import Tree
 | 
			
		||||
from sortedcontainers import SortedKeyList
 | 
			
		||||
 | 
			
		||||
from devine.core.config import config
 | 
			
		||||
@ -136,5 +137,19 @@ class Movies(SortedKeyList, ABC):
 | 
			
		||||
        # TODO: Assumes there's only one movie
 | 
			
		||||
        return self[0].name + (f" ({self[0].year})" if self[0].year else "")
 | 
			
		||||
 | 
			
		||||
    def tree(self, *_) -> Tree:
 | 
			
		||||
        num_movies = len(self)
 | 
			
		||||
        tree = Tree(
 | 
			
		||||
            f"{num_movies} Movie{['s', ''][num_movies == 1]}",
 | 
			
		||||
            guide_style="bright_black"
 | 
			
		||||
        )
 | 
			
		||||
        for movie in self:
 | 
			
		||||
            tree.add(
 | 
			
		||||
                f"[bold]{movie.name}[/] [bright_black]({movie.year or '?'})",
 | 
			
		||||
                guide_style="bright_black"
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        return tree
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__ALL__ = (Movie, Movies)
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ from typing import Any, Iterable, Optional, Union
 | 
			
		||||
 | 
			
		||||
from langcodes import Language
 | 
			
		||||
from pymediainfo import MediaInfo
 | 
			
		||||
from rich.tree import Tree
 | 
			
		||||
from sortedcontainers import SortedKeyList
 | 
			
		||||
 | 
			
		||||
from devine.core.config import config
 | 
			
		||||
@ -131,5 +132,19 @@ class Album(SortedKeyList, ABC):
 | 
			
		||||
            return super().__str__()
 | 
			
		||||
        return f"{self[0].artist} - {self[0].album} ({self[0].year or '?'})"
 | 
			
		||||
 | 
			
		||||
    def tree(self, *_) -> Tree:
 | 
			
		||||
        num_songs = len(self)
 | 
			
		||||
        tree = Tree(
 | 
			
		||||
            f"{num_songs} Song{['s', ''][num_songs == 1]}",
 | 
			
		||||
            guide_style="bright_black"
 | 
			
		||||
        )
 | 
			
		||||
        for song in self:
 | 
			
		||||
            tree.add(
 | 
			
		||||
                f"[bold]Track {song.track:02}.[/] [bright_black]({song.name})",
 | 
			
		||||
                guide_style="bright_black"
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        return tree
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__ALL__ = (Song, Album)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user