beterraba

ref: master

cmd/beterrabad/daemon.ha


use log;
use fmt;
use fs;
use os;
use path;
use strings;
use os::exec;
use beterraba;

fn setup(serv: *server) void = {
	// XXX: Load configuration as well?
	load(serv);
};

// TODO: Load according to the configured place
fn load(serv: *server) void = {
	const servdir = "/home/eletrotupi/.config/beterraba";
	let servnames: []str = [];
	defer free(servnames);

	const it = os::iter(servdir)!;
	defer os::finish(it);

	for (true) {
		match (fs::next(it)) {
		case let ent: fs::dirent =>
			if (ent.name == "." || ent.name == "..") {
				continue;
			};

			if (strings::hassuffix(ent.name, ".service")) {
				append(servnames, strings::dup(ent.name));
			};

		case void =>
			break;
		};
	};

	for (let i = 0z; i < len(servnames); i += 1) {
		const servpath = path::join(servdir, servnames[i]);
		const servfile = os::open(servpath)!;

		append(serv.services, beterraba::parse(servfile));
	};
};