diff --git a/README.md b/README.md index 1537c63..08c7447 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ **⭐️ You liked it ? Give this repository a star, it's free :)** ## About -Use a RaspberryPi (Lite OS) to show a full-screen slideshow (Kiosk-mode) +Use a RaspberryPi (Lite OS) to show a fullscreen slideshow (Kiosk-mode) [![Docker Pulls](https://badgen.net/docker/pulls/jierka/obscreen?icon=docker&label=docker%20pulls)](https://hub.docker.com/r/jierka/obscreen/) diff --git a/data/www/js/fleet/screens.js b/data/www/js/fleet/studios.js similarity index 68% rename from data/www/js/fleet/screens.js rename to data/www/js/fleet/studios.js index 4f7c159..8ed6fed 100644 --- a/data/www/js/fleet/screens.js +++ b/data/www/js/fleet/studios.js @@ -1,6 +1,6 @@ jQuery(document).ready(function ($) { - const $tableActive = $('table.active-screens'); - const $tableInactive = $('table.inactive-screens'); + const $tableActive = $('table.active-studios'); + const $tableInactive = $('table.inactive-studios'); const $modalsRoot = $('.modals'); const getId = function ($el) { @@ -9,7 +9,7 @@ jQuery(document).ready(function ($) { const updateTable = function () { $('table').each(function () { - if ($(this).find('tbody tr.screen-item:visible').length === 0) { + if ($(this).find('tbody tr.studio-item:visible').length === 0) { $(this).find('tr.empty-tr').removeClass('hidden'); } else { $(this).find('tr.empty-tr').addClass('hidden'); @@ -30,13 +30,13 @@ jQuery(document).ready(function ($) { const updatePositions = function (table, row) { const positions = {}; - $('.screen-item').each(function (index) { + $('.studio-item').each(function (index) { positions[getId($(this))] = index; }); $.ajax({ method: 'POST', - url: '/fleet/screen/position', + url: '/fleet/studio/position', headers: {'Content-Type': 'application/json'}, data: JSON.stringify(positions), }); @@ -44,14 +44,14 @@ jQuery(document).ready(function ($) { const main = function () { $("table").tableDnD({ - dragHandle: 'td a.screen-sort', + dragHandle: 'td a.studio-sort', onDrop: updatePositions }); }; $(document).on('change', 'input[type=checkbox]', function () { $.ajax({ - url: '/fleet/screen/toggle', + url: '/fleet/studio/toggle', headers: {'Content-Type': 'application/json'}, data: JSON.stringify({id: getId($(this)), enabled: $(this).is(':checked')}), method: 'POST', @@ -68,16 +68,16 @@ jQuery(document).ready(function ($) { updateTable(); }); - $(document).on('change', '#screen-add-type', function () { + $(document).on('change', '#studio-add-type', function () { const value = $(this).val(); const inputType = $(this).find('option').filter(function (i, el) { return $(el).val() === value; }).data('input'); - $('.screen-add-object-input') + $('.studio-add-object-input') .addClass('hidden') .prop('disabled', true) - .filter('#screen-add-object-input-' + inputType) + .filter('#studio-add-object-input-' + inputType) .removeClass('hidden') .prop('disabled', false) ; @@ -87,29 +87,29 @@ jQuery(document).ready(function ($) { hideModal(); }); - $(document).on('click', '.screen-add', function () { - showModal('modal-screen-add'); - $('.modal-screen-add input:eq(0)').focus().select(); + $(document).on('click', '.studio-add', function () { + showModal('modal-studio-add'); + $('.modal-studio-add input:eq(0)').focus().select(); }); - $(document).on('click', '.screen-edit', function () { - const screen = JSON.parse($(this).parents('tr:eq(0)').attr('data-entity')); - showModal('modal-screen-edit'); - $('.modal-screen-edit input:visible:eq(0)').focus().select(); - $('#screen-edit-name').val(screen.name); - $('#screen-edit-host').val(screen.host); - $('#screen-edit-port').val(screen.port); - $('#screen-edit-id').val(screen.id); + $(document).on('click', '.studio-edit', function () { + const studio = JSON.parse($(this).parents('tr:eq(0)').attr('data-entity')); + showModal('modal-studio-edit'); + $('.modal-studio-edit input:visible:eq(0)').focus().select(); + $('#studio-edit-name').val(studio.name); + $('#studio-edit-host').val(studio.host); + $('#studio-edit-port').val(studio.port); + $('#studio-edit-id').val(studio.id); }); - $(document).on('click', '.screen-delete', function () { - if (confirm(l.js_fleet_screen_delete_confirmation)) { + $(document).on('click', '.studio-delete', function () { + if (confirm(l.js_fleet_studio_delete_confirmation)) { const $tr = $(this).parents('tr:eq(0)'); $tr.remove(); updateTable(); $.ajax({ method: 'DELETE', - url: '/fleet/screen/delete', + url: '/fleet/studio/delete', headers: {'Content-Type': 'application/json'}, data: JSON.stringify({id: getId($(this))}), }); diff --git a/docs/setup-run-headless.md b/docs/setup-run-headless.md index 76f8141..af0a5cf 100644 --- a/docs/setup-run-headless.md +++ b/docs/setup-run-headless.md @@ -73,16 +73,16 @@ python ./obscreen.py #### Start server forever with systemctl ```bash -cat "$(pwd)/system/obscreen-composer.service" | sed "s#/home/pi#$HOME#g" | sed "s#=pi#=$USER#g" | sudo tee /etc/systemd/system/obscreen-composer.service +cat "$(pwd)/system/obscreen-studio.service" | sed "s#/home/pi#$HOME#g" | sed "s#=pi#=$USER#g" | sudo tee /etc/systemd/system/obscreen-studio.service sudo systemctl daemon-reload -sudo systemctl enable obscreen-composer.service -sudo systemctl start obscreen-composer.service +sudo systemctl enable obscreen-studio.service +sudo systemctl start obscreen-studio.service ``` #### Troubleshoot ```bash # Watch logs with following command -sudo journalctl -u obscreen-composer -f +sudo journalctl -u obscreen-studio -f ``` --- ## 👌 Usage diff --git a/docs/setup-run-on-rpi.md b/docs/setup-run-on-rpi.md index da270a2..fdb0bf6 100644 --- a/docs/setup-run-on-rpi.md +++ b/docs/setup-run-on-rpi.md @@ -87,16 +87,16 @@ python ./obscreen.py #### Start server forever with systemctl ```bash -cat "$(pwd)/system/obscreen-composer.service" | sed "s#/home/pi#$HOME#g" | sed "s#=pi#=$USER#g" | sudo tee /etc/systemd/system/obscreen-composer.service +cat "$(pwd)/system/obscreen-studio.service" | sed "s#/home/pi#$HOME#g" | sed "s#=pi#=$USER#g" | sudo tee /etc/systemd/system/obscreen-studio.service sudo systemctl daemon-reload -sudo systemctl enable obscreen-composer.service -sudo systemctl start obscreen-composer.service +sudo systemctl enable obscreen-studio.service +sudo systemctl start obscreen-studio.service ``` #### Troubleshoot ```bash # Watch logs with following command -sudo journalctl -u obscreen-composer -f +sudo journalctl -u obscreen-studio -f ``` --- ## 🏁 Finally diff --git a/lang/en.json b/lang/en.json index 908bace..2313d58 100644 --- a/lang/en.json +++ b/lang/en.json @@ -57,26 +57,26 @@ "js_playlist_delete_confirmation": "Are you sure?", "playlist_delete_has_slides": "Playlist has slides, please remove them before and retry", - "fleet_page_title": "Composers", - "fleet_screen_button_add": "Add a screen", - "fleet_screen_button_fleetview": "Fleet view", - "fleet_screen_panel_active": "Active screens", - "fleet_screen_panel_inactive": "Inactive screens", - "fleet_screen_panel_empty": "Currently, there are no screens. %link% now.", - "fleet_screen_panel_th_name": "Name", - "fleet_screen_panel_th_host": "Host", - "fleet_screen_panel_th_port": "Port", - "fleet_screen_panel_th_enabled": "Enabled", - "fleet_screen_panel_th_activity": "Activity", - "fleet_screen_form_add_title": "Add Screen", - "fleet_screen_form_add_submit": "Add", - "fleet_screen_form_edit_title": "Edit Screen", - "fleet_screen_form_edit_submit": "Save", - "fleet_screen_form_label_name": "Name", - "fleet_screen_form_label_host": "Host", - "fleet_screen_form_label_port": "Port", - "fleet_screen_form_button_cancel": "Cancel", - "js_fleet_screen_delete_confirmation": "Are you sure?", + "fleet_page_title": "Studios", + "fleet_studio_button_add": "Add a studio", + "fleet_studio_button_fleetview": "Fleet view", + "fleet_studio_panel_active": "Active studios", + "fleet_studio_panel_inactive": "Inactive studios", + "fleet_studio_panel_empty": "Currently, there are no studios. %link% now.", + "fleet_studio_panel_th_name": "Name", + "fleet_studio_panel_th_host": "Host", + "fleet_studio_panel_th_port": "Port", + "fleet_studio_panel_th_enabled": "Enabled", + "fleet_studio_panel_th_activity": "Activity", + "fleet_studio_form_add_title": "Add Studio", + "fleet_studio_form_add_submit": "Add", + "fleet_studio_form_edit_title": "Edit Studio", + "fleet_studio_form_edit_submit": "Save", + "fleet_studio_form_label_name": "Name", + "fleet_studio_form_label_host": "Host", + "fleet_studio_form_label_port": "Port", + "fleet_studio_form_button_cancel": "Cancel", + "js_fleet_studio_delete_confirmation": "Are you sure?", "login_page_title": "Login", "auth_page_title": "Users", @@ -110,10 +110,10 @@ "settings_variable_form_button_cancel": "Cancel", "settings_variable_desc_lang": "Server language", "settings_variable_desc_playlist_enabled": "Enable playlist management", - "settings_variable_desc_fleet_composer_enabled": "Enable fleet composer management", + "settings_variable_desc_fleet_studio_enabled": "Enable fleet studio management", "settings_variable_desc_auth_enabled": "Enable auth management", "settings_variable_desc_edition_auth_enabled": "Default user credentials will be admin/admin", - "settings_variable_desc_external_url": "External url (i.e: https://screen-01.company.com or http://10.10.3.100)", + "settings_variable_desc_external_url": "External url (i.e: https://studio-01.company.com or http://10.10.3.100)", "settings_variable_desc_slide_upload_limit": "Slide upload limit (in megabytes)", "settings_variable_desc_default_slide_duration": "Intro slide duration (in seconds)", "settings_variable_desc_polling_interval": "Refresh interval applied for settings to the player (in seconds)", diff --git a/lang/fr.json b/lang/fr.json index d319f17..561abbf 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -57,26 +57,26 @@ "js_playlist_delete_confirmation": "Êtes-vous sûr ?", "playlist_delete_has_slides": "La liste de lecture contient des sldies, supprimez-les avant et réessayez", - "fleet_page_title": "Composeurs", - "fleet_screen_button_add": "Ajouter un écran", - "fleet_screen_button_fleetview": "Vue flotte", - "fleet_screen_panel_active": "Écrans actifs", - "fleet_screen_panel_inactive": "Écrans inactifs", - "fleet_screen_panel_empty": "Actuellement, il n'y a pas d'écrans. %link% maintenant.", - "fleet_screen_panel_th_name": "Nom", - "fleet_screen_panel_th_host": "Hôte", - "fleet_screen_panel_th_port": "Port", - "fleet_screen_panel_th_enabled": "Activé", - "fleet_screen_panel_th_activity": "Options", - "fleet_screen_form_add_title": "Ajout d'un écran", - "fleet_screen_form_add_submit": "Ajouter", - "fleet_screen_form_edit_title": "Modification d'un écran", - "fleet_screen_form_edit_submit": "Enregistrer", - "fleet_screen_form_label_name": "Nom", - "fleet_screen_form_label_host": "Hôte", - "fleet_screen_form_label_port": "Port", - "fleet_screen_form_button_cancel": "Annuler", - "js_fleet_screen_delete_confirmation": "Êtes-vous sûr ?", + "fleet_page_title": "Studios", + "fleet_studio_button_add": "Ajouter un studio", + "fleet_studio_button_fleetview": "Vue flotte", + "fleet_studio_panel_active": "Studios actifs", + "fleet_studio_panel_inactive": "Studios inactifs", + "fleet_studio_panel_empty": "Actuellement, il n'y a pas de studios. %link% maintenant.", + "fleet_studio_panel_th_name": "Nom", + "fleet_studio_panel_th_host": "Hôte", + "fleet_studio_panel_th_port": "Port", + "fleet_studio_panel_th_enabled": "Activé", + "fleet_studio_panel_th_activity": "Options", + "fleet_studio_form_add_title": "Ajout d'un studio", + "fleet_studio_form_add_submit": "Ajouter", + "fleet_studio_form_edit_title": "Modification d'un studio", + "fleet_studio_form_edit_submit": "Enregistrer", + "fleet_studio_form_label_name": "Nom", + "fleet_studio_form_label_host": "Hôte", + "fleet_studio_form_label_port": "Port", + "fleet_studio_form_button_cancel": "Annuler", + "js_fleet_studio_delete_confirmation": "Êtes-vous sûr ?", "login_page_title": "Connexion", "auth_page_title": "Utilisateurs", @@ -110,10 +110,10 @@ "settings_variable_form_button_cancel": "Annuler", "settings_variable_desc_lang": "Langage de l'application", "settings_variable_desc_playlist_enabled": "Activer la gestion des playlists", - "settings_variable_desc_fleet_composer_enabled": "Activer la gestion de flotte des composeurs", + "settings_variable_desc_fleet_studio_enabled": "Activer la gestion de flotte des studios", "settings_variable_desc_auth_enabled": "Activer la gestion de l'authentification", "settings_variable_desc_edition_auth_enabled": "Les identifiants de l'utilisateur par défaut seront admin/admin", - "settings_variable_desc_external_url": "URL externe (i.e: https://screen-01.company.com or http://10.10.3.100)", + "settings_variable_desc_external_url": "URL externe (i.e: https://studio-01.company.com or http://10.10.3.100)", "settings_variable_desc_slide_upload_limit": "Limite d'upload du fichier d'une slide (en mégaoctets)", "settings_variable_desc_default_slide_duration": "Durée de la slide d'introduction (en secondes)", "settings_variable_desc_polling_interval": "Intervalle de rafraîchissement des paramètres à appliquer au lecteur (en secondes)", diff --git a/plugins/system/FleetmodeScreenRestart/FleetmodeScreenRestart.py b/plugins/system/FleetmodeStudioRestart/FleetmodeStudioRestart.py similarity index 90% rename from plugins/system/FleetmodeScreenRestart/FleetmodeScreenRestart.py rename to plugins/system/FleetmodeStudioRestart/FleetmodeStudioRestart.py index ec4375d..70b7723 100644 --- a/plugins/system/FleetmodeScreenRestart/FleetmodeScreenRestart.py +++ b/plugins/system/FleetmodeStudioRestart/FleetmodeStudioRestart.py @@ -7,13 +7,13 @@ from src.model.enum.HookType import HookType from src.model.hook.HookRegistration import HookRegistration -class FleetmodeScreenRestart(ObPlugin): +class FleetmodeStudioRestart(ObPlugin): def use_id(self): - return 'fleetmode_screen_restart' + return 'fleetmode_studio_restart' def use_title(self): - return 'Fleetmode Screen Restart' + return 'Fleetmode Studio Restart' def use_variables(self) -> List[Variable]: return [ diff --git a/plugins/system/FleetmodeScreenRestart/controller/FooController.py b/plugins/system/FleetmodeStudioRestart/controller/FooController.py similarity index 100% rename from plugins/system/FleetmodeScreenRestart/controller/FooController.py rename to plugins/system/FleetmodeStudioRestart/controller/FooController.py diff --git a/plugins/system/FleetmodeScreenRestart/lang/en.json b/plugins/system/FleetmodeStudioRestart/lang/en.json similarity index 100% rename from plugins/system/FleetmodeScreenRestart/lang/en.json rename to plugins/system/FleetmodeStudioRestart/lang/en.json diff --git a/plugins/system/FleetmodeScreenRestart/lang/fr.json b/plugins/system/FleetmodeStudioRestart/lang/fr.json similarity index 100% rename from plugins/system/FleetmodeScreenRestart/lang/fr.json rename to plugins/system/FleetmodeStudioRestart/lang/fr.json diff --git a/plugins/system/FleetmodeScreenRestart/views/foo_html.jinja.html b/plugins/system/FleetmodeStudioRestart/views/foo_html.jinja.html similarity index 100% rename from plugins/system/FleetmodeScreenRestart/views/foo_html.jinja.html rename to plugins/system/FleetmodeStudioRestart/views/foo_html.jinja.html diff --git a/plugins/system/FleetmodeScreenRestart/views/hook/h_fleetmode_slideshow_toolbar_actions.jinja.html b/plugins/system/FleetmodeStudioRestart/views/hook/h_fleetmode_slideshow_toolbar_actions.jinja.html similarity index 52% rename from plugins/system/FleetmodeScreenRestart/views/hook/h_fleetmode_slideshow_toolbar_actions.jinja.html rename to plugins/system/FleetmodeStudioRestart/views/hook/h_fleetmode_slideshow_toolbar_actions.jinja.html index 6cddb15..8ae8565 100644 --- a/plugins/system/FleetmodeScreenRestart/views/hook/h_fleetmode_slideshow_toolbar_actions.jinja.html +++ b/plugins/system/FleetmodeStudioRestart/views/hook/h_fleetmode_slideshow_toolbar_actions.jinja.html @@ -1,2 +1,2 @@ - + diff --git a/plugins/system/FleetmodeScreenRestart/views/plugin_local_inclusion.jinja.html b/plugins/system/FleetmodeStudioRestart/views/plugin_local_inclusion.jinja.html similarity index 100% rename from plugins/system/FleetmodeScreenRestart/views/plugin_local_inclusion.jinja.html rename to plugins/system/FleetmodeStudioRestart/views/plugin_local_inclusion.jinja.html diff --git a/src/controller/FleetController.py b/src/controller/FleetController.py index 2e8a4b7..26a4acb 100644 --- a/src/controller/FleetController.py +++ b/src/controller/FleetController.py @@ -2,7 +2,7 @@ import json from flask import Flask, render_template, redirect, request, url_for, jsonify from src.service.ModelStore import ModelStore -from src.model.entity.Screen import Screen +from src.model.entity.Studio import Studio from src.interface.ObController import ObController @@ -10,7 +10,7 @@ class FleetController(ObController): def guard_fleet(self, f): def decorated_function(*args, **kwargs): - if not self._model_store.variable().map().get('fleet_composer_enabled').as_bool(): + if not self._model_store.variable().map().get('fleet_studio_enabled').as_bool(): return redirect(url_for('manage')) return f(*args, **kwargs) @@ -18,49 +18,49 @@ class FleetController(ObController): def register(self): self._app.add_url_rule('/fleet', 'fleet', self.guard_fleet(self._auth(self.fleet)), methods=['GET']) - self._app.add_url_rule('/fleet/screen/list', 'fleet_screen_list', self.guard_fleet(self._auth(self.fleet_screen_list)), methods=['GET']) - self._app.add_url_rule('/fleet/screen/add', 'fleet_screen_add', self.guard_fleet(self._auth(self.fleet_screen_add)), methods=['POST']) - self._app.add_url_rule('/fleet/screen/edit', 'fleet_screen_edit', self.guard_fleet(self._auth(self.fleet_screen_edit)), methods=['POST']) - self._app.add_url_rule('/fleet/screen/toggle', 'fleet_screen_toggle', self.guard_fleet(self._auth(self.fleet_screen_toggle)), methods=['POST']) - self._app.add_url_rule('/fleet/screen/delete', 'fleet_screen_delete', self.guard_fleet(self._auth(self.fleet_screen_delete)), methods=['DELETE']) - self._app.add_url_rule('/fleet/screen/position', 'fleet_screen_position', self.guard_fleet(self._auth(self.fleet_screen_position)), methods=['POST']) + self._app.add_url_rule('/fleet/studio/list', 'fleet_studio_list', self.guard_fleet(self._auth(self.fleet_studio_list)), methods=['GET']) + self._app.add_url_rule('/fleet/studio/add', 'fleet_studio_add', self.guard_fleet(self._auth(self.fleet_studio_add)), methods=['POST']) + self._app.add_url_rule('/fleet/studio/edit', 'fleet_studio_edit', self.guard_fleet(self._auth(self.fleet_studio_edit)), methods=['POST']) + self._app.add_url_rule('/fleet/studio/toggle', 'fleet_studio_toggle', self.guard_fleet(self._auth(self.fleet_studio_toggle)), methods=['POST']) + self._app.add_url_rule('/fleet/studio/delete', 'fleet_studio_delete', self.guard_fleet(self._auth(self.fleet_studio_delete)), methods=['DELETE']) + self._app.add_url_rule('/fleet/studio/position', 'fleet_studio_position', self.guard_fleet(self._auth(self.fleet_studio_position)), methods=['POST']) def fleet(self): return render_template( 'fleet/fleet.jinja.html', - screens=self._model_store.screen().get_enabled_screens(), + studios=self._model_store.studio().get_enabled_studios(), ) - def fleet_screen_list(self): + def fleet_studio_list(self): return render_template( 'fleet/list.jinja.html', - enabled_screens=self._model_store.screen().get_enabled_screens(), - disabled_screens=self._model_store.screen().get_disabled_screens(), + enabled_studios=self._model_store.studio().get_enabled_studios(), + disabled_studios=self._model_store.studio().get_disabled_studios(), ) - def fleet_screen_add(self): - self._model_store.screen().add_form(Screen( + def fleet_studio_add(self): + self._model_store.studio().add_form(Studio( name=request.form['name'], host=request.form['host'], port=request.form['port'], )) - return redirect(url_for('fleet_screen_list')) + return redirect(url_for('fleet_studio_list')) - def fleet_screen_edit(self): - self._model_store.screen().update_form(request.form['id'], request.form['name'], request.form['host'], request.form['port']) - return redirect(url_for('fleet_screen_list')) + def fleet_studio_edit(self): + self._model_store.studio().update_form(request.form['id'], request.form['name'], request.form['host'], request.form['port']) + return redirect(url_for('fleet_studio_list')) - def fleet_screen_toggle(self): + def fleet_studio_toggle(self): data = request.get_json() - self._model_store.screen().update_enabled(data.get('id'), data.get('enabled')) + self._model_store.studio().update_enabled(data.get('id'), data.get('enabled')) return jsonify({'status': 'ok'}) - def fleet_screen_delete(self): + def fleet_studio_delete(self): data = request.get_json() - self._model_store.screen().delete(data.get('id')) + self._model_store.studio().delete(data.get('id')) return jsonify({'status': 'ok'}) - def fleet_screen_position(self): + def fleet_studio_position(self): data = request.get_json() - self._model_store.screen().update_positions(data) + self._model_store.studio().update_positions(data) return jsonify({'status': 'ok'}) diff --git a/src/controller/SettingsController.py b/src/controller/SettingsController.py index 63fcb8a..386653c 100644 --- a/src/controller/SettingsController.py +++ b/src/controller/SettingsController.py @@ -33,7 +33,7 @@ class SettingsController(ObController): if variable.name == 'slide_upload_limit': self.reload_web_server() - if variable.name == 'fleet_composer_enabled': + if variable.name == 'fleet_studio_enabled': self.reload_web_server() if variable.name == 'auth_enabled': diff --git a/src/controller/SysinfoController.py b/src/controller/SysinfoController.py index 985e53a..1c9b4d3 100644 --- a/src/controller/SysinfoController.py +++ b/src/controller/SysinfoController.py @@ -63,7 +63,7 @@ class SysinfoController(ObController): os.execl(python, python, *sys.argv) else: try: - subprocess.run(["sudo", "systemctl", "restart", 'obscreen-composer'], check=True, timeout=10, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + subprocess.run(["sudo", "systemctl", "restart", 'obscreen-studio'], check=True, timeout=10, stdout=subprocess.PIPE, stderr=subprocess.PIPE) pass except subprocess.TimeoutExpired: pass diff --git a/src/manager/ScreenManager.py b/src/manager/StudioManager.py similarity index 63% rename from src/manager/ScreenManager.py rename to src/manager/StudioManager.py index de8bed3..d970d5a 100644 --- a/src/manager/ScreenManager.py +++ b/src/manager/StudioManager.py @@ -1,15 +1,15 @@ from typing import Dict, Optional, List, Tuple, Union -from src.model.entity.Screen import Screen +from src.model.entity.Studio import Studio from src.manager.DatabaseManager import DatabaseManager from src.manager.LangManager import LangManager from src.manager.UserManager import UserManager from src.service.ModelManager import ModelManager -class ScreenManager(ModelManager): +class StudioManager(ModelManager): - TABLE_NAME = "fleet" + TABLE_NAME = "fleet_studio" TABLE_MODEL = [ "name CHAR(255)", "enabled INTEGER DEFAULT 0", @@ -22,23 +22,23 @@ class ScreenManager(ModelManager): super().__init__(lang_manager, database_manager, user_manager) self._db = database_manager.open(self.TABLE_NAME, self.TABLE_MODEL) - def hydrate_object(self, raw_screen: dict, id: Optional[int] = None) -> Screen: + def hydrate_object(self, raw_studio: dict, id: Optional[int] = None) -> Studio: if id: - raw_screen['id'] = id + raw_studio['id'] = id - return Screen(**raw_screen) + return Studio(**raw_studio) - def hydrate_list(self, raw_screens: list) -> List[Screen]: - return [self.hydrate_object(raw_screen) for raw_screen in raw_screens] + def hydrate_list(self, raw_studios: list) -> List[Studio]: + return [self.hydrate_object(raw_studio) for raw_studio in raw_studios] - def get(self, id: int) -> Optional[Screen]: + def get(self, id: int) -> Optional[Studio]: object = self._db.get_by_id(self.TABLE_NAME, id) return self.hydrate_object(object, id) if object else None - def get_by(self, query, sort: Optional[str] = None) -> List[Screen]: + def get_by(self, query, sort: Optional[str] = None) -> List[Studio]: return self.hydrate_list(self._db.get_by_query(self.TABLE_NAME, query=query, sort=sort)) - def get_one_by(self, query) -> Optional[Screen]: + def get_one_by(self, query) -> Optional[Studio]: object = self._db.get_one_by_query(self.TABLE_NAME, query=query) if not object: @@ -46,30 +46,30 @@ class ScreenManager(ModelManager): return self.hydrate_object(object) - def get_all(self, sort: bool = False) -> List[Screen]: + def get_all(self, sort: bool = False) -> List[Studio]: return self.hydrate_list(self._db.get_all(self.TABLE_NAME, "position" if sort else None)) - def get_enabled_screens(self) -> List[Screen]: + def get_enabled_studios(self) -> List[Studio]: return self.get_by(query="enabled = 1", sort="position") - def get_disabled_screens(self) -> List[Screen]: + def get_disabled_studios(self) -> List[Studio]: return self.get_by(query="enabled = 0", sort="position") def update_enabled(self, id: int, enabled: bool) -> None: self._db.update_by_id(self.TABLE_NAME, id, {"enabled": enabled, "position": 999}) def update_positions(self, positions: list) -> None: - for screen_id, screen_position in positions.items(): - self._db.update_by_id(self.TABLE_NAME, screen_id, {"position": screen_position}) + for studio_id, studio_position in positions.items(): + self._db.update_by_id(self.TABLE_NAME, studio_id, {"position": studio_position}) def update_form(self, id: int, name: str, host: str, port: int) -> None: self._db.update_by_id(self.TABLE_NAME, id, {"name": name, "host": host, "port": port}) - def add_form(self, screen: Union[Screen, Dict]) -> None: - form = screen + def add_form(self, studio: Union[Studio, Dict]) -> None: + form = studio - if not isinstance(screen, dict): - form = screen.to_dict() + if not isinstance(studio, dict): + form = studio.to_dict() del form['id'] self._db.add(self.TABLE_NAME, form) @@ -77,5 +77,5 @@ class ScreenManager(ModelManager): def delete(self, id: int) -> None: self._db.delete_by_id(self.TABLE_NAME, id) - def to_dict(self, screens: List[Screen]) -> List[Dict]: - return [screen.to_dict() for screen in screens] + def to_dict(self, studios: List[Studio]) -> List[Dict]: + return [studio.to_dict() for studio in studios] diff --git a/src/manager/VariableManager.py b/src/manager/VariableManager.py index 12e88ef..33be28c 100644 --- a/src/manager/VariableManager.py +++ b/src/manager/VariableManager.py @@ -104,7 +104,7 @@ class VariableManager(ModelManager): ### General {"name": "lang", "section": self.t(VariableSection.GENERAL), "value": "en", "type": VariableType.SELECT_SINGLE, "editable": True, "description": self.t('settings_variable_desc_lang'), "selectables": self.t(ApplicationLanguage), "refresh_player": False}, {"name": "auth_enabled", "section": self.t(VariableSection.GENERAL), "value": False, "type": VariableType.BOOL, "editable": True, "description": self.t('settings_variable_desc_auth_enabled'), "description_edition": self.t('settings_variable_desc_edition_auth_enabled'), "refresh_player": False}, - {"name": "fleet_composer_enabled", "section": self.t(VariableSection.GENERAL), "value": False, "type": VariableType.BOOL, "editable": True, "description": self.t('settings_variable_desc_fleet_composer_enabled'), "refresh_player": False}, + {"name": "fleet_studio_enabled", "section": self.t(VariableSection.GENERAL), "value": False, "type": VariableType.BOOL, "editable": True, "description": self.t('settings_variable_desc_fleet_studio_enabled'), "refresh_player": False}, {"name": "playlist_enabled", "section": self.t(VariableSection.GENERAL), "value": False, "type": VariableType.BOOL, "editable": True, "description": self.t('settings_variable_desc_playlist_enabled'), "refresh_player": False}, {"name": "external_url", "section": self.t(VariableSection.GENERAL), "value": "", "type": VariableType.STRING, "editable": True, "description": self.t('settings_variable_desc_external_url'), "refresh_player": False}, {"name": "slide_upload_limit", "section": self.t(VariableSection.GENERAL), "value": 32, "unit": VariableUnit.MEGABYTE, "type": VariableType.INT, "editable": True, "description": self.t('settings_variable_desc_slide_upload_limit'), "refresh_player": False}, diff --git a/src/model/entity/Screen.py b/src/model/entity/Studio.py similarity index 97% rename from src/model/entity/Screen.py rename to src/model/entity/Studio.py index 74d5b2d..9d0cb98 100644 --- a/src/model/entity/Screen.py +++ b/src/model/entity/Studio.py @@ -3,7 +3,7 @@ import json from typing import Optional, Union -class Screen: +class Studio: def __init__(self, host: str = '', port: int = 5000, enabled: bool = False, name: str = 'Untitled', position: int = 999, id: Optional[int] = None): self._id = id if id else None @@ -58,7 +58,7 @@ class Screen: self._position = value def __str__(self) -> str: - return f"Screen(" \ + return f"Studio(" \ f"id='{self.id}',\n" \ f"name='{self.name}',\n" \ f"enabled='{self.enabled}',\n" \ diff --git a/src/service/ModelStore.py b/src/service/ModelStore.py index 700606a..ca80bf4 100644 --- a/src/service/ModelStore.py +++ b/src/service/ModelStore.py @@ -1,6 +1,6 @@ from src.manager.PlaylistManager import PlaylistManager from src.manager.SlideManager import SlideManager -from src.manager.ScreenManager import ScreenManager +from src.manager.StudioManager import StudioManager from src.manager.UserManager import UserManager from src.manager.VariableManager import VariableManager from src.manager.LangManager import LangManager @@ -26,7 +26,7 @@ class ModelStore: self._logging_manager = LoggingManager(config_manager=self._config_manager) # Model - self._screen_manager = ScreenManager(lang_manager=self._lang_manager, database_manager=self._database_manager, user_manager=self._user_manager) + self._studio_manager = StudioManager(lang_manager=self._lang_manager, database_manager=self._database_manager, user_manager=self._user_manager) self._playlist_manager = PlaylistManager(lang_manager=self._lang_manager, database_manager=self._database_manager, user_manager=self._user_manager) self._slide_manager = SlideManager(lang_manager=self._lang_manager, database_manager=self._database_manager, user_manager=self._user_manager) self._variable_manager.reload() @@ -49,8 +49,8 @@ class ModelStore: def playlist(self) -> PlaylistManager: return self._playlist_manager - def screen(self) -> ScreenManager: - return self._screen_manager + def studio(self) -> StudioManager: + return self._studio_manager def lang(self) -> LangManager: return self._lang_manager diff --git a/src/service/TemplateRenderer.py b/src/service/TemplateRenderer.py index d7ee74a..830fe02 100644 --- a/src/service/TemplateRenderer.py +++ b/src/service/TemplateRenderer.py @@ -26,7 +26,7 @@ class TemplateRenderer: globals = dict( STATIC_PREFIX="/{}/{}/".format(WebDirConstant.FOLDER_STATIC, WebDirConstant.FOLDER_STATIC_WEB_ASSETS), SECRET_KEY=self._model_store.config().map().get('secret_key'), - FLEET_COMPOSER_ENABLED=self._model_store.variable().map().get('fleet_composer_enabled').as_bool(), + FLEET_STUDIO_ENABLED=self._model_store.variable().map().get('fleet_studio_enabled').as_bool(), AUTH_ENABLED=self._model_store.variable().map().get('auth_enabled').as_bool(), PLAYLIST_ENABLED=self._model_store.variable().map().get('playlist_enabled').as_bool(), track_created=self._model_store.user().track_user_created, diff --git a/system/obscreen-composer.service b/system/obscreen-studio.service similarity index 93% rename from system/obscreen-composer.service rename to system/obscreen-studio.service index 1107351..e0f45b2 100644 --- a/system/obscreen-composer.service +++ b/system/obscreen-studio.service @@ -1,5 +1,5 @@ [Unit] -Description=Obscreen Composer +Description=Obscreen Studio After=network.target [Service] diff --git a/views/base.jinja.html b/views/base.jinja.html index 657f244..7d5cbad 100755 --- a/views/base.jinja.html +++ b/views/base.jinja.html @@ -63,10 +63,10 @@ {% endif %} - {% if FLEET_COMPOSER_ENABLED %} -
  • - - {{ l.fleet_page_title }} + {% if FLEET_STUDIO_ENABLED %} +
  • + + {{ l.fleet_page_title }}
  • {% endif %} @@ -124,7 +124,7 @@ var l = { 'js_playlist_delete_confirmation': '{{ l.js_playlist_delete_confirmation }}', 'js_slideshow_slide_delete_confirmation': '{{ l.js_slideshow_slide_delete_confirmation }}', - 'js_fleet_screen_delete_confirmation': '{{ l.js_fleet_screen_delete_confirmation }}', + 'js_fleet_studio_delete_confirmation': '{{ l.js_fleet_studio_delete_confirmation }}', 'js_auth_user_delete_confirmation': '{{ l.js_auth_user_delete_confirmation }}', 'js_sysinfo_restart_confirmation': '{{ l.js_sysinfo_restart_confirmation }}', 'js_sysinfo_restart_loading': '{{ l.js_sysinfo_restart_loading }}' diff --git a/views/fleet/component/table.jinja.html b/views/fleet/component/table.jinja.html index 645effb..b9113eb 100644 --- a/views/fleet/component/table.jinja.html +++ b/views/fleet/component/table.jinja.html @@ -1,55 +1,55 @@ - +
    - - - - - + + + + + - + - {% for screen in screens %} - + {% for studio in studios %} + diff --git a/views/fleet/fleet.jinja.html b/views/fleet/fleet.jinja.html index 5d772de..920e446 100644 --- a/views/fleet/fleet.jinja.html +++ b/views/fleet/fleet.jinja.html @@ -9,39 +9,39 @@ ul li a {flex:1;display: flex;flex-direction: row;justify-content: center;align-items: center;padding: 20px 5px;color:#0eef5f;font-weight: bold;text-decoration: none;} ul li.active a { background: #0eef5f;color:white; } main {display: flex;flex:1;} - main .screen-frame {display: flex; flex:1;} - main .screen-frame iframe {display: flex; flex: 1;} + main .studio-frame {display: flex; flex:1;} + main .studio-frame iframe {display: flex; flex: 1;} .hidden {display: none !important;}
    - {% for screen in screens %} -
    - + {% for studio in studios %} +
    +
    {% endfor %}
    - + {{ HOOK(H_FLEET_JAVASCRIPT) }} {% endblock %} @@ -20,25 +20,25 @@
    {{ HOOK(H_FLEET_TOOLBAR_ACTIONS_START) }} - {{ l.fleet_screen_button_fleetview }} - + {{ l.fleet_studio_button_fleetview }} + {{ HOOK(H_FLEET_TOOLBAR_ACTIONS_END) }}
    -

    {{ l.fleet_screen_panel_active }}

    +

    {{ l.fleet_studio_panel_active }}

    - {% with tclass='active', screens=enabled_screens %} + {% with tclass='active', studios=enabled_studios %} {% include 'fleet/component/table.jinja.html' %} {% endwith %}
    -

    {{ l.fleet_screen_panel_inactive }}

    +

    {{ l.fleet_studio_panel_inactive }}

    - {% with tclass='inactive', screens=disabled_screens %} + {% with tclass='inactive', studios=disabled_studios %} {% include 'fleet/component/table.jinja.html' %} {% endwith %}
    diff --git a/views/fleet/modal/add.jinja.html b/views/fleet/modal/add.jinja.html index 4b9b931..6d9b9f6 100644 --- a/views/fleet/modal/add.jinja.html +++ b/views/fleet/modal/add.jinja.html @@ -1,36 +1,36 @@ -
    {{ l.fleet_screen_panel_th_name }}{{ l.fleet_screen_panel_th_host }}{{ l.fleet_screen_panel_th_port }}{{ l.fleet_screen_panel_th_enabled }}{{ l.fleet_screen_panel_th_activity }}{{ l.fleet_studio_panel_th_name }}{{ l.fleet_studio_panel_th_host }}{{ l.fleet_studio_panel_th_port }}{{ l.fleet_studio_panel_th_enabled }}{{ l.fleet_studio_panel_th_activity }}
    - {{ l.fleet_screen_panel_empty|replace( + {{ l.fleet_studio_panel_empty|replace( '%link%', - (''~l.fleet_screen_button_add~'')|safe + (''~l.fleet_studio_button_add~'')|safe ) }}
    - + -
    {{ screen.id }}
    +
    {{ studio.id }}
    - - {{ screen.name }} + + {{ studio.name }}
    - {{ screen.host }} + {{ studio.host }} - {{ screen.port }} + {{ studio.port }} - + - + - +