mfm/src/config.cr

64 lines
1.6 KiB
Crystal
Raw Normal View History

2023-10-25 12:01:46 +00:00
# SPDX-License-Identifier: GPL-3.0-or-later
#
# SPDX-FileCopyrightText: 2023 Glenn Y. Rolland <glenux@glenux.net>
# Copyright © 2023 Glenn Y. Rolland <glenux@glenux.net>
2023-10-22 21:23:56 +00:00
2023-10-24 13:53:28 +00:00
require "./filesystems"
2023-10-22 21:23:56 +00:00
module GX
class Config
enum Mode
Add
Edit
Run
end
2023-10-22 21:23:56 +00:00
record NoArgs
record AddArgs, name : String, path : String
record DelArgs, name : String
2023-10-24 13:53:28 +00:00
getter filesystems : Array(Filesystem)
getter home_dir : String
property mode : Mode
property path : String
property args : AddArgs.class | DelArgs.class | NoArgs.class
2023-10-22 21:23:56 +00:00
DEFAULT_CONFIG_PATH = "mfm.yml"
2023-10-22 21:23:56 +00:00
def initialize()
if !ENV["HOME"]?
raise "Home directory not found"
end
@home_dir = ENV["HOME"]
@mode = Mode::Run
2023-10-24 13:53:28 +00:00
@filesystems = [] of Filesystem
@path = File.join(@home_dir, ".config", DEFAULT_CONFIG_PATH)
@args = NoArgs
end
def load_from_file
2023-10-24 13:53:28 +00:00
@filesystems = [] of Filesystem
if !File.exists? @path
STDERR.puts "Error: file #{@path} does not exist!".colorize(:red)
exit(1)
end
2023-10-24 13:53:28 +00:00
load_filesystems(@path)
end
2023-10-24 13:53:28 +00:00
private def load_filesystems(config_path : String)
yaml_data = YAML.parse(File.read(config_path))
vaults_data = yaml_data["filesystems"].as_a
2023-10-24 13:53:28 +00:00
vaults_data.each do |filesystem_data|
type = filesystem_data["type"].as_s
name = filesystem_data["name"].as_s
# encrypted_path = filesystem_data["encrypted_path"].as_s
@filesystems << Filesystem.from_yaml(filesystem_data.to_yaml)
# @filesystems << Filesystem.new(name, encrypted_path, "#{name}.Open")
end
2023-10-22 21:23:56 +00:00
end
end
end