You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubinstall-gtk/source/ubinstall-gtk.h

458 lines
19 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <locale.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <libintl.h>
#include <getopt.h>
#include <libintl.h>
#include <json-c/json.h>
#include <sys/statvfs.h>
#include <libublsettings.h>
#include <libublsettings-gtk3.h>
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
#endif
#include "ubl-strings.h"
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubinstall-gtk"
#define _(String) gettext(String)
#define glade_path "/com/ublinux/ui/ubinstall-gtk.glade"
#define glade_path_ubinstall_keyboard "/com/ublinux/ui/ubinstall-gtk-keyboard.glade"
#define glade_path_ubinstall_language "/com/ublinux/ui/ubinstall-gtk-language.glade"
#define glade_path_log_view "/com/ublinux/ui/ubinstall-gtk-log-view.glade"
#define ui_glade_path_about "/com/ublinux/ui/ubinstall-gtk-about.glade"
#define ui_glade_path_documentation "/com/ublinux/ui/ubinstall-gtk-documentation.glade"
#define CssPath "/com/ublinux/css/ubinstall-gtk.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define icon_path "com.ublinux.ubinstall-gtk"
#define LocalePath "/usr/share/locale"
#define LocaleName "ubinstall-gtk"
#define clear_config_both_command "ubconfig remove TEMP_SECTION TEMP_PATAMETER"
#define clear_config_global_command "ubconfig --target global remove TEMP_SECTION TEMP_PATAMETER"
#define clear_config_local_command "ubconfig --target system remove TEMP_SECTION TEMP_PATAMETER"
#define regions_path "/com/ublinux/images/map-time-zone.png"
#define keyboard_path "/com/ublinux/images/keyboard.png"
#define licence_path "/usr/share/ublinux/agreement/EULA.txt"
#define languages_path "/usr/share/ubinstall-gtk/csv/locales.csv"
#define zone_path "/usr/share/zoneinfo/"
#define additional_software_path "resource:///com/ublinux/csv/modules.csv"
#define slide_0_path "/com/ublinux/images/slide-0.png"
#define slide_repeat_path "/com/ublinux/images/slide-1.png", \
"/com/ublinux/images/slide-2.png", \
"/com/ublinux/images/slide-3.png", \
"/com/ublinux/images/slide-4.png", \
"/com/ublinux/images/slide-5.png", \
"/com/ublinux/images/slide-6.png", \
"/com/ublinux/images/slide-7.png", \
"/com/ublinux/images/slide-8.png", \
"/com/ublinux/images/slide-9.png", \
"/com/ublinux/images/slide-10.png", \
"/com/ublinux/images/slide-11.png", \
"/com/ublinux/images/slide-12.png", \
NULL
#define get_models_command "sed '/<\\/modelList>/q' /usr/share/X11/xkb/rules/base.xml | grep -E '^ {8,8}<name>|^ {8,8}<description>'|sed -e 's/ *<name>//g' -e 's,</name>,,g' -e 's/ *<description>//g' -e 's,</description>,,g'"
#define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL))
#define get_layouts_command "xkbcli list --load-exotic | awk \"layout && /description:/ {match(\\$0,/: *(.*)/,matches);description=matches[1];printf \\\"%s|%s\\n\\\",layout,description;layout=\\\"\\\"} /layout:/ {match(\\$0, /: *'([^']+)'/,matches);l=matches[1];if (layouts[l]) next;layout=layouts[l]=l}\" | sort -u"
#define get_layouts_local_command(layout) yon_char_unite("xkbcli list --load-exotic | awk -v layout=\"",layout,"\" \"BEGIN {layout_pattern = sprintf(\\\"^ *- *layout: *'%s'\\\",layout);matched=0} matched && /variant:/ {match(\\$0, /: *'([^']+)'/, matches);variant = matches[1]} matched && /description:/ {match(\\$0, /: *(.+)/, matches);description = matches[1]} matched && /^ *-/{matched=0; if (variant) printf \\\"%s|%s\\n\\\",variant,description} \\$0 ~ layout_pattern {matched=1;variant=\\\"\\\";description=\\\"\\\";next}\" | sort -u",NULL)
#define get_devices_command "lsblk --noheadings --nodeps -Jo PATH,SIZE,MODEL,VENDOR,SERIAL --exclude 7,253"
#define get_parts_and_devices_command "lsblk --noheadings -Jo TYPE,PATH,SIZE,FSTYPE,LABEL,PARTLABEL,MOUNTPOINT,FSUSED,FSUSE% --exclude 7,253"
#define AUTOINSTALL_TYPE_INSTALL "AUTOINSTALL[install_type]"
#define AUTOINSTALL_DEVICE "AUTOINSTALL[device]"
#define part_parameter "AUTOINSTALL[part]"
#define user_name_parameter "AUTOINSTALL[user_name]"
#define user_name_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_name]"
#define user_gecos_parameter "AUTOINSTALL[user_gecos]"
#define user_gecos_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_gecos]"
#define user_password_parameter "AUTOINSTALL[user_password]"
#define user_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_password]"
#define root_password_parameter "AUTOINSTALL[root_password]"
#define root_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[root_password]"
#define autologin_parameter "AUTOINSTALL[autologin]"
#define autologin_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[autologin]"
#define xkbmodel_parameter "AUTOINSTALL[xkbmodel]"
#define xkbmodel_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbmodel]"
#define xkblayout_parameter "AUTOINSTALL[xkblayout]"
#define xkblayout_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkblayout]"
#define xkbvariant_parameter "AUTOINSTALL[xkbvariant]"
#define xkbvariant_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbvariant]"
#define xkboptions_parameter "AUTOINSTALL[xkboptions]"
#define xkboptions_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkboptions]"
#define hostname_parameter "AUTOINSTALL[hostname]"
#define hostname_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[hostname]"
#define zone_parameter "AUTOINSTALL[zone]"
#define zone_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[zone]"
#define lang_parameter "AUTOINSTALL[lang]"
#define lang_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[lang]"
#define locale_parameter "AUTOINSTALL[locale]"
#define locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[locale]"
#define device_format_parameter "AUTOINSTALL[device_format]"
#define device_format_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device_format]"
#define device_label_parameter "AUTOINSTALL[part_label]"
#define device_label_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_label]"
#define part_size_parameter "AUTOINSTALL[part_size]"
#define part_size_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_size]"
#define part_type_parameter "AUTOINSTALL[part_fs_type]"
#define part_type_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_fs_type]"
#define save_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] AUTOINSTALL[log]=yes ",parameters, "; nice ubinstall2 --debug autoinstall'", NULL)
#define set_user_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] ",parameters,";nice ubinstall2 autoconfig'",NULL)
#define save_additional_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] ",parameters,"'",NULL)
#define open_gparted_command "gparted"
#define AUTOINSTALL_TYPE_INSTALL_command "ubconfig --source global get [autoinstall] AUTOINSTALL[install_type]"
#define AUTOINSTALL_DEVICE_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device]"
#define part_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part]"
#define PASSWORD_DEFAULT "ublinux"
#define start_fast_install_command "ubinstall2 --autoinstall"
#define progress_path "/var/log/ubinstall_progress.log"
#define password_limits_path "/etc/security/pwquiality.conf"
#define short_log_path "/var/log/ubinstall_progress.log"
#define full_log_path "/var/log/ubinstall.log"
#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]",NULL)
#define config_get_local_command "ubconfig --source system get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]"
#define config_get_global_command yon_char_new("ubconfig --source global get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]")
#define config_get_default_command "ubconfig --source default get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]"
#define config_get_global_only_parameters ""
#define config_get_local_only_parameters ""
#define ubconfig_file_create(target) yon_char_unite("ubconfig --target \"",target,"\" create",NULL)
typedef char* string;
string version_application;
char *local;
enum YON_PAGES {
YON_PAGE_WELCOME = 0,
YON_PAGE_LICENCE,
YON_PAGE_SECTIONS,
YON_PAGE_OS_COMPONENTS,
YON_PAGE_SOFTWARE,
YON_PAGE_INSTALLATION_BEGIN,
YON_PAGE_INSTALLATION,
YON_PAGE_REGION,
YON_PAGE_KEYBOARD,
YON_PAGE_USERS,
YON_PAGE_COMPLETION,
YON_PAGE_COMPLETED,
YON_PAGE_INSTALL_COMMON,
YON_PAGE_INSTALL_SEPARATE,
YON_PAGE_INSTALL_SAME_PARTITION,
YON_PAGE_INSTALL_OPTIONS,
YON_PAGE_OPTIONS_GRUB_INSTALL,
YON_PAGE_OPTIONS_GRUB_UPDATE,
YON_PAGE_OPTIONS_SEPARATE,
YON_PAGE_OPTIONS_SEPARATE_USRDATA,
YON_PAGE_OPTIONS_OS_ONLY,
YON_PAGE_OPTIONS_USRDATA_ONLY,
YON_PAGE_INSTALL_ERROR,
YON_PAGE_CONFIGURE_END
};
typedef struct {
int socket_id;
int load_socket_id;
int save_socket_id;
int lock_help;
int lock_save_local;
int lock_save_global;
int lock_load_global;
int always_open_documentation;
int password_min_length;
int save_done;
int load_mode;
int install_complete;
int debug_mode;
guint slider_thread;
int install_mode;
GThread *config_save_thread;
GThread *install_thread;
guint progress_thread;
int configure_mode;
int log_progress_buzy;
int autologin_default;
int format_default;
int log_end;
} config;
typedef struct {
GtkBuilder *builder;
GtkListStore *DevicesList;
GtkListStore *LanguagesList;
GtkTreeStore *LayoutList;
GtkListStore *AdditionalSoftwareList;
GtkListStore *PartitionsList;
GtkWidget *LoadGlobalConfigurationMenuItem;
GtkWidget *LoadLocalConfigurationMenuItem;
GtkWidget *LoadExternalConfigurationMenuItem;
GtkWidget *SaveGlobalLocalConfigurationMenuItem;
GtkWidget *SaveGlobalConfigurationMenuItem;
GtkWidget *SaveLocalConfigurationMenuItem;
GtkWidget *SaveExternalConfigurationMenuItem;
GtkWidget *SaveButton;
GtkWidget *MainWindow;
GtkWidget *StatusBox;
GtkWidget *WelcomeToggle;
GtkWidget *LicenceToggle;
GtkWidget *LocationToggle;
GtkWidget *KeyboardToggle;
GtkWidget *SectionsToggle;
GtkWidget *UsersToggle;
GtkWidget *SummaryToggle;
GtkWidget *CompletionToggle;
GtkWidget *InstallationToggle;
GtkWidget *LanguageCombo;
GtkWidget *RegionCombo;
GtkWidget *ZoneCombo;
GtkWidget *AvailableLanguagesEntry;
GtkWidget *AvailableLanguagesButton;
GtkWidget *LanguagesCombo;
GtkWidget *KeyboardModelCombo;
GtkWidget *LayoutBindingCombo;
GtkWidget *DefaultLayoutRadio;
GtkWidget *ManualLayoutRadio;
GtkWidget *LayoutTree;
GtkWidget *AddButton;
GtkWidget *RemoveButton;
GtkWidget *InstallationRadio;
GtkWidget *InstallationNearRadio;
GtkWidget *InstallationLinuxRadio;
GtkWidget *InstallationWindowsRadio;
GtkWidget *InstallationOptionsRadio;
GtkWidget *UserNameEntry;
GtkWidget *LoginEntry;
GtkWidget *PasswordCombo;
GtkWidget *PasswordEntry;
GtkWidget *PasswordButton;
GtkWidget *AutologinCheck;
GtkWidget *AdminPasswordCombo;
GtkWidget *AdminPasswordEntry;
GtkWidget *AdminPasswordButton;
GtkWidget *HotnameEntry;
GtkWidget *AutoHostnameCheck;
GtkWidget *CancelInstallButton;
GtkWidget *BackButton;
GtkWidget *NextButton;
GtkWidget *mainSettingsButton;
GtkWidget *menu1;
GtkWidget *menu2;
GtkWidget *RegionImage;
GtkWidget *RegionBox;
GtkWidget *RegionAspect;
GtkWidget *KeyboardImage;
GtkWidget *KeyboardBox;
GtkWidget *Notebook;
GtkWidget *LicenceLabel;
GtkWidget *SlidesImage;
GtkWidget *SameInstallationFilesystemTypeCombo;
GtkWidget *SameInstallationFormatCheck;
GtkWidget *SameInstallationSectionNameEntry;
GtkWidget *NextInstallationFilesystemTypeCombo;
GtkWidget *NextInstallationFormatCheck;
GtkWidget *NextInstallationSectionNameEntry;
GtkWidget *CommonInstallationFilesystemTypeCombo;
GtkWidget *CommonInstallationSectionNameEntry;
GtkWidget *InstallationNearSysDevicesTree;
GtkWidget *InstallationNearSysSectionTree;
GtkWidget *InstallationNearSizeSpin;
GtkWidget *InstallationNearSizeTypeSpin;
GtkWidget *SamePlaceDeviceTree;
GtkWidget *SamePlacePartTree;
GtkWidget *InstallationProgress;
GtkWidget *InstallationLabel;
GtkWidget *ReadShortLogButton;
GtkWidget *PackageInstallationProgress;
GtkWidget *PackageInstallationLabel;
GtkWidget *ReadFullLogButton;
GtkWidget *GpartedCommonButton;
GtkWidget *GpartedNearButton;
GtkWidget *GpartedSameButton;
GtkWidget *ConfigurationModeMenuItem;
GtkWidget *AboutMenuItem;
GtkWidget *DocumentationMenuItem;
GtkCellRenderer *AdditionalSoftwareCell;
GtkWidget *CommonInstallationDevicesTree;
GtkWidget *AdditionalSoftwareTree;
GtkWidget *GrubInstallRadio;
GtkWidget *GrubUpdateRadio;
GtkWidget *SeparateRadio;
GtkWidget *OSRadio;
GtkWidget *UserDataOnlyRadio;
GtkWidget *GpartedGrubInstallButton;
GtkWidget *GrubInstallDevicesTree;
GtkWidget *GpartedGrubUpdateButton;
GtkWidget *GrubUpdateDevicesTree;
GtkWidget *GpartedSeparateButton;
GtkWidget *SeparateDevicesTree;
GtkWidget *SeparateSysSectionTree;
GtkWidget *GpartedSeparateUserButton;
GtkWidget *SeparateUserDevicesTree;
GtkWidget *SeparateUserSysSectionTree;
GtkWidget *GpartedOSButton;
GtkWidget *OSDevicesTree;
GtkWidget *OSSysSectionTree;
GtkWidget *GpartedUserdataButton;
GtkWidget *UserdataDevicesTree;
GtkWidget *UserdataSysSectionTree;
GtkTreeModel *LanguagesFilter;
GtkTreeModel *LayoutsFilter;
GdkPixbuf *regions_original;
GdkPixbuf *keyboard_original;
GdkPixbuf **slides_original;
float region_height_mult;
GtkWidget *RegionSensitiveCheck;
GtkWidget *LanguagesSensitiveCheck;
GtkWidget *MainLanguageSensitiveCheck;
GtkWidget *KeyboardModelSensitiveCheck;
GtkWidget *OptionsSensitiveCheck;
GtkWidget *LayoutSensitiveCheck;
GtkWidget *UsernameSensitiveCheck;
GtkWidget *LoginSensitiveCheck;
GtkWidget *PasswordSensitiveCheck;
GtkWidget *AutologinSensitiveCheck;
GtkWidget *RootPasswordSensitiveCheck;
GtkWidget *HostnameSensitiveCheck;
GtkWidget *CommonFilesystemSensitiveCheck;
GtkWidget *CommonSectionSensitiveCheck;
GtkWidget *NextSizeSensitiveCheck;
GtkWidget *NextFSTypeSensitiveCheck;
GtkWidget *NextLabelSensitiveCheck;
GtkWidget *SameFSTypeSensitiveCheck;
GtkWidget *SameLabelSensitiveCheck;
} main_window;
typedef struct {
GtkWidget *Window;
GtkWidget *HeaderLabel;
GtkWidget *AlwaysOpenCheck;
GtkWidget *CloseButton;
GtkWidget *AcceptButton;
} documentation_confirmation_window;
typedef struct{
GtkWidget *MainWindow;
GtkWidget *StatusBox;
GtkWidget *headerBar;
GtkWidget *CancelButton;
GtkWidget *SaveButton;
GtkWidget *LayoutsTree;
GtkCellRenderer *ActiveToggle;
} ubinstall_keyboard_window;
typedef struct{
GtkListStore *liststore1;
GtkWidget *MainWindow;
GtkWidget *StatusBox;
GtkWidget *DefaultCheck;
GtkWidget *headerBar;
GtkWidget *CancelButton;
GtkWidget *SaveButton;
GtkWidget *LanguagesTree;
GtkCellRenderer *ToggleRenderer;
} ubinstall_language_window;
typedef struct{
GtkWidget *CreateGroupWindow;
GtkWidget *StatusBox;
GtkWidget *UserCancelButton;
GtkWidget *UserOkButton;
GtkWidget *PasswordEntry;
GtkWidget *RepeatPasswordEntry;
GtkWidget *PasswordHashEntry;
GtkWidget *HashBox;
GtkWidget *PasswordBox;
GtkWidget *NoEncriptionCheck;
} password_window;
typedef struct {
GtkWidget *Window;
GtkWidget *ScrollWindow;
GtkWidget *StatusBox;
GtkWidget *HeadLabel;
GtkWidget *LogLabel;
GtkWidget *ScrollToEndCheck;
char *command;
} log_window;
void config_init();
main_window *yon_main_window_complete();
ubinstall_language_window *yon_ubinstall_language_new();
void NewFunction(ubinstall_language_window *window, GtkBuilder *builder);
ubinstall_keyboard_window *yon_ubinstall_keyboard_new();
password_window *yon_password_new();
void on_password_accept(GtkWidget *self, dictionary *dict);
char* yon_debug_output(char *pattern,char*text);
char *yon_save_command_prepare(char *command, char *target);
void yon_interface_update(main_window *widgets);
void on_summary_log_view(GtkWidget *,main_window *widgets);
void on_near_installation_device_changed(GtkWidget *self, main_window *widgets);
void on_toggle_button_switch_on(GtkWidget *, GtkToggleButton *toggle);
void on_autohostname_sensitiveness_check(GtkWidget *, main_window *widgets);
void on_autohostname_check(GtkWidget *, main_window *widgets);
void on_hostname_entry_changed (GtkWidget *, main_window *widgets);