169 lines
4.4 KiB
Go
169 lines
4.4 KiB
Go
// Package main provides settings import/export functionality for EMLy.
|
|
// This file contains methods for exporting and importing application settings
|
|
// as JSON files.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/wailsapp/wails/v2/pkg/runtime"
|
|
)
|
|
|
|
// =============================================================================
|
|
// Settings Export/Import Methods
|
|
// =============================================================================
|
|
|
|
// ExportSettings opens a save dialog and exports the provided settings JSON
|
|
// to the selected file location.
|
|
//
|
|
// The dialog is pre-configured with:
|
|
// - Default filename: emly_settings.json
|
|
// - Filter for JSON files
|
|
//
|
|
// Parameters:
|
|
// - settingsJSON: The JSON string containing all application settings
|
|
//
|
|
// Returns:
|
|
// - string: The path where settings were saved, or empty if cancelled
|
|
// - error: Error if dialog or file operations fail
|
|
func (a *App) ExportSettings(settingsJSON string) (string, error) {
|
|
// Open save dialog with JSON filter
|
|
savePath, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{
|
|
DefaultFilename: "emly_settings.json",
|
|
Title: "Export Settings",
|
|
Filters: []runtime.FileFilter{
|
|
{
|
|
DisplayName: "JSON Files (*.json)",
|
|
Pattern: "*.json",
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to open save dialog: %w", err)
|
|
}
|
|
|
|
// User cancelled
|
|
if savePath == "" {
|
|
return "", nil
|
|
}
|
|
|
|
// Ensure .json extension
|
|
if !strings.HasSuffix(strings.ToLower(savePath), ".json") {
|
|
savePath += ".json"
|
|
}
|
|
|
|
// Write the settings file
|
|
if err := os.WriteFile(savePath, []byte(settingsJSON), 0644); err != nil {
|
|
return "", fmt.Errorf("failed to write settings file: %w", err)
|
|
}
|
|
|
|
return savePath, nil
|
|
}
|
|
|
|
// ImportSettings opens a file dialog for the user to select a settings JSON file
|
|
// and returns its contents.
|
|
//
|
|
// The dialog is configured to only show JSON files.
|
|
//
|
|
// Returns:
|
|
// - string: The JSON content of the selected file, or empty if cancelled
|
|
// - error: Error if dialog or file operations fail
|
|
func (a *App) ImportSettings() (string, error) {
|
|
// Open file dialog with JSON filter
|
|
openPath, err := runtime.OpenFileDialog(a.ctx, runtime.OpenDialogOptions{
|
|
Title: "Import Settings",
|
|
Filters: []runtime.FileFilter{
|
|
{
|
|
DisplayName: "JSON Files (*.json)",
|
|
Pattern: "*.json",
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to open file dialog: %w", err)
|
|
}
|
|
|
|
// User cancelled
|
|
if openPath == "" {
|
|
return "", nil
|
|
}
|
|
|
|
// Read the settings file
|
|
data, err := os.ReadFile(openPath)
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to read settings file: %w", err)
|
|
}
|
|
|
|
return string(data), nil
|
|
}
|
|
|
|
// SetUpdateCheckerEnabled updates the UPDATE_CHECK_ENABLED setting in config.ini
|
|
// based on the user's preference from the GUI settings.
|
|
//
|
|
// Parameters:
|
|
// - enabled: true to enable update checking, false to disable
|
|
//
|
|
// Returns:
|
|
// - error: Error if loading or saving config fails
|
|
func (a *App) SetUpdateCheckerEnabled(enabled bool) error {
|
|
// Load current config
|
|
config := a.GetConfig()
|
|
if config == nil {
|
|
return fmt.Errorf("failed to load config")
|
|
}
|
|
|
|
// Update the setting
|
|
if enabled {
|
|
config.EMLy.UpdateCheckEnabled = "true"
|
|
} else {
|
|
config.EMLy.UpdateCheckEnabled = "false"
|
|
}
|
|
|
|
// Save config back to disk
|
|
if err := a.SaveConfig(config); err != nil {
|
|
return fmt.Errorf("failed to save config: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// SetExportAttachmentFolder updates the EXPORT_ATTACHMENT_FOLDER setting in config.ini
|
|
// based on the user's preference from the GUI settings.
|
|
//
|
|
// Parameters:
|
|
// - folderPath: The path to the folder where attachments should be exported
|
|
//
|
|
// Returns:
|
|
// - error: Error if loading or saving config fails
|
|
func (a *App) SetExportAttachmentFolder(folderPath string) error {
|
|
// Load current config
|
|
config := a.GetConfig()
|
|
if config == nil {
|
|
return fmt.Errorf("failed to load config")
|
|
}
|
|
|
|
// Update the setting
|
|
config.EMLy.ExportAttachmentFolder = folderPath
|
|
|
|
// Save config back to disk
|
|
if err := a.SaveConfig(config); err != nil {
|
|
return fmt.Errorf("failed to save config: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetExportAttachmentFolder returns the EXPORT_ATTACHMENT_FOLDER setting from config.ini
|
|
//
|
|
// Returns:
|
|
// - string: The path to the export folder, or empty string if not set
|
|
func (a *App) GetExportAttachmentFolder() string {
|
|
config := a.GetConfig()
|
|
if config == nil {
|
|
return ""
|
|
}
|
|
return config.EMLy.ExportAttachmentFolder
|
|
}
|