7 changed files with 332 additions and 88 deletions
			
			
		@ -0,0 +1,255 @@
					 | 
				
			||||
/*
 | 
				
			||||
 * greeter-config.c | 
				
			||||
 * | 
				
			||||
 * Copyright © 2017 Antergos Developers <dev@antergos.com> | 
				
			||||
 * | 
				
			||||
 * This file is part of lightdm-webkit2-greeter. | 
				
			||||
 * | 
				
			||||
 * lightdm-webkit2-greeter 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. | 
				
			||||
 * | 
				
			||||
 * lightdm-webkit2-greeter 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. | 
				
			||||
 * | 
				
			||||
 * The following additional terms are in effect as per Section 7 of the license: | 
				
			||||
 * | 
				
			||||
 * The preservation of all legal notices and author attributions in | 
				
			||||
 * the material or in the Appropriate Legal Notices displayed | 
				
			||||
 * by works containing it is required. | 
				
			||||
 * | 
				
			||||
 * You should have received a copy of the GNU General Public License | 
				
			||||
 * along with lightdm-webkit2-greeter; If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
#include <string.h> | 
				
			||||
#include <gtk/gtk.h> | 
				
			||||
 | 
				
			||||
#include "greeter-config.h" | 
				
			||||
#include "config.h" | 
				
			||||
#include "greeter-resources.h" | 
				
			||||
 | 
				
			||||
/* Work-around CLion bug */ | 
				
			||||
#ifndef CONFIG_DIR | 
				
			||||
#include "../build/src/config.h" | 
				
			||||
#include "../build/src/greeter-resources.h" | 
				
			||||
#endif | 
				
			||||
 | 
				
			||||
static Config config_instance; | 
				
			||||
static Config *config_instance_p = NULL; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
static void | 
				
			||||
