/* * pamac-vala * * Copyright (C) 2017 Chris Cromer * Copyright (C) 2014-2017 Guillaume Benoit * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a get of the GNU General Public License * along with this program. If not, see . */ namespace Pamac { class Config { string conf_path; HashTable _environment_variables; public bool recurse { get; private set; } public uint64 refresh_period { get; private set; } public bool no_update_hide_icon { get; private set; } #if DISABLE_AUR #else public bool enable_aur { get; private set; } public bool search_aur { get; private set; } public string aur_build_dir { get; private set; } public bool check_aur_updates { get; private set; } #endif public uint64 keep_num_pkgs { get; private set; } public bool rm_only_uninstalled { get; private set; } public unowned HashTable environment_variables { get { return _environment_variables; } } public Config (string path) { conf_path = path; //get environment variables _environment_variables = new HashTable (str_hash, str_equal); var utsname = Posix.utsname(); _environment_variables.insert ("HTTP_USER_AGENT", "pamac (%s %s)".printf (utsname.sysname, utsname.machine)); unowned string? variable = Environment.get_variable ("http_proxy"); if (variable != null) { _environment_variables.insert ("http_proxy", variable); } variable = Environment.get_variable ("https_proxy"); if (variable != null) { _environment_variables.insert ("https_proxy", variable); } variable = Environment.get_variable ("ftp_proxy"); if (variable != null) { _environment_variables.insert ("ftp_proxy", variable); } variable = Environment.get_variable ("socks_proxy"); if (variable != null) { _environment_variables.insert ("socks_proxy", variable); } variable = Environment.get_variable ("no_proxy"); if (variable != null) { _environment_variables.insert ("no_proxy", variable); } // set default option refresh_period = 6; reload (); } public void reload () { // set default options recurse = false; no_update_hide_icon = false; #if DISABLE_AUR #else enable_aur = false; search_aur = false; aur_build_dir = "/tmp"; check_aur_updates = false; #endif keep_num_pkgs = 3; rm_only_uninstalled = false; parse_file (conf_path); } void parse_file (string path) { var file = GLib.File.new_for_path (path); if (file.query_exists ()) { try { // Open file for reading and wrap returned FileInputStream into a // DataInputStream, so we can read line by line var dis = new DataInputStream (file.read ()); string? line; // Read lines until end of file (null) is reached while ((line = dis.read_line ()) != null) { if (line.length == 0) { continue; } // ignore whole line and end of line comments string[] splitted = line.split ("#", 2); line = splitted[0].strip (); if (line.length == 0) { continue; } splitted = line.split ("=", 2); unowned string key = splitted[0]._strip (); if (key == "RemoveUnrequiredDeps") { recurse = true; } else if (key == "RefreshPeriod") { if (splitted.length == 2) { unowned string val = splitted[1]._strip (); refresh_period = uint64.parse (val); } } else if (key == "NoUpdateHideIcon") { no_update_hide_icon = true; #if DISABLE_AUR #else } else if (key == "EnableAUR") { enable_aur = true; } else if (key == "SearchInAURByDefault") { search_aur = true; } else if (key == "BuildDirectory") { if (splitted.length == 2) { aur_build_dir = splitted[1]._strip (); } } else if (key == "CheckAURUpdates") { check_aur_updates = true; #endif } else if (key == "KeepNumPackages") { if (splitted.length == 2) { unowned string val = splitted[1]._strip (); keep_num_pkgs = uint64.parse (val); } } else if (key == "OnlyRmUninstalled") { rm_only_uninstalled = true; } } } catch (GLib.Error e) { GLib.stderr.printf("%s\n", e.message); } } else { GLib.stderr.printf ("File '%s' doesn't exist.\n", path); } } } }