sd-model-organizer/scripts/mo/ui_navigation.py

163 lines
4.5 KiB
Python

import json
import random
import string
_HOME = 'home'
_DETAILS = 'details'
_EDIT = 'edit'
_REMOVE = 'remove'
_DOWNLOAD = 'download'
_IMPORT_EXPORT = 'import_export'
_DEBUG = 'debug'
_RECORD_INFO = 'record_info'
_NODE_SCREEN = 'screen'
_NODE_RECORD_ID = 'record_id'
_NODE_PREFILLED_JSON = 'prefilled_json'
_NODE_GROUP = 'group'
_NODE_RECORD_INFO_ID = 'record_info_id'
def navigate_home() -> str:
return '{}'
def navigate_details(record_id) -> str:
nav_dict = {
_NODE_SCREEN: _DETAILS,
_NODE_RECORD_ID: record_id
}
return json.dumps(nav_dict)
def navigate_add() -> str:
nav_dict = {
_NODE_SCREEN: _EDIT,
}
return json.dumps(nav_dict)
def navigate_edit(record_id) -> str:
nav_dict = {
_NODE_SCREEN: _EDIT,
_NODE_RECORD_ID: record_id
}
return json.dumps(nav_dict)
def navigate_remove(record_id) -> str:
nav_dict = {
_NODE_SCREEN: _REMOVE,
_NODE_RECORD_ID: record_id
}
return json.dumps(nav_dict)
def navigate_download_single(record_id) -> str:
nav_dict = {
_NODE_SCREEN: _DOWNLOAD,
_NODE_RECORD_ID: record_id
}
return json.dumps(nav_dict)
def navigate_download_group(group) -> str:
nav_dict = {
_NODE_SCREEN: _DOWNLOAD,
_NODE_GROUP: group
}
return json.dumps(nav_dict)
def get_nav_state(json_nav) -> dict:
nav_dict = json.loads(json_nav)
state = {
'is_home_visible': False,
'is_details_visible': False,
'is_edit_visible': False,
'is_remove_visible': False,
'is_download_visible': False,
'is_import_export_visible': False,
'is_debug_visible': False,
'details_record_id': '',
'edit_data': {},
'remove_record_id': '',
'download_info': '',
'filter_state': {},
'details_record_info_id': ''
}
if nav_dict.get(_NODE_SCREEN) is None:
state['is_home_visible'] = True
else:
if nav_dict[_NODE_SCREEN] == _DETAILS:
state['is_details_visible'] = True
state['details_record_id'] = nav_dict[_NODE_RECORD_ID]
elif nav_dict[_NODE_SCREEN] == _EDIT:
state['is_edit_visible'] = True
edit_data = {'token': generate_ui_token()}
if nav_dict.get(_NODE_RECORD_ID) is not None:
edit_data[_NODE_RECORD_ID] = nav_dict[_NODE_RECORD_ID]
if nav_dict.get(_NODE_PREFILLED_JSON) is not None:
edit_data[_NODE_PREFILLED_JSON] = nav_dict[_NODE_PREFILLED_JSON]
state['edit_data'] = json.dumps(edit_data)
elif nav_dict[_NODE_SCREEN] == _REMOVE:
state['is_remove_visible'] = True
state['remove_record_id'] = nav_dict[_NODE_RECORD_ID]
elif nav_dict[_NODE_SCREEN] == _DOWNLOAD:
state['is_download_visible'] = True
download_dict = {'token': generate_ui_token()}
if nav_dict.get(_NODE_RECORD_ID) is not None:
download_dict[_NODE_RECORD_ID] = nav_dict[_NODE_RECORD_ID]
if nav_dict.get(_NODE_GROUP) is not None:
download_dict[_NODE_GROUP] = nav_dict[_NODE_GROUP]
if nav_dict.get('filter_state') is not None:
download_dict['filter_state'] = nav_dict['filter_state']
state['download_info'] = json.dumps(download_dict)
elif nav_dict[_NODE_SCREEN] == _IMPORT_EXPORT:
state['is_import_export_visible'] = True
state['filter_state'] = nav_dict['filter_state']
elif nav_dict[_NODE_SCREEN] == _DEBUG:
state['is_debug_visible'] = True
elif nav_dict[_NODE_SCREEN] == _RECORD_INFO:
state['details_record_info_id'] = nav_dict[_NODE_RECORD_INFO_ID]
state['is_home_visible'] = True
return state
def get_download_record_id(data):
download_dict = json.loads(data)
if download_dict.get(_NODE_RECORD_ID) is None:
return None
else:
return download_dict[_NODE_RECORD_ID]
def get_download_group(data):
download_dict = json.loads(data)
if download_dict.get(_NODE_GROUP) is None:
return None
else:
return download_dict[_NODE_GROUP]
def get_download_filter_state(data):
download_dict = json.loads(data)
if download_dict.get('filter_state') is None:
return None
else:
return download_dict['filter_state']
def generate_ui_token() -> str:
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for _ in range(6))