apply_defaults(void) { | 
				
			||||
	config_instance.greeter->debug_mode = FALSE; | 
				
			||||
	config_instance.greeter->detect_theme_errors = TRUE; | 
				
			||||
	config_instance.greeter->secure_mode = TRUE; | 
				
			||||
	config_instance.greeter->screensaver_timeout = 300; | 
				
			||||
	config_instance.greeter->time_format = "LT"; | 
				
			||||
	config_instance.greeter->time_language = "auto"; | 
				
			||||
	config_instance.greeter->webkit_theme = "antergos"; | 
				
			||||
 | 
				
			||||
	config_instance.branding->background_images = BACKGROUND_IMAGES_DIR; | 
				
			||||
	config_instance.branding->logo = LOGO_IMAGE; | 
				
			||||
	config_instance.branding->user_image = USER_IMAGE; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
static gchar * | 
				
			||||
rtrim_comments(gchar *str) { | 
				
			||||
	gchar *ptr = NULL; | 
				
			||||
 | 
				
			||||
	ptr = strchr(str, '#'); | 
				
			||||
 | 
				
			||||
	if (NULL != ptr) { | 
				
			||||
		*ptr = '\0'; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	return g_strstrip(str); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
Config* | 
				
			||||
get_config(void) { | 
				
			||||
	if (NULL != config_instance_p) { | 
				
			||||
		return config_instance_p; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	// Apply default config.
 | 
				
			||||
	apply_defaults(); | 
				
			||||
 | 
				
			||||
	GError *err = NULL; | 
				
			||||
	GKeyFile *keyfile = g_key_file_new(); | 
				
			||||
 | 
				
			||||
	g_key_file_load_from_file(keyfile, CONFIG_FILE, G_KEY_FILE_NONE, &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		g_key_file_load_from_file(keyfile, CONFIG_FILE_LEGACY, G_KEY_FILE_NONE, &err); | 
				
			||||
 | 
				
			||||
		if (NULL != err) { | 
				
			||||
			// Can't load config file. Bail.
 | 
				
			||||
			goto cleanup; | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> WebKit Theme <<<----- */ | 
				
			||||
	gchar *theme = g_key_file_get_string(keyfile, "greeter", "webkit_theme", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		theme = g_key_file_get_string(keyfile, "greeter", "webkit-theme", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.greeter->webkit_theme = rtrim_comments(theme); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Screensaver Timeout <<<----- */ | 
				
			||||
	gint screensaver_timeout = g_key_file_get_integer(keyfile, "greeter", "screensaver_timeout", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		screensaver_timeout = g_key_file_get_integer(keyfile, "greeter", "screensaver-timeout", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.greeter->screensaver_timeout = screensaver_timeout; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Debug Mode <<<----- */ | 
				
			||||
	gboolean debug_mode = g_key_file_get_boolean(keyfile, "greeter", "debug_mode", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		debug_mode = g_key_file_get_integer(keyfile, "greeter", "debug-mode", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.greeter->debug_mode = debug_mode; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Secure Mode <<<----- */ | 
				
			||||
	gboolean secure_mode = g_key_file_get_boolean(keyfile, "greeter", "secure_mode", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		secure_mode = g_key_file_get_integer(keyfile, "greeter", "secure-mode", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.greeter->secure_mode = secure_mode; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Theme Error Detection <<<----- */ | 
				
			||||
	gboolean detect_theme_errors = g_key_file_get_boolean(keyfile, "greeter", "detect_theme_errors", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		detect_theme_errors = g_key_file_get_integer(keyfile, "greeter", "detect-theme-errors", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.greeter->detect_theme_errors = detect_theme_errors; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Time Format <<<----- */ | 
				
			||||
	gchar *time_format = g_key_file_get_string(keyfile, "greeter", "time_format", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		time_format = g_key_file_get_string(keyfile, "greeter", "time-format", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.greeter->time_format = time_format; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Time Language <<<----- */ | 
				
			||||
	gchar *time_language = g_key_file_get_string(keyfile, "greeter", "time_language", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		time_language = g_key_file_get_string(keyfile, "greeter", "time-language", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.greeter->time_language = time_language; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Background Images Directory <<<----- */ | 
				
			||||
	gchar *background_images = g_key_file_get_string(keyfile, "branding", "background_images", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		background_images = g_key_file_get_string(keyfile, "branding", "background-images", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.branding->background_images = background_images; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> User Avatar Image <<<----- */ | 
				
			||||
	gchar *user_image = g_key_file_get_string(keyfile, "branding", "user_image", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
		user_image = g_key_file_get_string(keyfile, "branding", "user-image", &err); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.branding->user_image = user_image; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	/* ----->>> Logo <<<----- */ | 
				
			||||
	gchar *logo = g_key_file_get_string(keyfile, "branding", "logo", &err); | 
				
			||||
 | 
				
			||||
	if (NULL != err) { | 
				
			||||
		g_clear_error(&err); | 
				
			||||
	} else { | 
				
			||||
		config_instance.branding->logo = logo; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	goto cleanup; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
	cleanup: | 
				
			||||
		config_instance_p = &config_instance; | 
				
			||||
 | 
				
			||||
		if (NULL != err) { | 
				
			||||
			g_error_free(err); | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		return config_instance_p; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,58 @@
					 | 
				
			||||
/*
 | 
				
			||||
 * greeter-config.h | 
				
			||||
 * | 
				
			||||
 * Copyright © 2017 Antergos Developers <dev@antergos.com> | 
				
			||||
 * | 
				
			||||
 * This file is part of lightdm-webkit2-greeter. | 
				
			||||
 * | 
				
			||||
 * lightdm-webkit2-greeter 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. | 
				
			||||
 * | 
				
			||||
 * lightdm-webkit2-greeter 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. | 
				
			||||
 * | 
				
			||||
 * The following additional terms are in effect as per Section 7 of the license: | 
				
			||||
 * | 
				
			||||
 * The preservation of all legal notices and author attributions in | 
				
			||||
 * the material or in the Appropriate Legal Notices displayed | 
				
			||||
 * by works containing it is required. | 
				
			||||
 * | 
				
			||||
 * You should have received a copy of the GNU General Public License | 
				
			||||
 * along with lightdm-webkit2-greeter; If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||
 */ | 
				
			||||
 | 
				
			||||
#ifndef LIGHTDM_WEBKIT2_GREETER_GREETER_CONFIG_H | 
				
			||||
#define LIGHTDM_WEBKIT2_GREETER_GREETER_CONFIG_H | 
				
			||||
 | 
				
			||||
#include <glib.h> | 
				
			||||
 | 
				
			||||
typedef struct greeter_config { | 
				
			||||
	gboolean debug_mode; | 
				
			||||
	gboolean detect_theme_errors; | 
				
			||||
	gint screensaver_timeout; | 
				
			||||
	gboolean secure_mode; | 
				
			||||
	gchar *time_format; | 
				
			||||
	gchar *time_language; | 
				
			||||
	gchar *webkit_theme; | 
				
			||||
} Greeter_Config; | 
				
			||||
 | 
				
			||||
typedef struct branding_config { | 
				
			||||
	gchar *background_images; | 
				
			||||
	gchar *logo; | 
				
			||||
	gchar *user_image; | 
				
			||||
} Branding_Config; | 
				
			||||
 | 
				
			||||
typedef struct config { | 
				
			||||
	Greeter_Config *greeter; | 
				
			||||
	Branding_Config *branding; | 
				
			||||
} Config; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
Config* get_config(void); | 
				
			||||
 | 
				
			||||
 | 
				
			||||
#endif // LIGHTDM_WEBKIT2_GREETER_GREETER_CONFIG_H
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue