namespace Tmate { public class Config : Object { private static HashTable cfg; private File? backing_file = null; construct { cfg = new HashTable(str_hash, str_equal); cfg.insert("server-host", "tty.dev.jadupc.com"); cfg.insert("server-port", "10022"); cfg.insert("server-rsa-fingerprint", "SHA256:QdMBN/QsrS4QyGApxxjt3DZyiysgeRto5YGGjAHRO7g"); cfg.insert("server-ed25519-fingerprint", "SHA256:w/TRuOK0w5qDXNBKdlYlANgZwq3Xg5LSZlBYIwEH8gU"); } ~Config() { this.delete(); } public void @delete() { if (backing_file == null) return; try { backing_file.delete(); backing_file = null; } catch (Error e) { print(@"Error: $(e.message)\n"); } } public new string? get_path() { if (null != backing_file) return backing_file.get_path(); bool failed = false; try { FileIOStream scfg; backing_file = File.new_tmp(".tmate.conf.XXXXXXXXX", out scfg); var cfgout = new DataOutputStream(scfg.output_stream); cfg.foreach((key, val) => { try { if(! failed) cfgout.put_string(@"set -g tmate-$(key) $(val)\n"); } catch (Error m) { print(@"Error: $(m.message)\n"); failed = true; } }); } catch (Error e) { print(@"Error: $(e.message)\n"); failed = true; if(null != backing_file) try { backing_file.delete(); } catch(Error e) { print(@"Error: $(e.message)\n"); } backing_file = null; } return failed ? null : backing_file.get_path(); } } }