Files
herolib/lib/circles/actionprocessor/factory.v
2025-03-16 08:41:45 +01:00

82 lines
2.2 KiB
V

module actionprocessor
import freeflowuniverse.herolib.circles.core.db
import freeflowuniverse.herolib.circles.mcc.db
import freeflowuniverse.herolib.circles.actions.db
import freeflowuniverse.herolib.circles.base
import freeflowuniverse.herolib.core.texttools
__global (
circle_global map[string]&CircleCoordinator
circle_default string
)
// HeroRunner is the main factory for managing jobs, agents, services, circles and names
@[heap]
pub struct CircleCoordinator {
pub mut:
name string //is a unique name on planetary scale is a dns name
agents &db.AgentDB
circles &db.CircleDB
names &db.NameDB
mails &db.MailDB
calendar &db.CalendarDB
jobs &db.JobDB
session_state base.SessionState
}
@[params]
pub struct CircleCoordinatorArgs{
pub mut:
name string = "local"
pubkey string // pubkey of user who called this
addr string //mycelium address
path string
}
// new creates a new CircleCoordinator instance
pub fn new(args_ CircleCoordinatorArgs) !&CircleCoordinator {
mut args:=args_
args.name = texttools.name_fix(args.name)
if args.name in circle_global {
mut c:=circle_global[args.name] or {panic("bug")}
return c
}
mut session_state:=models.new_session(name: args.name, pubkey: args.pubkey, addr: args.addr, path: args.path)!
// os.mkdir_all(mypath)!
// Create the directories if they don't exist// SHOULD BE AUTOMATIC
// os.mkdir_all(os.join_path(mypath, 'data_core'))!
// os.mkdir_all(os.join_path(mypath, 'data_mcc'))!
// os.mkdir_all(os.join_path(mypath, 'meta_core'))!
// os.mkdir_all(os.join_path(mypath, 'meta_mcc'))! //message, contacts, calendar
// Initialize the db handlers with proper ourdb instances
mut agent_db := core.new_agentdb(session_state)!
mut circle_db := core.new_circledb(session_state)!
mut name_db := core.new_namedb(session_state)!
mut mail_db := mcc.new_maildb(session_state)!
mut calendar_db := mcc.new_calendardb(session_state)!
mut job_db := actions.new_jobdb(session_state)!
mut cm := &CircleCoordinator{
agents: &agent_db
circles: &circle_db
names: &name_db
mails: &mail_db
calendar: &calendar_db
jobs: &job_db
session_state: session_state
}
circle_global[args.name] = cm
return cm
}