RFC imports

click-textual
Maveno 1 year ago
parent 131cca2c53
commit 882d021bb6

@ -1,23 +1,7 @@
import os, time, sqlite3, sqlalchemy from textual.app import App
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 .shows_screen import ShowsScreen 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): class FfxApp(App):

@ -3,11 +3,6 @@ import os, re, click, json
from .media_descriptor import MediaDescriptor from .media_descriptor import MediaDescriptor
from .pattern_controller import PatternController from .pattern_controller import PatternController
#from .track_type import TrackType
#from .audio_layout import AudioLayout
#from .track_disposition import TrackDisposition
from .process import executeProcess from .process import executeProcess

@ -93,15 +93,6 @@ class IsoLanguage(Enum):
return foundLangs[0] if foundLangs else IsoLanguage.UNDEFINED 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): def label(self):
return str(self.value['name']) return str(self.value['name'])

@ -2,8 +2,6 @@ import click, re
from ffx.model.pattern import Pattern from ffx.model.pattern import Pattern
from .media_descriptor import MediaDescriptor
class PatternController(): class PatternController():
@ -88,12 +86,7 @@ class PatternController():
s = self.Session() s = self.Session()
q = s.query(Pattern).filter(Pattern.id == int(patternId)) q = s.query(Pattern).filter(Pattern.id == int(patternId))
if q.count(): return q.first() if q.count() else None
# pattern = q.first()
#return self.getPatternDict(pattern)
return q.first()
else:
return None
except Exception as ex: except Exception as ex:
raise click.ClickException(f"PatternController.getPattern(): {repr(ex)}") raise click.ClickException(f"PatternController.getPattern(): {repr(ex)}")
@ -125,11 +118,6 @@ class PatternController():
def matchFilename(self, filename): def matchFilename(self, filename):
#SEASON_PATTERN = '[sS]([0-9]+)'
#EPISODE_PATTERN = '[eE]([0-9]+)'
#result = {}
try: try:
s = self.Session() s = self.Session()
q = s.query(Pattern) q = s.query(Pattern)
@ -141,26 +129,6 @@ class PatternController():
else: else:
return None 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: except Exception as ex:
raise click.ClickException(f"PatternController.findPattern(): {repr(ex)}") raise click.ClickException(f"PatternController.findPattern(): {repr(ex)}")
finally: finally:

@ -1,12 +1,8 @@
import click import click
from textual import events
from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input from textual.widgets import Header, Footer, Static, Button
from textual.containers import Grid, Horizontal from textual.containers import Grid
from ffx.model.pattern import Pattern
from .show_controller import ShowController from .show_controller import ShowController
from .pattern_controller import PatternController from .pattern_controller import PatternController

@ -3,8 +3,8 @@ import click, re
from textual import events from textual import events
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input from textual.widgets import Header, Footer, Static, Button, Input, DataTable
from textual.containers import Grid, Horizontal from textual.containers import Grid
from ffx.model.show import Show from ffx.model.show import Show
from ffx.model.pattern import Pattern from ffx.model.pattern import Pattern

@ -1,16 +1,6 @@
import subprocess import subprocess
#class ProcessController():
#def __init__(self, commandSequence):
# self.__commandSequence = commandSequence
def executeProcess(commandSequence): def executeProcess(commandSequence):
process = subprocess.Popen(commandSequence, stdout=subprocess.PIPE, stderr=subprocess.PIPE) process = subprocess.Popen(commandSequence, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate() output, error = process.communicate()
return output.decode('utf-8'), error.decode('utf-8'), process.returncode return output.decode('utf-8'), error.decode('utf-8'), process.returncode

@ -17,25 +17,10 @@ class ShowController():
s = self.Session() s = self.Session()
q = s.query(Show).filter(Show.id == showId) q = s.query(Show).filter(Show.id == showId)
showDescriptor = {}
if q.count(): if q.count():
show = q.first() 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
return show.getDesciptor() return show.getDesciptor()
except Exception as ex: except Exception as ex:
raise click.ClickException(f"ShowController.getShowDesciptor(): {repr(ex)}") raise click.ClickException(f"ShowController.getShowDesciptor(): {repr(ex)}")
finally: finally:

@ -1,12 +1,6 @@
import click
from textual import events
from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input from textual.widgets import Header, Footer, Static, Button
from textual.containers import Grid, Horizontal from textual.containers import Grid
from ffx.model.show import Show
from .show_controller import ShowController from .show_controller import ShowController

@ -1,10 +1,8 @@
import click import click
from textual import events
from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input from textual.widgets import Header, Footer, Static, Button, DataTable, Input
from textual.containers import Grid, Horizontal from textual.containers import Grid
from textual.widgets._data_table import CellDoesNotExist from textual.widgets._data_table import CellDoesNotExist
@ -215,12 +213,9 @@ class ShowDetailsScreen(Screen):
# Define the columns with headers # Define the columns with headers
self.column_key_pattern = self.patternTable.add_column("Pattern", width=150) 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' self.patternTable.cursor_type = 'row'
yield Header() yield Header()
with Grid(): with Grid():

@ -3,7 +3,7 @@ import click
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button 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 from ffx.model.show import Show

@ -2,11 +2,6 @@ import click
from ffx.model.track import Track 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.media_tag import MediaTag
from ffx.model.track_tag import TrackTag from ffx.model.track_tag import TrackTag
@ -70,58 +65,6 @@ class TagController():
s.close() 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: def findAllMediaTags(self, trackId) -> dict:
try: try:
@ -223,9 +166,6 @@ class TagController():
s = self.Session() s = self.Session()
q = s.query(TrackTag).filter(TrackTag.id == int(tagId)) 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(): if q.count():
tag = q.first() tag = q.first()

@ -1,19 +1,7 @@
import click
from textual import events
from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input from textual.widgets import Header, Footer, Static, Button
from textual.containers import Grid, Horizontal 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
# Screen[dict[int, str, int]] # Screen[dict[int, str, int]]
class TagDeleteScreen(Screen): class TagDeleteScreen(Screen):

@ -1,10 +1,7 @@
import click, time
from textual import events
from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input, Checkbox, SelectionList, Select from textual.widgets import Header, Footer, Static, Button, Input
from textual.containers import Grid, Horizontal from textual.containers import Grid
# Screen[dict[int, str, int]] # Screen[dict[int, str, int]]
class TagDetailsScreen(Screen): class TagDetailsScreen(Screen):

@ -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)) q = s.query(Track).filter(Track.pattern_id == int(patternId), Track.track_type == trackType.index(), Track.sub_index == int(subIndex))
if q.count(): if q.count():
#track = q.first()
#return int(track.id)
return q.first() return q.first()
else: else:
return None return None
@ -141,7 +139,6 @@ class TrackController():
if q.count(): if q.count():
#trackDescriptor = self.getTrackDict(q.first())
track = 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) q_siblings = s.query(Track).filter(Track.pattern_id == track.getPatternId(), Track.track_type == track.getType().index()).order_by(Track.sub_index)

