Packages
Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.
Current section
Files
Jump to
Current section
Files
lib/raxol/system/updater/updater_state.ex
defmodule Raxol.System.Updater.State do
@moduledoc """
Refactored System Updater State module with GenServer-based state management.
This module provides backward compatibility while eliminating Process dictionary usage.
All state is now managed through the Updater.State.Server GenServer.
## Migration Notes
This module replaces direct Process dictionary usage with supervised GenServer state.
The API remains the same, but the implementation is now OTP-compliant and more robust.
## Features Maintained
* Update settings management
* Progress tracking for active updates
* Update history and statistics
* Error tracking and logging
* Auto-update configuration
"""
alias Raxol.System.Updater.State.UpdaterServer, as: Server
# @update_settings_file "~/.raxol/update_settings.json"
defp ensure_server_started do
Raxol.Core.Utils.GenServerHelpers.ensure_started(
Server,
fn -> Server.start_link() end
)
end
@doc """
Get the current update settings.
"""
def get_update_settings do
ensure_server_started()
Server.get_update_settings()
end
@doc """
Set the update settings.
"""
def set_update_settings(settings) do
ensure_server_started()
Server.set_update_settings(settings)
end
@doc """
Get the update history.
"""
def get_update_history do
ensure_server_started()
Server.get_update_history()
end
@doc """
Clear the update history.
"""
def clear_update_history do
ensure_server_started()
Server.clear_update_history()
end
@doc """
Get the current update progress (0-100).
"""
def get_update_progress do
ensure_server_started()
Server.get_update_progress()
end
@doc """
Set the update progress.
"""
def set_update_progress(progress) do
ensure_server_started()
Server.set_update_progress(progress)
end
@doc """
Cancel the current update operation.
"""
def cancel_update do
ensure_server_started()
Server.cancel_update()
end
@doc """
Get any error from the last update attempt.
"""
def get_update_error do
ensure_server_started()
Server.get_update_error()
end
@doc """
Set an update error.
"""
def set_update_error(error) do
ensure_server_started()
Server.set_update_error(error)
end
@doc """
Clear any update error.
"""
def clear_update_error do
ensure_server_started()
Server.clear_update_error()
end
@doc """
Get the update log.
"""
def get_update_log do
ensure_server_started()
Server.get_update_log()
end
@doc """
Clear the update log.
"""
def clear_update_log do
ensure_server_started()
Server.clear_update_log()
end
@doc """
Log an update message.
"""
def log_update(message) do
ensure_server_started()
Server.log_update(message)
end
@doc """
Get update statistics.
"""
def get_update_stats do
ensure_server_started()
Server.get_update_stats()
end
@doc """
Clear update statistics.
"""
def clear_update_stats do
ensure_server_started()
Server.clear_update_stats()
end
@doc """
Update the statistics.
"""
def update_stats(stats) do
ensure_server_started()
Server.update_stats(stats)
end
@doc """
Enable or disable automatic update checking.
"""
def set_auto_check(enabled) when is_boolean(enabled) do
ensure_server_started()
Server.set_auto_check(enabled)
end
@doc """
Returns the default update settings.
This is provided for backward compatibility.
"""
@spec default_update_settings() :: %{
:auto_update => boolean(),
:check_interval => pos_integer(),
:update_channel => atom(),
:notify_on_update => boolean(),
:download_path => String.t(),
:backup_path => String.t(),
:max_backups => pos_integer(),
:retry_count => non_neg_integer(),
:retry_delay => pos_integer(),
:timeout => pos_integer(),
:verify_checksums => boolean(),
:require_confirmation => boolean()
}
def default_update_settings do
%{
auto_update: true,
# 24 hours in seconds
check_interval: 24 * 60 * 60,
update_channel: :stable,
notify_on_update: true,
download_path: System.get_env("HOME") <> "/.raxol/downloads",
backup_path: System.get_env("HOME") <> "/.raxol/backups",
max_backups: 5,
retry_count: 3,
# seconds
retry_delay: 5,
# seconds
timeout: 300,
verify_checksums: true,
require_confirmation: true
}
end
end