summaryrefslogtreecommitdiff
path: root/src/tmate/config.vala
blob: 9f701917466860a7057e979128a5f476b10e39c5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
namespace Tmate
{
	public class Config : Object
	{
			private static HashTable<string, string> cfg;
			private File? backing_file = null;

			construct {
				cfg = new HashTable<string, string>(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();
			}
	}
}