@ -3,14 +3,12 @@ import click
from textual import events from textual import events
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input from textual.widgets import Header, Footer, Static, Button
from textual.containers import Grid, Horizontal from textual.containers import Grid
from ffx.model.pattern import Pattern from ffx.model.pattern import Pattern
from ffx.track_descriptor import TrackDescriptor from ffx.track_descriptor import TrackDescriptor
# from .show_controller import ShowController
# from .pattern_controller import PatternController
from .track_controller import TrackController from .track_controller import TrackController
from .track_type import TrackType from .track_type import TrackType

@ -3,17 +3,14 @@ import click, time
from textual import events from textual import events
from textual.app import App, ComposeResult from textual.app import App, ComposeResult
from textual.screen import Screen from textual.screen import Screen
from textual.widgets import Header, Footer, Placeholder, Label, ListView, ListItem, Static, DataTable, Button, Input, Checkbox, SelectionList, Select from textual.widgets import Header, Footer, Static, Button, SelectionList, Select, DataTable, Input
from textual.containers import Grid, Horizontal from textual.containers import Grid
from textual.coordinate import Coordinate
from ffx.model.show import Show
from ffx.model.pattern import Pattern from ffx.model.pattern import Pattern
from .track_controller import TrackController from .track_controller import TrackController
from .pattern_controller import PatternController from .pattern_controller import PatternController
from .tag_controller import TagController from .tag_controller import TagController
# from .show_controller import ShowController
from .track_type import TrackType from .track_type import TrackType
@ -301,8 +298,6 @@ class TrackDetailsScreen(Screen):
trackDescriptor = self.getTrackDescriptorFromInput() trackDescriptor = self.getTrackDescriptorFromInput()
# raise click.ClickException(f"td.tags={trackDescriptor.getTags()}") # language=ger, title=Deutsch
# Check for multiple default/forced disposition flags # Check for multiple default/forced disposition flags
if self.__trackType == TrackType.AUDIO: if self.__trackType == TrackType.AUDIO:
@ -341,29 +336,24 @@ class TrackDetailsScreen(Screen):
else: else:
self.app.pop_screen() self.app.pop_screen()
if event.button.id == "cancel_button": if event.button.id == "cancel_button":
self.app.pop_screen() self.app.pop_screen()
if event.button.id == "button_add_stream_tag": if event.button.id == "button_add_stream_tag":
self.app.push_screen(TagDetailsScreen(), self.handle_add_tag) if not self.__isNew:
self.app.push_screen(TagDetailsScreen(), self.handle_update_tag)
#row = ('<key>','<value>')
#self.trackTagsTable.add_row(*map(str, row))
if event.button.id == "button_edit_stream_tag": if event.button.id == "button_edit_stream_tag":
tagKey, tagValue = self.getSelectedTag() 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": if event.button.id == "button_delete_stream_tag":
tagKey, tagValue = self.getSelectedTag() tagKey, tagValue = self.getSelectedTag()
self.app.push_screen(TagDeleteScreen(key=tagKey, value=tagValue), self.handle_delete_tag) self.app.push_screen(TagDeleteScreen(key=tagKey, value=tagValue), self.handle_delete_tag)
def handle_update_tag(self, tag):
def handle_add_tag(self, tag):
trackId = self.__trackDescriptor.getId() trackId = self.__trackDescriptor.getId()
@ -373,32 +363,6 @@ class TrackDetailsScreen(Screen):
if self.__tac.updateTrackTag(trackId, tag[0], tag[1]) is not None: if self.__tac.updateTrackTag(trackId, tag[0], tag[1]) is not None:
self.updateTags() 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): def handle_delete_tag(self, trackTag):
trackId = self.__trackDescriptor.getId() trackId = self.__trackDescriptor.getId()
@ -410,5 +374,4 @@ class TrackDetailsScreen(Screen):
if tag is not None: if tag is not None:
if self.__tac.deleteTrackTag(tag.id): if self.__tac.deleteTrackTag(tag.id):
# raise click.ClickException('deleted!')
self.updateTags() self.updateTags()

Loading…
Cancel
Save