diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e4c2d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +.vscode/ +ubl-settings-kernel +*~ +build/ +compile/ +*# +terminal-commands/ +source/ubl-cmake.h +vgcore* +.BUILD.md +.updatebuild.sh +.install.sh \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c7e62fd --- /dev/null +++ b/Makefile @@ -0,0 +1,157 @@ +#!/usr/bin/make -f + +#SHELL := /bin/bash +MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) +MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) +MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) + +CMAKE_COMMAND = cmake +CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source +CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile +DEPENDS = /bin/cmake +PREFIX ?= /usr/local +PKGNAME = $(MAKEFILE_DIR) +FILE_VER = source/${PKGNAME}.h +PKGIDENT=$(subst /,-,${PREFIX}) + +default_target: all + +.PHONY: all init depend debug prepare check build uninstall install clean help + +all: init build + +init: + @echo "Initialize ..."; \ + if [ -d ".git" ]; then \ + LATEST_TAG=$$(git describe --abbrev=0 --tags | sed 's/^v//'); \ + if [ -z "$${LATEST_TAG}" ]; \ + then \ + LATEST_TAG=$$"0.0"; \ + echo "$${LATEST_TAG} is empty"; \ + fi; \ + else \ + LATEST_TAG="Development"; \ + fi; \ + sed -r "s/^(string version_application).*/\1 = \"$${LATEST_TAG}\";/" -i ${FILE_VER}; \ + echo "-- Build path: ${CMAKE_BUILD_DIR}" + +depend: + @echo "Check depends ..." + @for FILE_DEPEND in $(DEPENDS); do \ + if [ ! -f $${FILE_DEPEND} ]; then \ + echo "ERROR: Depend '$${FILE_DEPEND}' not found !"; \ + exit 1; \ + fi; \ + done; \ + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B${CMAKE_BUILD_DIR} --check-build-system CMakeFiles/Makefile.cmake 1 || exit 1; \ + echo "Check depends: OK" + +debug: + @echo "Debug ..." + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ + fi; \ + echo "Debug: OK" + +prepare: + @echo "Prepare ..."; \ + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ + fi; \ + echo "Prepare: OK" + +check: + @echo "Check ..."; \ + if [ -f ${CMAKE_BUILD_DIR}/${PKGNAME} ]; then \ + echo "Check: OK"; \ + else \ + echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not found !"; \ + exit 1; \ + fi + +build: depend prepare + @echo "Build ..."; \ + $(MAKE_COMMAND) --directory=${CMAKE_BUILD_DIR}; \ + sed -r "s/^(string version_application).*/\1;/" -i ${FILE_VER}; \ + echo "Build: OK" + +uninstall: + @echo "Uninstall ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + $(RM) "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.png"; \ + done + @for FILE_SVG in $(wildcard *.svg); do \ + for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ + done; \ + done + @$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}" + @$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop" + @$(RM) "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy" + @for FILE_ICON in $(wildcard icons/*/*.svg); do \ + SUB_NAME=$${FILE_ICON#*/}; SUB_NAME=$${SUB_NAME%/*}; \ + install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/$${SUB_NAME}" $${FILE_ICON}; \ + done + @if [ -z ${DESTDIR} ]; then \ + [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ + update-desktop-database --quiet &>/dev/null || true; \ + [ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ + fi + @echo "Uninstall: OK" + +install: check uninstall + @echo "Install ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + install -dm755 "${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES"; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + echo "$${FILE_PO}"; \ + msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16 32 48; do \ + install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps"; \ + rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + done + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" + @cp ./com.ublinux.${PKGNAME}.policy ./compile/com.ublinux.${PKGNAME}${PKGIDENT}.policy + @sed -e 's+/usr/bin+${PREFIX}/bin+' -e 's+.run+${PKGIDENT}.run+g' ./compile/com.ublinux.${PKGNAME}${PKGIDENT}.policy -i + @install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy" + @ldconfig -n /usr/local/lib + @if [ -z ${DESTDIR} ]; then \ + [ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \ + update-desktop-database --quiet &>/dev/null || true; \ + [ -d "${DESTDIR}/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \ + fi + @echo "Install: OK" + +clean: + @echo "Clean ..." + @$(RM) -rd ${CMAKE_BUILD_DIR} + @if [ -d ${CMAKE_BUILD_DIR} ]; then \ + echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \ + else \ + echo "Clean: OK"; \ + fi + +help: + @echo "The following are some of the valid targets for this Makefile:"; \ + echo "... all (the default if no target is provided)"; \ + echo "... init"; \ + echo "... debug"; \ + echo "... prepare"; \ + echo "... compile"; \ + echo "... install"; \ + echo "... uninstall"; \ + echo "... clean" \ No newline at end of file diff --git a/README.md b/README.md index 2816c3a..19cebb1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,33 @@ # ubl-settings-kernel +# Выполнить +# Build +In order to build ubl-settings-kernel you will need: + +- CMake +- C compiler +- GTK+ 3 & dependencies +- webkit2gtk (optional) +- vte-2.91 +- [libublsettings](https://gitea.ublinux.ru/Applications/libublsettings) +- [libublsettings-gtk3](https://gitea.ublinux.ru/Applications/libublsettings-gtk3) +- [libublsettingsui-gtk3](https://gitea.ublinux.ru/Applications/libublsettingsui-gtk3) + +Once you have all the necessary dependencies, you can use: +```sh +$ make +``` + +# Installation +After a successful build, just use: +```sh +$ sudo make install clean +``` + +# Uninstallation +After a successful build, just use: +```sh +$ sudo make uninstall +``` + +![alt text](screenshot/screenshot.png) diff --git a/com.ublinux.ubl-settings-kernel.checked.svg b/com.ublinux.ubl-settings-kernel.checked.svg new file mode 100644 index 0000000..e3cab42 --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.checked.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + diff --git a/com.ublinux.ubl-settings-kernel.policy b/com.ublinux.ubl-settings-kernel.policy new file mode 100644 index 0000000..211c7c1 --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.policy @@ -0,0 +1,24 @@ + + + + + UBLinux + https://ublinux.ru + + + Run ubl-settings-kernel as root + Запуск утилиты ubl-settings-kernel с правами root + Authentication is required to run ubl-settings-kernel + Требуется авторизация для запуска утилиты ubl-settings-kernel с правами root + + auth_admin + auth_admin + auth_admin + + /usr/bin/ubl-settings-kernel + true + + + diff --git a/com.ublinux.ubl-settings-kernel.svg b/com.ublinux.ubl-settings-kernel.svg new file mode 100644 index 0000000..f636c26 --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.svg @@ -0,0 +1,4957 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.ublinux.ubl-settings-kernel.warning.svg b/com.ublinux.ubl-settings-kernel.warning.svg new file mode 100644 index 0000000..9a90dba --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.warning.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/gresource.xml b/gresource.xml new file mode 100644 index 0000000..05fab96 --- /dev/null +++ b/gresource.xml @@ -0,0 +1,21 @@ + + + + ubl-settings-kernel.glade + ubl-settings-kernel-info.glade + ubl-settings-kernel-install.glade + ubl-settings-kernel-table-row.glade + ubl-settings-kernel-additions-table-row.glade + ubl-settings-kernel-dialog.glade + + + ubl-settings-kernel.css + + + ubl-settings-kernel-banner.png + + + kernel-list.csv + kernel-list-addon.csv + + \ No newline at end of file diff --git a/icons/actions/com.ublinux.ubl-settings-kernel-download.svg b/icons/actions/com.ublinux.ubl-settings-kernel-download.svg new file mode 100644 index 0000000..6ed49b5 --- /dev/null +++ b/icons/actions/com.ublinux.ubl-settings-kernel-download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/actions/com.ublinux.ubl-settings-kernel-file-lines.svg b/icons/actions/com.ublinux.ubl-settings-kernel-file-lines.svg new file mode 100644 index 0000000..be19f58 --- /dev/null +++ b/icons/actions/com.ublinux.ubl-settings-kernel-file-lines.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/actions/com.ublinux.ubl-settings-kernel-hashtag.svg b/icons/actions/com.ublinux.ubl-settings-kernel-hashtag.svg new file mode 100644 index 0000000..d4b49fd --- /dev/null +++ b/icons/actions/com.ublinux.ubl-settings-kernel-hashtag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/status/com.ublinux.ubl-settings-kernel-cubes.svg b/icons/status/com.ublinux.ubl-settings-kernel-cubes.svg new file mode 100644 index 0000000..dbed1b8 --- /dev/null +++ b/icons/status/com.ublinux.ubl-settings-kernel-cubes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/status/com.ublinux.ubl-settings-kernel-dropbox.svg b/icons/status/com.ublinux.ubl-settings-kernel-dropbox.svg new file mode 100644 index 0000000..7bccea6 --- /dev/null +++ b/icons/status/com.ublinux.ubl-settings-kernel-dropbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/status/com.ublinux.ubl-settings-kernel-square-check.svg b/icons/status/com.ublinux.ubl-settings-kernel-square-check.svg new file mode 100644 index 0000000..1f72889 --- /dev/null +++ b/icons/status/com.ublinux.ubl-settings-kernel-square-check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kernel-list-addon.csv b/kernel-list-addon.csv new file mode 100644 index 0000000..7337cdf --- /dev/null +++ b/kernel-list-addon.csv @@ -0,0 +1,10 @@ +NAME;PAСKAGE_UBM;PAСKAGE;DESCRIPTION +Linux 5.15 headers;ubm-002-linux515-headers;linux515-headers;The Linux kernel headers v5.15 +Linux 5.15 Docs;ubm-003-linux515-docs;linux515-docs;The Linux kernel docs v5.15 +Linux 5.15 DKMS modules;ubm-linux515-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v5.15 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +Linux 6.1 headers;ubm-002-linux61-headers;linux61-headers;The Linux kernel headers v6.1 +Linux 6.1 Docs;ubm-003-linux61-docs;linux61-docs;The Linux kernel docs v6.1 +Linux 6.1 DKMS modules;ubm-linux61-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v6.1 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +Linux 6.6 headers;ubm-002-linux66-headers;linux66-headers;The Linux kernel headers v6.6 +Linux 6.6 Docs;ubm-003-linux66-docs;linux66-docs;The Linux kernel docs v6.6 +Linux 6.6 DKMS modules;ubm-linux66-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v6.6 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu \ No newline at end of file diff --git a/kernel-list.csv b/kernel-list.csv new file mode 100644 index 0000000..eb5ba2f --- /dev/null +++ b/kernel-list.csv @@ -0,0 +1,4 @@ +NAME;PAСKAGE_UBM;PAСKAGE;PAСKAGE_UBM_REQUIRED;PAСKAGE_REQUIRED;TAG;DESCRIPTION +Linux 5.15;ubm-001-linux515;linux515;ubm-002-linux515-headers;linux515-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.15 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs +Linux 6.1;ubm-001-linux61;linux61;ubm-002-linux61-headers;linux61-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.1 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs +Linux 6.6;ubm-001-linux66;linux66;ubm-002-linux66-headers;linux66-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.6 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt new file mode 100644 index 0000000..10d961c --- /dev/null +++ b/source/CMakeLists.txt @@ -0,0 +1,98 @@ +cmake_minimum_required(VERSION 3.7) +project(ubl-settings-kernel) + +find_package(PkgConfig REQUIRED) + +pkg_check_modules(GTK REQUIRED gtk+-3.0) +include_directories(${GTK_INCLUDE_DIRS}) +link_directories(${GTK_LIBRARY_DIRS}) +add_definitions(${GTK_CFLAGS_OTHER}) + +pkg_check_modules(VTE291 REQUIRED vte-2.91) +include_directories(${VTE291_INCLUDE_DIRS}) +link_directories(${VTE291_LIBRARY_DIRS}) +add_definitions(${VTE291_CFLAGS_OTHER}) + +find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) + +option(WEBKIT_FOUND "No" OFF) +if(WEBKIT_LIBRARIES_FOUND) + option(WEBKIT_FOUND "Yes" ON) + PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) + include_directories(${WEBKIT_INCLUDE_DIRS}) + link_directories(${WEBKIT_LIBRARY_DIRS}) + add_definitions(${WEBKIT_CFLAGS_OTHER}) +endif() + +set(GRESOURCE_C resources.c) +set(GRESOURCE_XML gresource.xml) + +find_program(GLIB_COMPILE_RESOURCES NAMES glib-compile-resources REQUIRED) +add_custom_target(GLADE ubl-settings-kernel.glade) + +set(DEPENDFILES + ../ubl-settings-kernel.glade + ../ubl-settings-kernel-info.glade + ../ubl-settings-kernel-install.glade + ../ubl-settings-kernel-table-row.glade + ../ubl-settings-kernel-additions-table-row.glade + ../ubl-settings-kernel-dialog.glade + ../gresource.xml + ../kernel-list.csv + ../kernel-list-addon.csv + ../ubl-settings-kernel-banner.png + ../ubl-settings-kernel.css + ) + +file(COPY ${DEPENDFILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + +add_custom_command( + OUTPUT ${GRESOURCE_C} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${GLIB_COMPILE_RESOURCES} + ARGS + --generate-source + --target=${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} + ${GRESOURCE_XML} + VERBATIM + MAIN_DEPENDENCY ${GRESOURCE_XML} + DEPENDS + ${GLADE} +) +add_custom_target( + dummy-resource + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} +) + + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ + -O2 -pipe -fno-plt -fexceptions \ + -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ + -fstack-clash-protection -fcf-protection") + +set(SOURCE_FILES + ubl-settings-kernel.c + ubl-settings-kernel.h + ubl-strings.h + ) + +set(LIBRARIES + ${GTK_LIBRARIES} + ${WEBKIT_LIBRARIES} + ${UTILS_LIBRARIES} + ${VTE291_LIBRARIES} + pthread + ublsettings + ublsettings-gtk3 + ublsettingsui-gtk3) + + +add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) +target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBRARIES}) +target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR}) +set_source_files_properties( + ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} + PROPERTIES GENERATED TRUE +) +install(TARGETS ${PROJECT_NAME} DESTINATION bin) +add_dependencies(${PROJECT_NAME} dummy-resource) \ No newline at end of file diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c new file mode 100644 index 0000000..ab9f8f6 --- /dev/null +++ b/source/ubl-settings-kernel.c @@ -0,0 +1,1057 @@ +#include "ubl-settings-kernel.h" + +config main_config; + +//functions + +void on_save_done(main_window *, config_str output, int size){ + char *final_output = yon_char_parsed_to_string(output,size,""); + if (final_output){ + printf("%s\n",final_output); + free(final_output); + } + yon_char_parsed_free(output,size); + textdomain(template_ui_LocaleName); + switch (main_config.save_config){ + case 0: + yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 1: + yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 2: + yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + } + textdomain(LocaleName); + +} + +void yon_load_proceed(YON_CONFIG_TYPE type){ + yon_config_clean(); + if (!yon_char_is_empty(config_get_default_command)) + yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + if (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,config_get_global_command,NULL); + } else if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_local_command,NULL); + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + textdomain(template_ui_LocaleName); + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + textdomain(LocaleName); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-kernel"); + gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.ini"); + gtk_file_filter_set_name(filter, "*.ini"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + gtk_widget_show(dialog); + int response = gtk_dialog_run(GTK_DIALOG(dialog)); + if (response == GTK_RESPONSE_ACCEPT){ + char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (!yon_char_is_empty(file)){ + path=file; + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + char *command = yon_config_get_custom_command(path); + yon_config_load_config(type,command,NULL); + } +} + +void on_config_save(GtkWidget *, main_window *widgets){ + main_config.save_config=2; + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,yon_config_get_custom_command("global"),NULL); + if (window){}; + yon_interface_update(widgets); +} + +void on_config_global_save(GtkWidget *, main_window *widgets){ + main_config.save_config=0; + template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,yon_config_get_custom_command("global"),NULL); + if (window){}; + yon_interface_update(widgets); +} + +void on_config_local_save(GtkWidget *, main_window *widgets){ + main_config.save_config=1; + template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,yon_config_get_custom_command("system"),NULL); + if (window){}; + yon_interface_update(widgets); +} + +void on_config_custom_save(GtkWidget *, main_window *widgets){ + main_config.save_config=1; + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL); + if (window){}; + yon_interface_update(widgets); +} + + +void on_config_local_load(GtkWidget *, main_window *widgets){ + yon_load_proceed(YON_CONFIG_LOCAL); + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + main_config.load_mode=1; + yon_interface_update(widgets); +} + +void on_config_global_load(GtkWidget *, main_window *widgets){ + yon_load_proceed(YON_CONFIG_GLOBAL); + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + main_config.load_mode=0; + yon_interface_update(widgets); +} + +void on_config_custom_load(GtkWidget *,main_window *widgets){ + yon_load_proceed(YON_CONFIG_CUSTOM); + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + main_config.load_mode=3; + yon_interface_update(widgets); +} + +gboolean yon_tab_create_tags(kernels_tab *tab){ + GList *list = gtk_container_get_children(GTK_CONTAINER(tab->install_tags_box)); + for (guint i=0;imodule_installed){ + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_widget_show(tab->remove_module_button); + gtk_widget_show(tab->remove_package_button); + gtk_widget_show(tab->update_module_button); + gtk_widget_show(tab->update_package_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_hide(tab->install_package_button); + } + { + if (tab->package_installed){ + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_widget_hide(tab->install_package_button); + gtk_widget_show(tab->remove_package_button); + gtk_widget_show(tab->update_package_button); + } + } + gtk_widget_set_sensitive(tab->update_module_button,!tab->module_updated); + gtk_widget_set_sensitive(tab->update_package_button,!tab->package_updated); + } else { + yon_tag_add(GTK_BOX(tab->install_tags_box),UNKNOWN_LABEL,"tag_grey",NULL); + } + gtk_widget_show(tab->main_box); + return G_SOURCE_REMOVE; +} + +char *yon_package_string_set(char *target){ + char *final = NULL; + if (strstr(target,",")){ + final = yon_char_replace(target,","," "); + } else final = target; + return final; +} + +void *yon_tab_set_installed(kernels_tab *tab){ + char *target_module = yon_package_string_set(tab->module); + char *target_package = yon_package_string_set(tab->package); + + char *check_install_command = get_package_is_installed_command(target_module); + if (!system(yon_debug_output("%s\n",check_install_command))){ + tab->module_installed=1; + } else tab->module_installed=0; + free(check_install_command); + check_install_command = get_package_is_installed_command(target_package); + if (!system(yon_debug_output("%s\n",check_install_command))){ + tab->package_installed=1; + } else tab->package_installed=0; + free(check_install_command); + + check_install_command = get_package_is_updated_command(target_module); + if (!system(yon_debug_output("%s\n",check_install_command))){ + tab->module_updated = 0; + } else tab->module_updated = 1; + free(check_install_command); + check_install_command = get_package_is_updated_command(target_package); + if (!system(yon_debug_output("%s\n",check_install_command))){ + tab->package_updated = 0; + } else tab->package_updated = 1; + free(check_install_command); + + gdk_threads_add_idle((GSourceFunc)yon_tab_create_tags,tab); + return NULL; +} + +void *yon_interface_update(main_window *widgets){ + if (!main_config.kernel_tabs){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); + for (guint i=0;iAdditionsPackageBox)); + for (guint i=0;iKernelsPackageBox),kernels[i],widgets); + g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab); + { + GList *list = gtk_container_get_children(GTK_CONTAINER(tab->run_tags_box)); + for (guint i=0;ipackage)){ + yon_tag_add(GTK_BOX(tab->run_tags_box),RUNNING_LABEL,"tag_green",NULL); + gtk_widget_hide(tab->remove_module_button); + gtk_widget_hide(tab->remove_package_button); + gtk_widget_hide(tab->launch_button); + } else if (!yon_char_is_empty(boot_config_run)&&!strcmp(boot_config_run,tab->package)){ + yon_tag_add(GTK_BOX(tab->run_tags_box),BOOT_RUN_LABEL,"tag_orange",NULL); + gtk_widget_hide(tab->launch_button); + gtk_widget_hide(tab->remove_module_button); + gtk_widget_hide(tab->remove_package_button); + } + } + gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); + } + yon_char_parsed_free(kernels,kernels_size); + kernels = yon_resource_open_file(kernels_addon_path, &kernels_size); + for (int i=1;iAdditionsPackageBox),kernels[i],widgets); + g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab); + gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); + } + return NULL; +} + +info_window *yon_info_window_new(){ + info_window *window = malloc(sizeof(info_window)); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_info_path); + + window->window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->InfoLabel = yon_gtk_builder_get_widget(builder,"InfoLabel"); + + return window; +} + +install_window *yon_install_window_new(){ + install_window *window = malloc(sizeof(install_window)); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_install_path); + + window->window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->ExecuteButton = yon_gtk_builder_get_widget(builder,"ExecuteButton"); + + window->KernelVersionCombo = yon_gtk_builder_get_widget(builder,"KernelVersionCombo"); + window->FilenameEntry = yon_gtk_builder_get_widget(builder,"FilenameEntry"); + window->DebugCheck = yon_gtk_builder_get_widget(builder,"DebugCheck"); + window->DriversCheck = yon_gtk_builder_get_widget(builder,"DriversCheck"); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + return window; +} + +int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name){ + if (GTK_IS_BOX(target)&&!yon_char_is_empty(tag_label)&&!yon_char_is_empty(tag_style)){ + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2); + GtkWidget *label = gtk_label_new(tag_label); + PangoAttrList *attr = pango_attr_list_new(); + PangoAttribute *scale_attr = pango_attr_size_new_absolute(12 * PANGO_SCALE); + pango_attr_list_insert(attr,scale_attr); + + gtk_label_set_attributes(GTK_LABEL(label),attr); + gtk_style_context_add_class(gtk_widget_get_style_context(label),tag_style); + GtkWidget *icon = NULL; + if (icon_name){ + icon = gtk_image_new_from_icon_name(icon_name,GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start(GTK_BOX(box),icon,0,0,0); + } + gtk_box_pack_start(GTK_BOX(box),label,1,1,0); + gtk_widget_show_all(box); + gtk_box_pack_start(target,box,0,0,0); + return 1; + } + return 0; +} + +gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets){ + g_mutex_lock(&main_config.progress_mutex); + main_config.progress_active=0; + g_mutex_unlock(&main_config.progress_mutex); + if (!status){ + yon_ubl_status_box_render(OPERATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_interface_update(widgets); + } else { + yon_ubl_status_box_render(OPERATION_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } + return G_SOURCE_REMOVE; +} + +gboolean yon_terminal_get_progress(main_window *widgets){ + char *text = vte_terminal_get_text_format(VTE_TERMINAL(widgets->InstallTerminal),VTE_FORMAT_TEXT); + GRegex *regex = g_regex_new("\\d?\\d?\\d%",0,0,NULL); + + GMatchInfo *match = NULL; + g_regex_match(regex,text,0,&match); + g_regex_unref(regex); + config_str target = g_match_info_fetch_all(match); + double percentage = 0.0; + + if (target){ + int i; + for (i=0;target[i+1];i++){}; + target[i][strlen(target[i])-1]='\0'; + percentage = atof(target[i]); + yon_debug_output("%s\n",target[i]); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),percentage/100); + } + + g_match_info_unref(match); + + g_mutex_lock(&main_config.progress_mutex); + if (!main_config.progress_active){ + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),0); + g_mutex_unlock(&main_config.progress_mutex); + return G_SOURCE_REMOVE; + } + g_mutex_unlock(&main_config.progress_mutex); + return G_SOURCE_CONTINUE; +} + +void *yon_command_execute_async(char *command,main_window *widgets){ + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),0); + vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); + yon_terminal_integrated_start(widgets->InstallTerminal,yon_debug_output("%s\n",command)); + glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); + vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); + yon_ubl_status_box_render(OPERATION_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_INFO_TYPE); + + g_mutex_lock(&main_config.progress_mutex); + main_config.progress_active=1; + g_mutex_unlock(&main_config.progress_mutex); + gdk_threads_add_timeout(500,(GSourceFunc)yon_terminal_get_progress,widgets); + return NULL; +} + +void on_module_install_accept(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + dialog_window *window = yon_dictionary_get_data(dict->first->next->next,dialog_window*); + char *module_formated = yon_package_string_set(tab->module); + char *modules_to_install = module_formated; + + GtkTreeIter iter; + for_iter (GTK_TREE_MODEL(window->liststore1),&iter){ + int status; + char *package; + gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,&package,-1); + if (status){ + char *temp = yon_char_unite(modules_to_install," ", package, NULL); + if (strcmp(modules_to_install,module_formated)) free(modules_to_install); + modules_to_install = temp; + } + } + char *command = install_command(modules_to_install); + yon_command_execute_async(command,widgets); + tab->module_installed=1; + free(dict->first->next->next); + dict->first->next->next=NULL; + on_subwindow_close(window->Window); +} + +void on_package_install_accept(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + dialog_window *window = yon_dictionary_get_data(dict->first->next->next,dialog_window*); + char *package_formated = yon_package_string_set(tab->package); + char *modules_to_install = package_formated; + + GtkTreeIter iter; + for_iter (GTK_TREE_MODEL(window->liststore1),&iter){ + int status; + char *package; + gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,&package,-1); + if (status){ + char *temp = yon_char_unite(modules_to_install," ", package, NULL); + if (strcmp(modules_to_install,package_formated)) free(modules_to_install); + modules_to_install = temp; + } + } + char *command = install_command(modules_to_install); + yon_command_execute_async(command,widgets); + tab->package_installed=1; + free(dict->first->next->next); + dict->first->next->next=NULL; + on_subwindow_close(window->Window); +} + +dialog_window *yon_dialog_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_dialog_path); + dialog_window *window = malloc(sizeof(dialog_window)); + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->TopicLabel = yon_gtk_builder_get_widget(builder,"TopicLabel"); + window->DependencesTree = yon_gtk_builder_get_widget(builder,"DependencesTree"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + window->ChooseCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChooseCell")); + window->liststore1 = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + yon_cell_renderer_toggle_set_toggle(GTK_CELL_RENDERER_TOGGLE(window->ChooseCell),window->DependencesTree); + return window; +} + +void on_module_install_clicked(GtkWidget *self,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + char *action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + if (!gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ + dialog_window *window = yon_dialog_window_new(); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_module_install_accept),dict); + + gtk_label_set_text(GTK_LABEL(window->TopicLabel),action_text); + gtk_widget_show(window->Window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + int size; + config_str additions = yon_resource_open_file(kernels_addon_path,&size); + GtkTreeIter iter; + for (int i=0;imodule_requirements_size;i++){ + gtk_list_store_append(window->liststore1,&iter); + for (int j=1;jmodule_requirements[i])) + gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1); + yon_char_parsed_free(parsed,cur_size); + } + gtk_list_store_set(window->liststore1,&iter,0,1,1,tab->module_requirements[i],-1); + } + yon_char_parsed_free(additions,size); + } else { + + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + char *target = yon_package_string_set(tab->module); + char *command = install_command(target); + yon_command_execute_async(command,widgets); + tab->module_installed=1; + } + } +} + +void on_package_install_clicked(GtkWidget *self,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + char *action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + if (!gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ + dialog_window *window = yon_dialog_window_new(); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_package_install_accept),dict); + + gtk_label_set_text(GTK_LABEL(window->TopicLabel),action_text); + gtk_widget_show(window->Window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + + int size; + config_str additions = yon_resource_open_file(kernels_addon_path,&size); + GtkTreeIter iter; + for (int i=0;ipackage_requirements_size;i++){ + gtk_list_store_append(window->liststore1,&iter); + for (int j=1;jpackage_requirements[i])) + gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1); + yon_char_parsed_free(parsed,cur_size); + } + gtk_list_store_set(window->liststore1,&iter,0,1,1,tab->package_requirements[i],-1); + } + yon_char_parsed_free(additions,size); + } else { + + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + char *target = yon_package_string_set(tab->package); + char *command = install_command(target); + yon_command_execute_async(command,widgets); + tab->package_installed=1; + } + } +} + +void on_module_remove_done(GtkWidget *self, int state, kernels_tab *tab){ + char *command = get_package_is_installed_command(tab->module); + if (!state&&!system(command)){ + yon_ubl_status_box_render(PACKAGE_REMOVED_BUT_NOT_DISABLED_LABEL,BACKGROUND_IMAGE_INFO_TYPE); + } + g_signal_handlers_disconnect_by_func(G_OBJECT(self),on_module_remove_done,tab); +} + +void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + char *target = yon_package_string_set(tab->module); + char *command = remove_command(target); + g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_module_remove_done),tab); + yon_command_execute_async(command,widgets); + tab->module_installed=0; + } + +} + +void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + int resp = yon_confirmation_dialog_call(self,data); + if (resp == GTK_RESPONSE_ACCEPT){ + char *target = yon_package_string_set(tab->package); + char *command = remove_command(target); + yon_command_execute_async(command,widgets); + tab->package_installed=0; + } + +} + +void on_launch_cliked(GtkWidget *self,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = LAUNCH_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + yon_config_set(KERNEL_BOOT_parameter,tab->package); + yon_interface_update(widgets); + } +} + +kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ + int size; + config_str parsed = yon_char_parse(target_string,&size,";"); + if (size){ + int types_size; + dictionary *cur = yon_dictionary_get(&main_config.kernel_tabs,parsed[2]); + kernels_tab *tab = NULL; + if (cur){ + tab = (kernels_tab*)cur->data; + gtk_widget_hide(tab->changelog_button); + gtk_widget_show(tab->launch_button); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),"",GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),"",GTK_ICON_SIZE_BUTTON); + if (tab->module_installed){ + gtk_widget_show(tab->remove_module_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_show(tab->remove_module_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); + } else { + gtk_widget_hide(tab->remove_module_button); + gtk_widget_show(tab->install_module_button); + + } + if (tab->package_installed){ + gtk_widget_show(tab->remove_package_button); + gtk_widget_hide(tab->install_package_button); + gtk_widget_show(tab->changelog_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); + + } else { + gtk_widget_hide(tab->remove_package_button); + gtk_widget_show(tab->install_package_button); + + } + if (!tab->package_installed&&!tab->module_installed){ + gtk_widget_hide(tab->launch_button); + } + } else { + + tab = malloc(sizeof(kernels_tab)); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path); + tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); + tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->module_icon = yon_gtk_builder_get_widget(builder,"ModuleIcon"); + tab->package_icon = yon_gtk_builder_get_widget(builder,"PackageIcon"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); + tab->run_tags_box = yon_gtk_builder_get_widget(builder,"RunBox"); + tab->tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); + tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton"); + tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); + tab->update_module_button = yon_gtk_builder_get_widget(builder,"ModuleUpdateButton"); + tab->update_package_button = yon_gtk_builder_get_widget(builder,"PackageUpdateButton"); + tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton"); + tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); + tab->changelog_button = yon_gtk_builder_get_widget(builder,"ChangelogButton"); + tab->launch_button = yon_gtk_builder_get_widget(builder,"LaunchButton"); + + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"tab",tab); + g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->changelog_button),"clicked",G_CALLBACK(on_changelog_clicked),tab); + g_signal_connect(G_OBJECT(tab->launch_button),"clicked",G_CALLBACK(on_launch_cliked),dict); + + if(getuid()){ + gtk_widget_set_sensitive(tab->launch_button,0); + gtk_widget_set_sensitive(tab->remove_module_button,0); + gtk_widget_set_sensitive(tab->install_module_button,0); + gtk_widget_set_sensitive(tab->remove_package_button,0); + gtk_widget_set_sensitive(tab->install_package_button,0); + } + tab->module_installed=-1; + tab->package_installed=-1; + tab->name = yon_char_new(parsed[0]); + tab->module = yon_char_new(parsed[1]); + tab->package = yon_char_new(parsed[2]); + char *name = yon_char_unite("",tab->name,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); + + yon_dictionary_add_or_create_if_exists_with_data(main_config.kernel_tabs,tab->package,tab); + + gtk_list_box_insert(target,tab->main_box,-1); + config_str types_parsed = yon_char_parse(parsed[5],&types_size,", "); + for (int k=0;ktags_box),_(types_parsed[k]),tag_type,NULL); + } + tab->module_requirements = yon_char_parse(parsed[3],&tab->module_requirements_size,","); + tab->package_requirements = yon_char_parse(parsed[4],&tab->package_requirements_size,","); + + yon_char_parsed_free(types_parsed,types_size); + gtk_label_set_markup(GTK_LABEL(tab->name_label),name); + gtk_label_set_markup(GTK_LABEL(tab->module_label),module); + gtk_label_set_markup(GTK_LABEL(tab->package_label),package); + gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[6]); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),gtk_widget_get_parent(gtk_widget_get_parent(tab->name_label))); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->TagsSizeGroup),tab->tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->RunSizeGroup),tab->run_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->ButtonsSizeGroup),gtk_widget_get_parent(tab->launch_button)); + } + + + + return tab; + } + return NULL; +} + +additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ + int size; + config_str parsed = yon_char_parse(target_string,&size,";"); + if (size){ + dictionary *cur = yon_dictionary_get(&main_config.addition_tabs,parsed[2]); + additions_kernels_tab *tab = NULL; + if (cur){ + tab = (additions_kernels_tab*)cur->data; + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),"",GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),"",GTK_ICON_SIZE_BUTTON); + if (tab->module_installed){ + gtk_widget_show(tab->remove_module_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_show(tab->update_module_button); + gtk_widget_show(tab->remove_module_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); + } else { + gtk_widget_hide(tab->update_module_button); + gtk_widget_hide(tab->remove_module_button); + gtk_widget_show(tab->install_module_button); + + } + if (tab->package_installed){ + gtk_widget_show(tab->update_package_button); + gtk_widget_show(tab->remove_package_button); + gtk_widget_hide(tab->install_package_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); + + } else { + gtk_widget_hide(tab->update_package_button); + gtk_widget_hide(tab->remove_package_button); + gtk_widget_show(tab->install_package_button); + + } + } else { + GtkBuilder *builder = gtk_builder_new_from_resource(glade_additions_table_row_path); + + tab = malloc(sizeof(additions_kernels_tab)); + tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); + tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->module_icon = yon_gtk_builder_get_widget(builder,"ModuleIcon"); + tab->package_icon = yon_gtk_builder_get_widget(builder,"PackageIcon"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); + tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton"); + tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); + tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton"); + tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); + tab->update_module_button = yon_gtk_builder_get_widget(builder,"ModuleUpdateButton"); + tab->update_package_button = yon_gtk_builder_get_widget(builder,"PackageUpdateButton"); + + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"tab",tab); + g_signal_connect(G_OBJECT(tab->update_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->update_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); + gtk_list_box_insert(target,tab->main_box,-1); + + int size; + config_str parsed = yon_char_parse(target_string,&size,";"); + if (size){ + tab->name = yon_char_new(parsed[0]); + tab->module = yon_char_new(parsed[1]); + tab->package = yon_char_new(parsed[2]); + char *name = yon_char_unite("",tab->name,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); + + yon_dictionary_add_or_create_if_exists_with_data(main_config.addition_tabs,tab->package,tab); + + gtk_label_set_markup(GTK_LABEL(tab->name_label),name); + gtk_label_set_markup(GTK_LABEL(tab->module_label),module); + gtk_label_set_markup(GTK_LABEL(tab->package_label),package); + gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[3]); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),gtk_widget_get_parent(gtk_widget_get_parent(tab->name_label))); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->ButtonsSizeGroup),gtk_widget_get_parent(tab->remove_module_button)); + } + } + return tab; + } + return NULL; +} + +// standard functions + +/**config_init() + * [EN] + * + * [RU] + * Функция инициализации всех параметров конфигурации +*/ +void config_init(){ + main_config.always_open_documentation=0; + main_config.socket_id=-1; + main_config.save_socket_id=-1; + main_config.load_socket_id=-1; + main_config.lock_help=0; + main_config.lock_help=0; + main_config.lock_load_global=0; + main_config.lock_save_global=0; + main_config.lock_save_local=0; + main_config.load_mode=1; + main_config.save_config=1; + main_config.kernel_tabs=NULL; + main_config.progress_active=0; +} + +void on_update_clicked(GtkWidget *, main_window *widgets){ + yon_dictionary_free_all(main_config.kernel_tabs,free); + yon_dictionary_free_all(main_config.addition_tabs,free); + main_config.kernel_tabs=NULL; + main_config.addition_tabs=NULL; + + yon_interface_update(widgets); +} + +void on_selection_changed(GtkWidget *, GtkListBoxRow* row, main_window *widgets){ + if (row){ + gtk_widget_set_sensitive(widgets->InfoButton,1); + } else { + gtk_widget_set_sensitive(widgets->InfoButton,0); + } +} + +void on_info_clicked(GtkWidget *, main_window *widgets){ + info_window *window = yon_info_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"info_window"); + GtkWidget *current_tree=NULL; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + current_tree = widgets->KernelsPackageBox; + } else { + current_tree = widgets->AdditionsPackageBox; + } + GtkListBoxRow *target = gtk_list_box_get_selected_row(GTK_LIST_BOX(current_tree)); + if (target){ + GList *list = gtk_container_get_children(GTK_CONTAINER(target)); + GList *list2 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); + GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,0))); + GList *list4 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list3,2))); + char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list4,1)))); + int size; + char *package=NULL; + if ((package = strstr(target_str,": "))){ + package+=2; + if (strstr(package,",")){ + package = yon_char_replace(package,","," "); + } + } + config_str info = yon_config_load(get_package_info_command(package),&size); + if (size!=-1){ + char *final_text = yon_char_parsed_to_string(info,size,""); + gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); + free(final_text); + } else { + gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); + } + } + gtk_widget_show(window->window); +} + +void on_changelog_clicked(GtkWidget *, kernels_tab *tab){ + info_window *window = yon_info_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(gtk_widget_get_toplevel(tab->main_box)),INFO_TITLE_LABEL,icon_path,"changelog_window"); + int size; + config_str info = yon_config_load(yon_debug_output("%s\n",get_kernel_changelog_command(tab->package)),&size); + if (size!=-1){ + char *full_text = yon_char_parsed_to_string(info,size,""); + gtk_label_set_text(GTK_LABEL(window->InfoLabel),full_text); + free(full_text); + yon_char_parsed_free(info,size); + } else { + gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); + } + gtk_widget_show(window->window); +} + +void on_build_execute(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + install_window *window = yon_dictionary_get_data(dict->first->next,install_window*); + int debug = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DebugCheck)); + int drivers = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DriversCheck)); + char *target = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->KernelVersionCombo)); + char *filename = (char*)gtk_entry_get_text(GTK_ENTRY(window->FilenameEntry)); + char *command = build_command(target,filename,debug,drivers); + yon_terminal_window_launch(GTK_WINDOW(widgets->Window),command); + gtk_widget_destroy(window->window); +} + +void on_building_clicked(GtkWidget *, main_window *widgets){ + if (widgets){}; + install_window *window = yon_install_window_new(); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"install_window"); + g_signal_connect(G_OBJECT(window->ExecuteButton),"clicked",G_CALLBACK(on_build_execute),dict); + + int size; + config_str kernels = yon_resource_open_file(kernels_path,&size); + for (int i=1;iKernelVersionCombo),parsed[2],parsed[0]); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(window->KernelVersionCombo),0); + } + + gtk_widget_show(window->window); +} + +void on_boot_toggled(GtkWidget *, char *path, main_window *widgets){ + if (widgets||path){}; + +} + +void on_terminal_revealer_open(GtkWidget *, main_window *widgets){ + int opened = gtk_revealer_get_child_revealed(GTK_REVEALER(widgets->TerminalRevealer)); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),!opened); + switch (opened){ + case 0: { + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->TerminalRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); + } break; + case 1: { + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->TerminalRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); + } break; + } +} + +/**yon_main_window_complete(main_window *widgets) + * [EN] + * + * [RU] + * Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом. +*/ +void yon_main_window_complete(main_window *widgets){ + widgets = yon_remalloc(widgets,sizeof(main_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); + gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0); + // Custom widgets configuration + { + widgets->MainNotebook = yon_gtk_builder_get_widget(builder, "MainNotebook"); + widgets->UpdateButton = yon_gtk_builder_get_widget(builder, "UpdateButton"); + widgets->InfoButton = yon_gtk_builder_get_widget(builder, "InfoButton"); + widgets->LogButton = yon_gtk_builder_get_widget(builder, "LogButton"); + widgets->BuildingButton = yon_gtk_builder_get_widget(builder, "BuildingButton"); + widgets->KernelsUpperTree = yon_gtk_builder_get_widget(builder, "KernelsUpperTree"); + widgets->KernelsTree = yon_gtk_builder_get_widget(builder, "KernelsTree"); + widgets->AdditionsUpperTree = yon_gtk_builder_get_widget(builder, "AdditionsUpperTree"); + widgets->AdditionsTree = yon_gtk_builder_get_widget(builder, "TestListBox"); + widgets->MainRevealer = yon_gtk_builder_get_widget(builder, "MainRevealer"); + widgets->MoreButton = yon_gtk_builder_get_widget(builder, "MoreButton"); + widgets->InstallationProgress = yon_gtk_builder_get_widget(builder, "InstallationProgress"); + widgets->InstallTerminal = yon_gtk_builder_get_widget(builder, "InstallTerminal"); + widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); + widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); + widgets->TerminalScroll = yon_gtk_builder_get_widget(builder, "TerminalScroll"); + widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList")); + widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList")); + widgets->KernelsPackageBox = yon_gtk_builder_get_widget(builder,"KernelsPackageBox"); + widgets->AdditionsPackageBox = yon_gtk_builder_get_widget(builder,"AdditionsPackageBox"); + widgets->StatusSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"StatusSizeGroup")); + widgets->KernelSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"KernelSizeGroup")); + widgets->TagsSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"TagsSizeGroup")); + widgets->InstallSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"InstallSizeGroup")); + widgets->RunSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"RunSizeGroup")); + widgets->DescriptionSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"DescriptionSizeGroup")); + widgets->ButtonsSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"ButtonsSizeGroup")); + + g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_building_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->MoreButton),"clicked",G_CALLBACK(on_terminal_revealer_open),widgets); + g_signal_connect(G_OBJECT(widgets->KernelsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->AdditionsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); + + g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),widgets); + g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); + g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); + + yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); + if (getuid()){ + gtk_widget_set_sensitive(widgets->BuildingButton,0); + } + gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(widgets->InstallationProgress),1); + GdkRGBA rgba; + vte_terminal_get_color_background_for_draw(VTE_TERMINAL(widgets->InstallTerminal),&rgba); + vte_terminal_set_color_cursor(VTE_TERMINAL(widgets->InstallTerminal),&rgba); + + glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); + vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->TerminalRevealer); + + yon_interface_update(widgets); + yon_save_window_set_postsave_function(on_save_done,widgets); + } + yon_load_proceed(YON_CONFIG_LOCAL); +} + +int main(int argc, char *argv[]){ + local=setlocale(LC_ALL, ""); + textdomain (LocaleName); + config_init(); + + yon_ubl_connect_config((_template_config*)&main_config); + yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); + config_str unfound = NULL; + int size=0; + yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); + gtk_init(&argc,&argv); + template_main_window *widgets = yon_ubl_window_setup(); + yon_main_window_complete((main_window*)widgets); + char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); + yon_window_config_load(path); + main_config.launch_arguments=yon_char_parsed_copy(argv,argc); + main_config.launch_size=argc; + if (getuid()!=0){ + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + textdomain(LocaleName); + } + gtk_main(); + return 0; +} \ No newline at end of file diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h new file mode 100644 index 0000000..cb9f76a --- /dev/null +++ b/source/ubl-settings-kernel.h @@ -0,0 +1,272 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define VTE_INCLUDE +#include +#include +#include +#ifdef WEBKIT_FOUND + #include +#endif +#include "ubl-strings.h" + +#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-kernel" + +#define _(String) gettext(String) + +#define glade_path "/com/ublinux/ui/ubl-settings-kernel.glade" +#define glade_info_path "/com/ublinux/ui/ubl-settings-kernel-info.glade" +#define glade_install_path "/com/ublinux/ui/ubl-settings-kernel-install.glade" +#define glade_table_row_path "/com/ublinux/ui/ubl-settings-kernel-table-row.glade" +#define glade_additions_table_row_path "/com/ublinux/ui/ubl-settings-kernel-additions-table-row.glade" +#define glade_dialog_path "/com/ublinux/ui/ubl-settings-kernel-dialog.glade" +#define banner_path "/com/ublinux/images/ubl-settings-kernel-banner.png" +#define CssPath "/com/ublinux/css/ubl-settings-kernel.css" +#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) + +#define kernels_path "resource:///com/ublinux/csv/kernel-list.csv" +#define kernels_addon_path "resource:///com/ublinux/csv/kernel-list-addon.csv" +#define module_icon_path "com.ublinux.libublsettingsui-gtk3.cubes-symbolic" +#define package_icon_path "com.ublinux.libublsettingsui-gtk3.dropbox-symbolic" +#define run_icon_path "com.ublinux.libublsettingsui-gtk3.play-symbolic" +#define restart_icon_path "com.ublinux.libublsettingsui-gtk3.reset-symbolic" + +#define LocalePath "/usr/share/locale" +#define LocaleName "ubl-settings-kernel" + +#define icon_path "com.ublinux.ubl-settings-kernel" + +#define get_kernel_changelog_command(target) yon_char_unite("find /usr/lib/modules/ -maxdepth 2 -type f -iname \"pkgbase\" -exec grep -il \"",target,"\" {} + | xargs dirname | xargs -I {} cat \"{}/changelog\"", NULL) +#define get_package_info_command(target) yon_char_append("pacman -Si ",target) +#define get_package_is_installed_command(target) yon_char_append("pacman -Qq ",target) +#define get_package_is_updated_command(target) yon_char_append("pacman -Qu ",target) + +#define install_command(target) yon_char_append("pacman -Sy --noconfirm ",target) +#define remove_command(target) yon_char_append("pacman -R --noconfirm ",target) + +#define get_active_kernel_command "cat /usr/lib/modules/$(uname -r)/pkgbase" +#define get_installed_kernel_packages_command "cat /usr/lib/modules/*/pkgbase" +#define get_installed_kernel_modules_command "cat /memory/data/from/0/ublinux-data/module/*linux*" + +#define build_command(target,filename,debug_bool,drivers_bool) yon_char_unite("ubmkuird -l -n ",filename," -k ",(debug_bool)?"--addon ":"",(drivers_bool)?"-H ":"",target,NULL) + +#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get boot KERNEL_BOOT",NULL) +#define config_get_local_command "ubconfig --source system get boot KERNEL_BOOT" +#define config_get_global_command "ubconfig --source global get boot KERNEL_BOOT" +#define config_get_default_command "ubconfig --source default get boot KERNEL_BOOT" + +#define config_get_global_only_parameters "" +#define config_get_local_only_parameters "" + +#define KERNEL_BOOT_parameter "KERNEL_BOOT" + +typedef char* string; +string version_application; + +char *local; + +typedef struct { + template_config_fields + GMutex mutex; + int save_config; + dictionary *kernel_tabs; + dictionary *addition_tabs; + GMutex progress_mutex; + int progress_active; + config_str launch_arguments; + int launch_size; +} config; + +typedef struct { + template_window_fields + GtkWidget *UpdateButton; + GtkWidget *InfoButton; + GtkWidget *LogButton; + GtkWidget *BuildingButton; + GtkWidget *KernelsUpperTree; + GtkWidget *KernelsTree; + GtkWidget *AdditionsUpperTree; + GtkWidget *AdditionsTree; + GtkWidget *MainNotebook; + GtkWidget *KernelsPackageBox; + GtkWidget *AdditionsPackageBox; + + GtkListStore *KernelsList; + GtkListStore *AdditionsList; + + GtkSizeGroup *StatusSizeGroup; + GtkSizeGroup *KernelSizeGroup; + GtkSizeGroup *TagsSizeGroup; + GtkSizeGroup *InstallSizeGroup; + GtkSizeGroup *RunSizeGroup; + GtkSizeGroup *DescriptionSizeGroup; + GtkSizeGroup *ButtonsSizeGroup; + + GtkWidget *MainRevealer; + GtkWidget *TerminalRevealer; + GtkWidget *InstallTerminal; + GtkWidget *InstallationProgress; + GtkWidget *MoreButton; + GtkWidget *TerminalOverlay; + GtkWidget *TerminalScroll; +} main_window; + + +typedef struct { + GtkWidget *window; + GtkWidget *HeadLabel; + GtkWidget *InfoLabel; +}info_window; + +typedef struct { + GtkWidget *window; + GtkWidget *HeadLabel; + GtkWidget *StatusBox; + + GtkWidget *CancelButton; + GtkWidget *ExecuteButton; + + GtkWidget *KernelVersionCombo; + GtkWidget *FilenameEntry; + GtkWidget *DebugCheck; + GtkWidget *DriversCheck; +}install_window; + +typedef struct { + char *module; + char *package; + char *name; + int module_installed; + int package_installed; + int module_updated; + int package_updated; + GtkWidget *main_box; + GtkWidget *name_label; + GtkWidget *module_label; + GtkWidget *package_label; + GtkWidget *module_icon; + GtkWidget *package_icon; + GtkWidget *install_tags_box; + GtkWidget *description_label; + GtkWidget *remove_module_button; + GtkWidget *remove_package_button; + GtkWidget *update_module_button; + GtkWidget *update_package_button; + GtkWidget *install_module_button; + GtkWidget *install_package_button; + GtkWidget *changelog_button; + GtkWidget *launch_button; + GtkWidget *run_tags_box; + GtkWidget *tags_box; + config_str module_requirements; + int module_requirements_size; + config_str package_requirements; + int package_requirements_size; + +} kernels_tab; + +typedef struct { + char *module; + char *package; + char *name; + int module_installed; + int package_installed; + int module_updated; + int package_updated; + GtkWidget *main_box; + GtkWidget *name_label; + GtkWidget *module_label; + GtkWidget *package_label; + GtkWidget *module_icon; + GtkWidget *package_icon; + GtkWidget *install_tags_box; + GtkWidget *description_label; + GtkWidget *remove_module_button; + GtkWidget *remove_package_button; + GtkWidget *update_module_button; + GtkWidget *update_package_button; + GtkWidget *install_module_button; + GtkWidget *install_package_button; + +} additions_kernels_tab; + +typedef struct { + GtkWidget *Window; + GtkWidget *HeadLabel; + GtkWidget *TopicLabel; + GtkWidget *DependencesTree; + GtkWidget *CancelButton; + GtkWidget *AcceptButton; + GtkCellRenderer *ChooseCell; + GtkListStore *liststore1; + +} dialog_window; + +void on_save_done(main_window *widgets, config_str output, int size); + +char *yon_package_string_set(char *target); +gboolean yon_tab_create_tags(kernels_tab *tab); +void *yon_tab_set_installed(kernels_tab *tab); +void *yon_interface_update(main_window *widgets); + + +void on_config_save(GtkWidget *self, main_window *widgets); +void on_config_global_save(GtkWidget *self, main_window *widgets); +void on_config_local_save(GtkWidget *self, main_window *widgets); +void on_config_custom_save(GtkWidget *self, main_window *widgets); + +void yon_load_proceed(YON_CONFIG_TYPE type); + +void on_config_local_load(GtkWidget *, main_window *widgets); +void on_config_global_load(GtkWidget *, main_window *widgets); +void on_config_custom_load(GtkWidget *,main_window *widgets); + +void config_init(); + +void yon_main_window_complete(main_window *widgets); + +gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets); +gboolean yon_terminal_get_progress(main_window *widgets); +void *yon_command_execute_async(char *command,main_window *widgets); + +dialog_window *yon_dialog_window_new(); + +void on_module_install_accept(GtkWidget *, dictionary *dict); +void on_package_install_accept(GtkWidget *, dictionary *dict); + +void on_module_remove_done(GtkWidget *self, int state, kernels_tab *tab); +void on_module_install_clicked(GtkWidget *,dictionary *dict); +void on_package_install_clicked(GtkWidget *,dictionary *dict); +void on_module_remove_clicked(GtkWidget *,dictionary *dict); +void on_package_remove_clicked(GtkWidget *,dictionary *dict); +void on_launch_cliked(GtkWidget *,dictionary *dict); + +int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name); +kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); +additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); + +void on_update_clicked(GtkWidget *, main_window *widgets); + +void on_selection_changed(GtkWidget *self,GtkListBoxRow* row,main_window *widgets); + +void on_info_clicked(GtkWidget *, main_window *widgets); + +void on_changelog_clicked(GtkWidget *, kernels_tab *tab); + +void on_build_execute(GtkWidget *, dictionary *dict); + +void on_building_clicked(GtkWidget *, main_window *widgets); + +void on_boot_toggled(GtkWidget *, char *path, main_window *widgets); + +void on_terminal_revealer_open(GtkWidget *, main_window *widgets); + +info_window *yon_info_window_new(); +install_window *yon_install_window_new(); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h new file mode 100644 index 0000000..4f48900 --- /dev/null +++ b/source/ubl-strings.h @@ -0,0 +1,65 @@ + +#define TITLE_LABEL _("System kernel") +#define TITLE_INFO_LABEL _("Kernel downloading and installation, kernel selection to boot by default") + +#define INFO_TITLE_LABEL _("Information") + +#define MODULE_LABEL _("Module:") +#define PACKAGE_LABEL _("Package:") + +#define CANCEL_LABEL _("Cancel") + +#define PACKAGE_NOT_FOUND_LABEL _("Package were not found") +#define CHANGELOG_NOT_FOUND_LABEL _("Changelog was not found") + +#define PACKAGE_INSTALLED_LABEL _("Package installed") +#define MODULE_INSTALLED_LABEL _("Module installed") +#define UNKNOWN_LABEL _("Installation unknown") +#define BOOT_RUN_LABEL _("Startup boot") +#define RUNNING_LABEL _("Running") + + +#define INITRAMFS_TITLE_LABEL _("Initramfs building") +#define EXECUTE_LABEL _("Execute") +#define KERNEL_VERSION_LABEL _("Kernel version:") +#define IMAGE_FILE_LABEL _("Image file:") +#define ADD_DEBUG_LABEL _("Add debug components") +#define ADD_DRIVERS_LABEL _("Add drivers for current hardware components only") + +#define INSTALL_MODULE_LABEL _("Install module") +#define REMOVE_MODULE_LABEL _("Remove module") +#define INSTALL_PACKAGE_LABEL _("Install package") +#define REMOVE_PACKAGE_LABEL _("Remove package") +#define CHANGELOG_LABEL _("Changelog") +#define LAUNCH_LABEL _("Launch") +#define LTS_TAG _("LTS") +#define REACTIVE_TAG _("Reactive") +#define RECOMENDED_TAG _("Recomended") +#define HARDENED_TAG _("Hardened") +#define REALTIME_TAG _("RealTime") +#define STABLE_TAG _("Stable") + +#define KERNELS_LABEL _("Kernels") +#define ADDITIONS_LABEL _("Additions") +#define UPDATE_LABEL _("Update") +#define OPE_INFO_LABEL _("Open package information") +#define MORE_LABEL _("More") + +#define ACCEPT_LABEL _("Accept") +#define WARNING_TITLE_LABEL _("Warning") +#define DEPENDENCES_LABEL _("Dependences") + +#define MODULE_TAB_LABEL _("Module") +#define PACKAGE_TAB_LABEL _("Package") +#define DESCTIPTION_TAB_LABEL _("Description") + +#define OPERATION_SUCCESS_LABEL _("Terminal operation success") +#define OPERATION_ERROR_LABEL _("Terminal operation failed") +#define OPERATION_IN_PROGRESS_LABEL _("Terminal operation in process") +#define PACKAGE_REMOVED_BUT_NOT_DISABLED_LABEL _("The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed.") + +#define MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel")," ",target,"?",NULL) +#define PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install package")," ",target,"?",NULL) +#define MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove module")," ",target,"?",NULL) +#define PACKAGE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove package")," ",target,"?",NULL) +#define LAUNCH_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to launch")," ",target," ",_("for boot?\n\nChanges will be applied after system restart"),NULL) \ No newline at end of file diff --git a/ubl-settings-kernel-additions-table-row.glade b/ubl-settings-kernel-additions-table-row.glade new file mode 100644 index 0000000..14a339a --- /dev/null +++ b/ubl-settings-kernel-additions-table-row.glade @@ -0,0 +1,319 @@ + + + + + + + True + False + com.ublinux.libublsettingsui-gtk.update-cloud-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk.update-cloud-symbolic + + + False + 5 + 5 + 5 + 15 + + + True + False + center + 5 + vertical + 1 + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Name + False + 0 + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Module + True + 0 + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Package + True + 0 + + + True + True + 1 + + + + + False + True + 2 + + + + + False + True + 1 + + + + + True + False + 5 + vertical + 2 + + + + + + False + True + 3 + + + + + True + False + center + 5 + vertical + 5 + + + Install module + True + True + True + + + + False + True + 0 + + + + + True + False + 5 + + + True + True + image1 + + + + False + True + 0 + + + + + Remove module + True + True + + + + True + True + 2 + + + + + False + True + 1 + + + + + Install package + True + True + True + + + + False + True + 2 + + + + + True + False + 5 + + + True + True + image2 + + + + False + True + 0 + + + + + Remove package + True + True + + + + True + True + 2 + + + + + False + True + 3 + + + + + False + True + end + 4 + + + + + True + False + True + 0 + + + True + True + end + 6 + + + + + diff --git a/ubl-settings-kernel-banner.png b/ubl-settings-kernel-banner.png new file mode 100644 index 0000000..8eb67cb Binary files /dev/null and b/ubl-settings-kernel-banner.png differ diff --git a/ubl-settings-kernel-dialog.glade b/ubl-settings-kernel-dialog.glade new file mode 100644 index 0000000..34d0add --- /dev/null +++ b/ubl-settings-kernel-dialog.glade @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + 400 + 200 + False + True + com.ublinux.ubl-settings-repomanager + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + vertical + + + True + False + 15 + + + True + False + 51 + dialog-question-symbolic + + + False + True + 0 + + + + + True + False + label + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + False + True + 0 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + True + never + in + + + True + True + liststore1 + + + none + + + + + + + + 0 + + + + + + + Module + + + + 1 + + + + + + + Description + + + + 2 + + + + + + + + + + + + + True + False + Dependences + + + + + True + True + 1 + + + + + + + True + False + True + + + True + False + Warning + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-kernel + + + + + Cancel + True + True + True + + + 1 + + + + + Accept + True + True + True + + + end + 2 + + + + + + diff --git a/ubl-settings-kernel-info.glade b/ubl-settings-kernel-info.glade new file mode 100644 index 0000000..034493d --- /dev/null +++ b/ubl-settings-kernel-info.glade @@ -0,0 +1,83 @@ + + + + + + + 800 + 600 + False + True + com.ublinux.ubl-settings-repomanager + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + True + in + + + True + False + 5 + 5 + 5 + 4 + + + True + False + True + 0 + 0 + + + + + + + + + + True + True + 0 + + + + + + + True + False + True + + + True + False + Information + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-kernel + + + + + + diff --git a/ubl-settings-kernel-install.glade b/ubl-settings-kernel-install.glade new file mode 100644 index 0000000..be7d339 --- /dev/null +++ b/ubl-settings-kernel-install.glade @@ -0,0 +1,207 @@ + + + + + + 400 + 200 + False + True + com.ublinux.ubl-settings-repomanager + + + + True + False + vertical + + + True + False + vertical + + + + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 5 + + + True + False + Kernel version: + 0 + + + False + True + 0 + + + + + True + False + 0 + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + Image file: + 0 + + + False + True + 0 + + + + + True + True + ublinux + + + True + True + 1 + + + + + False + True + 1 + + + + + Add debug components + True + True + False + True + + + False + True + 2 + + + + + Add drivers for current hardware components only + True + True + False + True + + + False + True + 3 + + + + + False + True + 1 + + + + + + + True + False + + + True + False + Initramfs building + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-kernel + + + + + Cancel + True + True + True + + + 1 + + + + + Execute + True + True + True + + + end + 2 + + + + + + + + + + + + diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade new file mode 100644 index 0000000..96ae99f --- /dev/null +++ b/ubl-settings-kernel-table-row.glade @@ -0,0 +1,384 @@ + + + + + + + True + False + com.ublinux.libublsettingsui-gtk.update-cloud-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk.update-cloud-symbolic + + + False + 5 + 5 + 5 + 15 + + + True + False + center + 5 + vertical + 1 + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Name + True + False + 0 + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Module + 0 + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Package + 0 + + + True + True + 1 + + + + + False + True + 2 + + + + + False + True + 1 + + + + + True + False + 5 + vertical + 2 + + + + + + False + True + 2 + + + + + True + False + 5 + vertical + 2 + + + + + + False + True + 3 + + + + + True + False + 5 + vertical + 2 + + + + + + False + True + 4 + + + + + True + False + center + 3 + 5 + vertical + 5 + + + Install module + True + True + True + + + + False + True + 0 + + + + + True + False + 5 + + + True + True + image1 + + + + False + True + 0 + + + + + Remove module + True + True + + + + True + True + 2 + + + + + False + True + 1 + + + + + Install package + True + True + True + + + + False + True + 2 + + + + + True + False + 5 + + + True + True + image2 + + + + False + True + 0 + + + + + Remove package + True + True + + + + True + True + 2 + + + + + False + True + 3 + + + + + Changelog + True + True + + + + False + True + 4 + + + + + Launch + True + True + + + + False + True + 5 + + + + + False + True + end + 4 + + + + + True + False + 5 + True + 0 + + + True + True + end + 6 + + + + + diff --git a/ubl-settings-kernel.css b/ubl-settings-kernel.css new file mode 100644 index 0000000..8db3f19 --- /dev/null +++ b/ubl-settings-kernel.css @@ -0,0 +1,249 @@ +.tableborders { + border-width:0.5px 0.5px 0.5px 0.5px; + border-style: solid; + border-color: @theme_fg_color; +} +.tableborderleft { + border-left: 0.5px; + border-style: solid; + border-color: @theme_fg_color; + +} +.tableborderright { + border-right: 0.5px; + border-style: solid; + border-color: @theme_fg_color; + +} +.tablebordertop { + border-top: 0.5px; + border-style: solid; + border-color: @theme_fg_color; + +} +.tableborderbottom { + border-bottom:0.5px; + border-style: solid; + border-color: @theme_fg_color; + +} +.tablemargin { + padding: 1px; +} +.thin { + margin:0px; + padding:0px; +} +.noborder { + border:none; +} +.nobackground { +background:transparent; +} +.nobackground:active { +background:transparent; +} +.textHead{ + text-shadow: 2px 2px @theme_bg_color; + color: @theme_text_color; +} + +.inherited>* { + border:none; + background:inherit; +} +.workingbg { + background:@theme_base_color; +} +.menuitembottom{ + margin-top:0px; + margin-bottom:3px; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemmiddle{ + margin-top:0px; + margin-bottom:0px; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + + .menuitemtop{ + margin-bottom:0px; + border-color:inherit; + border-top-width:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemtop>*{ + margin:2px 2px 0 2px; + padding: 3px 10px 3px 5px; + border:transparent; + } + .menuitemmiddle>*{ + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; + border:transparent; + } + .menuitembottom>*{ + margin:0 2px 2px 2px; + padding: 3px 10px 3px 5px; + } + .menuitemtop:hover { + background:@theme_bg_color; + border-color:inherit; + border-top-width:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemmiddle:hover { + background:@theme_bg_color; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitembottom:hover { + background:@theme_bg_color; + border-color:inherit; + border-bottom-width:0px; + border-left-width:inherit; + border-right-width:inherit; + + } + .menuitemtop:hover>* { + margin:2px 2px 0 2px; + padding: 3px 10px 3px 5px; + background:@theme_selected_bg_color; + border-radius:2px; + } + .menuitemmiddle:hover>* { + margin:0 2px 0px 2px; + padding: 3px 10px 3px 5px; + background:@theme_selected_bg_color; + border-radius:2px; + } + .menuitembottom:hover>* { + margin:0 2px 2px 2px; + padding: 3px 10px 3px 5px; + background:@theme_selected_bg_color; + border-radius:2px; + } + .boxInfoMessError{ + background-color: #ea9999; +} + +.boxInfoMessOK{ + background-color: #f3f0ac; +} + +.listfix row:selected * .buttonlistfx:active * { + background-color: @theme_selected_fg_color; + color: @theme_fg_color; + transition:100ms; +} +.listfix row:selected * .buttonlistfx:active { + background-color: @theme_selected_fg_color; + color: @theme_fg_color; + transition:100ms; +} + + +.tag_red{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + padding:2px 5px; + color:#a25757; + border-color: #d8504e; + + background-color:#ea9999 +} +.tag_blue{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + padding:2px 5px; + color:#4973a1; + border-color: #3e85e7; + + background-color:#9fc5f8 +} +.tag_purple{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + padding:2px 5px; + color:#41346a; + border-color: #9d17f9; + + background-color:#b4a7d6 +} +.tag_orange{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + padding:2px 5px; + color:#a87644; + border-color: #fea11a; + + background-color:#f9cb9c +} +.tag_yellow{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + padding:2px 5px; + color:#866715; + border-color: #cca11f; + + background-color:#ffe599 +} +.tag_green{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + padding:2px 5px; + color:#61815a; + border-color: #2aab37; + + background-color:#c8e1be +} +.tag_grey{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + padding:2px 5px; + color:#5f5f5f; + border-color: #777777; + + background-color:#999999 +} +.updatebutton { + background-color: #e06666; + color: @theme_bg_color; + border-color: #a36666; +} +.updatebutton *{ + background-color: #e06666; + color: @theme_bg_color; +} +.updatebutton:active { + background-color: @theme_selected_bg_color; + color: @theme_bg_color; + border-color: @theme_selected_bg_color; +} +.updatebutton:active *{ + background-color: @theme_selected_bg_color; + color: @theme_bg_color; +} +.updatebutton:disabled { + background-color: transparent; + border-color: @insensitive_fg_color; + border-width:0.5px; +} +.updatebutton *:disabled { + background-color: transparent; + color: @insensitive_fg_color; +} \ No newline at end of file diff --git a/ubl-settings-kernel.desktop b/ubl-settings-kernel.desktop new file mode 100644 index 0000000..501cb9b --- /dev/null +++ b/ubl-settings-kernel.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=System kernel +Name[ru]=Ядро системы +GenericName=ubl-settings-kernel +GenericName[ru]=Ядро системы +Comment=Kernel downloading and installation, kernel selection to boot by default +Comment[ru]=Загрузка и установка ядер системы, выбор ядра для загрузки по умолчанию +Type=Application +Exec=pkexec ubl-settings-kernel +Icon=com.ublinux.ubl-settings-kernel +Terminal=false +X-XfcePluggable=true +X-UBLPluggable=true +Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-Personal-Settings; diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade new file mode 100644 index 0000000..b435b95 --- /dev/null +++ b/ubl-settings-kernel.glade @@ -0,0 +1,394 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + 1 + 10 + + + True + False + end + slide-up + + + True + False + + + True + False + True + adjustment1 + natural + UTF-8 + True + True + False + + + True + True + 0 + + + + + True + False + vertical + adjustment1 + + + False + True + 1 + + + + + + + True + False + com.ublinux.libublsettingsui-gtk3.sync-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.important-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.settings-symbolic + + + True + False + vertical + + + True + False + 5 + + + True + False + 26 + vertical + 6 + + + True + True + True + Update + image1 + + + + False + True + 0 + + + + + True + False + True + True + Open package information + image2 + + + + False + True + 1 + + + + + True + True + True + Initramfs building + image4 + + + + False + True + 3 + + + + + False + True + 0 + + + + + True + False + + + True + True + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + + + True + True + never + + + True + False + 5 + + + True + False + False + + + + + + + + True + True + 1 + + + + + + + True + False + Kernels + + + False + + + + + True + True + 5 + 5 + 5 + 5 + + + True + False + 5 + + + True + False + + + + + + + + 1 + + + + + True + False + Additions + + + 1 + False + + + + + -1 + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + end + slide-up + True + + + True + False + vertical + 5 + + + True + False + 0 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + + + True + False + center + + + True + True + 0 + + + + + More + True + True + True + + + False + True + 2 + + + + + + + + + + + + False + True + 1 + + + + + + + + + False + True + 1 + + + + diff --git a/ubl-settings-kernel.pot b/ubl-settings-kernel.pot new file mode 100644 index 0000000..b2621d6 --- /dev/null +++ b/ubl-settings-kernel.pot @@ -0,0 +1,230 @@ +# Language translations for ubl-settings-kernel package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-kernel package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ubl-settings-kernel 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/ubl-strings.h:2 +msgid "System kernel" +msgstr "" + +#: source/ubl-strings.h:3 +msgid "" +"Kernel downloading and installation, kernel selection to boot by default" +msgstr "" + +#: source/ubl-strings.h:5 +msgid "Information" +msgstr "" + +#: source/ubl-strings.h:7 +msgid "Module:" +msgstr "" + +#: source/ubl-strings.h:8 +msgid "Package:" +msgstr "" + +#: source/ubl-strings.h:10 +msgid "Cancel" +msgstr "" + +#: source/ubl-strings.h:12 +msgid "Package were not found" +msgstr "" + +#: source/ubl-strings.h:13 +msgid "Changelog was not found" +msgstr "" + +#: source/ubl-strings.h:15 +msgid "Package installed" +msgstr "" + +#: source/ubl-strings.h:16 +msgid "Module installed" +msgstr "" + +#: source/ubl-strings.h:17 +msgid "Installation unknown" +msgstr "" + +#: source/ubl-strings.h:18 +msgid "Startup boot" +msgstr "" + +#: source/ubl-strings.h:19 +msgid "Running" +msgstr "" + +#: source/ubl-strings.h:22 +msgid "Initramfs building" +msgstr "" + +#: source/ubl-strings.h:23 +msgid "Execute" +msgstr "" + +#: source/ubl-strings.h:24 +msgid "Kernel version:" +msgstr "" + +#: source/ubl-strings.h:25 +msgid "Image file:" +msgstr "" + +#: source/ubl-strings.h:26 +msgid "Add debug components" +msgstr "" + +#: source/ubl-strings.h:27 +msgid "Add drivers for current hardware components only" +msgstr "" + +#: source/ubl-strings.h:29 +msgid "Install module" +msgstr "" + +#: source/ubl-strings.h:30 +msgid "Remove module" +msgstr "" + +#: source/ubl-strings.h:31 +msgid "Install package" +msgstr "" + +#: source/ubl-strings.h:32 +msgid "Remove package" +msgstr "" + +#: source/ubl-strings.h:33 +msgid "Changelog" +msgstr "" + +#: source/ubl-strings.h:34 +msgid "Launch" +msgstr "" + +#: source/ubl-strings.h:35 +msgid "LTS" +msgstr "" + +#: source/ubl-strings.h:36 +msgid "Reactive" +msgstr "" + +#: source/ubl-strings.h:37 +msgid "Recomended" +msgstr "" + +#: source/ubl-strings.h:38 +msgid "Hardened" +msgstr "" + +#: source/ubl-strings.h:39 +msgid "RealTime" +msgstr "" + +#: source/ubl-strings.h:40 +msgid "Stable" +msgstr "" + +#: source/ubl-strings.h:42 +msgid "Kernels" +msgstr "" + +#: source/ubl-strings.h:43 +msgid "Additions" +msgstr "" + +#: source/ubl-strings.h:44 +msgid "Update" +msgstr "" + +#: source/ubl-strings.h:45 +msgid "Open package information" +msgstr "" + +#: source/ubl-strings.h:46 +msgid "More" +msgstr "" + +#: source/ubl-strings.h:48 +msgid "Accept" +msgstr "" + +#: source/ubl-strings.h:49 +msgid "Warning" +msgstr "" + +#: source/ubl-strings.h:50 +msgid "Dependences" +msgstr "" + +#: source/ubl-strings.h:52 +msgid "Module" +msgstr "" + +#: source/ubl-strings.h:53 +msgid "Package" +msgstr "" + +#: source/ubl-strings.h:54 +msgid "Description" +msgstr "" + +#: source/ubl-strings.h:56 +msgid "Terminal operation success" +msgstr "" + +#: source/ubl-strings.h:57 +msgid "Terminal operation failed" +msgstr "" + +#: source/ubl-strings.h:58 +msgid "Terminal operation in process" +msgstr "" + +#: source/ubl-strings.h:58 +msgid "The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed." +msgstr "" + +#: source/ubl-strings.h:60 +msgid "Are you sure want to install kernel" +msgstr "" + +#: source/ubl-strings.h:61 +msgid "Are you sure want to install package" +msgstr "" + +#: source/ubl-strings.h:62 +msgid "Are you sure want to remove module" +msgstr "" + +#: source/ubl-strings.h:63 +msgid "Are you sure want to remove package" +msgstr "" + +#: source/ubl-strings.h:64 +msgid "Are you sure want to launch" +msgstr "" + +#: source/ubl-strings.h:64 +msgid "" +"for boot?\n" +"\n" +"Changes will be applied after system restart" +msgstr "" diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po new file mode 100644 index 0000000..eeeff5a --- /dev/null +++ b/ubl-settings-kernel_ru.po @@ -0,0 +1,234 @@ +# Russian translations for ubl-settings-kernel package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-kernel package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ubl-settings-kernel 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: Russian - UBLinux Team \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/ubl-strings.h:2 +msgid "System kernel" +msgstr "Ядро системы" + +#: source/ubl-strings.h:3 +msgid "" +"Kernel downloading and installation, kernel selection to boot by default" +msgstr "" +"Загрузка и установка ядер системы, выбор ядра для загрузки по умолчанию" + +#: source/ubl-strings.h:5 +msgid "Information" +msgstr "Информация" + +#: source/ubl-strings.h:7 +msgid "Module:" +msgstr "Модуль:" + +#: source/ubl-strings.h:8 +msgid "Package:" +msgstr "Пакет:" + +#: source/ubl-strings.h:10 +msgid "Cancel" +msgstr "Отмена" + +#: source/ubl-strings.h:12 +msgid "Package were not found" +msgstr "Пакет не найден" + +#: source/ubl-strings.h:13 +msgid "Changelog was not found" +msgstr "Список изменений не найден" + +#: source/ubl-strings.h:15 +msgid "Package installed" +msgstr "Установлен пакет" + +#: source/ubl-strings.h:16 +msgid "Module installed" +msgstr "Установлен модуль" + +#: source/ubl-strings.h:17 +msgid "Installation unknown" +msgstr "Статус неизвестен" + +#: source/ubl-strings.h:18 +msgid "Startup boot" +msgstr "Будет запущено" + +#: source/ubl-strings.h:19 +msgid "Running" +msgstr "Запущено" + +#: source/ubl-strings.h:22 +msgid "Initramfs building" +msgstr "Сборка Initramfs" + +#: source/ubl-strings.h:23 +msgid "Execute" +msgstr "Выполнить" + +#: source/ubl-strings.h:24 +msgid "Kernel version:" +msgstr "Версия ядра:" + +#: source/ubl-strings.h:25 +msgid "Image file:" +msgstr "Файл образа:" + +#: source/ubl-strings.h:26 +msgid "Add debug components" +msgstr "Добавить компоненты отладки" + +#: source/ubl-strings.h:27 +msgid "Add drivers for current hardware components only" +msgstr "Добавить драйвера только текущих аппаратных компонентов" + +#: source/ubl-strings.h:29 +msgid "Install module" +msgstr "Установить модуль" + +#: source/ubl-strings.h:30 +msgid "Remove module" +msgstr "Удалить модуль" + +#: source/ubl-strings.h:31 +msgid "Install package" +msgstr "Установить пакет" + +#: source/ubl-strings.h:32 +msgid "Remove package" +msgstr "Удалить пакет" + +#: source/ubl-strings.h:33 +msgid "Changelog" +msgstr "Список изменений" + +#: source/ubl-strings.h:34 +msgid "Launch" +msgstr "Запускать" + +#: source/ubl-strings.h:35 +msgid "LTS" +msgstr "LTS" + +#: source/ubl-strings.h:36 +msgid "Reactive" +msgstr "Реактивное" + +#: source/ubl-strings.h:37 +msgid "Recomended" +msgstr "Рекомендуется" + +#: source/ubl-strings.h:38 +msgid "Hardened" +msgstr "Усиленная защита" + +#: source/ubl-strings.h:39 +msgid "RealTime" +msgstr "Реальное время" + +#: source/ubl-strings.h:40 +msgid "Stable" +msgstr "Стабильное" + +#: source/ubl-strings.h:42 +msgid "Kernels" +msgstr "Ядра" + +#: source/ubl-strings.h:43 +msgid "Additions" +msgstr "Дополнения" + +#: source/ubl-strings.h:44 +msgid "Update" +msgstr "Обновить" + +#: source/ubl-strings.h:45 +msgid "Open package information" +msgstr "Открыть информацию о пакете" + +#: source/ubl-strings.h:46 +msgid "More" +msgstr "Подробнее" + +#: source/ubl-strings.h:48 +msgid "Accept" +msgstr "Принять" + +#: source/ubl-strings.h:49 +msgid "Warning" +msgstr "Внимание" + +#: source/ubl-strings.h:50 +msgid "Dependences" +msgstr "Зависимости" + +#: source/ubl-strings.h:52 +msgid "Module" +msgstr "Модуль" + +#: source/ubl-strings.h:53 +msgid "Package" +msgstr "Пакет" + +#: source/ubl-strings.h:54 +msgid "Description" +msgstr "Описание" + +#: source/ubl-strings.h:56 +msgid "Terminal operation success" +msgstr "Операция терминала успешно завершена" + +#: source/ubl-strings.h:57 +msgid "Terminal operation failed" +msgstr "Операция терминала завершена с ошибкой" + +#: source/ubl-strings.h:58 +msgid "Terminal operation in process" +msgstr "Операция терминала в процессе выполнения" + +#: source/ubl-strings.h:58 +msgid "The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed." +msgstr "Пакет с модулем удалён, но модуль не отключен от системы, так как используется другими системными программами. После перезагрузки модуль будет отключен и удалён." + +#: source/ubl-strings.h:60 +msgid "Are you sure want to install kernel" +msgstr "Вы хотите установить в систему ядро" + +#: source/ubl-strings.h:61 +msgid "Are you sure want to install package" +msgstr "Вы хотите установить в систему пакет с ядром" + +#: source/ubl-strings.h:62 +msgid "Are you sure want to remove module" +msgstr "Вы действительно хотите удалить из системы пакет с модулем ядра" + +#: source/ubl-strings.h:63 +msgid "Are you sure want to remove package" +msgstr "Вы действительно хотите удалить из системы пакет с ядром" + +#: source/ubl-strings.h:64 +msgid "Are you sure want to launch" +msgstr "Выбрать ядро" + +#: source/ubl-strings.h:64 +msgid "" +"for boot?\n" +"\n" +"Changes will be applied after system restart" +msgstr "" +"загрузочным?\n" +"\n" +"Изменения вступят в силу после перезагрузки."