From 831e0ad1313725ec31d651add16eefa1bf47745e Mon Sep 17 00:00:00 2001 From: amid Date: Fri, 20 Jan 2023 01:08:56 +0600 Subject: [PATCH 1/2] Init --- Makefile | 61 + UBTime.cpp | 599 ++ main.cpp | 477 ++ messages.pot | 1552 +++++ ...freedesktop.policykit.UBTime.pkexec.policy | 24 + reg/Africa | 54 + reg/America | 147 + reg/Antarctica | 12 + reg/Arctic | 1 + reg/Asia | 99 + reg/Atlantic | 12 + reg/Australia | 23 + reg/Brazil | 4 + reg/Chile | 2 + reg/Europe | 64 + reg/Indian | 11 + reg/Mexico | 3 + reg/US | 12 + reg/locali111 | 69 + ubconfig_date_time.glade | 826 +++ ublinux-datetime-settings.svg | 5593 +++++++++++++++++ ublinux-logo.png | Bin 0 -> 6412 bytes 22 files changed, 9645 insertions(+) create mode 100644 Makefile create mode 100644 UBTime.cpp create mode 100644 main.cpp create mode 100644 messages.pot create mode 100644 org.freedesktop.policykit.UBTime.pkexec.policy create mode 100644 reg/Africa create mode 100644 reg/America create mode 100644 reg/Antarctica create mode 100644 reg/Arctic create mode 100644 reg/Asia create mode 100644 reg/Atlantic create mode 100644 reg/Australia create mode 100644 reg/Brazil create mode 100644 reg/Chile create mode 100644 reg/Europe create mode 100644 reg/Indian create mode 100644 reg/Mexico create mode 100644 reg/US create mode 100644 reg/locali111 create mode 100644 ubconfig_date_time.glade create mode 100644 ublinux-datetime-settings.svg create mode 100644 ublinux-logo.png diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5161b99 --- /dev/null +++ b/Makefile @@ -0,0 +1,61 @@ +#!/usr/bin/make -f + +pkgname="ubconfig" + +all: uninstall build check install clean + +uninstall: + pkgname="ubconfig" + for size in 16 32 48; do + rm -f "/usr/share/icons/hicolor/${size}x${size}/apps/ublinux-${pkgname}.svg" + rm -f "/usr/share/icons/hicolor/${size}x${size}/apps/hide_pass_icon.svg" + rm -f "/usr/share/icons/hicolor/${size}x${size}/apps/show_pass_icon.svg" + done + for file_po in *.po; do + lang=${file_po##*_};lang=${lang%.*} + file_mo=${file_po##*/}; file_mo="${file_mo%_*.po}.mo" + path_file_mo="/usr/share/locale/${lang}/LC_MESSAGES/${file_mo}" + rm -f "/usr/share/locale/${lang}/LC_MESSAGES/${file_mo}" + done + rm -f /usr/bin/"${pkgname}" + rm -f /usr/bin/"${pkgname}".gtk + rm -f /usr/share/"${pkgname}"/ui/"${pkgname}".glade + rm -f /usr/share/applications/"${pkgname}".desktop + rm -f /usr/share/"${pkgname}"/css/style.css + rm -f /usr/share/"${pkgname}"/images/side_img_ubc_v_dark.png + rm -f /usr/share/"${pkgname}"/images/side_img_ubc_v_light.png + rm -f /usr/share/polkit-1/actions/org.freedesktop.policykit."${pkgname}".pkexec.policy + +build: + echo "Build" + +check: + echo "Check" + +install: + for size in 16 32 48; do + install -dm755 /usr/share/icons/hicolor/${size}x${size}/apps + rsvg-convert -w ${size} -h ${size} -f svg --keep-image-data "ublinux-${pkgname}.svg" -o "/usr/share/icons/hicolor/${size}x${size}/apps/ublinux-${pkgname}.svg" + rsvg-convert -w ${size} -h ${size} -f svg --keep-image-data "hide_pass_icon.svg" -o "/usr/share/icons/hicolor/${size}x${size}/apps/hide_pass_icon.svg" + rsvg-convert -w ${size} -h ${size} -f svg --keep-image-data "show_pass_icon.svg" -o "/usr/share/icons/hicolor/${size}x${size}/apps/show_pass_icon.svg" + done + for file_po in *.po; do + lang=${file_po##*_};lang=${lang%.*} + install -dm755 /usr/share/locale/${lang}/LC_MESSAGES + file_mo=${file_po##*/}; file_mo="${file_mo%_*.po}.mo" + path_file_mo="/usr/share/locale/${lang}/LC_MESSAGES/${file_mo}" + msgfmt "${file_po}" -v -f -o "${path_file_mo}" + done + install -vDm0755 "${pkgname}" -t /usr/bin/ + install -vDm0755 "${pkgname}".gtk -t /usr/bin/ + install -vDm0644 "${pkgname}".glade -t /usr/share/"${pkgname}"/ui/ + install -vDm0644 "${pkgname}".desktop -t /usr/share/applications/ + install -vDm0644 style.css -t /usr/share/"${pkgname}"/css/ + install -vDm0644 side_img_ubc_v_dark.png -t /usr/share/"${pkgname}"/images/ + install -vDm0644 side_img_ubc_v_light.png -t /usr/share/"${pkgname}"/images/ + install -vDm0644 org.freedesktop.policykit."${pkgname}".pkexec.policy -t /usr/share/polkit-1/actions/ + + +clean: + echo "Clean" + diff --git a/UBTime.cpp b/UBTime.cpp new file mode 100644 index 0000000..90f2abe --- /dev/null +++ b/UBTime.cpp @@ -0,0 +1,599 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +string path_app= "/home/superadmin/Документы/Проект/ubconfig_new/Ubconfig_date_time/"; +string app_name = "UBTime"; +bool flag_datetime = false; +bool flag_timezone = false; +bool flag_ntp = false; +bool flag_update = false; + +class MainWindow : public Gtk::ApplicationWindow { +public: + MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) + : Gtk::ApplicationWindow(obj) + , builder{builder} + { + path_file+="reg/"; + this->get_builder(); + _numTimeHrs->set_range(0,23); + _numTimeMin->set_range(0,59); + _numTimeHrs->set_increments(1.0,1.0); + _numTimeMin->set_increments(1.0,1.0); + _txtDate->set_sensitive(false); + this->get_config(); + this->flag_block_gui(); + this->event(); + + } + + virtual ~MainWindow() = default; + + void flag_block_gui(){ + if (flag_datetime==true){ + _numTimeHrs->set_sensitive(false); + _numTimeMin->set_sensitive(false); + } + else if (flag_timezone==true){ + _cbRegion->set_sensitive(false); + _cbZone->set_sensitive(false); + _cbRegionGlob->set_sensitive(false); + _cbZoneGlob->set_sensitive(false); + _btnChooseDate->set_sensitive(false); + } + else if (flag_ntp==true){ + _cbxSynchronizeNtp->set_sensitive(false); + _cbDhcp->set_sensitive(false); + _txtNtpServer->set_sensitive(false); + } + else if (flag_update==true){ + _btnUpdateDateTime->set_sensitive(false); + } + } + void add_CSS(){ + Glib::RefPtr cssProvider = Gtk::CssProvider::create(); + cssProvider->load_from_path("style.css"); + Glib::RefPtr styleContext = Gtk::StyleContext::create(); + Glib::RefPtr screen = Gdk::Screen::get_default();//get default screen + styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application + Glib::RefPtr context = _btnUpdateDateTime->get_style_context(); + context->add_class("myButton"); + } + + void get_builder(){ + builder->set_translation_domain(app_name); + + builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime); + builder->get_widget("btnChooseDate", _btnChooseDate); + builder->get_widget("btnMessClose", _btnMessClose); + builder->get_widget("cbxSynchronizeNtp", _cbxSynchronizeNtp); + builder->get_widget("popCalendar", _popCalendar); + builder->get_widget("numTimeHrs", _numTimeHrs); + builder->get_widget("numTimeMin", _numTimeMin); + builder->get_widget("cbDhcp", _cbDhcp); + builder->get_widget("txtDate", _txtDate); + builder->get_widget("cbRegion", _cbRegion); + builder->get_widget("cbRegionGlob", _cbRegionGlob); + builder->get_widget("cbZone", _cbZone); + builder->get_widget("cbZoneGlob", _cbZoneGlob); + builder->get_widget("txtNtpServer", _txtNtpServer); + builder->get_widget("cldrDate", _cldrDate); + builder->get_widget("mess_dchp", _mess_dchp); + //this->add_CSS(); + } + void event(){ + _btnMessClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::gui_mess_close)); + _cldrDate->signal_day_selected().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); + _cbxSynchronizeNtp->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle)); + _btnUpdateDateTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::update_time_date)); + _btnChooseDate->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::calendar_show)); + _cbDhcp->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::event_entry_cbDhcp)); + _cbRegion->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone)); + _cbRegionGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone_glob)); + _cbZone->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone)); + _cbZoneGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone_glob)); + _txtNtpServer->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_ntp)); + //_txtNtpServer->grab_focus(); + } + + void gui_mess_close(){ + _mess_dchp->hide(); + } + + bool focus_ntp(GdkEventFocus* event){ + if (_txtNtpServer->get_text()=="" || _txtNtpServer->get_text()==" "){ + _mess_dchp->show(); + } + else{ + string cmd = ""; + cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=" + _txtNtpServer->get_text(); + this->call(cmd.c_str()); + } + + return true; + } + + + + + void event_entry_cbDhcp(){ + Glib::ustring str_dhcp = _cbDhcp->get_active_text(); + if (str_dhcp.length()!=0){ + if (str_dhcp=="DHCP"){ + string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=dhcp"; + system(cmd.c_str()); + _txtNtpServer->set_sensitive(false); + _cbDhcp->set_active(0); + _txtNtpServer->set_text(""); + } + else{ + string str_dhcp = this->call("sudo /usr/bin/ubconfig get network NTPSERVERS"); + + if ((str_dhcp!="") && (str_dhcp!="(null)") ){ + str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); + str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); + if (str_dhcp!="dhcp"){ + + + _txtNtpServer->set_text(str_dhcp); + } + _txtNtpServer->set_sensitive(true); + _cbDhcp->set_active(1); + } + } + } + else{ + string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=dhcp"; + system(cmd.c_str()); + //_txtNtpServer->set_sensitive(false); + _cbDhcp->set_active(0); + } + } + + void get_calendar(){ + _cldrDate->get_date(year, month, day); + string str_month = ""; + string str_day = ""; + month=month+1; + if (month <10){ + str_month = "0"+to_string(month); + } + else{ + str_month = to_string(month); + } + if (day <10){ + str_day = "0"+to_string(day); + } + else{ + str_day = to_string(day); + } + string date = str_day + '.' + str_month + '.' + to_string(year); + _txtDate->set_text(date); + } + + + void calendar_show(){ + time_t now = time(0); + tm *ltm = localtime(&now); + unsigned int y=1900+ ltm->tm_year; + unsigned int m=ltm->tm_mon; + unsigned int d=ltm->tm_mday; + + + _cldrDate->select_month(m,y); + _cldrDate->select_day(d); + _popCalendar->show(); + } + + void enry_dhcp_mess(){ + string str_dhcp = this->call("sudo /usr/bin/ubconfig get network NTPSERVERS"); + if ((str_dhcp!="") && (str_dhcp!="(null)")){ + _cbxSynchronizeNtp->set_active(1); + str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); + str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); + if (str_dhcp=="dhcp"){ + _cbDhcp->set_active(0); + _txtNtpServer->set_sensitive(false); + //_cbxSynchronizeNtp->set_sensitive(true); + } + else{ + if (str_dhcp==""){ + _mess_dchp->show(); + } + else{ + _cbDhcp->set_active(1); + //_txtNtpServer->set_sensitive(true); + //_cbxSynchronizeNtp->set_sensitive(false); + _txtNtpServer->set_text(str_dhcp); + } + } + + + //_cbxDhcp->set_active(true); + this->set_ntp_toggle(); + } + else{ + _cbxSynchronizeNtp->set_active(0); + _cbDhcp->set_sensitive(0); + _txtNtpServer->set_sensitive(0); + + } + } + void get_config(){ + this->read_file(); + this->update_hour_minute(); + this->update_calendar(); + //this->event_entry_cbDhcp(); + this->enry_dhcp_mess(); + + string str_ntp = this->call("sudo systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\""); + if (str_ntp.length()<50) { + _cbxSynchronizeNtp->set_active(false); + } + else{ + _cbxSynchronizeNtp->set_active(true); + } + + string read_reg_zon_cfg = this->call("sudo /usr/bin/ubconfig get clock ZONE"); + if ((read_reg_zon_cfg != "") && (read_reg_zon_cfg !="(null)")){ + read_reg_zon_cfg = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("=")+1,read_reg_zon_cfg.length()); + read_reg_zon_cfg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("\n")); + string str_filling_reg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("/")); + string str_filling_zon = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("/")+1,read_reg_zon_cfg.length()); + str_filling_zon = str_filling_zon.substr(0,str_filling_zon.find("\n")); + string str_zone_check = ""; + this->append_region_zone(str_filling_reg,str_filling_zon); + } + else { + this->append_region_zone("Asia","Omsk"); + + } + + } + + void enter_zone(){ + Glib::ustring zone_text = _cbZone->get_active_text(); + Glib::ustring reg_text = _cbRegion->get_active_text(); + if(!(zone_text.empty()) && !(reg_text.empty())){ + str_zone=zone_text.substr(zone_text.find(") ")+2,zone_text.length()); + str_region=reg_text; + string cmd = "sudo timedatectl set-timezone '" + str_region +"/" + str_zone+"'"; + system(cmd.c_str()); + } + else{ + str_zone=""; + str_region=""; + } + } + + void enter_zone_glob(){ + Glib::ustring zone_text = _cbZoneGlob->get_active_text(); + Glib::ustring reg_text = _cbRegionGlob->get_active_text(); + if(!(zone_text.empty()) && !(reg_text.empty())){ + str_zoneGlob = zone_text.substr(zone_text.find(") ")+2,zone_text.length()); + str_region_glob = reg_text; + string cmd = "sudo /usr/bin/ubconfig set clock ZONE=" +str_region_glob +"/" + str_zoneGlob; + system(cmd.c_str()); + } + else{ + str_zoneGlob=""; + str_region_glob=""; + } + } + + void set_ntp_toggle(){ + bool flag = _cbxSynchronizeNtp->get_active(); + if (flag_datetime==true){ + + } + else { + _numTimeHrs->set_sensitive(!flag); + _numTimeMin->set_sensitive(!flag); + _btnChooseDate->set_sensitive(!flag); + } + + //_txtDate->set_sensitive(!flag); + + //_btnUpdateDateTime->set_sensitive(!flag); + if (flag==false){ + system("sudo systemctl --now disable systemd-timesyncd.service ntpd.service"); + } + else { + system("sudo systemctl --now enable systemd-timesyncd.service"); + } + + } + + void append_region_zone(string region, string zone){ + int index = 0; + for ( const auto &text : time_reg_map ) { + _cbRegion->append(text.first); + _cbRegionGlob->append(text.first); + if (text.first == region){ + _cbRegionGlob->set_active(index); + _cbRegion->set_active(index); + + } + index+=1; + } + index = 0; + string cheek_zone = ""; + for (const auto &_str_zone : time_reg_map.at(region)){ + _cbZone->append(_str_zone); + _cbZoneGlob->append(_str_zone); + if (_str_zone!=""){ + cheek_zone = _str_zone.substr(_str_zone.find(") ")+2,_str_zone.length()); + if (cheek_zone == zone){ + _cbZone->set_active(index); + _cbZoneGlob->set_active(index); + } + } + index+=1; + } + } + string call(string cmd){ + FILE *fp; + int status; + char path[PATH_MAX]; + fp = popen(cmd.c_str(), "r"); + if (fp == NULL){ + //return ""; + } + + while (fgets(path, PATH_MAX, fp) != NULL){ + printf("%s", path); + break; + + } + + status = pclose(fp); + if (status == -1) { + //return ""; + } + else { + //return ""; + } + return path; + } + + void append_zone(){ + Glib::ustring text = _cbRegion->get_active_text(); + _cbZone->remove_all(); + + if(!(text.empty())){ + str_region = text; + for (const auto &_str_zone : time_reg_map.at(str_region)){ + _cbZone->append(_str_zone); + } + } + + } + + void append_zone_glob(){ + Glib::ustring text = _cbRegionGlob->get_active_text(); + _cbZoneGlob->remove_all(); + if(!(text.empty())){ + str_region_glob = text; + for (const auto &_str_zone : time_reg_map.at(str_region_glob)){ + _cbZoneGlob->append(_str_zone); + } + } + + } + void update_time_date(){ + this->enter_zone(); + bool flag = _cbxSynchronizeNtp->get_active(); + if (flag==false){ + hour = _numTimeHrs->get_value_as_int(); + minute = _numTimeMin->get_value_as_int(); + time_t now = time(0); + tm *ltm = localtime(&now); + string cmd = "sudo timedatectl set-time \""+ + to_string(hour) + ":" + to_string(minute) + + ":" + to_string(ltm->tm_sec) +"\""; + system(cmd.c_str()); + if ((year==0) && (month == 0) && (day == 0)){ + time_t now = time(0); + tm *ltm = localtime(&now); + year=1900+ ltm->tm_year; + month=ltm->tm_mon+1; + day=ltm->tm_mday; + } + string str_month = ""; + string str_day = ""; + if (month <10){ + str_month = "0"+to_string(month+1); + } + else{ + str_month = to_string(month+1); + } + if (day <10){ + str_day = "0"+to_string(day); + } + else{ + str_day = to_string(day); + } + string cmd1 = "sudo date --set=\"" +to_string(year)+ + str_month+str_day + " " +to_string(hour) + ":" + + to_string(minute)+"\""; + system(cmd1.c_str()); + } + + + } + void update_hour_minute(){ + time_t now = time(0); + tm *ltm = localtime(&now); + _numTimeHrs->set_value(ltm->tm_hour); + _numTimeMin->set_value(ltm->tm_min); + } + + void update_calendar(){ + time_t now = time(0); + tm *ltm = localtime(&now); + int year = 1900 + (int)ltm->tm_year; + string str_month = ""; + string str_day = ""; + unsigned int month, day; + month=ltm->tm_mon+1; + day=ltm->tm_mday; + if (month <=10){ + str_month = "0"+to_string(month); + } + else{ + str_month = to_string(month); + } + if (day <10){ + str_day = "0"+to_string(day); + } + else{ + str_day = to_string(day); + } + string date = str_day + '.' + str_month + '.' + to_string(year); + _txtDate->set_text(date); + } + void read_file(){ + std::string line; + namespace fs = std::filesystem; + for (const auto & entry : fs::directory_iterator(path_file)){ + std::ifstream in(entry.path()); // окрываем файл для чтения + if (in.is_open()) + { + vector zone; + zone.push_back(""); + while (getline(in, line)) + { + zone.push_back(string(gettext(line.c_str()))); + } + string key_reg = entry.path().filename().string(); + key_reg = string(gettext(key_reg.c_str())); + time_reg_map.insert({key_reg, zone}); + } + in.close(); + } + } + +private: + string path_file=path_app; + Glib::RefPtr builder; + Gtk::Button *_btnUpdateDateTime; + Gtk::Button *_btnChooseDate; + Gtk::Button *_btnMessClose; + Gtk::ComboBoxText *_cbDhcp; + Gtk::SpinButton *_numTimeHrs; + Gtk::SpinButton *_numTimeMin; + Gtk::CheckButton *_cbxSynchronizeNtp; + + Gtk::Entry *_txtDate; + Gtk::ComboBoxText *_cbRegion; + Gtk::ComboBoxText *_cbRegionGlob; + Gtk::ComboBoxText *_cbZone; + Gtk::ComboBoxText *_cbZoneGlob; + Gtk::Entry *_txtNtpServer; + Gtk::MessageDialog *_mess_dchp; + Gtk::Popover *_popCalendar; + Gtk::Calendar *_cldrDate; + unsigned int year, month, day; + int hour; + int minute; + string str_region=""; + string str_region_glob=""; + string str_txtDate; + string str_txtNtpServer; + string str_zone=""; + string str_zoneGlob; + std::map > time_reg_map; + +}; + +void help(){ + cout << "Параметры командной строки --lock-datetime\n --lock-timezone\n --lock-ntp\n --lock-update\n" << endl; +} + + +int main(int argc, char* argv[]) { + //path_app=filesystem::current_path(); + //path_app+="/"; + //cout << *argv[0] << endl; + //app_name=to_string(*argv[0]); + //app_name=app_name.substr(1, app_name.length()); + string str_cmd_argv = ""; + for (int i=1; iget_widget_derived("window", wnd); + auto r = app->run(*wnd); + + delete wnd; + + return r; +} \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..4b06858 --- /dev/null +++ b/main.cpp @@ -0,0 +1,477 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +class MainWindow; + +class MainWindow { +public: + MainWindow(Glib::RefPtr const& builder) + { + this->builder = builder; + this->get_builder(); + _numTimeHrs->set_range(0,23); + _numTimeMin->set_range(0,59); + _numTimeHrs->set_increments(1.0,1.0); + _numTimeMin->set_increments(1.0,1.0); + _txtDate->set_sensitive(false); + this->get_config(); + this->event(); + + + } + + virtual ~MainWindow() = default; + // Функция вызывается btnUpdateDate для обновления времени + void get_builder(){ + builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime); + builder->get_widget("btnChooseDate", _btnChooseDate); + builder->get_widget("cbxSynchronizeNtp", _cbxSynchronizeNtp); + builder->get_widget("popCalendar", _popCalendar); + builder->get_widget("numTimeHrs", _numTimeHrs); + builder->get_widget("numTimeMin", _numTimeMin); + builder->get_widget("cbDhcp", _cbDhcp); + builder->get_widget("txtDate", _txtDate); + builder->get_widget("cbRegion", _cbRegion); + builder->get_widget("cbRegionGlob", _cbRegionGlob); + builder->get_widget("cbZone", _cbZone); + builder->get_widget("cbZoneGlob", _cbZoneGlob); + builder->get_widget("txtNtpServer", _txtNtpServer); + builder->get_widget("cldrDate", _cldrDate); + builder->get_widget("mess_dchp", _mess_dchp); + + } + void event(){ + _cldrDate->signal_day_selected().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); + _cbxSynchronizeNtp->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle)); + _btnUpdateDateTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::update_time_date)); + _btnChooseDate->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::calendar_show)); + _cbDhcp->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::get_ghcp)); + _cbRegion->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone)); + _cbRegionGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone_glob)); + _cbZone->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone)); + _cbZoneGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone_glob)); + _txtNtpServer->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::A));; + } + + void focus_ntp(){ + + } + void A(){ + cout << "A" << endl; + //_txtNtpServer->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_ntp)); + } + + + + + void enry_dhcp_mess(){} + + void get_ghcp(){ + Glib::ustring str_dhcp = _cbDhcp->get_active_text(); + if (str_dhcp.length()!=0){ + if (str_dhcp=="DHCP"){ + string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=dhcp"; + system(cmd.c_str()); + //_txtNtpServer->set_active(false); + _cbDhcp->set_active(0); + } + else{ + string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=" + _txtNtpServer->get_text(); + //_txtNtpServer->set_active(true); + system(cmd.c_str()); + _cbDhcp->set_active(1); + } + } + else{ + string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=dhcp"; + system(cmd.c_str()); + //_txtNtpServer->set_sensitive(false); + _cbDhcp->set_active(0); + } + } + + void get_calendar(){ + _cldrDate->get_date(year, month, day); + string date = to_string(day) + ':' + to_string(month+1) + ':' + to_string(year); + _txtDate->set_text(date); + } + + + void calendar_show(){ + time_t now = time(0); + tm *ltm = localtime(&now); + unsigned int y=1900+ ltm->tm_year; + unsigned int m=ltm->tm_mon; + unsigned int d=ltm->tm_mday; + + + _cldrDate->select_month(m,y); + _cldrDate->select_day(d); + _popCalendar->show(); + } + + void get_config(){ + this->read_file(); + this->update_hour_minute(); + this->update_calendar(); + this->get_ghcp(); + string str_dhcp = this->call("sudo /usr/bin/ubconfig get network NTPSERVERS"); + cout << str_dhcp << endl; + if ((str_dhcp!="") && (str_dhcp!="(null)")){ + str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); + str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); + if (str_dhcp=="dhcp"){ + _cbDhcp->set_active(0); + //_txtNtpServer->set_sensitive(false); + //_cbxSynchronizeNtp->set_sensitive(true); + } + else{ + if (str_dhcp==""){ + _mess_dchp->show(); + } + else{ + _cbDhcp->set_active(1); + //_txtNtpServer->set_sensitive(true); + //_cbxSynchronizeNtp->set_sensitive(false); + _txtNtpServer->set_text(str_dhcp); + } + } + + + //_cbxDhcp->set_active(true); + this->set_ntp_toggle(); + } + string str_ntp = this->call("sudo systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\""); + if (str_ntp.length()<50) { + _cbxSynchronizeNtp->set_active(false); + } + else{ + _cbxSynchronizeNtp->set_active(true); + } + + string read_reg_zon_cfg = this->call("sudo /usr/bin/ubconfig get clock ZONE"); + if ((read_reg_zon_cfg != "") && (read_reg_zon_cfg !="(null)")){ + read_reg_zon_cfg = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("=")+1,read_reg_zon_cfg.length()); + read_reg_zon_cfg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("\n")); + string str_filling_reg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("/")); + string str_filling_zon = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("/")+1,read_reg_zon_cfg.length()); + str_filling_zon = str_filling_zon.substr(0,str_filling_zon.find("\n")); + string str_zone_check = ""; + this->append_region_zone(str_filling_reg,str_filling_zon); + } + else { + this->append_region_zone("Asia","Omsk"); + + } + + } + + void enter_zone(){ + Glib::ustring zone_text = _cbZone->get_active_text(); + Glib::ustring reg_text = _cbRegion->get_active_text(); + if(!(zone_text.empty()) && !(reg_text.empty())){ + str_zone=zone_text.substr(zone_text.find(") ")+2,zone_text.length()); + str_region=reg_text; + string cmd = "sudo timedatectl set-timezone '" + str_region +"/" + str_zone+"'"; + system(cmd.c_str()); + } + else{ + str_zone=""; + str_region=""; + } + } + + void enter_zone_glob(){ + Glib::ustring zone_text = _cbZoneGlob->get_active_text(); + Glib::ustring reg_text = _cbRegionGlob->get_active_text(); + if(!(zone_text.empty()) && !(reg_text.empty())){ + str_zoneGlob = zone_text.substr(zone_text.find(") ")+2,zone_text.length()); + str_region_glob = reg_text; + string cmd = "sudo /usr/bin/ubconfig set clock ZONE=" +str_region_glob +"/" + str_zoneGlob; + system(cmd.c_str()); + } + else{ + str_zoneGlob=""; + str_region_glob=""; + } + } + + void set_ntp_toggle(){ + bool flag = _cbxSynchronizeNtp->get_active(); + _numTimeHrs->set_sensitive(!flag); + _numTimeMin->set_sensitive(!flag); + //_txtDate->set_sensitive(!flag); + _btnChooseDate->set_sensitive(!flag); + //_btnUpdateDateTime->set_sensitive(!flag); + if (flag==false){ + system("sudo systemctl --now disable systemd-timesyncd.service ntpd.service"); + } + else { + system("sudo systemctl --now enable systemd-timesyncd.service"); + } + + } + + void append_region_zone(string region, string zone){ + int index = 0; + for ( const auto &text : time_reg_map ) { + _cbRegion->append(text.first); + _cbRegionGlob->append(text.first); + if (text.first == region){ + _cbRegionGlob->set_active(index); + _cbRegion->set_active(index); + + } + index+=1; + } + index = 0; + string cheek_zone = ""; + for (const auto &_str_zone : time_reg_map.at(region)){ + _cbZone->append(_str_zone); + _cbZoneGlob->append(_str_zone); + if (_str_zone!=""){ + cheek_zone = _str_zone.substr(_str_zone.find(") ")+2,_str_zone.length()); + if (cheek_zone == zone){ + _cbZone->set_active(index); + _cbZoneGlob->set_active(index); + } + } + index+=1; + } + } + string call(string cmd){ + FILE *fp; + int status; + char path[PATH_MAX]; + fp = popen(cmd.c_str(), "r"); + if (fp == NULL){ + //return ""; + } + + while (fgets(path, PATH_MAX, fp) != NULL){ + printf("%s", path); + break; + + } + + status = pclose(fp); + if (status == -1) { + //return ""; + } + else { + //return ""; + } + return path; + } + + void append_zone(){ + Glib::ustring text = _cbRegion->get_active_text(); + _cbZone->remove_all(); + + if(!(text.empty())){ + str_region = text; + for (const auto &_str_zone : time_reg_map.at(str_region)){ + _cbZone->append(_str_zone); + } + } + + } + + void append_zone_glob(){ + Glib::ustring text = _cbRegionGlob->get_active_text(); + _cbZoneGlob->remove_all(); + if(!(text.empty())){ + str_region_glob = text; + for (const auto &_str_zone : time_reg_map.at(str_region_glob)){ + _cbZoneGlob->append(_str_zone); + } + } + + } + void update_time_date(){ + this->enter_zone(); + bool flag = _cbxSynchronizeNtp->get_active(); + if (flag==false){ + hour = _numTimeHrs->get_value_as_int(); + minute = _numTimeMin->get_value_as_int(); + time_t now = time(0); + tm *ltm = localtime(&now); + string cmd = "sudo timedatectl set-time \""+ + to_string(hour) + ":" + to_string(minute) + + ":" + to_string(ltm->tm_sec) +"\""; + system(cmd.c_str()); + if ((year==0) && (month == 0) && (day == 0)){ + time_t now = time(0); + tm *ltm = localtime(&now); + year=1900+ ltm->tm_year; + month=ltm->tm_mon+1; + day=ltm->tm_mday; + } + string str_mount = ""; + string str_day = ""; + if (month <10){ + str_mount = "0"+to_string(month+1); + } + else{ + str_mount = to_string(month+1); + } + if (day <10){ + str_day = "0"+to_string(day); + } + else{ + str_day = to_string(day); + } + string cmd1 = "sudo date --set=\"" +to_string(year)+ + str_mount+str_day + " " +to_string(hour) + ":" + + to_string(minute)+"\""; + system(cmd1.c_str()); + } + + + } + void update_hour_minute(){ + time_t now = time(0); + tm *ltm = localtime(&now); + _numTimeHrs->set_value(ltm->tm_hour); + _numTimeMin->set_value(ltm->tm_min); + } + + void update_calendar(){ + time_t now = time(0); + tm *ltm = localtime(&now); + int year = 1900 + (int)ltm->tm_year; + string date = to_string(ltm->tm_mday) + ':' + to_string(ltm->tm_mon+1) + ':' + to_string(year); + _txtDate->set_text(date); + } + void read_file(){ + std::string line; + namespace fs = std::filesystem; + for (const auto & entry : fs::directory_iterator(path_file)){ + std::ifstream in(entry.path()); // окрываем файл для чтения + if (in.is_open()) + { + vector zone; + zone.push_back(""); + while (getline(in, line)) + { + zone.push_back(string(gettext(line.c_str()))); + } + string key_reg = entry.path().filename().string(); + key_reg = string(gettext(key_reg.c_str())); + time_reg_map.insert({key_reg, zone}); + } + in.close(); + } + } + +private: + string path_file="reg/"; + Glib::RefPtr builder; + Gtk::Button *_btnUpdateDateTime; + Gtk::Button *_btnChooseDate; + Gtk::ComboBoxText *_cbDhcp; + Gtk::SpinButton *_numTimeHrs; + Gtk::SpinButton *_numTimeMin; + Gtk::CheckButton *_cbxSynchronizeNtp; + + Gtk::Entry *_txtDate; + Gtk::ComboBoxText *_cbRegion; + Gtk::ComboBoxText *_cbRegionGlob; + Gtk::ComboBoxText *_cbZone; + Gtk::ComboBoxText *_cbZoneGlob; + Gtk::Entry *_txtNtpServer; + Gtk::MessageDialog *_mess_dchp; + Gtk::Popover *_popCalendar; + Gtk::Calendar *_cldrDate; + unsigned int year, month, day; + int hour; + int minute; + string str_region=""; + string str_region_glob=""; + string str_txtDate; + string str_txtNtpServer; + string str_zone=""; + string str_zoneGlob; + std::map > time_reg_map; + +}; + +class WrapperMainWindow : public Gtk::ApplicationWindow { + public: + WrapperMainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) + : Gtk::ApplicationWindow(obj) + , builder{builder} + { + MainWindow MainWindow(builder); + } + virtual ~WrapperMainWindow() = default; + + private: + Glib::RefPtr builder; +}; +/* +class PlugMainWindow : public Gtk::Plug +{ + +public: + + SettingsPlug(::Window p_socketID) + : Gtk::Plug{p_socketID} + { + + } + void get_builder(Glib::RefPtr const& builder) + { + this->builder = builder; + } + private: + Glib::RefPtr builder; +} +*/ +int main(int argc, char* argv[]) { + string app_name = "main"; + //setlocale(LC_ALL, ""); + //bindtextdomain(app_name, "/usr/share/locale"); + //textdomain(app_name); + auto app = Gtk::Application::create(argc, argv, "de.engelmarkus.example"); + auto builder = Gtk::Builder::create_from_file("ubconfig_date_time.glade"); + + Glib::OptionContext context; + /*CmdArgParser parser{ + "Socket ID", + "Command line argument for socket ID communication.", + "No help available, sorry" + }*/ + + + //context.set_main_group(parser); + //context.parse(argc, argv); + + //::Window socketID = parser.GetSocketID(); + //SettingsPlug plug{socketID}; + //plug.show(); + + WrapperMainWindow * wnd = nullptr; + + builder->get_widget_derived("window", wnd); + + auto r = app->run(*wnd); + + delete wnd; + + return r; +} \ No newline at end of file diff --git a/messages.pot b/messages.pot new file mode 100644 index 0000000..5aac87c --- /dev/null +++ b/messages.pot @@ -0,0 +1,1552 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-14 18:29+0600\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Ok +#: ubconfig_date_time.glade:26 +msgctxt "Ok" +msgid "Oк" +msgstr "" + +#. Enter DHCP +#: ubconfig_date_time.glade:68 +msgctxt "Enter DHCP" +msgid "Введите DHCP" +msgstr "" + +#. UBconfig - Дата и время +#: ubconfig_date_time.glade:88 +msgctxt "UBconfig - Дата и время" +msgid "UBconfig - Дата и время" +msgstr "" + +#: ubconfig_date_time.glade:123 +msgid "Изменить параметр NTPSERVERS" +msgstr "" + +#. Setting the date and time +#: ubconfig_date_time.glade:130 ubconfig_date_time.glade:553 +msgctxt "Setting the date and time" +msgid "Настройка даты и времени" +msgstr "" + +#. Time +#: ubconfig_date_time.glade:204 +msgctxt "Time" +msgid "Время" +msgstr "" + +#. Clock +#: ubconfig_date_time.glade:218 +msgctxt "Clock" +msgid "Часы" +msgstr "" + +#: ubconfig_date_time.glade:239 +msgid ":" +msgstr "" + +#. Minutes +#: ubconfig_date_time.glade:251 +msgctxt "Minutes" +msgid "Минуты" +msgstr "" + +#. Date +#: ubconfig_date_time.glade:289 +msgctxt "Date" +msgid "Дата" +msgstr "" + +#. Date of +#. Format: DD.MM.YYYY +#: ubconfig_date_time.glade:304 +msgctxt "" +"Date of\n" +"Format: DD.MM.YYYY" +msgid "" +"Дата\n" +"Формат: ДД.ММ.ГГГГ" +msgstr "" + +#. Interactive date picker +#: ubconfig_date_time.glade:323 +msgctxt "Interactive date picker" +msgid "Интерактивный выбор даты" +msgstr "" + +#. Change zone setting +#: ubconfig_date_time.glade:360 ubconfig_date_time.glade:679 +msgctxt "Change zone setting" +msgid "Изменить параметр зоны" +msgstr "" + +#. time zone +#: ubconfig_date_time.glade:367 +msgctxt "time zone" +msgid "Временная зона" +msgstr "" + +#. Region +#: ubconfig_date_time.glade:393 ubconfig_date_time.glade:400 +#: ubconfig_date_time.glade:712 ubconfig_date_time.glade:719 +msgctxt "Region" +msgid "Регион" +msgstr "" + +#. Zone +#: ubconfig_date_time.glade:430 ubconfig_date_time.glade:437 +#: ubconfig_date_time.glade:749 ubconfig_date_time.glade:756 +msgctxt "Zone" +msgid "Зона" +msgstr "" + +#. Update date and time +#: ubconfig_date_time.glade:516 ubconfig_date_time.glade:523 +msgctxt "Update date and time" +msgid "Обновить дату и время" +msgstr "" + +#. Synchronize via NTP +#: ubconfig_date_time.glade:601 +msgctxt "Synchronize via NTP" +msgid "Синхронизировать через NTP" +msgstr "" + +#. Automatic time synchronization +#: ubconfig_date_time.glade:605 +msgctxt "Automatic time synchronization" +msgid "Автоматическая синхронизация времени" +msgstr "" + +#. Synchronization method +#: ubconfig_date_time.glade:625 +msgctxt "Synchronization method" +msgid "Способ синхронизации" +msgstr "" + +#. DHCP +#: ubconfig_date_time.glade:633 +msgctxt "DHCP" +msgid "DHCP" +msgstr "" + +#. Manually +#: ubconfig_date_time.glade:634 +msgctxt "Manually" +msgid "Вручную" +msgstr "" + +#. Server input for date and time synchronization: +#. Local (DHCP) or arbitrary +#: ubconfig_date_time.glade:647 +msgctxt "" +"Server input for date and time synchronization:\n" +"Local (DHCP) or arbitrary" +msgid "" +"Ввод сервера для синхронизации даты и времени:\n" +"Локальный (DHCP) или произвольный" +msgstr "" + +#. Time zone +#: ubconfig_date_time.glade:686 +msgctxt "Time zone" +msgid "Временная зона" +msgstr "" + +#. Setting date and time in global configuration +#: ubconfig_date_time.glade:811 +msgctxt "Setting date and time in global configuration" +msgid "Настройка даты и времени в глобальной конфигурации" +msgstr "" + +msgid "Mexico" +msgstr "Мексика" + +msgid "BajaNorte" +msgstr "" + +msgid "BajaSur" +msgstr "Южная Нижняя Калифорния" + +msgid "General" +msgstr "" + +msgid "Arctic" +msgstr "" + +msgid "Longyearbyen" +msgstr "" + +msgid "Indian" +msgstr "" + +msgid "Comoro" +msgstr "" + +msgid "Antananarivo" +msgstr "" + +msgid "Mayotte" +msgstr "" + +msgid "Mauritius" +msgstr "" + +msgid "Reunion" +msgstr "" + +msgid "Mahe" +msgstr "" + +msgid "Maldives" +msgstr "" + +msgid "Kerguelen" +msgstr "" + +msgid "Chagos" +msgstr "" + +msgid "Cocos" +msgstr "" + +msgid "Christmas" +msgstr "" + +msgid "Europe" +msgstr "" + +msgid "Jersey" +msgstr "" + +msgid "Dublin" +msgstr "" + +msgid "Belfast" +msgstr "" + +msgid "Guernsey" +msgstr "" + +msgid "London" +msgstr "" + +msgid "Lisbon" +msgstr "" + +msgid "Isle_of_Man" +msgstr "" + +msgid "Ljubljana" +msgstr "" + +msgid "Stockholm" +msgstr "" + +msgid "Skopje" +msgstr "" + +msgid "Oslo" +msgstr "" + +msgid "Sarajevo" +msgstr "" + +msgid "Tirane" +msgstr "" + +msgid "Zagreb" +msgstr "" + +msgid "Vienna" +msgstr "" + +msgid "Andorra" +msgstr "" + +msgid "Madrid" +msgstr "" + +msgid "Podgorica" +msgstr "" + +msgid "Copenhagen" +msgstr "" + +msgid "Monaco" +msgstr "" + +msgid "Belgrade" +msgstr "" + +msgid "Budapest" +msgstr "" + +msgid "Brussels" +msgstr "" + +msgid "Amsterdam" +msgstr "" + +msgid "Berlin" +msgstr "" + +msgid "Zurich" +msgstr "" + +msgid "Bratislava" +msgstr "" + +msgid "Prague" +msgstr "" + +msgid "Malta" +msgstr "" + +msgid "Rome" +msgstr "" + +msgid "Luxembourg" +msgstr "" + +msgid "Vaduz" +msgstr "" + +msgid "Paris" +msgstr "" + +msgid "Warsaw" +msgstr "" + +msgid "Vatican" +msgstr "" + +msgid "Busingen" +msgstr "" + +msgid "Gibraltar" +msgstr "" + +msgid "San_Marino" +msgstr "" + +msgid "Sofia" +msgstr "" + +msgid "Vilnius" +msgstr "" + +msgid "Helsinki" +msgstr "" + +msgid "Mariehamn" +msgstr "" + +msgid "Riga" +msgstr "" + +msgid "Bucharest" +msgstr "" + +msgid "Kyiv" +msgstr "" + +msgid "Kiev" +msgstr "" + +msgid "Athens" +msgstr "" + +msgid "Zaporozhye" +msgstr "" + +msgid "Tallinn" +msgstr "" + +msgid "Kaliningrad" +msgstr "" + +msgid "Uzhgorod" +msgstr "" + +msgid "Chisinau" +msgstr "" + +msgid "Nicosia" +msgstr "" + +msgid "Tiraspol" +msgstr "" + +msgid "Simferopol" +msgstr "" + +msgid "Istanbul" +msgstr "" + +msgid "Moscow" +msgstr "" + +msgid "Kirov" +msgstr "" + +msgid "Minsk" +msgstr "" + +msgid "Volgograd" +msgstr "" + +msgid "Ulyanovsk" +msgstr "" + +msgid "Samara" +msgstr "" + +msgid "Astrakhan" +msgstr "" + +msgid "Saratov" +msgstr "" + +msgid "Africa" +msgstr "" + +msgid "Lome" +msgstr "" + +msgid "Bissau" +msgstr "" + +msgid "Sao_Tome" +msgstr "" + +msgid "Abidjan" +msgstr "" + +msgid "Accra" +msgstr "" + +msgid "Banjul" +msgstr "" + +msgid "Conakry" +msgstr "" + +msgid "Ouagadougou" +msgstr "" + +msgid "Nouakchott" +msgstr "" + +msgid "Timbuktu" +msgstr "" + +msgid "Dakar" +msgstr "" + +msgid "Monrovia" +msgstr "" + +msgid "Freetown" +msgstr "" + +msgid "Bamako" +msgstr "" + +msgid "El_Aaiun" +msgstr "" + +msgid "Lagos" +msgstr "" + +msgid "Porto-Novo" +msgstr "" + +msgid "Algiers" +msgstr "" + +msgid "Douala" +msgstr "" + +msgid "Brazzaville" +msgstr "" + +msgid "Libreville" +msgstr "" + +msgid "Casablanca" +msgstr "" + +msgid "Niamey" +msgstr "" + +msgid "Tunis" +msgstr "" + +msgid "Luanda" +msgstr "" + +msgid "Malabo" +msgstr "" + +msgid "Ceuta" +msgstr "" + +msgid "Kinshasa" +msgstr "" + +msgid "Bangui" +msgstr "" + +msgid "Ndjamena" +msgstr "" + +msgid "Juba" +msgstr "" + +msgid "Maseru" +msgstr "" + +msgid "Khartoum" +msgstr "" + +msgid "Lubumbashi" +msgstr "" + +msgid "Tripoli" +msgstr "" + +msgid "Mbabane" +msgstr "" + +msgid "Kigali" +msgstr "" + +msgid "Gaborone" +msgstr "" + +msgid "Windhoek" +msgstr "" + +msgid "Maputo" +msgstr "" + +msgid "Cairo" +msgstr "" + +msgid "Johannesburg" +msgstr "" + +msgid "Bujumbura" +msgstr "" + +msgid "Lusaka" +msgstr "" + +msgid "Harare" +msgstr "" + +msgid "Blantyre" +msgstr "" + +msgid "Djibouti" +msgstr "" + +msgid "Dar_es_Salaam" +msgstr "" + +msgid "Kampala" +msgstr "" + +msgid "Addis_Ababa" +msgstr "" + +msgid "Mogadishu" +msgstr "" + +msgid "Asmera" +msgstr "" + +msgid "Asmara" +msgstr "" + +msgid "Nairobi" +msgstr "" + +msgid "Antarctica" +msgstr "" + +msgid "Rothera" +msgstr "" + +msgid "Palmer" +msgstr "" + +msgid "Troll" +msgstr "" + +msgid "Syowa" +msgstr "" + +msgid "Mawson" +msgstr "" + +msgid "Vostok" +msgstr "" + +msgid "Davis" +msgstr "" + +msgid "DumontDUrville" +msgstr "" + +msgid "Casey" +msgstr "" + +msgid "Macquarie" +msgstr "" + +msgid "McMurdo" +msgstr "" + +msgid "South_Pole" +msgstr "" + +msgid "locali" +msgstr "" + +msgid "America" +msgstr "" + +msgid "Atka" +msgstr "" + +msgid "Adak" +msgstr "" + +msgid "Anchorage" +msgstr "" + +msgid "Metlakatla" +msgstr "" + +msgid "Juneau" +msgstr "" + +msgid "Sitka" +msgstr "" + +msgid "Nome" +msgstr "" + +msgid "Yakutat" +msgstr "" + +msgid "Tijuana" +msgstr "" + +msgid "Santa_Isabel" +msgstr "" + +msgid "Vancouver" +msgstr "" + +msgid "Ensenada" +msgstr "" + +msgid "Los_Angeles" +msgstr "" + +msgid "Ciudad_Juarez" +msgstr "" + +msgid "Dawson" +msgstr "" + +msgid "Hermosillo" +msgstr "" + +msgid "Phoenix" +msgstr "" + +msgid "Whitehorse" +msgstr "" + +msgid "Edmonton" +msgstr "" + +msgid "Creston" +msgstr "" + +msgid "Inuvik" +msgstr "" + +msgid "Mazatlan" +msgstr "" + +msgid "Shiprock" +msgstr "" + +msgid "Yellowknife" +msgstr "" + +msgid "Fort_Nelson" +msgstr "" + +msgid "Denver" +msgstr "" + +msgid "Boise" +msgstr "" + +msgid "Dawson_Creek" +msgstr "" + +msgid "Cambridge_Bay" +msgstr "" + +msgid "North_Dakota" +msgstr "" + +msgid "Knox_IN" +msgstr "" + +msgid "Costa_Rica" +msgstr "" + +msgid "Menominee" +msgstr "" + +msgid "El_Salvador" +msgstr "" + +msgid "Regina" +msgstr "" + +msgid "Guatemala" +msgstr "" + +msgid "Resolute" +msgstr "" + +msgid "Monterrey" +msgstr "" + +msgid "Chicago" +msgstr "" + +msgid "Winnipeg" +msgstr "" + +msgid "Indiana" +msgstr "" + +msgid "Rankin_Inlet" +msgstr "" + +msgid "Merida" +msgstr "" + +msgid "Tegucigalpa" +msgstr "" + +msgid "Managua" +msgstr "" + +msgid "Belize" +msgstr "" + +msgid "Rainy_River" +msgstr "" + +msgid "Bahia_Banderas" +msgstr "" + +msgid "Ojinaga" +msgstr "" + +msgid "Chihuahua" +msgstr "" + +msgid "Swift_Current" +msgstr "" + +msgid "Mexico_City" +msgstr "" + +msgid "Matamoros" +msgstr "" + +msgid "Jamaica" +msgstr "" + +msgid "Montreal" +msgstr "" + +msgid "Havana" +msgstr "" + +msgid "Grand_Turk" +msgstr "" + +msgid "Iqaluit" +msgstr "" + +msgid "Louisville" +msgstr "" + +msgid "Guayaquil" +msgstr "" + +msgid "Lima" +msgstr "" + +msgid "Coral_Harbour" +msgstr "" + +msgid "Detroit" +msgstr "" + +msgid "Port-au-Prince" +msgstr "" + +msgid "Fort_Wayne" +msgstr "" + +msgid "Eirunepe" +msgstr "" + +msgid "Indianapolis" +msgstr "" + +msgid "Rio_Branco" +msgstr "" + +msgid "Cancun" +msgstr "" + +msgid "Nipigon" +msgstr "" + +msgid "Toronto" +msgstr "" + +msgid "Panama" +msgstr "" + +msgid "Indiana" +msgstr "" + +msgid "New_York" +msgstr "" + +msgid "Kentucky" +msgstr "" + +msgid "Pangnirtung" +msgstr "" + +msgid "Thunder_Bay" +msgstr "" + +msgid "Bogota" +msgstr "" + +msgid "Cayman" +msgstr "" + +msgid "Atikokan" +msgstr "" + +msgid "Porto_Acre" +msgstr "" + +msgid "Nassau" +msgstr "" + +msgid "Anguilla" +msgstr "" + +msgid "Guadeloupe" +msgstr "" + +msgid "Puerto_Rico" +msgstr "" + +msgid "Porto_Velho" +msgstr "" + +msgid "Guyana" +msgstr "" + +msgid "Lower_Princes" +msgstr "" + +msgid "St_Lucia" +msgstr "" + +msgid "Port_of_Spain" +msgstr "" + +msgid "Dominica" +msgstr "" + +msgid "Manaus" +msgstr "" + +msgid "Thule" +msgstr "" + +msgid "St_Vincent" +msgstr "" + +msgid "St_Barthelemy" +msgstr "" + +msgid "Grenada" +msgstr "" + +msgid "Marigot" +msgstr "" + +msgid "Goose_Bay" +msgstr "" + +msgid "Martinique" +msgstr "" + +msgid "La_Paz" +msgstr "" + +msgid "Cuiaba" +msgstr "" + +msgid "Tortola" +msgstr "" + +msgid "Virgin" +msgstr "" + +msgid "Santo_Domingo" +msgstr "" + +msgid "Antigua" +msgstr "" + +msgid "Curacao" +msgstr "" + +msgid "Barbados" +msgstr "" + +msgid "Blanc-Sablon" +msgstr "" + +msgid "Aruba" +msgstr "" + +msgid "Kralendijk" +msgstr "" + +msgid "Montserrat" +msgstr "" + +msgid "Campo_Grande" +msgstr "" + +msgid "Caracas" +msgstr "" + +msgid "St_Thomas" +msgstr "" + +msgid "Glace_Bay" +msgstr "" + +msgid "St_Kitts" +msgstr "" + +msgid "Moncton" +msgstr "" + +msgid "Boa_Vista" +msgstr "" + +msgid "Halifax" +msgstr "" + +msgid "Buenos_Aires" +msgstr "" + +msgid "Santarem" +msgstr "" + +msgid "Araguaina" +msgstr "" + +msgid "Belem" +msgstr "" + +msgid "St_Johns" +msgstr "" + +msgid "Nuuk" +msgstr "" + +msgid "Cordoba" +msgstr "" + +msgid "Catamarca" +msgstr "" + +msgid "Rosario" +msgstr "" + +msgid "Jujuy" +msgstr "" + +msgid "Montevideo" +msgstr "" + +msgid "Punta_Arenas" +msgstr "" + +msgid "Cayenne" +msgstr "" + +msgid "Sao_Paulo" +msgstr "" + +msgid "Santiago" +msgstr "" + +msgid "Paramaribo" +msgstr "" + +msgid "Miquelon" +msgstr "" + +msgid "Godthab" +msgstr "" + +msgid "Maceio" +msgstr "" + +msgid "Fortaleza" +msgstr "" + +msgid "Argentina" +msgstr "" + +msgid "Mendoza" +msgstr "" + +msgid "Recife" +msgstr "" + +msgid "Bahia" +msgstr "" + +msgid "Asuncion" +msgstr "" + +msgid "Noronha" +msgstr "" + +msgid "Scoresbysund" +msgstr "" + +msgid "Danmarkshavn" +msgstr "" + +msgid "Chile" +msgstr "" + +msgid "EasterIsland" +msgstr "" + +msgid "Continental" +msgstr "" + +msgid "Australia" +msgstr "" + +msgid "Perth" +msgstr "" + +msgid "Eucla" +msgstr "" + +msgid "West" +msgstr "" + +msgid "Darwin" +msgstr "" + +msgid "North" +msgstr "" + +msgid "Yancowinna" +msgstr "" + +msgid "South" +msgstr "" + +msgid "Lindeman" +msgstr "" + +msgid "Broken_Hill" +msgstr "" + +msgid "Adelaide" +msgstr "" + +msgid "Queensland" +msgstr "" + +msgid "Brisbane" +msgstr "" + +msgid "Victoria" +msgstr "" + +msgid "Hobart" +msgstr "" + +msgid "ACT" +msgstr "" + +msgid "Tasmania" +msgstr "" + +msgid "LHI" +msgstr "" + +msgid "Currie" +msgstr "" + +msgid "Canberra" +msgstr "" + +msgid "Sydney" +msgstr "" + +msgid "Melbourne" +msgstr "" + +msgid "Lord_Howe" +msgstr "" + +msgid "NSW" +msgstr "" + +msgid "Asia" +msgstr "" + +msgid "Beirut" +msgstr "" + +msgid "Famagusta" +msgstr "" + +msgid "Nicosia" +msgstr "" + +msgid "Hebron" +msgstr "" + +msgid "Tel_Aviv" +msgstr "" + +msgid "Jerusalem" +msgstr "" + +msgid "Gaza" +msgstr "" + +msgid "Amman" +msgstr "" + +msgid "Bahrain" +msgstr "" + +msgid "Tehran" +msgstr "" + +msgid "Baghdad" +msgstr "" + +msgid "Istanbul" +msgstr "" + +msgid "Kuwait" +msgstr "" + +msgid "Riyadh" +msgstr "" + +msgid "Qatar" +msgstr "" + +msgid "Damascus" +msgstr "" + +msgid "Aden" +msgstr "" + +msgid "Yerevan" +msgstr "" + +msgid "Baku" +msgstr "" + +msgid "Dubai" +msgstr "" + +msgid "Kabul" +msgstr "" + +msgid "Muscat" +msgstr "" + +msgid "Tbilisi" +msgstr "" + +msgid "Kathmandu" +msgstr "" + +msgid "Samarkand" +msgstr "" + +msgid "Ashgabat" +msgstr "" + +msgid "Karachi" +msgstr "" + +msgid "Katmandu" +msgstr "" + +msgid "Calcutta" +msgstr "" + +msgid "Tashkent" +msgstr "" + +msgid "Yekaterinburg" +msgstr "" + +msgid "Oral" +msgstr "" + +msgid "Dushanbe" +msgstr "" + +msgid "Atyrau" +msgstr "" + +msgid "Aqtobe" +msgstr "" + +msgid "Aqtau" +msgstr "" + +msgid "Qyzylorda" +msgstr "" + +msgid "Ashkhabad" +msgstr "" + +msgid "Colombo" +msgstr "" + +msgid "Kolkata" +msgstr "" + +msgid "Dhaka" +msgstr "" + +msgid "Thimphu" +msgstr "" + +msgid "Rangoon" +msgstr "" + +msgid "Kashgar" +msgstr "" + +msgid "Qostanay" +msgstr "" + +msgid "Almaty" +msgstr "" + +msgid "Urumqi" +msgstr "" + +msgid "Yangon" +msgstr "" + +msgid "Dacca" +msgstr "" + +msgid "Thimbu" +msgstr "" + +msgid "Omsk" +msgstr "" + +msgid "Bishkek" +msgstr "" + +msgid "Ho_Chi_Minh" +msgstr "" + +msgid "Phnom_Penh" +msgstr "" + +msgid "Vientiane" +msgstr "" + +msgid "Bangkok" +msgstr "" + +msgid "Krasnoyarsk" +msgstr "" + +msgid "Novokuznetsk" +msgstr "" + +msgid "Barnaul" +msgstr "" + +msgid "Jakarta" +msgstr "" + +msgid "Saigon" +msgstr "" + +msgid "Hovd" +msgstr "" + +msgid "Novosibirsk" +msgstr "" + +msgid "Tomsk" +msgstr "" + +msgid "Pontianak" +msgstr "" + +msgid "Harbin" +msgstr "" + +msgid "Chungking" +msgstr "" + +msgid "Ulan_Bator" +msgstr "" + +msgid "Brunei" +msgstr "" + +msgid "Singapore" +msgstr "" + +msgid "Choibalsan" +msgstr "" + +msgid "Chongqing" +msgstr "" + +msgid "Macau" +msgstr "" + +msgid "Ujung_Pandang" +msgstr "" + +msgid "Manila" +msgstr "" + +msgid "Kuala_Lumpur" +msgstr "" + +msgid "Makassar" +msgstr "" + +msgid "Kuching" +msgstr "" + +msgid "Macao" +msgstr "" + +msgid "Shanghai" +msgstr "" + +msgid "Taipei" +msgstr "" + +msgid "Ulaanbaatar" +msgstr "" + +msgid "Irkutsk" +msgstr "" + +msgid "Hong_Kong" +msgstr "" + +msgid "Khandyga" +msgstr "" + +msgid "Seoul" +msgstr "" + +msgid "Jayapura" +msgstr "" + +msgid "Chita" +msgstr "" + +msgid "Pyongyang" +msgstr "" + +msgid "Yakutsk" +msgstr "" + +msgid "Tokyo" +msgstr "" + +msgid "Dili" +msgstr "" + +msgid "Vladivostok" +msgstr "" + +msgid "Ust-Nera" +msgstr "" + +msgid "Srednekolymsk" +msgstr "" + +msgid "Sakhalin" +msgstr "" + +msgid "Magadan" +msgstr "" + +msgid "Anadyr" +msgstr "" + +msgid "Kamchatka" +msgstr "" + +msgid "US" +msgstr "" + +msgid "Samoa" +msgstr "" + +msgid "Aleutian" +msgstr "" + +msgid "Hawaii" +msgstr "" + +msgid "Alaska" +msgstr "" + +msgid "Pacific" +msgstr "" + +msgid "Mountain" +msgstr "" + +msgid "Arizona" +msgstr "" + +msgid "Indiana-Starke" +msgstr "" + +msgid "Central" +msgstr "" + +msgid "East-Indiana" +msgstr "" + +msgid "Michigan" +msgstr "" + +msgid "Eastern" +msgstr "" + +msgid "Atlantic" +msgstr "" + +msgid "Bermuda" +msgstr "" + +msgid "Stanley" +msgstr "" + +msgid "South_Georgia" +msgstr "" + +msgid "Cape_Verde" +msgstr "" + +msgid "Azores" +msgstr "" + +msgid "Faeroe" +msgstr "" + +msgid "Faroe" +msgstr "" + +msgid "St_Helena" +msgstr "" + +msgid "Reykjavik" +msgstr "" + +msgid "Canary" +msgstr "" + +msgid "Madeira" +msgstr "" + +msgid "Jan_Mayen" +msgstr "" + +msgid "Brazil" +msgstr "" + +msgid "Acre" +msgstr "" + +msgid "West" +msgstr "" + +msgid "East" +msgstr "" + +msgid "DeNoronha" +msgstr "" + + diff --git a/org.freedesktop.policykit.UBTime.pkexec.policy b/org.freedesktop.policykit.UBTime.pkexec.policy new file mode 100644 index 0000000..7c1f2be --- /dev/null +++ b/org.freedesktop.policykit.UBTime.pkexec.policy @@ -0,0 +1,24 @@ + + + + + UBSoft + https://ublinux.ru + + + Run UBConfig as root + Запуск UBTime с правами root + Authentication is required to run the UBConfig + Требуется авторизация для запуска UBTime с правами root + + auth_admin + auth_admin + auth_admin + + /usr/bin/UBTime + true + + + diff --git a/reg/Africa b/reg/Africa new file mode 100644 index 0000000..6afdb1c --- /dev/null +++ b/reg/Africa @@ -0,0 +1,54 @@ +(UTC +00) Lome +(UTC +00) Bissau +(UTC +00) Sao_Tome +(UTC +00) Abidjan +(UTC +00) Accra +(UTC +00) Banjul +(UTC +00) Conakry +(UTC +00) Ouagadougou +(UTC +00) Nouakchott +(UTC +00) Timbuktu +(UTC +00) Dakar +(UTC +00) Monrovia +(UTC +00) Freetown +(UTC +00) Bamako +(UTC +01) El_Aaiun +(UTC +01) Lagos +(UTC +01) Porto-Novo +(UTC +01) Algiers +(UTC +01) Douala +(UTC +01) Brazzaville +(UTC +01) Libreville +(UTC +01) Casablanca +(UTC +01) Niamey +(UTC +01) Tunis +(UTC +01) Luanda +(UTC +01) Malabo +(UTC +01) Ceuta +(UTC +01) Kinshasa +(UTC +01) Bangui +(UTC +01) Ndjamena +(UTC +02) Juba +(UTC +02) Maseru +(UTC +02) Khartoum +(UTC +02) Lubumbashi +(UTC +02) Tripoli +(UTC +02) Mbabane +(UTC +02) Kigali +(UTC +02) Gaborone +(UTC +02) Windhoek +(UTC +02) Maputo +(UTC +02) Cairo +(UTC +02) Johannesburg +(UTC +02) Bujumbura +(UTC +02) Lusaka +(UTC +02) Harare +(UTC +02) Blantyre +(UTC +03) Djibouti +(UTC +03) Dar_es_Salaam +(UTC +03) Kampala +(UTC +03) Addis_Ababa +(UTC +03) Mogadishu +(UTC +03) Asmera +(UTC +03) Asmara +(UTC +03) Nairobi diff --git a/reg/America b/reg/America new file mode 100644 index 0000000..4eac7b5 --- /dev/null +++ b/reg/America @@ -0,0 +1,147 @@ +(UTC -10) Atka +(UTC -10) Adak +(UTC -09) Anchorage +(UTC -09) Metlakatla +(UTC -09) Juneau +(UTC -09) Sitka +(UTC -09) Nome +(UTC -09) Yakutat +(UTC -08) Tijuana +(UTC -08) Santa_Isabel +(UTC -08) Vancouver +(UTC -08) Ensenada +(UTC -08) Los_Angeles +(UTC -07) Ciudad_Juarez +(UTC -07) Dawson +(UTC -07) Hermosillo +(UTC -07) Phoenix +(UTC -07) Whitehorse +(UTC -07) Edmonton +(UTC -07) Creston +(UTC -07) Inuvik +(UTC -07) Mazatlan +(UTC -07) Shiprock +(UTC -07) Yellowknife +(UTC -07) Fort_Nelson +(UTC -07) Denver +(UTC -07) Boise +(UTC -07) Dawson_Creek +(UTC -07) Cambridge_Bay +(UTC -06) North_Dakota +(UTC -06) Knox_IN +(UTC -06) Costa_Rica +(UTC -06) Menominee +(UTC -06) El_Salvador +(UTC -06) Regina +(UTC -06) Guatemala +(UTC -06) Resolute +(UTC -06) Monterrey +(UTC -06) Chicago +(UTC -06) Winnipeg +(UTC -06) Indiana +(UTC -06) Rankin_Inlet +(UTC -06) Merida +(UTC -06) Tegucigalpa +(UTC -06) Managua +(UTC -06) Belize +(UTC -06) Rainy_River +(UTC -06) Bahia_Banderas +(UTC -06) Ojinaga +(UTC -06) Chihuahua +(UTC -06) Swift_Current +(UTC -06) Mexico_City +(UTC -06) Matamoros +(UTC -05) Jamaica +(UTC -05) Montreal +(UTC -05) Havana +(UTC -05) Grand_Turk +(UTC -05) Iqaluit +(UTC -05) Louisville +(UTC -05) Guayaquil +(UTC -05) Lima +(UTC -05) Coral_Harbour +(UTC -05) Detroit +(UTC -05) Port-au-Prince +(UTC -05) Fort_Wayne +(UTC -05) Eirunepe +(UTC -05) Indianapolis +(UTC -05) Rio_Branco +(UTC -05) Cancun +(UTC -05) Nipigon +(UTC -05) Toronto +(UTC -05) Panama +(UTC -05) Indiana +(UTC -05) New_York +(UTC -05) Kentucky +(UTC -05) Pangnirtung +(UTC -05) Thunder_Bay +(UTC -05) Bogota +(UTC -05) Cayman +(UTC -05) Atikokan +(UTC -05) Porto_Acre +(UTC -05) Nassau +(UTC -04) Anguilla +(UTC -04) Guadeloupe +(UTC -04) Puerto_Rico +(UTC -04) Porto_Velho +(UTC -04) Guyana +(UTC -04) Lower_Princes +(UTC -04) St_Lucia +(UTC -04) Port_of_Spain +(UTC -04) Dominica +(UTC -04) Manaus +(UTC -04) Thule +(UTC -04) St_Vincent +(UTC -04) St_Barthelemy +(UTC -04) Grenada +(UTC -04) Marigot +(UTC -04) Goose_Bay +(UTC -04) Martinique +(UTC -04) La_Paz +(UTC -04) Cuiaba +(UTC -04) Tortola +(UTC -04) Virgin +(UTC -04) Santo_Domingo +(UTC -04) Antigua +(UTC -04) Curacao +(UTC -04) Barbados +(UTC -04) Blanc-Sablon +(UTC -04) Aruba +(UTC -04) Kralendijk +(UTC -04) Montserrat +(UTC -04) Campo_Grande +(UTC -04) Caracas +(UTC -04) St_Thomas +(UTC -04) Glace_Bay +(UTC -04) St_Kitts +(UTC -04) Moncton +(UTC -04) Boa_Vista +(UTC -04) Halifax +(UTC -03) Buenos_Aires +(UTC -03) Santarem +(UTC -03) Araguaina +(UTC -03) Belem +(UTC -03) St_Johns +(UTC -03) Nuuk +(UTC -03) Cordoba +(UTC -03) Catamarca +(UTC -03) Rosario +(UTC -03) Jujuy +(UTC -03) Montevideo +(UTC -03) Punta_Arenas +(UTC -03) Cayenne +(UTC -03) Sao_Paulo +(UTC -03) Santiago +(UTC -03) Paramaribo +(UTC -03) Miquelon +(UTC -03) Godthab +(UTC -03) Maceio +(UTC -03) Fortaleza +(UTC -03) Argentina +(UTC -03) Mendoza +(UTC -03) Recife +(UTC -03) Bahia +(UTC -03) Asuncion +(UTC -02) Noronha +(UTC -01) Scoresbysund +(UTC +00) Danmarkshavn diff --git a/reg/Antarctica b/reg/Antarctica new file mode 100644 index 0000000..2f99849 --- /dev/null +++ b/reg/Antarctica @@ -0,0 +1,12 @@ +(UTC -03) Rothera +(UTC -03) Palmer +(UTC +00) Troll +(UTC +03) Syowa +(UTC +05) Mawson +(UTC +06) Vostok +(UTC +07) Davis +(UTC +10) DumontDUrville +(UTC +11) Casey +(UTC +11) Macquarie +(UTC +13) McMurdo +(UTC +13) South_Pole diff --git a/reg/Arctic b/reg/Arctic new file mode 100644 index 0000000..feba77b --- /dev/null +++ b/reg/Arctic @@ -0,0 +1 @@ +(UTC +01) Longyearbyen diff --git a/reg/Asia b/reg/Asia new file mode 100644 index 0000000..57ce91b --- /dev/null +++ b/reg/Asia @@ -0,0 +1,99 @@ +(UTC +02) Beirut +(UTC +02) Famagusta +(UTC +02) Nicosia +(UTC +02) Hebron +(UTC +02) Tel_Aviv +(UTC +02) Jerusalem +(UTC +02) Gaza +(UTC +03) Amman +(UTC +03) Bahrain +(UTC +03) Tehran +(UTC +03) Baghdad +(UTC +03) Istanbul +(UTC +03) Kuwait +(UTC +03) Riyadh +(UTC +03) Qatar +(UTC +03) Damascus +(UTC +03) Aden +(UTC +04) Yerevan +(UTC +04) Baku +(UTC +04) Dubai +(UTC +04) Kabul +(UTC +04) Muscat +(UTC +04) Tbilisi +(UTC +05) Kathmandu +(UTC +05) Samarkand +(UTC +05) Ashgabat +(UTC +05) Karachi +(UTC +05) Katmandu +(UTC +05) Calcutta +(UTC +05) Tashkent +(UTC +05) Yekaterinburg +(UTC +05) Oral +(UTC +05) Dushanbe +(UTC +05) Atyrau +(UTC +05) Aqtobe +(UTC +05) Aqtau +(UTC +05) Qyzylorda +(UTC +05) Ashkhabad +(UTC +05) Colombo +(UTC +05) Kolkata +(UTC +06) Dhaka +(UTC +06) Thimphu +(UTC +06) Rangoon +(UTC +06) Kashgar +(UTC +06) Qostanay +(UTC +06) Almaty +(UTC +06) Urumqi +(UTC +06) Yangon +(UTC +06) Dacca +(UTC +06) Thimbu +(UTC +06) Omsk +(UTC +06) Bishkek +(UTC +07) Ho_Chi_Minh +(UTC +07) Phnom_Penh +(UTC +07) Vientiane +(UTC +07) Bangkok +(UTC +07) Krasnoyarsk +(UTC +07) Novokuznetsk +(UTC +07) Barnaul +(UTC +07) Jakarta +(UTC +07) Saigon +(UTC +07) Hovd +(UTC +07) Novosibirsk +(UTC +07) Tomsk +(UTC +07) Pontianak +(UTC +08) Harbin +(UTC +08) Chungking +(UTC +08) Ulan_Bator +(UTC +08) Brunei +(UTC +08) Singapore +(UTC +08) Choibalsan +(UTC +08) Chongqing +(UTC +08) Macau +(UTC +08) Ujung_Pandang +(UTC +08) Manila +(UTC +08) Kuala_Lumpur +(UTC +08) Makassar +(UTC +08) Kuching +(UTC +08) Macao +(UTC +08) Shanghai +(UTC +08) Taipei +(UTC +08) Ulaanbaatar +(UTC +08) Irkutsk +(UTC +08) Hong_Kong +(UTC +09) Khandyga +(UTC +09) Seoul +(UTC +09) Jayapura +(UTC +09) Chita +(UTC +09) Pyongyang +(UTC +09) Yakutsk +(UTC +09) Tokyo +(UTC +09) Dili +(UTC +10) Vladivostok +(UTC +10) Ust-Nera +(UTC +11) Srednekolymsk +(UTC +11) Sakhalin +(UTC +11) Magadan +(UTC +12) Anadyr +(UTC +12) Kamchatka diff --git a/reg/Atlantic b/reg/Atlantic new file mode 100644 index 0000000..57a99bf --- /dev/null +++ b/reg/Atlantic @@ -0,0 +1,12 @@ +(UTC -04) Bermuda +(UTC -03) Stanley +(UTC -02) South_Georgia +(UTC -01) Cape_Verde +(UTC -01) Azores +(UTC +00) Faeroe +(UTC +00) Faroe +(UTC +00) St_Helena +(UTC +00) Reykjavik +(UTC +00) Canary +(UTC +00) Madeira +(UTC +01) Jan_Mayen diff --git a/reg/Australia b/reg/Australia new file mode 100644 index 0000000..d762891 --- /dev/null +++ b/reg/Australia @@ -0,0 +1,23 @@ +(UTC +08) Perth +(UTC +08) Eucla +(UTC +08) West +(UTC +09) Darwin +(UTC +09) North +(UTC +10) Yancowinna +(UTC +10) South +(UTC +10) Lindeman +(UTC +10) Broken_Hill +(UTC +10) Adelaide +(UTC +10) Queensland +(UTC +10) Brisbane +(UTC +11) Victoria +(UTC +11) Hobart +(UTC +11) ACT +(UTC +11) Tasmania +(UTC +11) LHI +(UTC +11) Currie +(UTC +11) Canberra +(UTC +11) Sydney +(UTC +11) Melbourne +(UTC +11) Lord_Howe +(UTC +11) NSW diff --git a/reg/Brazil b/reg/Brazil new file mode 100644 index 0000000..79213f9 --- /dev/null +++ b/reg/Brazil @@ -0,0 +1,4 @@ +(UTC -05) Acre +(UTC -04) West +(UTC -03) East +(UTC -02) DeNoronha diff --git a/reg/Chile b/reg/Chile new file mode 100644 index 0000000..c72cae0 --- /dev/null +++ b/reg/Chile @@ -0,0 +1,2 @@ +(UTC -05) EasterIsland +(UTC -03) Continental diff --git a/reg/Europe b/reg/Europe new file mode 100644 index 0000000..a6a7a52 --- /dev/null +++ b/reg/Europe @@ -0,0 +1,64 @@ +(UTC +00) Jersey +(UTC +00) Dublin +(UTC +00) Belfast +(UTC +00) Guernsey +(UTC +00) London +(UTC +00) Lisbon +(UTC +00) Isle_of_Man +(UTC +01) Ljubljana +(UTC +01) Stockholm +(UTC +01) Skopje +(UTC +01) Oslo +(UTC +01) Sarajevo +(UTC +01) Tirane +(UTC +01) Zagreb +(UTC +01) Vienna +(UTC +01) Andorra +(UTC +01) Madrid +(UTC +01) Podgorica +(UTC +01) Copenhagen +(UTC +01) Monaco +(UTC +01) Belgrade +(UTC +01) Budapest +(UTC +01) Brussels +(UTC +01) Amsterdam +(UTC +01) Berlin +(UTC +01) Zurich +(UTC +01) Bratislava +(UTC +01) Prague +(UTC +01) Malta +(UTC +01) Rome +(UTC +01) Luxembourg +(UTC +01) Vaduz +(UTC +01) Paris +(UTC +01) Warsaw +(UTC +01) Vatican +(UTC +01) Busingen +(UTC +01) Gibraltar +(UTC +01) San_Marino +(UTC +02) Sofia +(UTC +02) Vilnius +(UTC +02) Helsinki +(UTC +02) Mariehamn +(UTC +02) Riga +(UTC +02) Bucharest +(UTC +02) Kyiv +(UTC +02) Kiev +(UTC +02) Athens +(UTC +02) Zaporozhye +(UTC +02) Tallinn +(UTC +02) Kaliningrad +(UTC +02) Uzhgorod +(UTC +02) Chisinau +(UTC +02) Nicosia +(UTC +02) Tiraspol +(UTC +03) Simferopol +(UTC +03) Istanbul +(UTC +03) Moscow +(UTC +03) Kirov +(UTC +03) Minsk +(UTC +03) Volgograd +(UTC +04) Ulyanovsk +(UTC +04) Samara +(UTC +04) Astrakhan +(UTC +04) Saratov diff --git a/reg/Indian b/reg/Indian new file mode 100644 index 0000000..cbb5827 --- /dev/null +++ b/reg/Indian @@ -0,0 +1,11 @@ +(UTC +03) Comoro +(UTC +03) Antananarivo +(UTC +03) Mayotte +(UTC +04) Mauritius +(UTC +04) Reunion +(UTC +04) Mahe +(UTC +05) Maldives +(UTC +05) Kerguelen +(UTC +06) Chagos +(UTC +06) Cocos +(UTC +07) Christmas diff --git a/reg/Mexico b/reg/Mexico new file mode 100644 index 0000000..af4773f --- /dev/null +++ b/reg/Mexico @@ -0,0 +1,3 @@ +(UTC -08) BajaNorte +(UTC -07) BajaSur +(UTC -06) General diff --git a/reg/US b/reg/US new file mode 100644 index 0000000..7c1cbd3 --- /dev/null +++ b/reg/US @@ -0,0 +1,12 @@ +(UTC -11) Samoa +(UTC -10) Aleutian +(UTC -10) Hawaii +(UTC -09) Alaska +(UTC -08) Pacific +(UTC -07) Mountain +(UTC -07) Arizona +(UTC -06) Indiana-Starke +(UTC -06) Central +(UTC -05) East-Indiana +(UTC -05) Michigan +(UTC -05) Eastern diff --git a/reg/locali111 b/reg/locali111 new file mode 100644 index 0000000..f14d13c --- /dev/null +++ b/reg/locali111 @@ -0,0 +1,69 @@ +msgid "Ok" +msgstr "Oк" + +msgid "Enter DHCP" +msgstr "Введите DHCP" + +msgid "UBconfig - Дата и время" +msgstr "UBconfig - Дата и время" + +msgid "Setting the date and time" +msgstr "Настройка даты и времени" + +msgid "Time" +msgstr "Время" + +msgid "Clock" +msgstr "Часы" + +msgid "Minutes" +msgstr "Минуты" + +msgid "Date" +msgstr "Дата" + +msgid "" +msgstr "" + +msgid "Interactive date picker" +msgstr "Интерактивный выбор даты" + +msgid "Change zone setting" +msgstr "Изменить параметр зоны" + +msgid "time zone" +msgstr "Временная зона" + +msgid "Region" +msgstr "Регион" + +msgid "Zone" +msgstr "Зона" + +msgid "Update date and time" +msgstr "Обновить дату и время" + +msgid "Synchronize via NTP" +msgstr "Синхронизировать через NTP" + +msgid "Automatic time synchronization" +msgstr "Автоматическая синхронизация времени" + +msgid "Synchronization method" +msgstr "Способ синхронизации" + +msgid "DHCP" +msgstr "DHCP" + +msgid "Manually" +msgstr "Вручную" + +msgid "" +msgstr "" + +msgid "Time zone" +msgstr "Временная зона" + +msgid "Setting date and time in global configuration" +msgstr "Настройка даты и времени в глобальной конфигурации" + diff --git a/ubconfig_date_time.glade b/ubconfig_date_time.glade new file mode 100644 index 0000000..796c316 --- /dev/null +++ b/ubconfig_date_time.glade @@ -0,0 +1,826 @@ + + + + + + False + + + + + + False + dialog + + + False + vertical + 2 + + + False + True + end + + + + btnMessClose + True + True + True + + + True + True + 0 + + + + + + + + False + False + 0 + + + + + True + False + + + True + False + 50 + gtk-dialog-warning + + + False + True + 0 + + + + + True + False + Введите DHCP + + + False + True + 1 + + + + + False + True + 2 + + + + + + + False + UBconfig - Дата и время + ublinux-logo.png + + + True + False + vertical + + + True + False + + + 90 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + ublinux-logo.png + + + False + True + 0 + + + + + 145 + True + False + Изменить параметр NTPSERVERS + 5 + 5 + 5 + 5 + 3 + 6 + Настройка даты и времени + True + 28 + 0 + + + False + True + 1 + + + + + 100 + True + False + 15 + 5 + 15 + 5 + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + 10 + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + vertical + + + True + False + + + 145 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Время + True + 0 + + + False + True + 0 + + + + + True + True + Часы + 5 + 5 + 5 + 5 + 6 + 6 + 2 + 0.099999999776482579 + True + + + False + True + 1 + + + + + True + False + : + + + False + True + 2 + + + + + True + True + Минуты + 5 + 5 + 5 + 5 + 6 + 6 + 2 + True + + + False + True + 3 + + + + + False + True + 1 + + + + + True + False + + + 145 + True + False + 5 + 5 + 5 + 5 + 6 + 6 + Дата + True + 0 + + + False + True + 0 + + + + + 221 + True + True + Дата +Формат: ДД.ММ.ГГГГ + 5 + 5 + 5 + 6 + 6 + + + False + True + 1 + + + + + True + True + True + Интерактивный выбор даты + 5 + 5 + 5 + 5 + 6 + 6 + + + True + False + x-office-calendar + + + + + False + True + 2 + + + + + False + True + 2 + + + + + True + False + + + 145 + True + False + Изменить параметр зоны + 5 + 5 + 5 + 5 + 6 + 6 + Временная зона + True + 0 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + Регион + 5 + 5 + 5 + 5 + 6 + 6 + Регион + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 3 + + + + + True + False + Зона + 5 + 5 + 5 + 5 + 6 + 6 + Зона + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 5 + + + + + 5 + True + False + + + False + True + 6 + + + + + True + True + True + end + 5 + 5 + 6 + 6 + + + True + False + + + True + False + media-playlist-repeat + + + False + True + 0 + + + + + True + False + Синхронизировать + + + False + True + 1 + + + + + + + False + True + 7 + + + + + True + True + 3 + + + + + + + True + False + Настройка даты и времени + + + + + False + True + 0 + + + + + False + True + 1 + + + + + True + False + 10 + vertical + + + True + False + 5 + 5 + 5 + 5 + 0.019999999552965164 + in + + + True + False + 5 + 5 + vertical + + + True + False + + + Синхронизировать через NTP + True + True + False + Автоматическая синхронизация времени + 5 + 5 + 5 + 5 + 6 + 6 + True + + + False + True + 0 + + + + + True + False + Способ синхронизации + 6 + 6 + + DHCP + Вручную + + + + False + True + 1 + + + + + -1 + True + True + Ввод сервера для синхронизации даты и времени: +Локальный (DHCP) или произвольный + center + 5 + 5 + 5 + 5 + 6 + 6 + + + True + True + 3 + + + + + False + True + 0 + + + + + True + False + + + 145 + True + False + Изменить параметр зоны + 5 + 5 + 5 + 5 + 6 + 6 + Временная зона + True + 28 + 0 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + Регион + 5 + 5 + 5 + 5 + 6 + 6 + Регион + 0 + + + False + True + 2 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 3 + + + + + True + False + Зона + 5 + 5 + 5 + 5 + Зона + 0 + + + False + True + 4 + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + + + False + True + 5 + + + + + 5 + True + False + 15 + 5 + 15 + 5 + + + False + True + 6 + + + + + True + True + 1 + + + + + + + True + False + Настройка даты и времени в глобальной конфигурации + + + + + False + True + 0 + + + + + False + True + 2 + + + + + + + 240 + 185 + False + btnChooseDate + bottom + none + + + True + True + 10 + 10 + 10 + 10 + 10 + 10 + 2023 + 1 + 10 + + + + diff --git a/ublinux-datetime-settings.svg b/ublinux-datetime-settings.svg new file mode 100644 index 0000000..f866fb9 --- /dev/null +++ b/ublinux-datetime-settings.svg @@ -0,0 +1,5593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ublinux-logo.png b/ublinux-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a77b93f4a69ced1a84cb1b9678707f17f065c363 GIT binary patch literal 6412 zcmV+n8T00eP)Qu_l3PJ70D{1NrT9Bn zl0S%U-+JOqx3L^jXCu&&4V`O2eGiyjoI}Nw;ye989+oFN;}hAoO6jZuy6M(?muN8_ z1FjiW2H^uSP=oszqlM zXmxW}FcQ#T6;byAkueshQEHo*{K>$NJA10pzG~7L13G1g9|PuAx#(V$JUnpv^keee z_YzeuyJDJfpzGJ)dx@#c?}Drt=c@LKl5d?Y_ItvBj%>bXk~qP8m8d@eF(;%_K*2w2 zt?n9lrt|HIsQTq`S04#E>C^=JLtJ3l@X4H#FT!?$*= zGDIE+7L8ja<(r|54 zpi=*#`a%$XZW!v$-ff-xt5MvjfmU5zMr1FyiO8P=Q>sz92d;SkMGyqEKdlgK<$h0I1uhy(Wk6PQML;wn8ngz{pj||J z|I^of8lKi*r9c^A7%0O`{r3JV!zd6$LEV|&k5(9}8^xA^h5TRX?9`QXdsv_wH+Id( zmi>wxQk>(bUx!>pDFt&uv~BVi)-H3Th-x=;W_F=QvP9hd&0 z1RwRs=;@1cq&LdZ-WXb$U|J~C1j7Qu%z}=>KT6WQ&lSpONc|f4TL1RW|0uWnMS*VL z^!557H~e)G?gj~!TWA5LwKuJ;u8p`3hHEo_a)gUJ+F8)vN<&>uMa9RHNj^A!l3j;; z*xh{+M_DKDxrn(WRf=ycJpuV9i}(wf)zk1 z6A;98XmAE-*QYsZwlWw9qpTpx43rJFCs5>Ss!*E31}LB$Bef zE;vaf8Ry)|5k9-*92)CubJ!&Bw;);&prO8&=Eex2V1R&Sp_IaL9pZ^3eFIVY2L{oi zQOZCmKlr)7la9j+zj=>0_q@x3KtE=V;9L~%(nc)QgbLK8%#B%z$D#$fV_dzc9M|TeBsjhTrjge%aQ_EL=X|Q)-=@BGJj479n+^Ut-Xza zHGHT-Zx*|#A{(}B5s}VvOD#&drov9p8dPk!@_eQ=g}uwU0Ben_U1rai%B2^c z%ZzDL8H?xp(aBT1v3oCj_Z>ta1-fSj(tsxu310uzztMC2s4uT8iao|uhH9E2P=hip z&y18$f7`!(OHmI^HLUO4MK$6SxgaOw%#H-P?dppN1w746gRHg2bzP=SnZ$~#E@Mh- z%b2UqrGaRSe}Cn5-al{{(=;*6?9Cjd6e7Z|*I(w)fxW(bE{fg3IV3`jW6)}44>*Kn zM`tqsiskJB8e;@cJkKHx@`C1C)?al20n)ffs^F1?KN&z+x2uWmd%TwlkU zYp>z_Bi-zL>Ax6CBr#1Br3^#_r4$!lawVn}VE_BOGxFuol!u3pR zn?%x1;%XN`(4s-XqKlR=d)_&jZuCe!r>rKt#Z5Vj7(Z$47R9q7LzJPk3+FnBonUgv zv&p71&{`uRxUP$xOw!uYz)kC}qp2~HnFPoCs0jsGcipv|Gq;0eGJ)ebnaNi~Sai|l zv`w8!j~n8E(VDf*;}9eq8_)>idMmwa~;7zV8TF7 zA4M+mF;psurHd_+#!i(1ooh0jBp0+rxTvEo6SUE; zi<3-Zh|9V)pTx4Pakt6&NB4;ny!H03%((#9uUaEg>Tn@N&-rpwrUU4&vA>o7YCTCg?L6i9~{#)7x1% zZ_b2+ynp|Gy6(S^SS-e^>o;H+ev>tM(j=B#crJ-V+yh%{wAL7gV)de#h@AlKq@sM) z1G^%P_O#id-q2h&XKJPsuIu91NgO-L%H>yQWHM35{{08IZ|eiZVlg&v+|2cBt}n`W z#ga?0Oog4a(b~ui=DsVYkzzf|M=WLV%v7bARjnzfCnDj%3v(U z=1rSN1+s_`2v{tfKZj(}#&tAW3t9`HxUjv&?}1Dx&>3y^?DP3kTQW1Y7LB7Fl6I1F z7S1i%x!PL)-IQ1?#!sI53E#N;8@%zx8Cx}_6g-V~U1l~#QriYn zK)Wuk4h8wu_;!Ak- zSFaFHB)IId%P}pJM;>{E!J$Dm-nNldD_4z4>!!4}((}=2&&|_j<|aW$bC{Qp^k)6( zF@`_N*jg(Y*KT@~f3=r39nDQmWp%o}t)08>`XhF~vzu+(p5o}y?46I;V2r>1!T;gI z0|#(jZ_lA&7)=r0%RtYYL;Z>&;1!0=sgw zM`t=D*W=f;)Q5Z%q1N7HSW^?K$Ok^}yhU_%-Orb9Sx;@PcYipUNN{NX{tU?A-JLmn z@F15hS;8l;y|ya;cU^rQu6A+7MaWKw0m~p9G|$vzsHw9If|luNl4N%tX;%}ltcu+< z!!Wq+Q`hnE!;i3H#c$Ey*Ov)p=F^cwA68sX{$W`GT-WoNMf@sV!BF zHH9(d^vX)1{K{X!5e_%7Y141Ba^>ohZ5fKk$6QbPFqHDG41GYS`kI=cCI;yAWEirP zucf(~ofyNyBmY>rYE{XNGE1+%rfT)X6N!>i2${x2n+{K+f)F&6uc02;9#=FPty=8j z+(qYe+vYD9f_%+2to!^Is#Z@l8q4-FPY3}swK)>Ts?g=ScX)S7GPQc(liEew*VkJW zdzPj@yz7s+I2#a(Wj?YjhQ;%qOP= zl{=CIB(oXZr03(4RRtR0n&m6FdS@$gs0ZV-pMxrb4A9f_vA3fXZ^voTqN`9}1&^rZ zv_=Faf`P&?4Ej#@GSELjxFI}z5tY;lRTm;aclR+&E0moN#-R?VARg__i77iq)^r($ zfoWOnegFNc$C}f1jF!JoL!Ta*|LC!91_$F9rinuNR=b%=eiWpF0j!3GVR_2eXvx#8 z)NjKuuq=x`@4m<4ix-z&>~N$q18C%q|0G_|^GR<*``XYD>qCPjdH3vj7b_6(R)b3A zJfoBvL8E9}`20n*Ubh-$S_~aLNY5{x4;168;8vCt{9!1RX^pFfzTV!dxnH^9 zj>LD+HF+*slNo70OVo12Exye`yDqzS?e>5+&D82TuU{iTtqgH$d&|*-Tlx zw&-KoV>2B&Kp4t19abQ~E3f_fi~!x^7Ix=E383HJ{SMKg!K_A?D1SII>*`QJzXDse zbu)|cR$w{`ZI=?kPzuYm2n9pD`Q~r9>dGq$0{xYec)krfr`|)SZ8~?JtG1fkSZFTb4|gSQ9799))ziz*?%a$DfkC3-k6ir zBUr@*KLS*>nWeK!HQPAF>G=y zeki~+OoG86b+vUII`|!S8uToA8QmVgjhkJA3g8#4r-HzFCLz`EP~d;&|uu#2c7A7 z763`{r3Z&dZUNp;+ttJ!&yALJbT5@TTh(Ncx!Jr{?Qt;dG)C!S%LY1U>KmDICdZ%w z%1|WYah`tW85W&)F3Xm$pr&TzXO&`K{1eQ9lNoRT27@8`#LNPf>Q&ku6agZ2MFA}e zGWno;eYJAWOYx;a_0HQxyopjs#c3)5IwPV{lEPaxD$~RWhA>iE{@#0g+4ufF7GJ!W z#TQ>pZHb5P0i0PE;ADD|ZifsHGDQH*$xB{ZF_8UWdL)q&EXqI)8WhEJvwX{ z1cF{{!8A>5+veA=zs{?#zRH}rbD2ALE_3J2AruOj7k{U**#xC_#fo%~81aTaj!-tP>;J`tC`Ae6krY2fiT4-)+rlz)rP>mOu zPsS4r#pCq%^>J#>XOQ|Sg@9zvr3i4t3nRl^AfS9RQv~F6Y6)RjKtJWYyE(@uRZ2=J zFbvGpO476}0>PlSTgY{ZCz2dFdW^$|kEHf?r0eq@s5cA)w?hvzRP!dtJdhg$29`?m zc@t!BLa^QJlE0 zEWev}^^Oy~cghBVwtACYo2C|YtNHQ6sk;3dZvjsLWdNOP;KoiF$1C-2qYNk`zFolE z3NW(WOqG|%mrt2VjpElc7fa;#u@$lT#(>LHhNmkpt&6{ zZa4EmE{#&Y9WDwW!waJT<%`9AF`&sQ!9P+AxzwUto` zBP;N1Sp~0SEBek+5$`brJI+)y!L=R3-&&stdU^2%`s$_>f}FO?MTW1GNGmx4q=-4n z6~?f9l2cES=w1IaoqPMA-m+FJwHj3R%^^yGVR9mA&=jV7du4snu7i%YTQLEpN{_UNoc<$g(%Df04eq}m!0ly!8#kS+@J!vBX z)50e2d}UfeyCUB?MDBZR!7Fc6OYpuOou`yicZP5J=3gn(dK6`RT1?Bkl{4%NGmc~! z#qD7c@|l%kDAScvY(A4zoGE`&PHX(AV;v$QN~t}-^$oXtYpufiE|UH#(8L4niw`pb zNTU!&KHrEuBMBpSz9F zvbQ67cEvoOO2ecAB!R~woA3F_nfPK*sv#LIPWSy}LUSzU-&@h2^b4bB$mM9v@BudH z=uD9a9F4kJ8=d0wf==FVN5hc;mwePE7v!9@s(l{B`v#Wr7_hu51&%=B&&pjKPF#O@#+_Z7|vQYLr zg~t6LG|)cbVj zYXi@0Std$u26d<^g$^@R3s|#RvIe|VvBO>-MF1Q(~?2u&Bi!hH$7@1K~f~Nq?Jdkte3-Pyc!oSdV^kdgI Date: Fri, 20 Jan 2023 21:31:06 +0600 Subject: [PATCH 2/2] Merge commit from Igor1 --- .gitignore | 6 + Makefile | 108 ++-- README.md | 6 + main.cpp | 477 ------------------ ...icykit.ubl-settings-datetime.pkexec.policy | 12 +- reg/locali111 | 69 --- screen_app.png | Bin 0 -> 35649 bytes UBTime.cpp => ubl-settings-datetime.cpp | 190 +++++-- ubl-settings-datetime.desktop | 12 + ..._time.glade => ubl-settings-datetime.glade | 4 +- ublinux-logo.png => ubl-settings-datetime.png | Bin messages.pot => ubl-settings-datetime.po | 12 - ...-settings.svg => ubl-settings-datetime.svg | 0 13 files changed, 225 insertions(+), 671 deletions(-) create mode 100644 .gitignore delete mode 100644 main.cpp rename org.freedesktop.policykit.UBTime.pkexec.policy => org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy (51%) delete mode 100644 reg/locali111 create mode 100644 screen_app.png rename UBTime.cpp => ubl-settings-datetime.cpp (83%) create mode 100644 ubl-settings-datetime.desktop rename ubconfig_date_time.glade => ubl-settings-datetime.glade (99%) rename ublinux-logo.png => ubl-settings-datetime.png (100%) rename messages.pot => ubl-settings-datetime.po (99%) rename ublinux-datetime-settings.svg => ubl-settings-datetime.svg (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0611a0e --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +UBTime +main.cpp +ubl-settings-datetime.glade~ +test.cpp +ubl-settings-datetime +a.out \ No newline at end of file diff --git a/Makefile b/Makefile index 5161b99..9ca9003 100644 --- a/Makefile +++ b/Makefile @@ -1,61 +1,71 @@ #!/usr/bin/make -f -pkgname="ubconfig" +pkgname=ubl-settings-datetime -all: uninstall build check install clean +all: uninstall init build check install clean + +init: + mkdir -p /usr/share/${pkgname}/{images,ui,reg}/; uninstall: - pkgname="ubconfig" - for size in 16 32 48; do - rm -f "/usr/share/icons/hicolor/${size}x${size}/apps/ublinux-${pkgname}.svg" - rm -f "/usr/share/icons/hicolor/${size}x${size}/apps/hide_pass_icon.svg" - rm -f "/usr/share/icons/hicolor/${size}x${size}/apps/show_pass_icon.svg" - done - for file_po in *.po; do - lang=${file_po##*_};lang=${lang%.*} - file_mo=${file_po##*/}; file_mo="${file_mo%_*.po}.mo" - path_file_mo="/usr/share/locale/${lang}/LC_MESSAGES/${file_mo}" - rm -f "/usr/share/locale/${lang}/LC_MESSAGES/${file_mo}" - done - rm -f /usr/bin/"${pkgname}" - rm -f /usr/bin/"${pkgname}".gtk - rm -f /usr/share/"${pkgname}"/ui/"${pkgname}".glade - rm -f /usr/share/applications/"${pkgname}".desktop - rm -f /usr/share/"${pkgname}"/css/style.css - rm -f /usr/share/"${pkgname}"/images/side_img_ubc_v_dark.png - rm -f /usr/share/"${pkgname}"/images/side_img_ubc_v_light.png - rm -f /usr/share/polkit-1/actions/org.freedesktop.policykit."${pkgname}".pkexec.policy + @for size in 16 32 48; do \ + rm -f "/usr/share/icons/hicolor/$${size}x$${size}/apps/ublinux-datetime-settings.svg"; \ + rm -f "/usr/share/icons/hicolor/$${size}x$${size}/apps/ublinux-datetime-settings.png"; \ + done; + @for file_po in *.po; do \ + lang=$${file_po##*_};lang=$${lang%.*}; \ + file_mo=$${file_po##*/}; file_mo="$${file_mo%_*.po}.mo"; \ + path_file_mo="/usr/share/locale/$${lang}/LC_MESSAGES/$${file_mo}"; \ + rm -f "/usr/share/locale/$${lang}/LC_MESSAGES/$${file_mo}"; \ + done; + rm -f /usr/bin/${pkgname}; \ + rm -rf /usr/bin/${pkgname}/reg; \ + rm -f /usr/share/${pkgname}/ui/${pkgname}.glade; \ + rm -f /usr/share/applications/${pkgname}.desktop; \ + rm -f /usr/share/${pkgname}/images/ublinux-datetime-settings.svg; \ + rm -f /usr/share/${pkgname}/images/ublinux-datetime-settings.png; \ + rm -f /usr/share/polkit-1/actions/org.freedesktop.policykit.${pkgname}.pkexec.policy; \ build: - echo "Build" + echo "Build"; \ + g++ -O2 -std=c++20 -lstdc++ -o ubl-settings-datetime ubl-settings-datetime.cpp `pkg-config --cflags --libs gtkmm-3.0` -Wl,-export-dynamic -g; \ check: - echo "Check" + echo "Check"; \ install: - for size in 16 32 48; do - install -dm755 /usr/share/icons/hicolor/${size}x${size}/apps - rsvg-convert -w ${size} -h ${size} -f svg --keep-image-data "ublinux-${pkgname}.svg" -o "/usr/share/icons/hicolor/${size}x${size}/apps/ublinux-${pkgname}.svg" - rsvg-convert -w ${size} -h ${size} -f svg --keep-image-data "hide_pass_icon.svg" -o "/usr/share/icons/hicolor/${size}x${size}/apps/hide_pass_icon.svg" - rsvg-convert -w ${size} -h ${size} -f svg --keep-image-data "show_pass_icon.svg" -o "/usr/share/icons/hicolor/${size}x${size}/apps/show_pass_icon.svg" - done - for file_po in *.po; do - lang=${file_po##*_};lang=${lang%.*} - install -dm755 /usr/share/locale/${lang}/LC_MESSAGES - file_mo=${file_po##*/}; file_mo="${file_mo%_*.po}.mo" - path_file_mo="/usr/share/locale/${lang}/LC_MESSAGES/${file_mo}" - msgfmt "${file_po}" -v -f -o "${path_file_mo}" - done - install -vDm0755 "${pkgname}" -t /usr/bin/ - install -vDm0755 "${pkgname}".gtk -t /usr/bin/ - install -vDm0644 "${pkgname}".glade -t /usr/share/"${pkgname}"/ui/ - install -vDm0644 "${pkgname}".desktop -t /usr/share/applications/ - install -vDm0644 style.css -t /usr/share/"${pkgname}"/css/ - install -vDm0644 side_img_ubc_v_dark.png -t /usr/share/"${pkgname}"/images/ - install -vDm0644 side_img_ubc_v_light.png -t /usr/share/"${pkgname}"/images/ - install -vDm0644 org.freedesktop.policykit."${pkgname}".pkexec.policy -t /usr/share/polkit-1/actions/ - - + @for size in 16 32 48; do \ + install -dm755 /usr/share/icons/hicolor/$${size}x$${size}/apps; \ + rsvg-convert -w $$size -h $$size -f svg --keep-image-data ${pkgname}.svg -o "/usr/share/icons/hicolor/$${size}x$${size}/apps/$${pkgname}.svg"; \ + done; + @for file_po in *.po; do \ + lang=$${file_po##*_};lang=$${lang%.*}; \ + install -dm755 /usr/share/locale/$${lang}/LC_MESSAGES; \ + file_mo=$${file_po##*/}; file_mo="$${file_mo%_*.po}.mo"; \ + path_file_mo="/usr/share/locale/$${lang}/LC_MESSAGES/$${file_mo}"; \ + echo $$file_po; \ + msgfmt "$${file_po}" -v -f -o "$${path_file_mo}"; \ + done; + install -vDm0755 ${pkgname} -t /usr/bin/; \ + install -vDm0644 ${pkgname}.glade -t /usr/share/${pkgname}/ui/; \ + install -vDm0644 ${pkgname}.desktop -t /usr/share/applications/; \ + install -vDm0644 ubl-settings-datetime.svg -t /usr/share/icons/hicolor/scalable/apps/ + install -vDm0644 ubl-settings-datetime.svg -t /usr/share/${pkgname}/images/; \ + install -vDm0644 ubl-settings-datetime.png -t /usr/share/${pkgname}/images/; \ + install -vDm0644 org.freedesktop.policykit.${pkgname}.pkexec.policy -t /usr/share/polkit-1/actions/; + install -vDm0644 reg/Africa -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/America -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Antarctica -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Arctic -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Asia -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Atlantic -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Australia -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Brazil -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Chile -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Europe -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Indian -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/Mexico -t /usr/share/${pkgname}/reg/; \ + install -vDm0644 reg/US -t /usr/share/${pkgname}/reg/; clean: - echo "Clean" - + echo "Clean"; + \ No newline at end of file diff --git a/README.md b/README.md index 8ab6612..ccab309 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # ubl-settings-datetime +![alt text](screen_app.png) + +- [ ] Локализация +- [x] Makefile +- [ ] Парсинг TimeZone C++ + diff --git a/main.cpp b/main.cpp deleted file mode 100644 index 4b06858..0000000 --- a/main.cpp +++ /dev/null @@ -1,477 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; -class MainWindow; - -class MainWindow { -public: - MainWindow(Glib::RefPtr const& builder) - { - this->builder = builder; - this->get_builder(); - _numTimeHrs->set_range(0,23); - _numTimeMin->set_range(0,59); - _numTimeHrs->set_increments(1.0,1.0); - _numTimeMin->set_increments(1.0,1.0); - _txtDate->set_sensitive(false); - this->get_config(); - this->event(); - - - } - - virtual ~MainWindow() = default; - // Функция вызывается btnUpdateDate для обновления времени - void get_builder(){ - builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime); - builder->get_widget("btnChooseDate", _btnChooseDate); - builder->get_widget("cbxSynchronizeNtp", _cbxSynchronizeNtp); - builder->get_widget("popCalendar", _popCalendar); - builder->get_widget("numTimeHrs", _numTimeHrs); - builder->get_widget("numTimeMin", _numTimeMin); - builder->get_widget("cbDhcp", _cbDhcp); - builder->get_widget("txtDate", _txtDate); - builder->get_widget("cbRegion", _cbRegion); - builder->get_widget("cbRegionGlob", _cbRegionGlob); - builder->get_widget("cbZone", _cbZone); - builder->get_widget("cbZoneGlob", _cbZoneGlob); - builder->get_widget("txtNtpServer", _txtNtpServer); - builder->get_widget("cldrDate", _cldrDate); - builder->get_widget("mess_dchp", _mess_dchp); - - } - void event(){ - _cldrDate->signal_day_selected().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); - _cbxSynchronizeNtp->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::set_ntp_toggle)); - _btnUpdateDateTime->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::update_time_date)); - _btnChooseDate->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::calendar_show)); - _cbDhcp->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::get_ghcp)); - _cbRegion->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone)); - _cbRegionGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::append_zone_glob)); - _cbZone->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone)); - _cbZoneGlob->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::enter_zone_glob)); - _txtNtpServer->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::A));; - } - - void focus_ntp(){ - - } - void A(){ - cout << "A" << endl; - //_txtNtpServer->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_ntp)); - } - - - - - void enry_dhcp_mess(){} - - void get_ghcp(){ - Glib::ustring str_dhcp = _cbDhcp->get_active_text(); - if (str_dhcp.length()!=0){ - if (str_dhcp=="DHCP"){ - string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=dhcp"; - system(cmd.c_str()); - //_txtNtpServer->set_active(false); - _cbDhcp->set_active(0); - } - else{ - string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=" + _txtNtpServer->get_text(); - //_txtNtpServer->set_active(true); - system(cmd.c_str()); - _cbDhcp->set_active(1); - } - } - else{ - string cmd = "sudo /usr/bin/ubconfig set network NTPSERVERS=dhcp"; - system(cmd.c_str()); - //_txtNtpServer->set_sensitive(false); - _cbDhcp->set_active(0); - } - } - - void get_calendar(){ - _cldrDate->get_date(year, month, day); - string date = to_string(day) + ':' + to_string(month+1) + ':' + to_string(year); - _txtDate->set_text(date); - } - - - void calendar_show(){ - time_t now = time(0); - tm *ltm = localtime(&now); - unsigned int y=1900+ ltm->tm_year; - unsigned int m=ltm->tm_mon; - unsigned int d=ltm->tm_mday; - - - _cldrDate->select_month(m,y); - _cldrDate->select_day(d); - _popCalendar->show(); - } - - void get_config(){ - this->read_file(); - this->update_hour_minute(); - this->update_calendar(); - this->get_ghcp(); - string str_dhcp = this->call("sudo /usr/bin/ubconfig get network NTPSERVERS"); - cout << str_dhcp << endl; - if ((str_dhcp!="") && (str_dhcp!="(null)")){ - str_dhcp = str_dhcp.substr(str_dhcp.find("=")+1,str_dhcp.length()); - str_dhcp = str_dhcp.substr(0,str_dhcp.find("\n")); - if (str_dhcp=="dhcp"){ - _cbDhcp->set_active(0); - //_txtNtpServer->set_sensitive(false); - //_cbxSynchronizeNtp->set_sensitive(true); - } - else{ - if (str_dhcp==""){ - _mess_dchp->show(); - } - else{ - _cbDhcp->set_active(1); - //_txtNtpServer->set_sensitive(true); - //_cbxSynchronizeNtp->set_sensitive(false); - _txtNtpServer->set_text(str_dhcp); - } - } - - - //_cbxDhcp->set_active(true); - this->set_ntp_toggle(); - } - string str_ntp = this->call("sudo systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\""); - if (str_ntp.length()<50) { - _cbxSynchronizeNtp->set_active(false); - } - else{ - _cbxSynchronizeNtp->set_active(true); - } - - string read_reg_zon_cfg = this->call("sudo /usr/bin/ubconfig get clock ZONE"); - if ((read_reg_zon_cfg != "") && (read_reg_zon_cfg !="(null)")){ - read_reg_zon_cfg = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("=")+1,read_reg_zon_cfg.length()); - read_reg_zon_cfg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("\n")); - string str_filling_reg = read_reg_zon_cfg.substr(0,read_reg_zon_cfg.find("/")); - string str_filling_zon = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("/")+1,read_reg_zon_cfg.length()); - str_filling_zon = str_filling_zon.substr(0,str_filling_zon.find("\n")); - string str_zone_check = ""; - this->append_region_zone(str_filling_reg,str_filling_zon); - } - else { - this->append_region_zone("Asia","Omsk"); - - } - - } - - void enter_zone(){ - Glib::ustring zone_text = _cbZone->get_active_text(); - Glib::ustring reg_text = _cbRegion->get_active_text(); - if(!(zone_text.empty()) && !(reg_text.empty())){ - str_zone=zone_text.substr(zone_text.find(") ")+2,zone_text.length()); - str_region=reg_text; - string cmd = "sudo timedatectl set-timezone '" + str_region +"/" + str_zone+"'"; - system(cmd.c_str()); - } - else{ - str_zone=""; - str_region=""; - } - } - - void enter_zone_glob(){ - Glib::ustring zone_text = _cbZoneGlob->get_active_text(); - Glib::ustring reg_text = _cbRegionGlob->get_active_text(); - if(!(zone_text.empty()) && !(reg_text.empty())){ - str_zoneGlob = zone_text.substr(zone_text.find(") ")+2,zone_text.length()); - str_region_glob = reg_text; - string cmd = "sudo /usr/bin/ubconfig set clock ZONE=" +str_region_glob +"/" + str_zoneGlob; - system(cmd.c_str()); - } - else{ - str_zoneGlob=""; - str_region_glob=""; - } - } - - void set_ntp_toggle(){ - bool flag = _cbxSynchronizeNtp->get_active(); - _numTimeHrs->set_sensitive(!flag); - _numTimeMin->set_sensitive(!flag); - //_txtDate->set_sensitive(!flag); - _btnChooseDate->set_sensitive(!flag); - //_btnUpdateDateTime->set_sensitive(!flag); - if (flag==false){ - system("sudo systemctl --now disable systemd-timesyncd.service ntpd.service"); - } - else { - system("sudo systemctl --now enable systemd-timesyncd.service"); - } - - } - - void append_region_zone(string region, string zone){ - int index = 0; - for ( const auto &text : time_reg_map ) { - _cbRegion->append(text.first); - _cbRegionGlob->append(text.first); - if (text.first == region){ - _cbRegionGlob->set_active(index); - _cbRegion->set_active(index); - - } - index+=1; - } - index = 0; - string cheek_zone = ""; - for (const auto &_str_zone : time_reg_map.at(region)){ - _cbZone->append(_str_zone); - _cbZoneGlob->append(_str_zone); - if (_str_zone!=""){ - cheek_zone = _str_zone.substr(_str_zone.find(") ")+2,_str_zone.length()); - if (cheek_zone == zone){ - _cbZone->set_active(index); - _cbZoneGlob->set_active(index); - } - } - index+=1; - } - } - string call(string cmd){ - FILE *fp; - int status; - char path[PATH_MAX]; - fp = popen(cmd.c_str(), "r"); - if (fp == NULL){ - //return ""; - } - - while (fgets(path, PATH_MAX, fp) != NULL){ - printf("%s", path); - break; - - } - - status = pclose(fp); - if (status == -1) { - //return ""; - } - else { - //return ""; - } - return path; - } - - void append_zone(){ - Glib::ustring text = _cbRegion->get_active_text(); - _cbZone->remove_all(); - - if(!(text.empty())){ - str_region = text; - for (const auto &_str_zone : time_reg_map.at(str_region)){ - _cbZone->append(_str_zone); - } - } - - } - - void append_zone_glob(){ - Glib::ustring text = _cbRegionGlob->get_active_text(); - _cbZoneGlob->remove_all(); - if(!(text.empty())){ - str_region_glob = text; - for (const auto &_str_zone : time_reg_map.at(str_region_glob)){ - _cbZoneGlob->append(_str_zone); - } - } - - } - void update_time_date(){ - this->enter_zone(); - bool flag = _cbxSynchronizeNtp->get_active(); - if (flag==false){ - hour = _numTimeHrs->get_value_as_int(); - minute = _numTimeMin->get_value_as_int(); - time_t now = time(0); - tm *ltm = localtime(&now); - string cmd = "sudo timedatectl set-time \""+ - to_string(hour) + ":" + to_string(minute) - + ":" + to_string(ltm->tm_sec) +"\""; - system(cmd.c_str()); - if ((year==0) && (month == 0) && (day == 0)){ - time_t now = time(0); - tm *ltm = localtime(&now); - year=1900+ ltm->tm_year; - month=ltm->tm_mon+1; - day=ltm->tm_mday; - } - string str_mount = ""; - string str_day = ""; - if (month <10){ - str_mount = "0"+to_string(month+1); - } - else{ - str_mount = to_string(month+1); - } - if (day <10){ - str_day = "0"+to_string(day); - } - else{ - str_day = to_string(day); - } - string cmd1 = "sudo date --set=\"" +to_string(year)+ - str_mount+str_day + " " +to_string(hour) + ":" + - to_string(minute)+"\""; - system(cmd1.c_str()); - } - - - } - void update_hour_minute(){ - time_t now = time(0); - tm *ltm = localtime(&now); - _numTimeHrs->set_value(ltm->tm_hour); - _numTimeMin->set_value(ltm->tm_min); - } - - void update_calendar(){ - time_t now = time(0); - tm *ltm = localtime(&now); - int year = 1900 + (int)ltm->tm_year; - string date = to_string(ltm->tm_mday) + ':' + to_string(ltm->tm_mon+1) + ':' + to_string(year); - _txtDate->set_text(date); - } - void read_file(){ - std::string line; - namespace fs = std::filesystem; - for (const auto & entry : fs::directory_iterator(path_file)){ - std::ifstream in(entry.path()); // окрываем файл для чтения - if (in.is_open()) - { - vector zone; - zone.push_back(""); - while (getline(in, line)) - { - zone.push_back(string(gettext(line.c_str()))); - } - string key_reg = entry.path().filename().string(); - key_reg = string(gettext(key_reg.c_str())); - time_reg_map.insert({key_reg, zone}); - } - in.close(); - } - } - -private: - string path_file="reg/"; - Glib::RefPtr builder; - Gtk::Button *_btnUpdateDateTime; - Gtk::Button *_btnChooseDate; - Gtk::ComboBoxText *_cbDhcp; - Gtk::SpinButton *_numTimeHrs; - Gtk::SpinButton *_numTimeMin; - Gtk::CheckButton *_cbxSynchronizeNtp; - - Gtk::Entry *_txtDate; - Gtk::ComboBoxText *_cbRegion; - Gtk::ComboBoxText *_cbRegionGlob; - Gtk::ComboBoxText *_cbZone; - Gtk::ComboBoxText *_cbZoneGlob; - Gtk::Entry *_txtNtpServer; - Gtk::MessageDialog *_mess_dchp; - Gtk::Popover *_popCalendar; - Gtk::Calendar *_cldrDate; - unsigned int year, month, day; - int hour; - int minute; - string str_region=""; - string str_region_glob=""; - string str_txtDate; - string str_txtNtpServer; - string str_zone=""; - string str_zoneGlob; - std::map > time_reg_map; - -}; - -class WrapperMainWindow : public Gtk::ApplicationWindow { - public: - WrapperMainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) - : Gtk::ApplicationWindow(obj) - , builder{builder} - { - MainWindow MainWindow(builder); - } - virtual ~WrapperMainWindow() = default; - - private: - Glib::RefPtr builder; -}; -/* -class PlugMainWindow : public Gtk::Plug -{ - -public: - - SettingsPlug(::Window p_socketID) - : Gtk::Plug{p_socketID} - { - - } - void get_builder(Glib::RefPtr const& builder) - { - this->builder = builder; - } - private: - Glib::RefPtr builder; -} -*/ -int main(int argc, char* argv[]) { - string app_name = "main"; - //setlocale(LC_ALL, ""); - //bindtextdomain(app_name, "/usr/share/locale"); - //textdomain(app_name); - auto app = Gtk::Application::create(argc, argv, "de.engelmarkus.example"); - auto builder = Gtk::Builder::create_from_file("ubconfig_date_time.glade"); - - Glib::OptionContext context; - /*CmdArgParser parser{ - "Socket ID", - "Command line argument for socket ID communication.", - "No help available, sorry" - }*/ - - - //context.set_main_group(parser); - //context.parse(argc, argv); - - //::Window socketID = parser.GetSocketID(); - //SettingsPlug plug{socketID}; - //plug.show(); - - WrapperMainWindow * wnd = nullptr; - - builder->get_widget_derived("window", wnd); - - auto r = app->run(*wnd); - - delete wnd; - - return r; -} \ No newline at end of file diff --git a/org.freedesktop.policykit.UBTime.pkexec.policy b/org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy similarity index 51% rename from org.freedesktop.policykit.UBTime.pkexec.policy rename to org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy index 7c1f2be..eb3e5c8 100644 --- a/org.freedesktop.policykit.UBTime.pkexec.policy +++ b/org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy @@ -7,17 +7,17 @@ UBSoft https://ublinux.ru - - Run UBConfig as root - Запуск UBTime с правами root - Authentication is required to run the UBConfig - Требуется авторизация для запуска UBTime с правами root + + Run ubl-settings-datetime as root + Запуск ubl-settings-datetime с правами root + Authentication is required to run the ubl-settings-datetime + Требуется авторизация для запуска ubl-settings-datetime с правами root auth_admin auth_admin auth_admin - /usr/bin/UBTime + /home/superadmin/Документы/Проект/ubconfig_new/ubl-settings-datetime/ true diff --git a/reg/locali111 b/reg/locali111 deleted file mode 100644 index f14d13c..0000000 --- a/reg/locali111 +++ /dev/null @@ -1,69 +0,0 @@ -msgid "Ok" -msgstr "Oк" - -msgid "Enter DHCP" -msgstr "Введите DHCP" - -msgid "UBconfig - Дата и время" -msgstr "UBconfig - Дата и время" - -msgid "Setting the date and time" -msgstr "Настройка даты и времени" - -msgid "Time" -msgstr "Время" - -msgid "Clock" -msgstr "Часы" - -msgid "Minutes" -msgstr "Минуты" - -msgid "Date" -msgstr "Дата" - -msgid "" -msgstr "" - -msgid "Interactive date picker" -msgstr "Интерактивный выбор даты" - -msgid "Change zone setting" -msgstr "Изменить параметр зоны" - -msgid "time zone" -msgstr "Временная зона" - -msgid "Region" -msgstr "Регион" - -msgid "Zone" -msgstr "Зона" - -msgid "Update date and time" -msgstr "Обновить дату и время" - -msgid "Synchronize via NTP" -msgstr "Синхронизировать через NTP" - -msgid "Automatic time synchronization" -msgstr "Автоматическая синхронизация времени" - -msgid "Synchronization method" -msgstr "Способ синхронизации" - -msgid "DHCP" -msgstr "DHCP" - -msgid "Manually" -msgstr "Вручную" - -msgid "" -msgstr "" - -msgid "Time zone" -msgstr "Временная зона" - -msgid "Setting date and time in global configuration" -msgstr "Настройка даты и времени в глобальной конфигурации" - diff --git a/screen_app.png b/screen_app.png new file mode 100644 index 0000000000000000000000000000000000000000..39c88a4f9edcc2d975aea96ed69d7e5a5063a2a2 GIT binary patch literal 35649 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 Z61VXH?IEN`bocfR using namespace std; -string path_app= "/home/superadmin/Документы/Проект/ubconfig_new/Ubconfig_date_time/"; -string app_name = "UBTime"; +string path_app= "/usr/bin/"; +string path_glade= "/usr/share/ubl-settings-datetime/ui/"; +string app_name = "ubl-settings-datetime"; bool flag_datetime = false; bool flag_timezone = false; bool flag_ntp = false; bool flag_update = false; + +class CmdArgParser : public Glib::OptionGroup +{ + +public: + + CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help) + : Glib::OptionGroup{p_name, p_description, p_help} + { + // Define the 'socket ID' argument options: + Glib::OptionEntry socketIDArg; + socketIDArg.set_long_name("socket-id"); + socketIDArg.set_short_name('s'); + socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); + socketIDArg.set_description("Settings manager socket"); + + // Register it in the parser. It value will be recorded in m_socketID for later usage. + add_entry(socketIDArg, m_socketID); + } + + // Override this to handle errors. I skipped it for simplicity. + // void on_error(Glib::OptionContext& context, const Glib::Error& error) override; + + ::Window GetSocketID() const + { + return m_socketID; + } + +private: + + int m_socketID = 0; + +}; + + + class MainWindow : public Gtk::ApplicationWindow { public: MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) : Gtk::ApplicationWindow(obj) , builder{builder} { - path_file+="reg/"; + this->settings(); + + } + MainWindow(Glib::RefPtr const& builder) { + this->builder = builder; + this->settings(); + } + + virtual ~MainWindow() = default; + + void settings(){ this->get_builder(); _numTimeHrs->set_range(0,23); _numTimeMin->set_range(0,59); @@ -44,11 +91,8 @@ public: this->get_config(); this->flag_block_gui(); this->event(); - } - virtual ~MainWindow() = default; - void flag_block_gui(){ if (flag_datetime==true){ _numTimeHrs->set_sensitive(false); @@ -174,7 +218,7 @@ public: _cldrDate->get_date(year, month, day); string str_month = ""; string str_day = ""; - month=month+1; + month+=1; if (month <10){ str_month = "0"+to_string(month); } @@ -416,7 +460,7 @@ public: time_t now = time(0); tm *ltm = localtime(&now); year=1900+ ltm->tm_year; - month=ltm->tm_mon+1; + month=ltm->tm_mon; day=ltm->tm_mday; } string str_month = ""; @@ -425,7 +469,7 @@ public: str_month = "0"+to_string(month+1); } else{ - str_month = to_string(month+1); + str_month = to_string(month); } if (day <10){ str_day = "0"+to_string(day); @@ -475,7 +519,7 @@ public: void read_file(){ std::string line; namespace fs = std::filesystem; - for (const auto & entry : fs::directory_iterator(path_file)){ + for (const auto & entry : fs::directory_iterator("/usr/share/ubl-settings-datetime/reg/")){ std::ifstream in(entry.path()); // окрываем файл для чтения if (in.is_open()) { @@ -494,7 +538,6 @@ public: } private: - string path_file=path_app; Glib::RefPtr builder; Gtk::Button *_btnUpdateDateTime; Gtk::Button *_btnChooseDate; @@ -526,12 +569,37 @@ private: }; +class SettingsPlug : public Gtk::Plug +{ + +public: + Gtk::Window *window; + SettingsPlug(::Window p_socketID, Glib::RefPtr builder) + : Gtk::Plug{p_socketID} + { + + //MainWindow* wnd = nullptr; + //builder->get_widget_derived("window", wnd); + builder->get_widget("plugBox", plugBox); + plugBox->get_parent()->remove(*plugBox); + add(*plugBox); + + show_all_children(); + } + +private: + + Gtk::Widget *plugBox; + Gtk::Widget *parent; +}; + void help(){ cout << "Параметры командной строки --lock-datetime\n --lock-timezone\n --lock-ntp\n --lock-update\n" << endl; } int main(int argc, char* argv[]) { + //path_app=filesystem::current_path(); //path_app+="/"; //cout << *argv[0] << endl; @@ -541,59 +609,69 @@ int main(int argc, char* argv[]) { for (int i=1; iget_widget_derived("window", wnd); + auto r = app->run(*wnd); + + delete wnd; + return r; } - - - //Glib::OptionContext context; - /*CmdArgParser parser{ - "Socket ID", - "Command line argument for socket ID communication.", - "No help available, sorry" - }*/ - + else{ + Glib::init(); + setlocale(LC_ALL, ""); + Glib::OptionContext context; + + CmdArgParser parser{ + "Socket ID", + "Command line argument for socket ID communication.", + "No help available, sorry" + }; - //context.set_main_group(parser); - //context.parse(argc, argv); + context.set_main_group(parser); + context.parse(argc, argv); - //::Window socketID = parser.GetSocketID(); - //SettingsPlug plug{socketID}; - //plug.show(); - MainWindow* wnd = nullptr; - builder->get_widget_derived("window", wnd); - auto r = app->run(*wnd); + ::Window socketID = parser.GetSocketID(); - delete wnd; + // Handle plug: + SettingsPlug plug{socketID, builder}; + plug.show(); + + app->run(plug); + + } - return r; + } \ No newline at end of file diff --git a/ubl-settings-datetime.desktop b/ubl-settings-datetime.desktop new file mode 100644 index 0000000..ec87043 --- /dev/null +++ b/ubl-settings-datetime.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +Exec=ubl-settings-datetime +Icon=ubl-settings-datetime +Comment=Time setting app +Comment[ru]=Приложение для настройки времени +Terminal=false +Name=Time setting +Name[ru]=Настройка времени +GenericName=Time setting app +GenericName[ru]=Настройка времени +Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings; \ No newline at end of file diff --git a/ubconfig_date_time.glade b/ubl-settings-datetime.glade similarity index 99% rename from ubconfig_date_time.glade rename to ubl-settings-datetime.glade index 796c316..acb6aeb 100644 --- a/ubconfig_date_time.glade +++ b/ubl-settings-datetime.glade @@ -87,7 +87,7 @@ False UBconfig - Дата и время - ublinux-logo.png + ../../../../../../usr/share/ubl-settings-datetime/images/ubl-settings-datetime.png True @@ -108,7 +108,7 @@ 5 6 6 - ublinux-logo.png + ../../../../../../usr/share/ubl-settings-datetime/images/ubl-settings-datetime.png False diff --git a/ublinux-logo.png b/ubl-settings-datetime.png similarity index 100% rename from ublinux-logo.png rename to ubl-settings-datetime.png diff --git a/messages.pot b/ubl-settings-datetime.po similarity index 99% rename from messages.pot rename to ubl-settings-datetime.po index 5aac87c..b74586b 100644 --- a/messages.pot +++ b/ubl-settings-datetime.po @@ -850,9 +850,6 @@ msgstr "" msgid "Panama" msgstr "" -msgid "Indiana" -msgstr "" - msgid "New_York" msgstr "" @@ -1165,9 +1162,6 @@ msgstr "" msgid "Famagusta" msgstr "" -msgid "Nicosia" -msgstr "" - msgid "Hebron" msgstr "" @@ -1192,9 +1186,6 @@ msgstr "" msgid "Baghdad" msgstr "" -msgid "Istanbul" -msgstr "" - msgid "Kuwait" msgstr "" @@ -1540,9 +1531,6 @@ msgstr "" msgid "Acre" msgstr "" -msgid "West" -msgstr "" - msgid "East" msgstr "" diff --git a/ublinux-datetime-settings.svg b/ubl-settings-datetime.svg similarity index 100% rename from ublinux-datetime-settings.svg rename to ubl-settings-datetime.svg