diff --git a/bin/ffx/ffx_app.py b/bin/ffx/ffx_app.py index c2f8cd5..01838f6 100644 --- a/bin/ffx/ffx_app.py +++ b/bin/ffx/ffx_app.py @@ -1,23 +1,7 @@ -import os, time, sqlite3, sqlalchemy - -from textual.app import App, ComposeResult -from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label - -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker -# from ffx.model.show import Base, Show -# from ffx.model.pattern import Pattern -# from ffx.model.track import Track - -# from ffx.model.media_tag import MediaTag -# from ffx.model.track_tag import TrackTag +from textual.app import App from .shows_screen import ShowsScreen -from .warning_screen import WarningScreen -from .dashboard_screen import DashboardScreen -from .settings_screen import SettingsScreen -from .help_screen import HelpScreen + class FfxApp(App): diff --git a/bin/ffx/file_properties.py b/bin/ffx/file_properties.py index afeee20..9df38d2 100644 --- a/bin/ffx/file_properties.py +++ b/bin/ffx/file_properties.py @@ -3,11 +3,6 @@ import os, re, click, json from .media_descriptor import MediaDescriptor from .pattern_controller import PatternController -#from .track_type import TrackType -#from .audio_layout import AudioLayout - -#from .track_disposition import TrackDisposition - from .process import executeProcess diff --git a/bin/ffx/iso_language.py b/bin/ffx/iso_language.py index d46f1df..e034523 100644 --- a/bin/ffx/iso_language.py +++ b/bin/ffx/iso_language.py @@ -93,15 +93,6 @@ class IsoLanguage(Enum): return foundLangs[0] if foundLangs else IsoLanguage.UNDEFINED -# def get(lang : str): -# -# selectedLangs = [l for l in IsoLanguage if l.value['iso639_2'] == lang] -# -# if selectedLangs: -# return selectedLangs[0] -# else: -# return None - def label(self): return str(self.value['name']) diff --git a/bin/ffx/pattern_controller.py b/bin/ffx/pattern_controller.py index b668c82..9446678 100644 --- a/bin/ffx/pattern_controller.py +++ b/bin/ffx/pattern_controller.py @@ -2,8 +2,6 @@ import click, re from ffx.model.pattern import Pattern -from .media_descriptor import MediaDescriptor - class PatternController(): @@ -88,12 +86,7 @@ class PatternController(): s = self.Session() q = s.query(Pattern).filter(Pattern.id == int(patternId)) - if q.count(): - # pattern = q.first() - #return self.getPatternDict(pattern) - return q.first() - else: - return None + return q.first() if q.count() else None except Exception as ex: raise click.ClickException(f"PatternController.getPattern(): {repr(ex)}") @@ -125,11 +118,6 @@ class PatternController(): def matchFilename(self, filename): - #SEASON_PATTERN = '[sS]([0-9]+)' - #EPISODE_PATTERN = '[eE]([0-9]+)' - - #result = {} - try: s = self.Session() q = s.query(Pattern) @@ -141,26 +129,6 @@ class PatternController(): else: return None -# for pattern in q.all(): -# -# match = re.search(pattern.pattern, filename) -# -# if match: -# -# result['pattern_id'] = pattern.id -# result['show_id'] = pattern.show_id -# -# result['indicator'] = match.group(1) -# -# seasonMatch = re.search(SEASON_PATTERN, result['indicator']) -# if seasonMatch: -# result['season'] = int(seasonMatch.group(1)) -# -# episodeMatch = re.search(EPISODE_PATTERN, result['indicator']) -# if episodeMatch: -# result['episode'] = int(episodeMatch.group(1)) - - except Exception as ex: raise click.ClickException(f"PatternController.findPattern(): {repr(ex)}") finally: diff --git a/bin/ffx/pattern_delete_screen.py b/bin/ffx/pattern_delete_screen.py index 1508d5a..39fa4d1 100644 --- a/bin/ffx/pattern_delete_screen.py +++ b/bin/ffx/pattern_delete_screen.py @@ -1,12 +1,8 @@ import click -from textual import events -from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input -from textual.containers import Grid, Horizontal - -from ffx.model.pattern import Pattern +from textual.widgets import Header, Footer, Static, Button +from textual.containers import Grid from .show_controller import ShowController from .pattern_controller import PatternController diff --git a/bin/ffx/pattern_details_screen.py b/bin/ffx/pattern_details_screen.py index 827e399..0544eec 100644 --- a/bin/ffx/pattern_details_screen.py +++ b/bin/ffx/pattern_details_screen.py @@ -3,8 +3,8 @@ import click, re from textual import events from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input -from textual.containers import Grid, Horizontal +from textual.widgets import Header, Footer, Static, Button, Input, DataTable +from textual.containers import Grid from ffx.model.show import Show from ffx.model.pattern import Pattern diff --git a/bin/ffx/process.py b/bin/ffx/process.py index b671c10..ad484b7 100644 --- a/bin/ffx/process.py +++ b/bin/ffx/process.py @@ -1,16 +1,6 @@ import subprocess - -#class ProcessController(): - - #def __init__(self, commandSequence): - # self.__commandSequence = commandSequence - def executeProcess(commandSequence): - process = subprocess.Popen(commandSequence, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - output, error = process.communicate() - return output.decode('utf-8'), error.decode('utf-8'), process.returncode - diff --git a/bin/ffx/show_controller.py b/bin/ffx/show_controller.py index 1c213d7..815c562 100644 --- a/bin/ffx/show_controller.py +++ b/bin/ffx/show_controller.py @@ -17,25 +17,10 @@ class ShowController(): s = self.Session() q = s.query(Show).filter(Show.id == showId) - showDescriptor = {} - if q.count(): - show = q.first() - -# showDescriptor['id'] = int(show.id) -# showDescriptor['name'] = str(show.name) -# showDescriptor['year'] = int(show.year) -# -# showDescriptor['index_season_digits'] = int(show.index_season_digits) -# showDescriptor['index_episode_digits'] = int(show.index_episode_digits) -# showDescriptor['indicator_season_digits'] = int(show.indicator_season_digits) -# showDescriptor['indicator_episode_digits'] = int(show.indicator_episode_digits) -# -# return showDescriptor - + show = q.first() return show.getDesciptor() - except Exception as ex: raise click.ClickException(f"ShowController.getShowDesciptor(): {repr(ex)}") finally: diff --git a/bin/ffx/show_delete_screen.py b/bin/ffx/show_delete_screen.py index d85a74b..ff47043 100644 --- a/bin/ffx/show_delete_screen.py +++ b/bin/ffx/show_delete_screen.py @@ -1,12 +1,6 @@ -import click - -from textual import events -from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input -from textual.containers import Grid, Horizontal - -from ffx.model.show import Show +from textual.widgets import Header, Footer, Static, Button +from textual.containers import Grid from .show_controller import ShowController diff --git a/bin/ffx/show_details_screen.py b/bin/ffx/show_details_screen.py index 00139c8..acbba24 100644 --- a/bin/ffx/show_details_screen.py +++ b/bin/ffx/show_details_screen.py @@ -1,10 +1,8 @@ import click -from textual import events -from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input -from textual.containers import Grid, Horizontal +from textual.widgets import Header, Footer, Static, Button, DataTable, Input +from textual.containers import Grid from textual.widgets._data_table import CellDoesNotExist @@ -215,12 +213,9 @@ class ShowDetailsScreen(Screen): # Define the columns with headers self.column_key_pattern = self.patternTable.add_column("Pattern", width=150) - #self.column_key_name = self.patternTable.add_column("Name", width=50) - #self.column_key_year = self.patternTable.add_column("Year", width=10) self.patternTable.cursor_type = 'row' - yield Header() with Grid(): diff --git a/bin/ffx/shows_screen.py b/bin/ffx/shows_screen.py index d6ecc39..261133e 100644 --- a/bin/ffx/shows_screen.py +++ b/bin/ffx/shows_screen.py @@ -3,7 +3,7 @@ import click from textual.app import App, ComposeResult from textual.screen import Screen from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button -from textual.containers import Grid, Horizontal +from textual.containers import Grid from ffx.model.show import Show diff --git a/bin/ffx/tag_controller.py b/bin/ffx/tag_controller.py index 9db9d01..f31e3e1 100644 --- a/bin/ffx/tag_controller.py +++ b/bin/ffx/tag_controller.py @@ -2,11 +2,6 @@ import click from ffx.model.track import Track -from .track_type import TrackType - -from .track_disposition import TrackDisposition -from .iso_language import IsoLanguage - from ffx.model.media_tag import MediaTag from ffx.model.track_tag import TrackTag @@ -70,58 +65,6 @@ class TagController(): s.close() -# def addTrackTag(self, trackDescriptor): -# -# try: -# s = self.Session() -# -# track = Track(pattern_id = int(trackDescriptor['pattern_id']), -# -# track_type = int(trackDescriptor['type'].value), -# -# sub_index = int(trackDescriptor['sub_index']), -# -# # language = str(trackDescriptor['language'].threeLetter()), -# # title = str(trackDescriptor['title']), -# -# disposition_flags = int(TrackDisposition.toFlags(trackDescriptor['disposition_list']))) -# -# s.add(track) -# s.commit() -# -# except Exception as ex: -# raise click.ClickException(f"TrackController.addTrack(): {repr(ex)}") -# finally: -# s.close() -# -# -# -# def updateTrack(self, trackId, trackDescriptor): -# -# try: -# s = self.Session() -# q = s.query(Track).filter(Track.id == int(trackId)) -# -# if q.count(): -# -# track = q.first() -# -# track.sub_index = int(trackDescriptor['sub_index']) -# # track.language = str(trackDescriptor['language'].threeLetter()) -# # track.title = str(trackDescriptor['title']) -# track.disposition_flags = int(TrackDisposition.toFlags(trackDescriptor['disposition_list'])) -# -# s.commit() -# -# return True -# -# else: -# return False -# -# except Exception as ex: -# raise click.ClickException(f"TrackController.addTrack(): {repr(ex)}") -# finally: -# s.close() def findAllMediaTags(self, trackId) -> dict: try: @@ -223,9 +166,6 @@ class TagController(): s = self.Session() q = s.query(TrackTag).filter(TrackTag.id == int(tagId)) - # raise click.ClickException(f"tagId={tagId}") - # raise click.ClickException(f"q count={q.count()}") - if q.count(): tag = q.first() diff --git a/bin/ffx/tag_delete_screen.py b/bin/ffx/tag_delete_screen.py index aaf536a..f97e455 100644 --- a/bin/ffx/tag_delete_screen.py +++ b/bin/ffx/tag_delete_screen.py @@ -1,19 +1,7 @@ -import click - -from textual import events -from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input -from textual.containers import Grid, Horizontal - -from ffx.model.pattern import Pattern -from ffx.track_descriptor import TrackDescriptor - -# from .show_controller import ShowController -# from .pattern_controller import PatternController -from .track_controller import TrackController +from textual.widgets import Header, Footer, Static, Button +from textual.containers import Grid -from .track_type import TrackType # Screen[dict[int, str, int]] class TagDeleteScreen(Screen): diff --git a/bin/ffx/tag_details_screen.py b/bin/ffx/tag_details_screen.py index 46b29d2..b80c3fa 100644 --- a/bin/ffx/tag_details_screen.py +++ b/bin/ffx/tag_details_screen.py @@ -1,10 +1,7 @@ -import click, time - -from textual import events -from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input, Checkbox, SelectionList, Select -from textual.containers import Grid, Horizontal +from textual.widgets import Header, Footer, Static, Button, Input +from textual.containers import Grid + # Screen[dict[int, str, int]] class TagDetailsScreen(Screen): diff --git a/bin/ffx/track_controller.py b/bin/ffx/track_controller.py index fc27f57..25531bb 100644 --- a/bin/ffx/track_controller.py +++ b/bin/ffx/track_controller.py @@ -123,8 +123,6 @@ class TrackController(): q = s.query(Track).filter(Track.pattern_id == int(patternId), Track.track_type == trackType.index(), Track.sub_index == int(subIndex)) if q.count(): - #track = q.first() - #return int(track.id) return q.first() else: return None @@ -141,7 +139,6 @@ class TrackController(): if q.count(): - #trackDescriptor = self.getTrackDict(q.first()) track = q.first() q_siblings = s.query(Track).filter(Track.pattern_id == track.getPatternId(), Track.track_type == track.getType().index()).order_by(Track.sub_index) diff --git a/bin/ffx/track_delete_screen.py b/bin/ffx/track_delete_screen.py index da68e78..fd53b71 100644 --- a/bin/ffx/track_delete_screen.py +++ b/bin/ffx/track_delete_screen.py @@ -3,14 +3,12 @@ import click from textual import events from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input -from textual.containers import Grid, Horizontal +from textual.widgets import Header, Footer, Static, Button +from textual.containers import Grid from ffx.model.pattern import Pattern from ffx.track_descriptor import TrackDescriptor -# from .show_controller import ShowController -# from .pattern_controller import PatternController from .track_controller import TrackController from .track_type import TrackType diff --git a/bin/ffx/track_details_screen.py b/bin/ffx/track_details_screen.py index 492e68f..36f289e 100644 --- a/bin/ffx/track_details_screen.py +++ b/bin/ffx/track_details_screen.py @@ -3,17 +3,14 @@ import click, time from textual import events from textual.app import App, ComposeResult from textual.screen import Screen -from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input, Checkbox, SelectionList, Select -from textual.containers import Grid, Horizontal -from textual.coordinate import Coordinate +from textual.widgets import Header, Footer, Static, Button, SelectionList, Select, DataTable, Input +from textual.containers import Grid -from ffx.model.show import Show from ffx.model.pattern import Pattern from .track_controller import TrackController from .pattern_controller import PatternController from .tag_controller import TagController -# from .show_controller import ShowController from .track_type import TrackType @@ -301,8 +298,6 @@ class TrackDetailsScreen(Screen): trackDescriptor = self.getTrackDescriptorFromInput() - # raise click.ClickException(f"td.tags={trackDescriptor.getTags()}") # language=ger, title=Deutsch - # Check for multiple default/forced disposition flags if self.__trackType == TrackType.AUDIO: @@ -341,29 +336,24 @@ class TrackDetailsScreen(Screen): else: self.app.pop_screen() - if event.button.id == "cancel_button": self.app.pop_screen() - if event.button.id == "button_add_stream_tag": - self.app.push_screen(TagDetailsScreen(), self.handle_add_tag) - - #row = ('','') - #self.trackTagsTable.add_row(*map(str, row)) + if not self.__isNew: + self.app.push_screen(TagDetailsScreen(), self.handle_update_tag) if event.button.id == "button_edit_stream_tag": tagKey, tagValue = self.getSelectedTag() - self.app.push_screen(TagDetailsScreen(key=tagKey, value=tagValue), self.handle_add_tag) + self.app.push_screen(TagDetailsScreen(key=tagKey, value=tagValue), self.handle_update_tag) if event.button.id == "button_delete_stream_tag": tagKey, tagValue = self.getSelectedTag() self.app.push_screen(TagDeleteScreen(key=tagKey, value=tagValue), self.handle_delete_tag) - - def handle_add_tag(self, tag): + def handle_update_tag(self, tag): trackId = self.__trackDescriptor.getId() @@ -373,32 +363,6 @@ class TrackDetailsScreen(Screen): if self.__tac.updateTrackTag(trackId, tag[0], tag[1]) is not None: self.updateTags() - - def handle_edit_tag(self, tag): - pass -# try: -# if trackDescriptor.getType() == TrackType.AUDIO: -# -# row_key, col_key = self.audioStreamsTable.coordinate_to_cell_key(self.audioStreamsTable.cursor_coordinate) -# -# self.audioStreamsTable.update_cell(row_key, self.column_key_audio_language, trackDescriptor.getLanguage().label()) -# self.audioStreamsTable.update_cell(row_key, self.column_key_audio_title, trackDescriptor.getTitle()) -# self.audioStreamsTable.update_cell(row_key, self.column_key_audio_default, 'Yes' if TrackDisposition.DEFAULT in trackDescriptor.getDispositionSet() else 'No') -# self.audioStreamsTable.update_cell(row_key, self.column_key_audio_forced, 'Yes' if TrackDisposition.FORCED in trackDescriptor.getDispositionSet() else 'No') -# -# if trackDescriptor.getType() == TrackType.SUBTITLE: -# -# row_key, col_key = self.subtitleStreamsTable.coordinate_to_cell_key(self.subtitleStreamsTable.cursor_coordinate) -# -# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_language, trackDescriptor.getLanguage().label()) -# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_title, trackDescriptor.getTitle()) -# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_default, 'Yes' if TrackDisposition.DEFAULT in trackDescriptor.getDispositionSet() else 'No') -# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_forced, 'Yes' if TrackDisposition.FORCED in trackDescriptor.getDispositionSet() else 'No') -# -# except CellDoesNotExist: -# pass - - def handle_delete_tag(self, trackTag): trackId = self.__trackDescriptor.getId() @@ -410,5 +374,4 @@ class TrackDetailsScreen(Screen): if tag is not None: if self.__tac.deleteTrackTag(tag.id): - # raise click.ClickException('deleted!') self.updateTags()