2025-12-01
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
import traceback
|
||||
|
||||
import bpy
|
||||
import importlib
|
||||
from ..core import login_manager
|
||||
from ..core import library_manager
|
||||
from ..core import live_data_manager
|
||||
|
||||
|
||||
class LoginButton(bpy.types.Operator):
|
||||
bl_idname = "rsl.login_login"
|
||||
bl_label = "Sign in"
|
||||
bl_description = "Sign into your Rokoko account with your browser"
|
||||
bl_options = {'INTERNAL'}
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return not login_manager.user.logging_in
|
||||
|
||||
def execute(self, context):
|
||||
login = login_manager.Login()
|
||||
login.start()
|
||||
self.report({'INFO'}, 'Opened Rokoko ID website in your browser.')
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
class LogoutButton(bpy.types.Operator):
|
||||
bl_idname = "rsl.login_logout"
|
||||
bl_label = "Sign out"
|
||||
bl_description = "Sign out of your Rokoko account"
|
||||
bl_options = {'INTERNAL'}
|
||||
|
||||
def execute(self, context):
|
||||
login_manager.user.logout()
|
||||
self.report({'INFO'}, 'Logout successful.')
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
class InstallLibsButton(bpy.types.Operator):
|
||||
bl_idname = 'rsl.login_install_libs'
|
||||
bl_label = 'Install Required Libraries'
|
||||
bl_description = 'Installs the required libraries for this plugin to work'
|
||||
bl_options = {'INTERNAL'}
|
||||
|
||||
def execute(self, context):
|
||||
# Install the libraries
|
||||
try:
|
||||
self.install_libs()
|
||||
except ImportError as e:
|
||||
self.report({'ERROR'}, str(e))
|
||||
return {'CANCELLED'}
|
||||
except Exception as e:
|
||||
trace = traceback.format_exc()
|
||||
error_str = f"Unable to install the libraries!" \
|
||||
f"\nTry running Blender as an admin and install the libraries again." \
|
||||
f"\n\nFull Error: \n\n{trace}"
|
||||
self.report({'ERROR'}, error_str)
|
||||
return {'CANCELLED'}
|
||||
|
||||
# Save login manager data
|
||||
classes_logged_in = login_manager.user.classes_logged_in
|
||||
classes_logged_out = login_manager.user.classes_logged_out
|
||||
version_str = login_manager.user.version_str
|
||||
|
||||
# Reload files to load the libraries
|
||||
importlib.reload(login_manager)
|
||||
importlib.reload(live_data_manager)
|
||||
|
||||
# Load the login manager data
|
||||
login_manager.user.classes_logged_in = classes_logged_in
|
||||
login_manager.user.classes_logged_out = classes_logged_out
|
||||
login_manager.user.version_str = version_str
|
||||
|
||||
# Attempt to auto login the user
|
||||
login_manager.user.auto_login()
|
||||
|
||||
self.report({'INFO'}, 'Installed libraries successfully!')
|
||||
return {'FINISHED'}
|
||||
|
||||
def install_libs(self):
|
||||
missing = library_manager.lib_manager.install_libraries(["websockets", "gql", "cryptography", "boto3"])
|
||||
if missing:
|
||||
raise ImportError("The following libraries could not be installed: "
|
||||
"\n- " + " \n- ".join(missing) +
|
||||
" \n\nTry running Blender as an admin and install the libraries again."
|
||||
" \nSee console for more information.")
|
||||
library_manager.lib_manager.install_libraries(["lz4"])
|
||||
Reference in New Issue
Block a user