Files
Text-Texture-Generator-for-…/presets/migration.py
2025-09-11 12:12:58 +03:00

125 lines
5.5 KiB
Python

# Migration functions for preset storage system
import bpy
import json
import os
import shutil
from datetime import datetime
def migrate_presets_if_needed():
"""
Migrate presets from older versions if needed.
This function checks if migration is required and performs it automatically.
Returns: dict with 'migrated_count' key indicating number of presets migrated.
"""
print("[TTG MIGRATION DEBUG] Starting migrate_presets_if_needed()")
preferences = bpy.context.preferences.addons.get("Text_Texture_Generator_Pro")
if not preferences:
print("[TTG MIGRATION DEBUG] No preferences found - returning proper dict format")
return {'migrated_count': 0}
addon_version = preferences.preferences.get("addon_version", "0.0.0")
current_version = "1.0.0" # This should match the addon's current version
if addon_version != current_version:
print(f"Text Texture Generator: Migrating presets from version {addon_version} to {current_version}")
# Backup existing presets before migration
backup_success = backup_presets()
if not backup_success:
print("Text Texture Generator: Warning - Failed to backup presets before migration")
# Perform migration steps based on version differences
migration_success = True
migrated_count = 0
try:
# Version-specific migration logic would go here
# For now, we'll just update the version number
preferences.preferences["addon_version"] = current_version
# In a real migration, this would be the actual count of migrated presets
# For now, we assume 1 migration operation (version update)
migrated_count = 1
if migration_success:
print(f"Text Texture Generator: Successfully migrated presets to version {current_version}")
else:
print("Text Texture Generator: Migration completed with warnings")
except Exception as e:
print(f"Text Texture Generator: Error during preset migration: {str(e)}")
migration_success = False
migrated_count = 0
print(f"[TTG MIGRATION DEBUG] Migration completed, returning proper dict format: migrated_count={migrated_count}")
return {'migrated_count': migrated_count}
print("[TTG MIGRATION DEBUG] No migration needed, returning proper dict format: migrated_count=0")
return {'migrated_count': 0} # No migration needed
def backup_presets():
"""
Create a backup of current presets before migration.
Returns True if backup was successful, False otherwise.
"""
try:
# Get the addon directory
addon_dir = os.path.dirname(__file__)
parent_dir = os.path.dirname(addon_dir)
# Create backup directory with timestamp
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
backup_dir = os.path.join(parent_dir, f"preset_backup_{timestamp}")
# Find preset files to backup
preset_files = []
# Check for blend file presets
if bpy.data.filepath:
blend_file_dir = os.path.dirname(bpy.data.filepath)
preset_file = os.path.join(blend_file_dir, ".text_texture_presets.json")
if os.path.exists(preset_file):
preset_files.append(preset_file)
# Check for persistent presets
preferences = bpy.context.preferences.addons.get("Text_Texture_Generator_Pro")
if preferences and hasattr(preferences.preferences, 'persistent_presets_path'):
persistent_path = preferences.preferences.persistent_presets_path
if persistent_path and os.path.exists(persistent_path):
preset_files.append(persistent_path)
# Check for legacy presets in addon directory
legacy_preset_file = os.path.join(parent_dir, "text_texture_presets.json")
if os.path.exists(legacy_preset_file):
preset_files.append(legacy_preset_file)
# Create backup if there are files to backup
if preset_files:
os.makedirs(backup_dir, exist_ok=True)
for preset_file in preset_files:
filename = os.path.basename(preset_file)
backup_path = os.path.join(backup_dir, filename)
shutil.copy2(preset_file, backup_path)
print(f"Text Texture Generator: Backed up {filename} to {backup_dir}")
# Create a backup info file
backup_info = {
"backup_timestamp": timestamp,
"addon_version_before_migration": bpy.context.preferences.addons.get("Text_Texture_Generator_Pro", {}).get("addon_version", "unknown"),
"files_backed_up": [os.path.basename(f) for f in preset_files]
}
info_file = os.path.join(backup_dir, "backup_info.json")
with open(info_file, 'w') as f:
json.dump(backup_info, f, indent=2)
print(f"Text Texture Generator: Created preset backup in {backup_dir}")
return True
else:
print("Text Texture Generator: No preset files found to backup")
return True # Not an error if there are no presets to backup
except Exception as e:
print(f"Text Texture Generator: Error creating preset backup: {str(e)}")
return False