3131from octoprint .settings import settings
3232from octoprint .events import Events as OctoPrintEvents
3333
34+ from octoprint_mrbeam .rest_handler .update_handler import UpdateRestHandlerMixin
35+ from octoprint_mrbeam .util .connectivity_checker import ConnectivityChecker
36+
3437IS_X86 = platform .machine () == "x86_64"
38+ from ._version import get_versions
39+
40+ __version__ = get_versions ()["version" ]
41+ del get_versions
3542
36- from octoprint_mrbeam .__version import __version__
3743from octoprint_mrbeam .iobeam .iobeam_handler import ioBeamHandler , IoBeamEvents
3844from octoprint_mrbeam .iobeam .onebutton_handler import oneButtonHandler
3945from octoprint_mrbeam .iobeam .interlock_handler import interLockHandler
4349from octoprint_mrbeam .iobeam .hw_malfunction_handler import hwMalfunctionHandler
4450from octoprint_mrbeam .iobeam .laserhead_handler import laserheadHandler
4551from octoprint_mrbeam .iobeam .compressor_handler import compressor_handler
52+ from octoprint_mrbeam .jinja .filter_loader import FilterLoader
4653from octoprint_mrbeam .user_notification_system import user_notification_system
4754from octoprint_mrbeam .analytics .analytics_handler import analyticsHandler
4855from octoprint_mrbeam .analytics .usage_handler import usageHandler
5360from octoprint_mrbeam .mrb_logger import init_mrb_logger , mrb_logger
5461from octoprint_mrbeam .migrate import migrate
5562from octoprint_mrbeam .os_health_care import os_health_care
63+ from octoprint_mrbeam .rest_handler .docs_handler import DocsRestHandlerMixin
64+ from octoprint_mrbeam .services .settings_service import SettingsService
65+ from octoprint_mrbeam .services .burger_menu_service import BurgerMenuService
66+ from octoprint_mrbeam .services .document_service import DocumentService
5667from octoprint_mrbeam .wizard_config import WizardConfig
5768from octoprint_mrbeam .printing .profile import (
5869 laserCutterProfileManager ,
6475 get_update_information ,
6576 switch_software_channel ,
6677 software_channels_available ,
67- SW_UPDATE_TIER_PROD ,
68- SW_UPDATE_TIER_BETA ,
69- SW_UPDATE_TIER_DEV ,
7078 BEAMOS_LEGACY_DATE ,
79+ SWUpdateTier ,
7180)
7281from octoprint_mrbeam .support import check_support_mode , check_calibration_tool_mode
7382from octoprint_mrbeam .cli import get_cli_commands
@@ -110,6 +119,8 @@ class MrBeamPlugin(
110119 octoprint .plugin .SlicerPlugin ,
111120 octoprint .plugin .ShutdownPlugin ,
112121 octoprint .plugin .EnvironmentDetectionPlugin ,
122+ UpdateRestHandlerMixin ,
123+ DocsRestHandlerMixin ,
113124):
114125 # CONSTANTS
115126 ENV_PROD = "PROD"
@@ -164,6 +175,7 @@ def __init__(self):
164175 self ._serial_num = None
165176 self ._mac_addrs = dict ()
166177 self ._model_id = None
178+ self ._explicit_update_check = False
167179 self ._grbl_version = None
168180 self ._device_series = self ._device_info .get_series ()
169181 self .called_hosts = []
@@ -186,6 +198,9 @@ def __init__(self):
186198 # MrBeam Events needs to be registered in OctoPrint in order to be send to the frontend later on
187199 MrBeamEvents .register_with_octoprint ()
188200
201+ # Jinja custom filters need to be loaded already on instance creation
202+ FilterLoader .load_custom_jinja_filters ()
203+
189204 # inside initialize() OctoPrint is already loaded, not assured during __init__()!
190205 def initialize (self ):
191206 self ._plugin_version = __version__
@@ -243,10 +258,10 @@ def initialize(self):
243258 self .led_event_listener .set_fps (self ._settings .get (["leds" , "fps" ]))
244259 # start iobeam socket only once other handlers are already initialized so that we can handle info message
245260 self .iobeam = ioBeamHandler (self )
246- self .temperature_manager = temperatureManager (self )
247261 self .dust_manager = dustManager (self )
248262 self .hw_malfunction_handler = hwMalfunctionHandler (self )
249263 self .laserhead_handler = laserheadHandler (self )
264+ self .temperature_manager = temperatureManager (self )
250265 self .compressor_handler = compressor_handler (self )
251266 self .wizard_config = WizardConfig (self )
252267 self .job_time_estimation = JobTimeEstimation (self )
@@ -256,6 +271,10 @@ def initialize(self):
256271 self .mrbeam_plugin_initialized = True
257272 self .fire_event (MrBeamEvents .MRB_PLUGIN_INITIALIZED )
258273
274+ # move octoprints connectivity checker to a new var so we can use our abstraction
275+ self ._octoprint_connectivity_checker = self ._connectivity_checker
276+ self ._connectivity_checker = ConnectivityChecker (self )
277+
259278 self ._do_initial_log ()
260279
261280 def _init_frontend_logger (self ):
@@ -368,7 +387,7 @@ def get_settings_defaults(self):
368387 terminalMaxLines = 2000 ,
369388 env = self .ENV_PROD ,
370389 load_gremlins = False ,
371- software_tier = SW_UPDATE_TIER_PROD ,
390+ software_tier = SWUpdateTier . STABLE . value ,
372391 iobeam_disable_warnings = False , # for development on non-MrBeam devices
373392 suppress_migrations = False , # for development on non-MrBeam devices
374393 support_mode = False ,
@@ -454,7 +473,9 @@ def on_settings_load(self):
454473 dev = dict (
455474 env = self .get_env (),
456475 software_tier = self ._settings .get (["dev" , "software_tier" ]),
457- software_tiers_available = software_channels_available (self ),
476+ software_tiers_available = [
477+ channel for channel in software_channels_available (self )
478+ ],
458479 terminalMaxLines = self ._settings .get (["dev" , "terminalMaxLines" ]),
459480 ),
460481 gcode_nextgen = dict (
@@ -694,7 +715,7 @@ def get_assets(self):
694715 "css/hopscotch.min.css" ,
695716 "css/wizard.css" ,
696717 "css/tab_messages.css" ,
697- "css/software_update.css"
718+ "css/software_update.css" ,
698719 ],
699720 less = ["less/mrbeam.less" ],
700721 )
@@ -718,6 +739,16 @@ def calibration_tool_mode(self):
718739 self ._fixEmptyUserManager ()
719740 return ret
720741
742+ @property
743+ def explicit_update_check (self ):
744+ return self ._explicit_update_check
745+
746+ def set_explicit_update_check (self ):
747+ self ._explicit_update_check = True
748+
749+ def clear_explicit_update_check (self ):
750+ self ._explicit_update_check = False
751+
721752 ##~~ UiPlugin mixin
722753
723754 def will_handle_ui (self , request ):
@@ -818,6 +849,10 @@ def on_ui_render(self, now, request, render_kwargs):
818849 terminalEnabled = self ._settings .get (["terminal" ]) or self .support_mode ,
819850 lasersafety_confirmation_dialog_version = self .LASERSAFETY_CONFIRMATION_DIALOG_VERSION ,
820851 lasersafety_confirmation_dialog_language = language ,
852+ settings_model = SettingsService (self ._logger , DocumentService (self ._logger )).get_template_settings_model (
853+ self .get_model_id ()),
854+ burger_menu_model = BurgerMenuService (self ._logger , DocumentService (self ._logger )).get_burger_menu_model (
855+ self .get_model_id ()),
821856 )
822857 )
823858 r = make_response (render_template ("mrbeam_ui_index.jinja2" , ** render_kwargs ))
@@ -2957,10 +2992,10 @@ def __calc_time_ntp_offset(self, log_out_of_sync=False):
29572992 timer .start ()
29582993
29592994 def is_beta_channel (self ):
2960- return self ._settings .get (["dev" , "software_tier" ]) == SW_UPDATE_TIER_BETA
2995+ return self ._settings .get (["dev" , "software_tier" ]) == SWUpdateTier . BETA
29612996
29622997 def is_develop_channel (self ):
2963- return self ._settings .get (["dev" , "software_tier" ]) == SW_UPDATE_TIER_DEV
2998+ return self ._settings .get (["dev" , "software_tier" ]) == SWUpdateTier . DEV
29642999
29653000 def _get_mac_addresses (self ):
29663001 if not self ._mac_addrs :
0 commit comments