692e200ffe
save startup blend for animation tab & whatnot
190 lines
7.0 KiB
Python
190 lines
7.0 KiB
Python
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
# ##### END GPL LICENSE BLOCK #####
|
|
|
|
import json
|
|
import logging
|
|
import os
|
|
|
|
import bpy
|
|
|
|
from . import paths, utils
|
|
|
|
|
|
bk_logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_preferences_path() -> str:
|
|
"""Return path to the persistent JSON preferences file."""
|
|
config_dir = paths.get_config_dir_path()
|
|
preferences_path = os.path.join(config_dir, "preferences.json")
|
|
return os.path.abspath(preferences_path)
|
|
|
|
|
|
def write_preferences_to_JSON(preferences: dict):
|
|
"""Write preferences to JSON file, called on save_prefs()."""
|
|
paths.ensure_config_dir_exists()
|
|
preferences_path = get_preferences_path()
|
|
try:
|
|
with open(preferences_path, "w", encoding="utf-8") as s:
|
|
json.dump(preferences, s, ensure_ascii=False, indent=4)
|
|
bk_logger.info("Saved preferences to %s", preferences_path)
|
|
except Exception as e:
|
|
bk_logger.warning("Failed to save preferences: %s", e)
|
|
|
|
|
|
def load_preferences_from_JSON():
|
|
"""Load preferences from JSON file and update the user preferences accordingly."""
|
|
preferences_path = get_preferences_path()
|
|
if os.path.exists(preferences_path) is not True:
|
|
return utils.get_preferences_as_dict()
|
|
|
|
try:
|
|
with open(preferences_path, "r", encoding="utf-8") as s:
|
|
prefs = json.load(s)
|
|
except Exception as e:
|
|
bk_logger.warning("Failed to read preferences from JSON: {e}")
|
|
os.remove(preferences_path)
|
|
return utils.get_preferences_as_dict()
|
|
|
|
user_preferences = bpy.context.preferences.addons[__package__].preferences
|
|
user_preferences.preferences_lock = True
|
|
|
|
# STATISTICS
|
|
user_preferences.download_counter = prefs.get(
|
|
"download_counter", user_preferences.download_counter
|
|
)
|
|
user_preferences.asset_popup_counter = prefs.get(
|
|
"asset_popup_counter", user_preferences.asset_popup_counter
|
|
)
|
|
user_preferences.welcome_operator_counter = prefs.get(
|
|
"welcome_operator_counter", user_preferences.welcome_operator_counter
|
|
)
|
|
# MAIN PREFERENCES
|
|
user_preferences.api_key = prefs.get("api_key", user_preferences.api_key)
|
|
user_preferences.api_key_refresh = prefs.get(
|
|
"api_key_refresh", user_preferences.api_key_refresh
|
|
)
|
|
user_preferences.api_key_timeout = prefs.get(
|
|
"api_key_timeout", user_preferences.api_key_timeout
|
|
)
|
|
user_preferences.experimental_features = prefs.get(
|
|
"experimental_features", user_preferences.experimental_features
|
|
)
|
|
user_preferences.keep_preferences = prefs.get(
|
|
"keep_preferences", user_preferences.keep_preferences
|
|
)
|
|
|
|
# FILE PATHS
|
|
user_preferences.directory_behaviour = prefs.get(
|
|
"directory_behaviour", user_preferences.directory_behaviour
|
|
)
|
|
user_preferences.global_dir = prefs.get("global_dir", user_preferences.global_dir)
|
|
user_preferences.project_subdir = prefs.get(
|
|
"project_subdir", user_preferences.project_subdir
|
|
)
|
|
user_preferences.unpack_files = prefs.get(
|
|
"unpack_files", user_preferences.unpack_files
|
|
)
|
|
user_preferences.write_asset_metadata = prefs.get(
|
|
"write_asset_metadata", user_preferences.write_asset_metadata
|
|
)
|
|
|
|
# GUI
|
|
user_preferences.show_on_start = prefs.get(
|
|
"show_on_start", user_preferences.show_on_start
|
|
)
|
|
user_preferences.thumb_size = prefs.get("thumb_size", user_preferences.thumb_size)
|
|
user_preferences.maximized_assetbar_rows = prefs.get(
|
|
"maximized_assetbar_rows", user_preferences.maximized_assetbar_rows
|
|
)
|
|
user_preferences.search_field_width = prefs.get(
|
|
"search_field_width", user_preferences.search_field_width
|
|
)
|
|
user_preferences.search_in_header = prefs.get(
|
|
"search_in_header", user_preferences.search_in_header
|
|
)
|
|
user_preferences.tips_on_start = prefs.get(
|
|
"tips_on_start", user_preferences.tips_on_start
|
|
)
|
|
user_preferences.announcements_on_start = prefs.get(
|
|
"announcements_on_start", user_preferences.announcements_on_start
|
|
)
|
|
user_preferences.assetbar_follows_cursor = prefs.get(
|
|
"assetbar_follows_cursor", user_preferences.assetbar_follows_cursor
|
|
)
|
|
|
|
# NETWORK
|
|
user_preferences.client_port = prefs.get(
|
|
"client_port", user_preferences.client_port
|
|
)
|
|
user_preferences.ip_version = prefs.get("ip_version", user_preferences.ip_version)
|
|
try:
|
|
user_preferences.ssl_context = prefs.get(
|
|
"ssl_context", user_preferences.ssl_context
|
|
)
|
|
except Exception as e:
|
|
print(f"Failed to load ssl_context: {e}")
|
|
user_preferences.proxy_which = prefs.get(
|
|
"proxy_which", user_preferences.proxy_which
|
|
)
|
|
user_preferences.proxy_address = prefs.get(
|
|
"proxy_address", user_preferences.proxy_address
|
|
)
|
|
user_preferences.trusted_ca_certs = prefs.get(
|
|
"trusted_ca_certs", user_preferences.trusted_ca_certs
|
|
)
|
|
|
|
# UPDATES
|
|
user_preferences.auto_check_update = prefs.get(
|
|
"auto_check_update", user_preferences.auto_check_update
|
|
)
|
|
user_preferences.enable_prereleases = prefs.get(
|
|
"enable_prereleases", user_preferences.enable_prereleases
|
|
)
|
|
user_preferences.updater_interval_months = prefs.get(
|
|
"updater_interval_months", user_preferences.updater_interval_months
|
|
)
|
|
user_preferences.updater_interval_days = prefs.get(
|
|
"updater_interval_days", user_preferences.updater_interval_days
|
|
)
|
|
|
|
# IMPORT SETTINGS
|
|
user_preferences.resolution = prefs.get("resolution", user_preferences.resolution)
|
|
bk_logger.info("Successfully loaded preferences from %s", preferences_path)
|
|
user_preferences.preferences_lock = False
|
|
return prefs
|
|
|
|
|
|
def property_keep_preferences_updated(user_preferences, context):
|
|
"""Runs when keep_preferences BoolProperty is updated.
|
|
Delete preferences JSON file if set to False. Call save_prefs() in all cases.
|
|
"""
|
|
if user_preferences.keep_preferences is True:
|
|
return utils.save_prefs(user_preferences, context)
|
|
|
|
preferences_path = get_preferences_path()
|
|
if os.path.exists(preferences_path) is False:
|
|
return utils.save_prefs(user_preferences, context)
|
|
|
|
try:
|
|
os.remove(preferences_path)
|
|
bk_logger.info("Deleted preferences file %s", preferences_path)
|
|
except Exception as e:
|
|
bk_logger.error("Failed to delete preferences file %s: %s", preferences_path, e)
|
|
utils.save_prefs(user_preferences, context)
|