diff --git a/Makefile b/Makefile index b03a7d3..21263cf 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,6 @@ DEPENDS = /bin/cmake PREFIX ?= /usr/local PKGNAME = $(MAKEFILE_DIR) FILE_VER = source/${PKGNAME}.h -PKGIDENT = $(subst /,-,$(subst /usr,,${PREFIX})) default_target: all @@ -22,11 +21,13 @@ all: init build init: @echo "Initialize ..."; \ - if [ -d ".git" ]; then \ + if [[ -d ".git" ]]; then \ LATEST_TAG=$$(git describe --abbrev=0 --tags | sed 's/^v//'); \ - if [ -z "$${LATEST_TAG}" ]; then \ - LATEST_TAG="0.0"; \ - fi; \ + if [[ -z "$${LATEST_TAG}" ]]; \ + then \ + LATEST_TAG=$$"0.0"; \ + echo "$${LATEST_TAG} is empty"; \ + fi; \ else \ LATEST_TAG="Development"; \ fi; \ @@ -36,7 +37,7 @@ init: depend: @echo "Check depends ..." @for FILE_DEPEND in $(DEPENDS); do \ - if [ ! -f $${FILE_DEPEND} ]; then \ + if [[ ! -f "$${FILE_DEPEND}" ]]; then \ echo "ERROR: Depend '$${FILE_DEPEND}' not found !"; \ exit 1; \ fi; \ @@ -46,21 +47,21 @@ depend: debug: @echo "Debug ..." - if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + 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 \ + 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 \ + if [[ -f "${CMAKE_BUILD_DIR}/${PKGNAME}" ]]; then \ echo "Check: OK"; \ else \ echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not found !"; \ @@ -75,10 +76,9 @@ build: depend prepare 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}"; \ + @for LANG in $$(find ./locale -iname "*.po" -print | sed -En "s/.+_([[:alpha:]]+)\.po/\1/p" | sort -u); do \ +# PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/${PKGNAME}.mo"; \ + PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/${PKGNAME}.mo"; \ $(RM) "$${PATH_FILE_MO}"; \ done @for SIZE in 16x16 32x32 48x48 scalable; do \ @@ -90,64 +90,64 @@ uninstall: $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ done; \ done + @for FILE_ICON in $(wildcard icons/*/*.svg); do \ + SUB_NAME=$${FILE_ICON#*/}; SUB_NAME=$${SUB_NAME%/*}; \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/$${SUB_NAME}/$${FILE_ICON}"; \ + done @$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}" @$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop" - @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.svg" - @$(RM) "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy" - @if [ -z ${DESTDIR} ]; then \ - [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ + @if [[ "${PREFIX}" == @("/usr"|"/usr/") ]]; then \ + $(RM) "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.${PKGNAME}.policy"; \ + else \ +# $(RM) "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.${PKGNAME}$${PREFIX//\//-}.policy"; \ + $(RM) "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}$${PREFIX//\//-}.policy"; \ + fi + @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; \ + [[ -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}"; \ + @for LANG in $$(find ./locale -iname "*.po" -print | sed -En "s/.+_([[:alpha:]]+)\.po/\1/p" | sort -u); do \ + install -dm755 "${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES"; \ +# PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/${PKGNAME}.mo"; \ + PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/${PKGNAME}.mo"; \ + PKGNAME_PO="./locale/${PKGNAME}_$${LANG}.po"; [[ -f "$${PKGNAME_PO}" ]] || PKGNAME_PO= ; \ + msgfmt --verbose --use-fuzzy --output-file "$${PATH_FILE_MO}" - < <(msgcat --use-first --no-wrap $${PKGNAME_PO} ./locale/*_$${LANG}.po); \ done @for SIZE in 16 32 48; do \ - install -dm755 "${DESTDIR}/usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps"; \ - rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}/usr/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps"; \ + rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data "icons/apps/com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + done + @for FILE_ICON in $(wildcard icons/*/*.svg); do \ + SUB_NAME=$${FILE_ICON#*/}; SUB_NAME=$${SUB_NAME%/*}; \ + install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/$${SUB_NAME}" $${FILE_ICON}; \ done - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" - @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/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/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.document-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.document-green-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.document-red-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.document-sign-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.folder-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.folder-green-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.folder-red-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.folder-red-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.document-sign-error-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.chain-error-symbolic.svg" - @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.chain-symbolic.svg" - @install -Dm755 -t "${DESTDIR}/usr/share/${PKGNAME}/csv/" "crypt-key.csv" - @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" @install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" - @install -Dm644 "com.ublinux.${PKGNAME}.policy" "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy" - @sed -e '\|annotate key=|s|/usr/bin|${PREFIX}/bin|' -e '/action id=/s/\.run/${PKGIDENT}\.run/' -i ${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy - @if [ -z ${DESTDIR} ]; then \ - [ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \ + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" + @if [[ "${PREFIX}" == @("/usr"|"/usr/") ]]; then \ + install -Dm644 -t "${DESTDIR}${PREFIX}/share/polkit-1/actions/" "com.ublinux.${PKGNAME}.policy"; \ + else \ +# install -Dm644 "com.ublinux.${PKGNAME}.policy" "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.${PKGNAME}$${PREFIX//\//-}.policy"; \ + install -Dm644 "com.ublinux.${PKGNAME}.policy" "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}$${PREFIX//\//-}.policy"; \ +# sed -e "s+/usr/bin+${PREFIX}/bin+" -e "s+\.run+$${PREFIX//\//-}\.run+g" -i "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.${PKGNAME}$${PREFIX//\//-}.policy"; \ + sed -e "s+/usr/bin+${PREFIX}/bin+" -e "s+\.run+$${PREFIX//\//-}\.run+g" -i "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}$${PREFIX//\//-}.policy"; \ + fi + @if [[ -z "${DESTDIR}" ]]; then \ + ldconfig -n ${DESTDIR}${PREFIX}/lib; \ + [[ -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}/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \ + [[ -d "${DESTDIR}${PREFIX}/share/applications" ]] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ fi @echo "Install: OK" clean: @echo "Clean ..." @$(RM) -rd ${CMAKE_BUILD_DIR} - @if [ -d ${CMAKE_BUILD_DIR} ]; then \ + @if [[ -d "${CMAKE_BUILD_DIR}" ]]; then \ echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \ else \ echo "Clean: OK"; \ @@ -159,7 +159,7 @@ help: echo "... init"; \ echo "... debug"; \ echo "... prepare"; \ - echo "... build"; \ + echo "... compile"; \ echo "... install"; \ echo "... uninstall"; \ echo "... clean" \ No newline at end of file diff --git a/com.ublinux.ubl-settings-repomanager.checked.svg b/com.ublinux.ubl-settings-repomanager.checked.svg deleted file mode 100644 index e3cab42..0000000 --- a/com.ublinux.ubl-settings-repomanager.checked.svg +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/com.ublinux.ubl-settings-repomanager.warning.svg b/com.ublinux.ubl-settings-repomanager.warning.svg deleted file mode 100644 index 9a90dba..0000000 --- a/com.ublinux.ubl-settings-repomanager.warning.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/gresource.xml b/gresource.xml index 1dd3f75..9c5c8bb 100644 --- a/gresource.xml +++ b/gresource.xml @@ -12,7 +12,4 @@ ubl-settings-repomanager.css - - ubl-settings-repomanager-banner.png - \ No newline at end of file diff --git a/com.ublinux.ubl-settings-repomanager.svg b/icons/apps/com.ublinux.ubl-settings-repomanager.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.svg rename to icons/apps/com.ublinux.ubl-settings-repomanager.svg diff --git a/com.ublinux.ubl-settings-repomanager.chain-error-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.chain-error-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.chain-error-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.chain-error-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.chain-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.chain-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.chain-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.chain-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.document-green-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.document-green-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.document-green-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.document-green-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.document-red-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.document-red-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.document-red-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.document-red-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.document-sign-error-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.document-sign-error-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.document-sign-error-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.document-sign-error-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.document-sign-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.document-sign-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.document-sign-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.document-sign-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.document-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.document-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.document-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.document-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.folder-green-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.folder-green-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.folder-green-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.folder-green-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.folder-red-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.folder-red-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.folder-red-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.folder-red-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.folder-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.folder-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.folder-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.folder-symbolic.svg diff --git a/com.ublinux.ubl-settings-repomanager.warning-symbolic.svg b/icons/status/com.ublinux.ubl-settings-repomanager.warning-symbolic.svg similarity index 100% rename from com.ublinux.ubl-settings-repomanager.warning-symbolic.svg rename to icons/status/com.ublinux.ubl-settings-repomanager.warning-symbolic.svg diff --git a/ubl-settings-repomanager.pot b/locale/ubl-settings-repomanager.pot similarity index 87% rename from ubl-settings-repomanager.pot rename to locale/ubl-settings-repomanager.pot index 2aa34ec..7b5453d 100644 --- a/ubl-settings-repomanager.pot +++ b/locale/ubl-settings-repomanager.pot @@ -26,505 +26,539 @@ msgid "Repository management and configuring" msgstr "" #: source/ubl-strings.h:5 +msgid "" +"https://wiki.ublinux.ru/en/Software/Programs_and_utilities/All/ubl-settings-" +"repomanager" +msgstr "" + +#: source/ubl-strings.h:7 msgid "Would you like to read documentation in the Web?" msgstr "" -#: source/ubl-strings.h:6 +#: source/ubl-strings.h:8 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." msgstr "" -#: source/ubl-strings.h:7 +#: source/ubl-strings.h:9 msgid "Always redirect to online documentation" msgstr "" -#: source/ubl-strings.h:8 +#: source/ubl-strings.h:10 msgid "Open documentation" msgstr "" -#: source/ubl-strings.h:9 +#: source/ubl-strings.h:11 msgid "Project Home Page" msgstr "" -#: source/ubl-strings.h:10 +#: source/ubl-strings.h:12 msgid "Nothing were chosen" msgstr "" -#: source/ubl-strings.h:12 +#: source/ubl-strings.h:14 msgid "Information" msgstr "" -#: source/ubl-strings.h:14 +#: source/ubl-strings.h:16 msgid "Choose package(-s)" msgstr "" -#: source/ubl-strings.h:15 +#: source/ubl-strings.h:17 msgid "Choose folder" msgstr "" -#: source/ubl-strings.h:16 +#: source/ubl-strings.h:18 msgid "Add packages" msgstr "" -#: source/ubl-strings.h:17 +#: source/ubl-strings.h:19 msgid "Move packages" msgstr "" -#: source/ubl-strings.h:18 +#: source/ubl-strings.h:20 msgid "Remove packages" msgstr "" -#: source/ubl-strings.h:20 source/ubl-strings.h:39 +#: source/ubl-strings.h:22 source/ubl-strings.h:41 msgid "Key creation" msgstr "" -#: source/ubl-strings.h:21 +#: source/ubl-strings.h:23 msgid "Email:" msgstr "" -#: source/ubl-strings.h:22 +#: source/ubl-strings.h:24 msgid "Key additional configuration" msgstr "" -#: source/ubl-strings.h:23 +#: source/ubl-strings.h:25 msgid "Commentary:" msgstr "" -#: source/ubl-strings.h:24 +#: source/ubl-strings.h:26 msgid "Encryption type:" msgstr "" -#: source/ubl-strings.h:25 +#: source/ubl-strings.h:27 msgid "key strength (in bits):" msgstr "" -#: source/ubl-strings.h:26 +#: source/ubl-strings.h:28 msgid "Expires:" msgstr "" -#: source/ubl-strings.h:27 +#: source/ubl-strings.h:29 msgid "Password:" msgstr "" -#: source/ubl-strings.h:28 +#: source/ubl-strings.h:30 msgid "Password confirmation:" msgstr "" -#: source/ubl-strings.h:29 +#: source/ubl-strings.h:31 msgid "Timeless" msgstr "" -#: source/ubl-strings.h:30 +#: source/ubl-strings.h:32 msgid "Until" msgstr "" -#: source/ubl-strings.h:32 +#: source/ubl-strings.h:34 msgid "Add" msgstr "" -#: source/ubl-strings.h:34 +#: source/ubl-strings.h:36 msgid "Update" msgstr "" -#: source/ubl-strings.h:35 +#: source/ubl-strings.h:37 msgid "Configure storages" msgstr "" -#: source/ubl-strings.h:36 +#: source/ubl-strings.h:38 msgid "System update" msgstr "" -#: source/ubl-strings.h:38 +#: source/ubl-strings.h:40 msgid "Empty important field" msgstr "" -#: source/ubl-strings.h:41 +#: source/ubl-strings.h:43 msgid "Repository data has been loaded successfully" msgstr "" -#: source/ubl-strings.h:43 +#: source/ubl-strings.h:45 msgid "Saving has succeeded" msgstr "" -#: source/ubl-strings.h:45 +#: source/ubl-strings.h:47 msgid "General" msgstr "" -#: source/ubl-strings.h:46 +#: source/ubl-strings.h:48 msgid "Publication" msgstr "" -#: source/ubl-strings.h:47 +#: source/ubl-strings.h:49 msgid "Trusted repository" msgstr "" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:50 msgid "Server type:" msgstr "" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:51 msgid "IP adress:" msgstr "" -#: source/ubl-strings.h:50 +#: source/ubl-strings.h:52 msgid "Port:" msgstr "" -#: source/ubl-strings.h:51 +#: source/ubl-strings.h:53 msgid "Publish" msgstr "" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:54 msgid "Code name:" msgstr "" -#: source/ubl-strings.h:53 +#: source/ubl-strings.h:55 msgid "Branch:" msgstr "" -#: source/ubl-strings.h:54 +#: source/ubl-strings.h:56 msgid "Architecture:" msgstr "" -#: source/ubl-strings.h:55 +#: source/ubl-strings.h:57 msgid "Components:" msgstr "" -#: source/ubl-strings.h:56 +#: source/ubl-strings.h:58 msgid "Signature:" msgstr "" -#: source/ubl-strings.h:57 +#: source/ubl-strings.h:59 msgid "Sign" msgstr "" -#: source/ubl-strings.h:59 +#: source/ubl-strings.h:61 msgid "Move" msgstr "" -#: source/ubl-strings.h:60 +#: source/ubl-strings.h:62 msgid "Remove" msgstr "" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:64 msgid "Sign repo" msgstr "" -#: source/ubl-strings.h:63 +#: source/ubl-strings.h:65 msgid "Remove repo" msgstr "" -#: source/ubl-strings.h:64 +#: source/ubl-strings.h:66 msgid "Manage storages" msgstr "" -#: source/ubl-strings.h:65 +#: source/ubl-strings.h:67 msgid "Storage:" msgstr "" -#: source/ubl-strings.h:66 +#: source/ubl-strings.h:68 msgid "Open existing" msgstr "" -#: source/ubl-strings.h:67 +#: source/ubl-strings.h:69 msgid "Create new" msgstr "" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:70 +msgid "Create new storage" +msgstr "" + +#: source/ubl-strings.h:71 msgid "Disable" msgstr "" -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:72 msgid "Delete" msgstr "" -#: source/ubl-strings.h:70 +#: source/ubl-strings.h:73 msgid "Add repository" msgstr "" -#: source/ubl-strings.h:71 +#: source/ubl-strings.h:74 msgid "Repository (-ies)" msgstr "" -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:75 msgid "Accept" msgstr "" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:77 msgid "Repository:" msgstr "" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:78 msgid "Source" msgstr "" -#: source/ubl-strings.h:76 +#: source/ubl-strings.h:79 msgid "Target" msgstr "" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:80 msgid "Packages sign:" msgstr "" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:81 msgid "Repository sign:" msgstr "" -#: source/ubl-strings.h:79 +#: source/ubl-strings.h:82 msgid "Package (-s) to add" msgstr "" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:83 msgid "Package (-s) to remove" msgstr "" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:84 msgid "Package (-s) to move" msgstr "" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:85 msgid "Name" msgstr "" -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:86 msgid "Path" msgstr "" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:87 msgid "Remove package" msgstr "" -#: source/ubl-strings.h:85 +#: source/ubl-strings.h:88 msgid "Add package" msgstr "" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:90 msgid "Repository sign failed - repository has no packages" msgstr "" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:91 msgid "Data has been loaded" msgstr "" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:92 +msgid "Failed to add packages" +msgstr "" + +#: source/ubl-strings.h:93 msgid "Packages were added successfully" msgstr "" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:94 +msgid "Packages remove has failed" +msgstr "" + +#: source/ubl-strings.h:95 msgid "Packages were removed successfully" msgstr "" -#: source/ubl-strings.h:91 +#: source/ubl-strings.h:96 +msgid "Packages move has failed" +msgstr "" + +#: source/ubl-strings.h:97 msgid "Packages were moved successfully" msgstr "" -#: source/ubl-strings.h:92 +#: source/ubl-strings.h:98 msgid "Changes saved" msgstr "" -#: source/ubl-strings.h:93 +#: source/ubl-strings.h:99 msgid "Key was successfully created" msgstr "" -#: source/ubl-strings.h:94 +#: source/ubl-strings.h:100 msgid "Key creation failed" msgstr "" -#: source/ubl-strings.h:96 +#: source/ubl-strings.h:102 msgid "Choose" msgstr "" -#: source/ubl-strings.h:97 +#: source/ubl-strings.h:103 msgid "Cancel" msgstr "" -#: source/ubl-strings.h:99 +#: source/ubl-strings.h:105 msgid "Open or create repository" msgstr "" -#: source/ubl-strings.h:100 +#: source/ubl-strings.h:106 msgid "Open existing repository" msgstr "" -#: source/ubl-strings.h:101 +#: source/ubl-strings.h:107 msgid "Configure repository" msgstr "" -#: source/ubl-strings.h:102 +#: source/ubl-strings.h:108 msgid "Delete repository" msgstr "" -#: source/ubl-strings.h:103 +#: source/ubl-strings.h:109 msgid "" "Add/Remove repository from\n" "local package sources" msgstr "" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:110 msgid "Enable/disable repository publish" msgstr "" -#: source/ubl-strings.h:105 +#: source/ubl-strings.h:111 msgid "Check dependences" msgstr "" -#: source/ubl-strings.h:106 +#: source/ubl-strings.h:112 msgid "Sign ripository" msgstr "" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:113 msgid "Open" msgstr "" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:115 msgid "Operation done" msgstr "" -#: source/ubl-strings.h:111 +#: source/ubl-strings.h:117 msgid "Choose branch or pack in branch to add file!" msgstr "" -#: source/ubl-strings.h:112 +#: source/ubl-strings.h:118 msgid "Choose repository or branch!" msgstr "" -#: source/ubl-strings.h:113 +#: source/ubl-strings.h:119 msgid "Choose pack to delete!" msgstr "" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:120 msgid "Choose repository to delete!" msgstr "" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:121 msgid "Choose repository or package to sign" msgstr "" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:123 msgid "Name:" msgstr "" -#: source/ubl-strings.h:118 +#: source/ubl-strings.h:124 msgid "Branches:" msgstr "" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:125 msgid "< Type branch name >" msgstr "" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:126 msgid "Name must be filled!" msgstr "" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:127 msgid "Choose path for new repository" msgstr "" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:129 msgid "Choose repository folder" msgstr "" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:130 msgid "Choose repository" msgstr "" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:132 msgid "Absent" msgstr "" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:133 msgid "Dependences:" msgstr "" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:134 msgid "Digital signature" msgstr "" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:136 msgid "package" msgstr "" -#: source/ubl-strings.h:131 +#: source/ubl-strings.h:137 msgid "repository" msgstr "" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:138 msgid "Repeating packages were not added" msgstr "" -#: source/ubl-strings.h:133 +#: source/ubl-strings.h:139 msgid "This repository has already been added" msgstr "" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:141 msgid "Close" msgstr "" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:143 msgid "Are you sure want to disable?" msgstr "" -#: source/ubl-strings.h:139 +#: source/ubl-strings.h:145 msgid "Are you sure want to remove?" msgstr "" -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:147 msgid "Do not sign" msgstr "" -#: source/ubl-strings.h:143 +#: source/ubl-strings.h:149 msgid "Package name error - package has incorrect name pattern" msgstr "" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:151 msgid "Passwords do not match" msgstr "" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:153 msgid "Package search" msgstr "" -#: source/ubl-strings.h:149 +#: source/ubl-strings.h:155 msgid "Storage path" msgstr "" -#: source/ubl-strings.h:151 +#: source/ubl-strings.h:157 msgid "Repository" msgstr "" -#: source/ubl-strings.h:153 +#: source/ubl-strings.h:159 msgid "Architecture" msgstr "" -#: source/ubl-strings.h:155 +#: source/ubl-strings.h:161 msgid "Repository name" msgstr "" -#: source/ubl-strings.h:157 +#: source/ubl-strings.h:163 msgid "Signature" msgstr "" -#: source/ubl-strings.h:159 +#: source/ubl-strings.h:165 msgid "Signature status" msgstr "" -#: source/ubl-strings.h:161 +#: source/ubl-strings.h:167 msgid "Sign packages" msgstr "" -#: source/ubl-strings.h:163 +#: source/ubl-strings.h:169 msgid "Packages successfully signed" msgstr "" -#: source/ubl-strings.h:165 +#: source/ubl-strings.h:171 msgid "Folder must contain repositories" msgstr "" -#: source/ubl-strings.h:167 +#: source/ubl-strings.h:173 msgid "Folder must not be empty" msgstr "" -#: source/ubl-strings.h:167 +#: source/ubl-strings.h:175 msgid "Name must be 5 or more symbols" msgstr "" + +#: source/ubl-strings.h:177 +msgid "Same repository was chosen for source and target" +msgstr "" + +#: source/ubl-strings.h:179 +msgid "Signed" +msgstr "" + +#: source/ubl-strings.h:180 +msgid "Unsigned" +msgstr "" diff --git a/ubl-settings-repomanager_ru.po b/locale/ubl-settings-repomanager_ru.po similarity index 89% rename from ubl-settings-repomanager_ru.po rename to locale/ubl-settings-repomanager_ru.po index 552d851..7019b3b 100644 --- a/ubl-settings-repomanager_ru.po +++ b/locale/ubl-settings-repomanager_ru.po @@ -26,10 +26,18 @@ msgid "Repository management and configuring" msgstr "Настройка параметров и управление репозиториями системы" #: source/ubl-strings.h:5 +msgid "" +"https://wiki.ublinux.ru/en/Software/Programs_and_utilities/All/ubl-settings-" +"repomanager" +msgstr "" +"https://wiki.ublinux.ru/ru/Software/Programs_and_utilities/All/ubl-settings-" +"repomanager" + +#: source/ubl-strings.h:7 msgid "Would you like to read documentation in the Web?" msgstr "Вы хотите прочитать справку в Сети?" -#: source/ubl-strings.h:6 +#: source/ubl-strings.h:8 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." @@ -37,327 +45,343 @@ msgstr "" "Вы будете перенаправлены на сайт с документацией где страницы помощи\n" "переводятся и поддерживаются сообществом." -#: source/ubl-strings.h:7 +#: source/ubl-strings.h:9 msgid "Always redirect to online documentation" msgstr "Всегда перенаправлять" -#: source/ubl-strings.h:8 +#: source/ubl-strings.h:10 msgid "Open documentation" msgstr "Прочитать справку" -#: source/ubl-strings.h:9 +#: source/ubl-strings.h:11 msgid "Project Home Page" msgstr "Домашняя страница проекта" -#: source/ubl-strings.h:10 +#: source/ubl-strings.h:12 msgid "Nothing were chosen" msgstr "Ничего не выбрано" -#: source/ubl-strings.h:12 +#: source/ubl-strings.h:14 msgid "Information" msgstr "Информация" -#: source/ubl-strings.h:14 +#: source/ubl-strings.h:16 msgid "Choose package(-s)" msgstr "Выбрать пакеты" -#: source/ubl-strings.h:15 +#: source/ubl-strings.h:17 msgid "Choose folder" msgstr "Выбрать директорию для репозитория" -#: source/ubl-strings.h:16 +#: source/ubl-strings.h:18 msgid "Add packages" msgstr "Добавить пакеты" -#: source/ubl-strings.h:17 +#: source/ubl-strings.h:19 msgid "Move packages" msgstr "Переместить пакеты" -#: source/ubl-strings.h:18 +#: source/ubl-strings.h:20 msgid "Remove packages" msgstr "Удалить пакеты" -#: source/ubl-strings.h:20 source/ubl-strings.h:39 +#: source/ubl-strings.h:22 source/ubl-strings.h:41 msgid "Key creation" msgstr "Создание ключа" -#: source/ubl-strings.h:21 +#: source/ubl-strings.h:23 msgid "Email:" msgstr "Адрес электронной почты:" -#: source/ubl-strings.h:22 +#: source/ubl-strings.h:24 msgid "Key additional configuration" msgstr "Дополнительные параметры ключа" -#: source/ubl-strings.h:23 +#: source/ubl-strings.h:25 msgid "Commentary:" msgstr "Комментарий:" -#: source/ubl-strings.h:24 +#: source/ubl-strings.h:26 msgid "Encryption type:" msgstr "Тип шифрования:" -#: source/ubl-strings.h:25 +#: source/ubl-strings.h:27 msgid "key strength (in bits):" msgstr "Стойкость ключа (в битах):" -#: source/ubl-strings.h:26 +#: source/ubl-strings.h:28 msgid "Expires:" msgstr "Срок действия:" -#: source/ubl-strings.h:27 +#: source/ubl-strings.h:29 msgid "Password:" msgstr "Пароль:" -#: source/ubl-strings.h:28 +#: source/ubl-strings.h:30 msgid "Password confirmation:" msgstr "Подтверждение пароля:" -#: source/ubl-strings.h:29 +#: source/ubl-strings.h:31 msgid "Timeless" msgstr "Бессрочный" -#: source/ubl-strings.h:30 +#: source/ubl-strings.h:32 msgid "Until" msgstr "До" -#: source/ubl-strings.h:32 +#: source/ubl-strings.h:34 msgid "Add" msgstr "Добавить" -#: source/ubl-strings.h:34 +#: source/ubl-strings.h:36 msgid "Update" msgstr "Обновить" -#: source/ubl-strings.h:35 +#: source/ubl-strings.h:37 msgid "Configure storages" msgstr "Редактировать хранилища" -#: source/ubl-strings.h:36 +#: source/ubl-strings.h:38 msgid "System update" msgstr "Обновление системы" -#: source/ubl-strings.h:38 +#: source/ubl-strings.h:40 msgid "Empty important field" msgstr "Пустое важное поле" -#: source/ubl-strings.h:41 +#: source/ubl-strings.h:43 msgid "Repository data has been loaded successfully" msgstr "Информация о пакетах успешно загружена" -#: source/ubl-strings.h:43 +#: source/ubl-strings.h:45 msgid "Saving has succeeded" msgstr "Успешно сохранено" -#: source/ubl-strings.h:45 +#: source/ubl-strings.h:47 msgid "General" msgstr "Общие" -#: source/ubl-strings.h:46 +#: source/ubl-strings.h:48 msgid "Publication" msgstr "Публикация" -#: source/ubl-strings.h:47 +#: source/ubl-strings.h:49 msgid "Trusted repository" msgstr "Доверенный репозиторий" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:50 msgid "Server type:" msgstr "Тип сервера:" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:51 msgid "IP adress:" msgstr "IP-адрес:" -#: source/ubl-strings.h:50 +#: source/ubl-strings.h:52 msgid "Port:" msgstr "Порт:" -#: source/ubl-strings.h:51 +#: source/ubl-strings.h:53 msgid "Publish" msgstr "Опубликовать" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:54 msgid "Code name:" msgstr "Кодовое имя:" -#: source/ubl-strings.h:53 +#: source/ubl-strings.h:55 msgid "Branch:" msgstr "Ветка:" -#: source/ubl-strings.h:54 +#: source/ubl-strings.h:56 msgid "Architecture:" msgstr "Архитектура:" -#: source/ubl-strings.h:55 +#: source/ubl-strings.h:57 msgid "Components:" msgstr "Компоненты" -#: source/ubl-strings.h:56 +#: source/ubl-strings.h:58 msgid "Signature:" msgstr "Подпись:" -#: source/ubl-strings.h:57 +#: source/ubl-strings.h:59 msgid "Sign" msgstr "Подписать" -#: source/ubl-strings.h:59 +#: source/ubl-strings.h:61 msgid "Move" msgstr "Переместить" -#: source/ubl-strings.h:60 +#: source/ubl-strings.h:62 msgid "Remove" msgstr "Удалить" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:64 msgid "Sign repo" msgstr "Подписать репозиторий" -#: source/ubl-strings.h:63 +#: source/ubl-strings.h:65 msgid "Remove repo" msgstr "Удалить репозиторий" -#: source/ubl-strings.h:64 +#: source/ubl-strings.h:66 msgid "Manage storages" msgstr "Управление хранилищами" -#: source/ubl-strings.h:65 +#: source/ubl-strings.h:67 msgid "Storage:" msgstr "Хранилище:" -#: source/ubl-strings.h:66 +#: source/ubl-strings.h:68 msgid "Open existing" msgstr "Открыть существующее хранилище" -#: source/ubl-strings.h:67 +#: source/ubl-strings.h:69 msgid "Create new" msgstr "Создать" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:70 +msgid "Create new storage" +msgstr "Создать новое хранилище" + +#: source/ubl-strings.h:71 msgid "Disable" msgstr "Отключить" -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:72 msgid "Delete" msgstr "Удалить" -#: source/ubl-strings.h:70 +#: source/ubl-strings.h:73 msgid "Add repository" msgstr "Добавить репозиторий" -#: source/ubl-strings.h:71 +#: source/ubl-strings.h:74 msgid "Repository (-ies)" msgstr "Репозиторий (-ии)" -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:75 msgid "Accept" msgstr "Принять" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:77 msgid "Repository:" msgstr "Репозиторий:" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:78 msgid "Source" msgstr "Источник" -#: source/ubl-strings.h:76 +#: source/ubl-strings.h:79 msgid "Target" msgstr "Назначение" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:80 msgid "Packages sign:" msgstr "Подпись пакетов:" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:81 msgid "Repository sign:" msgstr "Подпись репозитория:" -#: source/ubl-strings.h:79 +#: source/ubl-strings.h:82 msgid "Package (-s) to add" msgstr "Пакет(-ы) для добавления" -#: source/ubl-strings.h:80 +#: source/ubl-strings.h:83 msgid "Package (-s) to remove" msgstr "Пакет(-ы) для удаления" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:84 msgid "Package (-s) to move" msgstr "Пакет(-ы) для перемещения" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:85 msgid "Name" msgstr "Имя" -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:86 msgid "Path" msgstr "Путь" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:87 msgid "Remove package" msgstr "Удалить пакет" -#: source/ubl-strings.h:85 +#: source/ubl-strings.h:88 msgid "Add package" msgstr "Добавить пакет" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:90 msgid "Repository sign failed - repository has no packages" msgstr "Ошибка подписи репозитория - репозиторий не содержит пакетов" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:91 msgid "Data has been loaded" msgstr "Данные загружены" -#: source/ubl-strings.h:89 +#: source/ubl-strings.h:92 +msgid "Failed to add packages" +msgstr "Ошибка добавления пакетов" + +#: source/ubl-strings.h:93 msgid "Packages were added successfully" msgstr "Пакеты успешно добавлены" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:94 +msgid "Packages remove has failed" +msgstr "Ошибка удаления пакетов" + +#: source/ubl-strings.h:95 msgid "Packages were removed successfully" msgstr "Пакеты успешно удалены" -#: source/ubl-strings.h:91 +#: source/ubl-strings.h:96 +msgid "Packages move has failed" +msgstr "Ошибка перемещения пакетов" + +#: source/ubl-strings.h:97 msgid "Packages were moved successfully" msgstr "Пакеты успешно перемещены" -#: source/ubl-strings.h:92 +#: source/ubl-strings.h:98 msgid "Changes saved" msgstr "Изменения сохранены" -#: source/ubl-strings.h:93 +#: source/ubl-strings.h:99 msgid "Key was successfully created" msgstr "Ключ был успешно создан" -#: source/ubl-strings.h:94 +#: source/ubl-strings.h:100 msgid "Key creation failed" msgstr "Ошибка создания ключа" -#: source/ubl-strings.h:96 +#: source/ubl-strings.h:102 msgid "Choose" msgstr "Выбрать" -#: source/ubl-strings.h:97 +#: source/ubl-strings.h:103 msgid "Cancel" msgstr "Отмена" -#: source/ubl-strings.h:99 +#: source/ubl-strings.h:105 msgid "Open or create repository" msgstr "Открыть или создать репозиторий" -#: source/ubl-strings.h:100 +#: source/ubl-strings.h:106 msgid "Open existing repository" msgstr "Открыть и добавить репозиторий" -#: source/ubl-strings.h:101 +#: source/ubl-strings.h:107 msgid "Configure repository" msgstr "Редактировать репозиторий" -#: source/ubl-strings.h:102 +#: source/ubl-strings.h:108 msgid "Delete repository" msgstr "Удалить репозиторий" -#: source/ubl-strings.h:103 +#: source/ubl-strings.h:109 msgid "" "Add/Remove repository from\n" "local package sources" @@ -365,107 +389,107 @@ msgstr "" "Добавить/удалить репу из\n" " локальных источников пакетов" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:110 msgid "Enable/disable repository publish" msgstr "Включить/отключить публикацию" -#: source/ubl-strings.h:105 +#: source/ubl-strings.h:111 msgid "Check dependences" msgstr "Проверить на битые зависимости" -#: source/ubl-strings.h:106 +#: source/ubl-strings.h:112 msgid "Sign ripository" msgstr "Подпись пакетов" -#: source/ubl-strings.h:107 +#: source/ubl-strings.h:113 msgid "Open" msgstr "Открыть" -#: source/ubl-strings.h:109 +#: source/ubl-strings.h:115 msgid "Operation done" msgstr "Операция завершена" -#: source/ubl-strings.h:111 +#: source/ubl-strings.h:117 msgid "Choose branch or pack in branch to add file!" msgstr "Выберите ветку чтобы добавить пакет!" -#: source/ubl-strings.h:112 +#: source/ubl-strings.h:118 msgid "Choose repository or branch!" msgstr "Выберите репозиторий!" -#: source/ubl-strings.h:113 +#: source/ubl-strings.h:119 msgid "Choose pack to delete!" msgstr "Выберите пакет для удаления!" -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:120 msgid "Choose repository to delete!" msgstr "Выберите репозиторий для удаления!" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:121 msgid "Choose repository or package to sign" msgstr "Выберите репозиторий или пакет для подписи" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:123 msgid "Name:" msgstr "Имя:" -#: source/ubl-strings.h:118 +#: source/ubl-strings.h:124 msgid "Branches:" msgstr "Ветки:" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:125 msgid "< Type branch name >" msgstr "< Введите название ветки >" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:126 msgid "Name must be filled!" msgstr "Введите название!" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:127 msgid "Choose path for new repository" msgstr "Выбрать расположение нового репозитория" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:129 msgid "Choose repository folder" msgstr "Выбрать директорию для репозитория" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:130 msgid "Choose repository" msgstr "Выбрать репозиторий" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:132 msgid "Absent" msgstr "Отсутствует" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:133 msgid "Dependences:" msgstr "Зависит от:" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:134 msgid "Digital signature" msgstr "Цифровая подпись" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:136 msgid "package" msgstr "пакет" -#: source/ubl-strings.h:131 +#: source/ubl-strings.h:137 msgid "repository" msgstr "репозиторий" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:138 msgid "Repeating packages were not added" msgstr "Дублирующиеся пакеты не были добавлены" -#: source/ubl-strings.h:133 +#: source/ubl-strings.h:139 msgid "This repository has already been added" msgstr "Этот репозиторий уже был добавлен" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:141 msgid "Close" msgstr "Закрыть" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:143 msgid "Are you sure want to disable?" msgstr "" "Внимание! Вы хотите отключить хранилище от управления менеджером " @@ -475,68 +499,80 @@ msgstr "" "Примечание: в дальнейшем Вы можете заново подключить хранилище и управлять " "им." -#: source/ubl-strings.h:139 +#: source/ubl-strings.h:145 msgid "Are you sure want to remove?" msgstr "" "Внимание! Вы ходите удалить хранилище При этом хранилище и вложенные " "репозитории будут безвозвратно удалены!" -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:147 msgid "Do not sign" msgstr "Не подписывать" -#: source/ubl-strings.h:143 +#: source/ubl-strings.h:149 msgid "Package name error - package has incorrect name pattern" msgstr "Ошибка имени пакета - некорректное имя пакета" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:151 msgid "Passwords do not match" msgstr "Пароли не совпадают" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:153 msgid "Package search" msgstr "Поиск пакетов" -#: source/ubl-strings.h:149 +#: source/ubl-strings.h:155 msgid "Storage path" msgstr "Расположение хранилища" -#: source/ubl-strings.h:151 +#: source/ubl-strings.h:157 msgid "Repository" msgstr "Репозиторий" -#: source/ubl-strings.h:153 +#: source/ubl-strings.h:159 msgid "Architecture" msgstr "Архитектура" -#: source/ubl-strings.h:155 +#: source/ubl-strings.h:161 msgid "Repository name" msgstr "Имя репозитория" -#: source/ubl-strings.h:157 +#: source/ubl-strings.h:163 msgid "Signature" msgstr "Подпись" -#: source/ubl-strings.h:159 +#: source/ubl-strings.h:165 msgid "Signature status" msgstr "Статус подписи" -#: source/ubl-strings.h:161 +#: source/ubl-strings.h:167 msgid "Sign packages" msgstr "Подписать пакеты" -#: source/ubl-strings.h:163 +#: source/ubl-strings.h:169 msgid "Packages successfully signed" msgstr "Пакеты успешно подписаны" -#: source/ubl-strings.h:165 +#: source/ubl-strings.h:171 msgid "Folder must contain repositories" msgstr "Директория должна содержать репозитории" -#: source/ubl-strings.h:167 +#: source/ubl-strings.h:173 msgid "Folder must not be empty" msgstr "Директория должна быть пустой" -#: source/ubl-strings.h:167 +#: source/ubl-strings.h:175 msgid "Name must be 5 or more symbols" msgstr "Имя должно содержать больше 5 символов" + +#: source/ubl-strings.h:177 +msgid "Same repository was chosen for source and target" +msgstr "Для источника и назначения был выбран один и тот же репозиторий" + +#: source/ubl-strings.h:179 +msgid "Signed" +msgstr "Подписан" + +#: source/ubl-strings.h:180 +msgid "Unsigned" +msgstr "Не подписан" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 8326c24..c690837 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -37,7 +37,6 @@ set(DEPENDFILES ../ubl-settings-repomanager-sign.glade ../ubl-settings-repomanager-repo-block.glade ../gresource.xml - ../ubl-settings-repomanager-banner.png ../ubl-settings-repomanager.css ) @@ -77,6 +76,7 @@ set(SOURCE_FILES ubl-settings-repomanager-remove.c ubl-settings-repomanager-storage-list.c ubl-settings-repomanager-storage-window.c + ubl-settings-repomanager-key.c ubl-settings-repomanager.h ubl-strings.h ) diff --git a/source/ubl-settings-repomanager-add-window.c b/source/ubl-settings-repomanager-add-window.c index 1a49323..18e1870 100644 --- a/source/ubl-settings-repomanager-add-window.c +++ b/source/ubl-settings-repomanager-add-window.c @@ -1,280 +1,202 @@ -// #include "ubl-settings-repomanager.h" - - -// gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data){ -// GtkTreeIter parent; -// if (gtk_tree_model_iter_parent(model, &parent, iter)) -// return 0; -// return 1; -// } - -// config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level){ -// (*size)=0; -// config_str final = NULL; -// GtkTreePath *path=NULL, *parent_path=NULL; -// GtkTreeIter iter; -// if (parent){ -// parent_path = gtk_tree_model_get_path(GTK_TREE_MODEL(target),parent); -// } -// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,parent); -// for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ -// path = gtk_tree_model_get_path(GTK_TREE_MODEL(target),&iter); -// if (path && gtk_tree_path_get_depth(path)==level&&(!parent_path||gtk_tree_path_is_descendant(path,parent_path))){ -// char *append=NULL; -// gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,column,&append,-1); -// yon_char_parsed_add_or_create_if_exists(final,size,append); -// } -// gtk_tree_path_free(path); -// } -// return final; -// } - -// void on_add_target_repo_selection_changed(GtkWidget *target,repo_add_window *window){ -// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); -// char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); -// if (!yon_char_is_empty(path_str)){ -// GtkTreeIter iter, itar; -// GtkTreePath *path = gtk_tree_path_new_from_string(path_str); -// if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ - -// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); -// for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ -// char *current; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,-1); -// if (!yon_char_is_empty(current)){ -// char *path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->RepositoryCombo),path_str,current); -// } -// } -// } - -// } -// } - -// void on_add_target_arch_selection_changed(GtkWidget *target,repo_add_window *window){ -// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); -// char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); -// if (!yon_char_is_empty(path_str)){ -// GtkTreeIter iter, itar; -// GtkTreePath *path = gtk_tree_path_new_from_string(path_str); -// if (gtk_tree_model_get_iter(GTK_TREE_MODEL(window->tree_copy),&iter,path)){ - -// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); -// for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ -// char *current, *current_path; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,¤t,3,¤t_path,-1); -// if (!yon_char_is_empty(current)){ -// char *path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo),path_str,current); - -// } -// } -// } -// gtk_widget_set_sensitive(window->RepoSignCombo,1); - -// } else { -// gtk_widget_set_sensitive(window->RepoSignCombo,0); - -// } -// } - -// void on_arch_chosen(GtkWidget *target,repo_add_window *window){ -// char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); -// if (!yon_char_is_empty(path_str)){ -// gtk_widget_set_sensitive(window->PackageSignCombo,1); -// } else { -// gtk_widget_set_sensitive(window->PackageSignCombo,0); -// } -// } - -// void on_add_target_package_selection_changed(GtkWidget *target,repo_add_window *window){ -// gtk_list_store_clear(GTK_LIST_STORE(window->PackagesList)); -// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))==-1){ -// gtk_widget_set_sensitive(window->AddPackageButton,0); -// } else { -// gtk_widget_set_sensitive(window->AddPackageButton,1); -// } -// } - -// void on_move_storage_changed(GtkWidget *self, repo_add_window *window){ -// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry)); -// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveSourceRepoEntry)); -// GtkTreeIter iter,itar; -// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveTargetStorageEntry),id); -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); -// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); -// for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ -// char *target; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,&target,-1); -// char *child_id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry),child_id,target); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveSourceRepoEntry),child_id,target); -// } -// } - -// void on_add_accept(GtkWidget *self, dictionary *dict){ -// repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); -// file_chooser_window *dialog = yon_dictionary_get_data(dict->first->next,file_chooser_window*); -// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); -// char *path,*arch_name; -// GtkTreeIter iter,itar,itor; -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&arch_name,3,&path,-1); -// char *packages; -// yon_window_config_get_parameter("package_info",path,&packages,YON_TYPE_STRING); -// int size; -// config_str parsed = yon_char_parse(packages,&size,","); -// GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog->FileChooserWidget)); -// for (int i=0;iStatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// yon_char_remove_last_symbol(name[0],'\n'); -// if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ -// if (name_size<=0){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// gtk_list_store_append(window->PackagesList,&itar); -// gtk_list_store_set(window->PackagesList,&itar,1,name[0],2,current,3,1,-1); -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// } -// yon_char_parsed_free(name,name_size); -// } -// } -// gtk_widget_destroy(dialog->Window); -// if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ -// gtk_widget_set_sensitive(window->StorageCombo,0); -// gtk_widget_set_sensitive(window->RepositoryCombo,0); -// gtk_widget_set_sensitive(window->ArchitectureCombo,0); -// } -// } - -// void on_add_package(GtkWidget *self, repo_add_window *window){ -// file_chooser_window *dialog = yon_file_chooser_new(); -// yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"filechooserWindow"); -// gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); -// gtk_widget_show(dialog->Window); -// GtkFileFilter *filter = gtk_file_filter_new(); -// gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); -// gtk_file_filter_set_name(filter,"*.pkg.tar*"); -// dictionary *dict = NULL; -// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); -// yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); -// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); -// g_signal_connect(G_OBJECT(dialog->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_add_accept),dict); -// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); -// } - -// void on_remove_package(GtkWidget *self, repo_add_window *window){ -// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); -// char *storage = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); -// char *repo; -// char *path; -// GtkTreeModel *model; -// GtkTreeIter iter,itar,itor; -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&itor,storage); -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itor,3,&storage,-1); - -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&itar)){ -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,2,&repo,3,&path,-1); -// gtk_list_store_remove(window->PackagesList,&itar); -// } -// if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ -// gtk_widget_set_sensitive(window->StorageCombo,1); -// gtk_widget_set_sensitive(window->RepositoryCombo,1); -// gtk_widget_set_sensitive(window->ArchitectureCombo,1); -// } -// } - -// void on_add_window_tree_changed(GtkWidget *self, repo_add_window *window){ -// gtk_label_set_text(GTK_LABEL(window->InfoLabel),""); -// GtkTreeModel *model; -// GtkTreeIter iter; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ -// gtk_widget_set_sensitive(window->RemoveButton,1); -// char *target; -// gtk_tree_model_get(model,&iter,2,&target,-1); -// int size; -// config_str info = yon_config_load(get_package_info_command(target),&size); -// char *result = yon_char_parsed_to_string(info,size,""); -// gtk_label_set_text(GTK_LABEL(window->InfoLabel),result); -// yon_char_parsed_free(info,size); -// free(result); -// } else { -// gtk_widget_set_sensitive(window->RemoveButton,0); -// } -// } - - -// void on_add_packages_accept(GtkWidget *self, dictionary *dict){ -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); - -// GtkTreeIter iter, itar; -// char *storage; -// if (yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->StorageCombo),GTK_TREE_MODEL(window->tree_copy),&itar)){ -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&storage,-1); -// const char *repo = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); -// const char *arch = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); -// GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); -// int size=0; -// config_str packages=NULL; -// int valid = gtk_tree_model_get_iter_first(model,&iter); -// for (;valid;valid=gtk_tree_model_iter_next(model,&iter)){ -// char *target; -// gtk_tree_model_get(model,&iter,2,&target,-1); -// yon_char_parsed_add_or_create_if_exists(packages,&size,target); -// free(target); -// } -// if (size>0){ -// char *command = NULL; -// int repo_sign = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RepoSignCombo)); -// int pack_sign = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PackageSignCombo)); -// if (repo_sign&&pack_sign){ -// command = add_packages_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)),gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)),yon_char_parsed_to_string(packages,size," ")); -// } else if (repo_sign){ -// command = add_packages_repo_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)),yon_char_parsed_to_string(packages,size," ")); -// } else if (pack_sign){ -// command = add_packages_package_sign_command(storage,arch,repo,gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)),yon_char_parsed_to_string(packages,size," ")); -// } else { -// command = add_packages_command(storage,arch,repo,yon_char_parsed_to_string(packages,size," ")); -// } -// yon_debug_output("%s\n",command); -// if (!system(command)){ -// yon_window_config_add_instant_parameter(yon_char_unite(storage,"/",repo,"/",arch,NULL),"package_info",yon_char_parsed_to_string(packages,size,","),YON_TYPE_STRING); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); -// gtk_tree_store_clear(widgets->RepoList); -// yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); - -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); -// if (!yon_char_is_empty(id)){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); -// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); -// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); -// on_main_tree_selection_changed(NULL,widgets); -// } -// gtk_widget_destroy(window->MainWindow); -// yon_ubl_status_box_render(PACKAGES_ADD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// yon_config_load_update(widgets); -// } -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// } -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// } -// } +#include "ubl-settings-repomanager.h" + +void on_add_target_repo_selection_changed(GtkWidget *target,repo_add_window *window){ + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); + char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + if (!yon_char_is_empty(path_str)){ + storage_struct *storage = g_hash_table_lookup(main_config.storages,path_str); + int size; + config_str repos = (config_str)g_hash_table_get_keys_as_array(storage->repos,&size); + for (int i=0;iRepositoryCombo),repos[i],repos[i]); + } + } +} + +void on_add_target_arch_selection_changed(GtkWidget *target,repo_add_window *window){ + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); + char *storage_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + char *repo_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); + if (!yon_char_is_empty(repo_str)&&!yon_char_is_empty(storage_str)){ + storage_struct *storage = g_hash_table_lookup(main_config.storages,storage_str); + repo_struct *repo = g_hash_table_lookup(storage->repos,repo_str); + int size; + config_str archs = (config_str)g_hash_table_get_keys_as_array(repo->archs,&size); + for (int i=0;iArchitectureCombo),archs[i],archs[i]); + } + gtk_widget_set_sensitive(window->RepoSignCombo,1); + } else { + gtk_widget_set_sensitive(window->RepoSignCombo,0); + + } +} + +void on_arch_chosen(GtkWidget *target,repo_add_window *window){ + char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); + if (!yon_char_is_empty(path_str)){ + gtk_widget_set_sensitive(window->PackageSignCombo,1); + } else { + gtk_widget_set_sensitive(window->PackageSignCombo,0); + } +} + +void on_add_target_package_selection_changed(GtkWidget *target,repo_add_window *window){ + gtk_list_store_clear(GTK_LIST_STORE(window->PackagesList)); + if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))==-1){ + gtk_widget_set_sensitive(window->AddPackageButton,0); + } else { + gtk_widget_set_sensitive(window->AddPackageButton,1); + } +} + +void on_add_accept(GtkWidget *self, dictionary *dict){ + repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); + filechooser_window *dialog = yon_dictionary_get_data(dict->first->next,filechooser_window*); + int size; + config_str packages = yon_char_parse(dialog->last_success_selection,&size,","); + for (int i=0;iPackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,name&&!yon_char_is_empty(name[0])?name[0]:"",2,full_path,-1); + free(full_path); + } + } + + } else { + GtkTreeIter iter; + int temp_size; + config_str name = yon_config_load(yon_get_package_name_from_filename(packages[i]),&temp_size); + if (temp_size<=0){ + yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + yon_char_remove_last_symbol(name[0],'\n'); + if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ + gtk_list_store_append(window->PackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,packages[i],-1); + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + } + + } + } +} + +void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict){ + on_add_accept(self,dict); +} + + +void on_add_package(GtkWidget *self, repo_add_window *window){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"filechooserWindow"); + gtk_label_set_text(GTK_LABEL(dialog->HeaderTopic),CHOSE_PACKAGES_TITLE_LABEL); + + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); + gtk_file_filter_set_name(filter,"*.pkg.tar*"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); + + gtk_widget_show(dialog->ChooseFolderCheck); + gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog->MainFileChooser),1); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); + on_add_accept(self,dict); + } + gtk_widget_destroy(dialog->Window); + free(dialog); +} + +void on_remove_package(GtkWidget *self, repo_add_window *window){ + GtkTreeIter iter; + GtkTreeModel *model; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ + gtk_list_store_remove(window->PackagesList,&iter); + } +} + +void on_add_window_tree_changed(GtkWidget *self, repo_add_window *window){ + gtk_label_set_text(GTK_LABEL(window->InfoLabel),""); + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ + gtk_widget_set_sensitive(window->RemoveButton,1); + char *target; + gtk_tree_model_get(model,&iter,2,&target,-1); + int size; + config_str info = yon_config_load(get_package_info_command(target),&size); + yon_package_info_set_markup(info,size); + char *result = yon_char_parsed_to_string(info,size,""); + gtk_label_set_markup(GTK_LABEL(window->InfoLabel),result); + yon_char_parsed_free(info,size); + if (!yon_char_is_empty(result)) free(result); + } else { + gtk_widget_set_sensitive(window->RemoveButton,0); + } +} + + +void on_add_packages_accept(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); + + const char *storage = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + const char *repo = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); + const char *arch = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); + + const char *repo_sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); + const char *package_sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PackageSignCombo)); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); + int size; + config_str parsed = NULL; + for_iter(model,&iter){ + char *path; + gtk_tree_model_get(model,&iter,2,&path,-1); + yon_char_parsed_add_or_create_if_exists(parsed, &size,path); + } + + char *packages = yon_char_parsed_to_string(parsed,size," "); + char *command = NULL; + if (repo_sign&&package_sign){ + command = add_packages_sign_command(storage,arch,repo,repo_sign,package_sign,packages); + } else if (!yon_char_is_empty(repo_sign)){ + command = add_packages_repo_sign_command(storage,arch,repo,repo_sign,packages); + } else if (!yon_char_is_empty(package_sign)){ + command = add_packages_package_sign_command(storage,arch,repo,package_sign,packages); + } else { + command = add_packages_command(storage,arch,repo,packages); + } + + if (system(yon_debug_output("%s\n",command))){ + yon_ubl_status_box_render(PACKAGES_ADD_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(PACKAGES_ADD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + gtk_widget_destroy(window->MainWindow); + yon_interface_update(widgets); + free(window); + + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->PackagesList),&iter)){ + gtk_widget_set_sensitive(window->StorageCombo,0); + gtk_widget_set_sensitive(window->RepositoryCombo,0); + gtk_widget_set_sensitive(window->ArchitectureCombo,0); + } + +} // void on_repo_sign_load(GtkWidget *self, repo_add_window *window){ // GtkTreeIter iter; @@ -285,156 +207,125 @@ // gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepoSignCombo),sign); // } -// void on_add_clicked(GtkWidget *self, main_window *widgets){ -// repo_add_window *window = yon_repo_add_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),ADD_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); -// gtk_label_set_text(GTK_LABEL(window->HeadLabel),ADD_PACKAGES_TITLE_LABEL); -// GtkTreeIter iter; -// for_iter (window->tree_copy,&iter){ -// char *current; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); -// if (!yon_char_is_empty(current)){ -// char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StorageCombo),path,current); -// } -// } - -// yon_sign_list_update(); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); - -// gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); -// gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); - -// 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); - -// g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); -// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); -// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); -// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_selection_changed),window); -// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_add_packages_accept),dict); -// g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_add_package),window); -// g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_remove_package),window); -// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); -// yon_add_window_set_selected(widgets,window); -// GtkTreeModel *model; -// GList *list = NULL; -// char *full_path; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&full_path,-1); -// if (list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoPackagesTree)),&model)){ -// for (int i=0; iPackagesList,&itar); -// char *temp = yon_char_unite(full_path,"/",path,NULL); -// free(full_path); -// full_path = temp; -// gtk_list_store_set(window->PackagesList,&itar,1,path,2,full_path,-1); -// } -// } -// } -// gtk_widget_show(window->MainWindow); -// } +void yon_add_window_set_selected(main_window *widgets, repo_add_window *window){ + GtkTreeIter iter, itar, itor; + + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ + int depth = gtk_tree_store_iter_depth(widgets->RepoList,&iter); + char *storage=NULL, *repo=NULL, *arch=NULL; + storage_struct *storage_str; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,7,&storage_str,-1); + if (depth==2){ + storage = ((arch_struct*)storage_str)->storage_path; + repo = ((arch_struct*)storage_str)->repo_name; + arch = ((arch_struct*)storage_str)->name; + } + if (!yon_char_is_empty(storage)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->StorageCombo),storage); + while(gtk_events_pending()) gtk_main_iteration(); + if (!yon_char_is_empty(repo)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepositoryCombo),repo); + while(gtk_events_pending()) gtk_main_iteration(); + if (!yon_char_is_empty(arch)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ArchitectureCombo),arch); + } +} + +repo_add_window *yon_repo_add_window_new(){ + repo_add_window *window = malloc(sizeof(repo_add_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_add); + window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->StorageCombo = yon_gtk_builder_get_widget(builder,"StorageCombo"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->RepositoryCombo = yon_gtk_builder_get_widget(builder,"RepositoryCombo"); + window->ArchitectureCombo = yon_gtk_builder_get_widget(builder,"ArchitectureCombo"); + window->MoveSourceFrame = yon_gtk_builder_get_widget(builder,"MoveSourceFrame"); + window->MoveSourceStorageEntry = yon_gtk_builder_get_widget(builder,"MoveSourceStorageEntry"); + window->MoveSourceRepoEntry = yon_gtk_builder_get_widget(builder,"MoveSourceRepoEntry"); + window->MoveSourceArchEntry = yon_gtk_builder_get_widget(builder,"MoveSourceArchEntry"); + window->MoveTargetFrame = yon_gtk_builder_get_widget(builder,"MoveTargetFrame"); + window->MoveTargetStorageEntry = yon_gtk_builder_get_widget(builder,"MoveTargetStorageEntry"); + window->MoveTargetRepoEntry = yon_gtk_builder_get_widget(builder,"MoveTargetRepoEntry"); + window->MoveTargetArchEntry = yon_gtk_builder_get_widget(builder,"MoveTargetArchEntry"); + window->PackageSignCombo = yon_gtk_builder_get_widget(builder,"PackageSignCombo"); + window->RepoSignCombo = yon_gtk_builder_get_widget(builder,"RepoSignCombo"); + window->AddPackageButton = yon_gtk_builder_get_widget(builder,"AddPackageButton"); + window->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); + window->PackagesTree = yon_gtk_builder_get_widget(builder,"PackagesTree"); + window->InfoLabel = yon_gtk_builder_get_widget(builder,"InfoLabel"); + window->PackagesToAddLabel = yon_gtk_builder_get_widget(builder,"PackagesToAddLabel"); + window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->PackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PackagesList")); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->PackagesTree),"cursor-changed",G_CALLBACK(on_add_window_tree_changed),window); -// void on_rmb_move(GtkWidget *self, main_window *widgets){ -// repo_add_window *window = on_move_clicked(NULL,widgets); -// GtkTreeModel *model; -// GtkTreeIter iter; -// char *path; -// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter); -// gtk_tree_model_get(model,&iter,3,&path,-1); -// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model); -// for (int i=0;iPackagesList,&itar); -// gtk_list_store_set(window->PackagesList,&itar,1,name,2,full_path,-1); -// free(full_path); -// free(filename); -// free(name); -// } -// } - -// repo_add_window *yon_repo_add_window_new(){ -// repo_add_window *window = malloc(sizeof(repo_add_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_repo_add); -// window->MainWindow = yon_gtk_builder_get_widget(builder,"MainWindow"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->StorageCombo = yon_gtk_builder_get_widget(builder,"StorageCombo"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); -// window->RepositoryCombo = yon_gtk_builder_get_widget(builder,"RepositoryCombo"); -// window->ArchitectureCombo = yon_gtk_builder_get_widget(builder,"ArchitectureCombo"); -// window->MoveSourceFrame = yon_gtk_builder_get_widget(builder,"MoveSourceFrame"); -// window->MoveSourceStorageEntry = yon_gtk_builder_get_widget(builder,"MoveSourceStorageEntry"); -// window->MoveSourceRepoEntry = yon_gtk_builder_get_widget(builder,"MoveSourceRepoEntry"); -// window->MoveSourceArchEntry = yon_gtk_builder_get_widget(builder,"MoveSourceArchEntry"); -// window->MoveTargetFrame = yon_gtk_builder_get_widget(builder,"MoveTargetFrame"); -// window->MoveTargetStorageEntry = yon_gtk_builder_get_widget(builder,"MoveTargetStorageEntry"); -// window->MoveTargetRepoEntry = yon_gtk_builder_get_widget(builder,"MoveTargetRepoEntry"); -// window->MoveTargetArchEntry = yon_gtk_builder_get_widget(builder,"MoveTargetArchEntry"); -// window->PackageSignCombo = yon_gtk_builder_get_widget(builder,"PackageSignCombo"); -// window->RepoSignCombo = yon_gtk_builder_get_widget(builder,"RepoSignCombo"); -// window->AddPackageButton = yon_gtk_builder_get_widget(builder,"AddPackageButton"); -// window->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); -// window->PackagesTree = yon_gtk_builder_get_widget(builder,"PackagesTree"); -// window->InfoLabel = yon_gtk_builder_get_widget(builder,"InfoLabel"); -// window->PackagesToAddLabel = yon_gtk_builder_get_widget(builder,"PackagesToAddLabel"); -// window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->PackagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PackagesList")); -// window->tree_copy = gtk_tree_store_new(7,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT); -// yon_gtk_tree_store_copy_full(main_config.tree_store,window->tree_copy); - -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(window->PackagesTree),"cursor-changed",G_CALLBACK(on_add_window_tree_changed),window); -// window->added_packages_archs = NULL; -// window->removed_packages_archs = NULL; - -// return window; -// } - -// void yon_add_window_set_selected(main_window *widgets, repo_add_window *window){ -// GtkTreeIter iter; - -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ - -// char *target = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->RepoList),&iter); -// int mod = yon_char_count(target,":")+1; -// char *arc=NULL; -// char *repo=NULL; -// char *stor=NULL; -// if (mod ==3){ -// arc = yon_char_new(target); -// char *temp = yon_char_new(target); -// repo = yon_char_divide(temp,yon_char_find_last(temp,':')); -// free(temp); -// temp = yon_char_new(repo); -// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); -// free(temp); -// } else if (mod>=2){ -// repo = yon_char_new(target); -// char *temp = yon_char_new(target); -// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); -// free(temp); -// } else if (mod>=1){ -// stor = yon_char_new(target); -// } - -// if (stor) -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->StorageCombo),stor); -// if (repo) -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->RepositoryCombo),repo); -// if (arc) -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ArchitectureCombo),arc); -// } -// } \ No newline at end of file + window->added_packages_archs = NULL; + window->removed_packages_archs = NULL; + + return window; +} + +void yon_add_window_add_chosen_packages(main_window *widgets, repo_add_window *window){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->RepoFileList); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL,&iter)){ + char *target, *path; + gtk_tree_model_get(model,&iter,1,&target,2,&path,-1); + gtk_list_store_append(window->PackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,target,2,path,-1); + } + GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoPackagesTree)),NULL); + GList *liter; + if (list){ + for (liter=list;liter;liter=liter->next){ + gtk_tree_model_get_iter(model,&iter,(GtkTreePath*)liter->data); + char *target, *path; + gtk_tree_model_get(model,&iter,2,&target,-1); + gtk_list_store_append(window->PackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,target,-1); + } + } +} + +void on_add_clicked(GtkWidget *self, main_window *widgets){ + repo_add_window *window = yon_repo_add_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),ADD_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),ADD_PACKAGES_TITLE_LABEL); + GtkTreeIter iter; + int size; + config_str storages = (config_str)g_hash_table_get_keys_as_array(main_config.storages,&size); + for (int i=0;iStorageCombo),storages[i],storages[i]); + } + + yon_sign_list_update(); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); + + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); + + 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); + + g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); + g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); + g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); + g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_selection_changed),window); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_add_packages_accept),dict); + g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_add_package),window); + g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_remove_package),window); + + yon_rmb_menu_setup(window->PackagesTree,(int(*)(void*))gtk_widget_is_sensitive,window->AddPackageButton, + ADD_PACKAGE_LABEL,add_icon_name,G_CALLBACK(on_add_package),window, + REMOVE_PACKAGE_LABEL,remove_icon,G_CALLBACK(on_remove_package),window, + NULL); + + // g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); + yon_add_window_set_selected(widgets,window); + // yon_add_window_add_chosen_packages(widgets,window); + gtk_widget_show(window->MainWindow); +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager-data-structs.c b/source/ubl-settings-repomanager-data-structs.c index 27619e5..5bd68d0 100644 --- a/source/ubl-settings-repomanager-data-structs.c +++ b/source/ubl-settings-repomanager-data-structs.c @@ -68,7 +68,7 @@ repo_struct *yon_repo_struct_new(){ storage->path=NULL; storage->storage_path=NULL; storage->archs = g_hash_table_new(g_str_hash,g_str_equal); - storage->sign_status=0; + storage->sign_status=NULL; return storage; } @@ -107,6 +107,18 @@ arch_struct *yon_arch_struct_new(){ return storage; } +config_str yon_arch_struct_get_packages(arch_struct *arch, int *size){ + char *command = yon_get_packages_command(arch->storage_path,arch->repo_name,arch->name); + (*size)=0; + config_str packages = yon_config_load(command,size); + if (size&&packages){ + for (int i=0;i<(*size);i++){ + yon_char_remove_last_symbol(packages[i],'\n'); + } + } + return packages; +} + void yon_package_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash){ GList *list = g_hash_table_get_keys(source_hash); GList *iter; @@ -120,7 +132,7 @@ void yon_package_hash_table_clone(GHashTable *source_hash, GHashTable *target_ha arch_struct *yon_arch_copy_full(arch_struct *repo){ arch_struct *copy = yon_arch_struct_new(); copy->name=yon_char_new(repo->name); - copy->path=yon_char_new(repo->name); + copy->path=yon_char_new(repo->path); copy->storage_path=yon_char_new(repo->storage_path); copy->repo_name=yon_char_new(repo->repo_name); yon_package_hash_table_clone(repo->packages,copy->packages); @@ -140,7 +152,7 @@ void yon_arch_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash) repo_struct *yon_repo_copy_full(repo_struct *repo){ repo_struct *copy = yon_repo_struct_new(); copy->name=yon_char_new(repo->name); - copy->path=yon_char_new(repo->name); + copy->path=yon_char_new(repo->path); copy->storage_path=yon_char_new(repo->storage_path); copy->sign_status=repo->sign_status; yon_arch_hash_table_clone(repo->archs,copy->archs); @@ -160,7 +172,7 @@ void yon_repo_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash) storage_struct *yon_storage_copy_full(storage_struct *storage){ storage_struct *copy = yon_storage_struct_new(); copy->name=yon_char_new(storage->name); - copy->path=yon_char_new(storage->name); + copy->path=yon_char_new(storage->path); copy->sign_status=storage->sign_status; yon_repo_hash_table_clone(storage->repos,copy->repos); return copy; @@ -174,4 +186,108 @@ void yon_storage_hash_table_clone(GHashTable *source_hash, GHashTable *target_ha storage_struct *storage_copy = yon_storage_copy_full(storage); g_hash_table_insert(target_hash,storage_copy->path,storage_copy); } +} + +void yon_storage_struct_add_repo(storage_struct *storage,repo_struct *repo){ + char *str = config(STORAGE(storage->path)); + if (!yon_char_is_empty(str)){ + int size; + config_str parsed = yon_char_parse(str,&size,";"); + + if (size>1&&!yon_char_is_empty(parsed[1])){ + int added_size; + config_str added = yon_char_parse(parsed[1],&added_size,","); + if (yon_char_parsed_check_exist(added,added_size,repo->name)==-1){ + yon_char_parsed_add_or_create_if_exists(added,&added_size,repo->name); + } else { + yon_char_parsed_free(added,added_size); + return; + } + if (!yon_char_is_empty(parsed[1])) free(parsed[1]); + parsed[1] = yon_char_parsed_to_string(parsed,size,","); + } else if (size>0){ + yon_char_parsed_add_or_create_if_exists(parsed,&size,repo->name); + } else { + yon_char_parsed_add_or_create_if_exists(parsed,&size,""); + yon_char_parsed_add_or_create_if_exists(parsed,&size,repo->name); + yon_char_parsed_add_or_create_if_exists(parsed,&size,""); + + } + char *final = yon_char_parsed_to_string_full(parsed,size,";"); + yon_config_register(STORAGE(storage->path),STORAGE_command,final); + free(final); + if (parsed&&size) yon_char_parsed_free(parsed,size); + } else { + char *final = yon_char_unite(";",repo->name,";",NULL); + yon_config_register(STORAGE(storage->path),STORAGE_command,final); + free(final); + } + +} + +void yon_storage_struct_remove(storage_struct *storage,repo_struct *repo){ + + char *str = config(STORAGE(storage->path)); + if (!yon_char_is_empty(str)){ + int size; + config_str parsed = yon_char_parse(str,&size,";"); + + if (size>0&&!yon_char_is_empty(parsed[0])){ + int removed_size; + config_str removed = yon_char_parse(parsed[0],&removed_size,","); + if (yon_char_parsed_check_exist(removed,removed_size,repo->name)==-1){ + yon_char_parsed_add_or_create_if_exists(removed,&removed_size,repo->name); + } else { + yon_char_parsed_free(removed,removed_size); + return; + } + if (!yon_char_is_empty(parsed[1])) free(parsed[1]); + parsed[1] = yon_char_parsed_to_string_full(parsed,size,","); + } else { + yon_char_parsed_add_or_create_if_exists(parsed,&size,repo->name); + yon_char_parsed_add_or_create_if_exists(parsed,&size,""); + yon_char_parsed_add_or_create_if_exists(parsed,&size,""); + } + char *final = yon_char_parsed_to_string_full(parsed,size,";"); + yon_config_register(STORAGE(storage->path),STORAGE_command,final); + free(final); + if (parsed&&size) yon_char_parsed_free(parsed,size); + } else { + char *final = yon_char_unite(repo->name,";;",NULL); + yon_config_register(STORAGE(storage->path),STORAGE_command,final); + free(final); + } +} + +void yon_repo_struct_sign(storage_struct *storage, repo_struct *repo,const char *sign){ + char *str = config(STORAGE(storage->path)); + int size; + config_str parsed = yon_char_parse(str,&size,";"); + if (size>2&&!yon_char_is_empty(parsed[2])){ + int signs_size; + config_str signs = yon_char_parse(parsed[2],&signs_size,","); + char *final = yon_char_unite(repo->name,":",sign,NULL); + yon_char_parsed_add_or_create_if_exists(signs,&signs_size,final); + free(final); + yon_char_parsed_free(signs,signs_size); + } else if (size>1){ + char *final = yon_char_unite(repo->name,":",sign,NULL); + yon_char_parsed_add_or_create_if_exists(parsed,&size,final); + free(final); + } else if (size>0){ + char *final = yon_char_unite(repo->name,":",sign,NULL); + yon_char_parsed_add_or_create_if_exists(parsed,&size,""); + yon_char_parsed_add_or_create_if_exists(parsed,&size,final); + free(final); + } else if (!size){ + char *final = yon_char_unite(repo->name,":",sign,NULL); + yon_char_parsed_add_or_create_if_exists(parsed,&size,""); + yon_char_parsed_add_or_create_if_exists(parsed,&size,""); + yon_char_parsed_add_or_create_if_exists(parsed,&size,final); + free(final); + } + char *final = yon_char_parsed_to_string_full(parsed,size,";"); + yon_config_register(STORAGE(storage->path),STORAGE_command,final); + free(final); + if (parsed&&size) yon_char_parsed_free(parsed,size); } \ No newline at end of file diff --git a/source/ubl-settings-repomanager-key.c b/source/ubl-settings-repomanager-key.c new file mode 100644 index 0000000..01dfd76 --- /dev/null +++ b/source/ubl-settings-repomanager-key.c @@ -0,0 +1,182 @@ +#include "ubl-settings-repomanager.h" + + +void on_calendar_open(GtkWidget *self,key_creation_window *window){ + yon_calendar_popover_open(GTK_ENTRY(window->ExpireEntry),self); +} + +void on_key_generate_accept(GtkWidget *self, key_creation_window* window){ + const char *name = gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); + const char *type = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->EncryptionCombo)); + const char *email = gtk_entry_get_text(GTK_ENTRY(window->EmailEntry)); + char *strength = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->KeyStrengthSpin))); + const char *comment = gtk_entry_get_text(GTK_ENTRY(window->CommentsEntry)); + if (!yon_char_is_empty(name)&&strlen(name)<5){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_SHORT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->NameEntry); + return; + } + if (!yon_char_is_empty(email)&&strlen(email)<5){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_SHORT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->EmailEntry); + return; + } + GtkWidget *highlight_target=NULL; + if (yon_char_is_empty(name)){ + highlight_target=window->NameEntry; + } else if (yon_char_is_empty(type)){ + highlight_target=window->EncryptionCombo; + } else if (yon_char_is_empty(email)){ + highlight_target=window->EmailEntry; + } else if (yon_char_is_empty(strength)){ + highlight_target=window->KeyStrengthSpin; + } + if (highlight_target){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(highlight_target); + return; + } + char *expire = NULL; + if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ExpireCombo))==1){ + GDateTime *datetime = g_date_time_new_from_unix_local(yon_calendar_get_last_date()); + expire = g_date_time_format(datetime,"%Y%m%dT000000"); + g_date_time_unref(datetime); + + } + const char *password = gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + const char *password_confirm = gtk_entry_get_text(GTK_ENTRY(window->PasswordConfirmationEntry)); + int ex_status=0; + if (yon_char_is_empty(password)&&yon_char_is_empty(password_confirm)){ + yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password)); + ex_status = system(yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password))); + } else if (!strcmp(password,password_confirm)){ + yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password)); + ex_status = system(yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password))); + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_INCORRECT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->PasswordConfirmationEntry); + yon_ubl_status_highlight_incorrect(window->PasswordEntry); + return; + } + if (!ex_status) + yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + else + yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_widget_destroy(window->Window); + yon_sign_list_update(); +} + +key_creation_window *yon_key_creation_window_new(){ + key_creation_window *window = malloc(sizeof(key_creation_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_key); + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); + window->EmailEntry = yon_gtk_builder_get_widget(builder,"EmailEntry"); + window->CommentsEntry = yon_gtk_builder_get_widget(builder,"CommentsEntry"); + window->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); + window->KeyStrengthSpin = yon_gtk_builder_get_widget(builder,"KeyStrengthSpin"); + window->ExpireCombo = yon_gtk_builder_get_widget(builder,"ExpireCombo"); + window->ExpireEntry = yon_gtk_builder_get_widget(builder,"ExpireEntry"); + window->ExpireButton = yon_gtk_builder_get_widget(builder,"ExpireButton"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); + window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); + window->PasswordConfirmationEntry = yon_gtk_builder_get_widget(builder,"PasswordConfirmationEntry"); + + yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordConfirmationEntry)); + yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); + + g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireButton); + g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireEntry); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->ExpireButton),"clicked",G_CALLBACK(on_calendar_open),window); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window); + + int size; + config_str encription_keys = yon_file_open(key_encription_path,&size); + window->expire_time=0; + + for (int i=1;iEncryptionCombo),parsed[2],parsed[0]); + yon_char_parsed_free(parsed,parsed_size); + } + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->EncryptionCombo),"RSA"); + return window; +} + +void on_key_clicked(GtkWidget *self, main_window *widgets){ + key_creation_window *window = yon_key_creation_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEY_CREATION_TITLE_LABEL,icon_path,"key-create-window"); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),KEY_CREATION_TITLE_LABEL); + gtk_widget_show(window->Window); +} + + + +void on_sign_window_accept(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + sign_window *window = yon_dictionary_get_data(dict->first->next,sign_window*); + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ + char *arch; + char *repo; + char *storage; + char *signature = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->SignCombo)); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&arch,-1); + char *full_path = yon_char_new(arch); + repo = yon_char_divide(arch,yon_char_find_last(arch,'/')); + storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); + storage = yon_char_append(storage,"/"); + GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL); + char *targets = ""; + for (int i=0;iRepoFileList),&iter,(GtkTreePath*)g_list_nth_data(list,i)); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoFileList),&iter,2,&pack,-1); + char *temp = yon_char_unite(targets, " ", full_path,"/",pack,NULL); + if (!yon_char_is_empty(targets)) free(targets); + targets=temp; + } + if (!system(yon_debug_output("%s\n",yon_sign_package(storage,repo,arch,targets,signature)))){ + yon_ubl_status_box_render(SIGN_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } else { + yon_ubl_status_box_render(SIGN_FAIL_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + + } + on_subwindow_close(window->Window); + } + yon_interface_update(widgets); +} + +sign_window *yon_sign_window_new(){ + sign_window *window = malloc(sizeof(sign_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_sign); + + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->SignCombo = yon_gtk_builder_get_widget(builder,"SignCombo"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + + return window; +} + +void on_packages_sign(GtkWidget *self, main_window *widgets){ + sign_window *window = yon_sign_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),SIGNATURE_TITLE_LABEL,icon_path,"sign-window"); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->SignCombo)); + 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); + g_signal_connect(G_OBJECT(window->SignButton),"clicked",G_CALLBACK(on_sign_window_accept),dict); + gtk_widget_show(window->Window); +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager-move.c b/source/ubl-settings-repomanager-move.c index fdbcfcf..14fe774 100644 --- a/source/ubl-settings-repomanager-move.c +++ b/source/ubl-settings-repomanager-move.c @@ -1,275 +1,349 @@ -// #include "ubl-settings-repomanager.h" - - -// void on_move_repo_changed(GtkWidget *self, repo_add_window *window){ -// GtkWidget *ArchCombo = NULL; -// ArchCombo = self==window->MoveSourceRepoEntry?window->MoveSourceArchEntry:window->MoveTargetArchEntry; - -// gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(ArchCombo)); -// GtkTreeIter iter,itar; -// char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,id); -// int valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(window->tree_copy),&itar,&iter); -// for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->tree_copy),&itar)){ -// char *target; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,2,&target,-1); -// char *child_id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(ArchCombo),child_id,target); -// } +#include "ubl-settings-repomanager.h" + + + +void on_move_storage_changed(GtkWidget *self, repo_add_window *window){ + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry)); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveSourceRepoEntry)); + char *path_str = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry)); + if (!yon_char_is_empty(path_str)){ + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveTargetStorageEntry),path_str); + storage_struct *storage = g_hash_table_lookup(main_config.storages,path_str); + int size; + config_str repos = (config_str)g_hash_table_get_keys_as_array(storage->repos,&size); + for (int i=0;iMoveSourceRepoEntry),repos[i],repos[i]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetRepoEntry),repos[i],repos[i]); + } + } +} + +void on_move_repo_changed(GtkWidget *self, repo_add_window *window){ + if (gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceArchEntry))) return; + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveTargetArchEntry)); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->MoveSourceArchEntry)); + GtkWidget *check_repo = NULL; + if (self == window->MoveSourceRepoEntry){ + check_repo = window->MoveTargetRepoEntry; + } else { + check_repo = window->MoveSourceRepoEntry; + } + const char *current_repo_selection = gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); + const char *check_repo_selection = gtk_combo_box_get_active_id(GTK_COMBO_BOX(check_repo)); + if (!yon_char_is_empty(current_repo_selection)&&!yon_char_is_empty(check_repo_selection)&&!strcmp(current_repo_selection,check_repo_selection)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),REPO_SAME_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + const char *storage_path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry)); + const char *repo_name = gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); + if (yon_char_is_empty(storage_path)||yon_char_is_empty(repo_name)) return; + storage_struct *storage = g_hash_table_lookup(main_config.storages,storage_path); + if (storage){ + repo_struct *repo = g_hash_table_lookup(storage->repos,repo_name); + if (repo){ + gtk_widget_set_sensitive(window->RepoSignCombo,1); + int size; + config_str archs = (config_str)g_hash_table_get_keys_as_array(repo->archs,&size); + for (int i=0;iMoveSourceArchEntry),archs[i],archs[i]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetArchEntry),archs[i],archs[i]); + } + } + } + if (!yon_char_is_empty(current_repo_selection)||!yon_char_is_empty(check_repo_selection)){ + gtk_widget_set_sensitive(window->MoveSourceArchEntry,1); + gtk_widget_set_sensitive(window->MoveTargetArchEntry,1); + } else { + gtk_widget_set_sensitive(window->MoveSourceArchEntry,0); + gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); + } -// } +} + +void on_move_check_fill(GtkWidget *self, repo_add_window *window){ + if (gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry))&& + gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry))&& + gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceArchEntry))&& + gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveTargetStorageEntry))&& + gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveTargetRepoEntry))&& + gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveTargetArchEntry))){ + gtk_widget_set_sensitive(window->AddPackageButton,1); + } +} + +void on_move_arch_changed(GtkWidget *self, repo_add_window *window){ + GtkWidget *check_arch = NULL; + if (self == window->MoveSourceArchEntry){ + check_arch = window->MoveTargetArchEntry; + } else { + check_arch = window->MoveSourceArchEntry; + } + const char *chosen = gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); + if (!gtk_combo_box_set_active_id(GTK_COMBO_BOX(check_arch),chosen)){ + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(check_arch),chosen,chosen); + while(gtk_events_pending())gtk_main_iteration(); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(check_arch),chosen); + } + gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); +} + +void on_move_add_accept(GtkWidget *self, dictionary *dict){ + repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); + filechooser_window *dialog = yon_dictionary_get_data(dict->first->next,filechooser_window*); + + int size; + config_str packages = yon_char_parse(dialog->last_success_selection,&size,","); + for (int i=0;iPackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,name&&!yon_char_is_empty(name[0])?name[0]:"",2,full_path,-1); + free(full_path); + } + } + + } else { + GtkTreeIter iter; + int temp_size; + config_str name = yon_config_load(yon_get_package_name_from_filename(packages[i]),&temp_size); + if (temp_size<=0){ + yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + yon_char_remove_last_symbol(name[0],'\n'); + if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ + gtk_list_store_append(window->PackagesList,&iter); + gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,packages[i],-1); + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + } + + } + } + yon_char_parsed_free(packages,size); + gtk_widget_destroy(dialog->Window); + free(dialog); + GtkTreeIter iter; + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->PackagesList),&iter)){ + gtk_widget_set_sensitive(window->MoveSourceStorageEntry,0); + gtk_widget_set_sensitive(window->MoveSourceRepoEntry,0); + gtk_widget_set_sensitive(window->MoveSourceArchEntry,0); + + gtk_widget_set_sensitive(window->MoveTargetRepoEntry,0); + gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); + + if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ + gtk_widget_set_sensitive(window->StorageCombo,0); + gtk_widget_set_sensitive(window->RepositoryCombo,0); + gtk_widget_set_sensitive(window->ArchitectureCombo,0); + } + } +} + +void on_move_add_package(GtkWidget *self, repo_add_window *window){ + if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->MoveTargetArchEntry))>-1&>k_combo_box_get_active(GTK_COMBO_BOX(window->MoveSourceStorageEntry))>-1){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); + gtk_label_set_text(GTK_LABEL(dialog->HeaderTopic),CHOSE_PACKAGES_TITLE_LABEL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); + gtk_file_filter_set_name(filter,"*.pkg.tar.*"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); + GtkTreeIter iter,itar; + char *target; + const char* storage_path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry)); + storage_struct *storage = g_hash_table_lookup(main_config.storages,storage_path); + if (storage){ + const char *repo_name = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry)); + repo_struct *repo = g_hash_table_lookup(storage->repos,repo_name); + if (repo){ + target = repo->path; + } + gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog->MainFileChooser),1); + gtk_widget_show(dialog->ChooseFolderCheck); + + } + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),target); + + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); + + yon_file_chooser_set_root(dialog,target); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + on_move_add_accept(self,dict); + } + } +} + +void on_move_accept(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); + -// void on_move_arch_changed(GtkWidget *self, repo_add_window *window){ -// GtkWidget *TargetArchCombo = self==window->MoveTargetArchEntry?window->MoveSourceArchEntry:window->MoveTargetArchEntry; -// GtkWidget *TargetRepoCombo = self==window->MoveTargetArchEntry?window->MoveSourceRepoEntry:window->MoveTargetRepoEntry; -// if (gtk_combo_box_get_active(GTK_COMBO_BOX(self))>-1){ + const char *storage = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry)); + const char *source_repo = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry)); + const char *target_repo = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveTargetRepoEntry)); + const char *arch = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceArchEntry)); + if (yon_char_is_empty(storage)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->MoveSourceStorageEntry); + return; + } + if (yon_char_is_empty(source_repo)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->MoveSourceRepoEntry); + return; + } + if (yon_char_is_empty(target_repo)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->MoveTargetRepoEntry); + return; + } + if (yon_char_is_empty(arch)) { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->MoveSourceArchEntry); + return; + } + const char *repo_sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); + if (!yon_char_is_empty(storage)&&!yon_char_is_empty(source_repo)&&!yon_char_is_empty(target_repo)&&!yon_char_is_empty(arch)){ + + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); + int size; + config_str parsed = NULL; + for_iter(model,&iter){ + char *path; + gtk_tree_model_get(model,&iter,2,&path,-1); + yon_char_parsed_add_or_create_if_exists(parsed, &size,path+(yon_char_find_last(path,'/')>-1?yon_char_find_last(path,'/')+1:0)); + } + + if (!size) { + yon_ubl_status_box_render(NOTHING_CHOSEN_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->PackagesTree); + return; + } + char *packages = yon_char_parsed_to_string(parsed,size," "); + char *command = NULL; + command = yon_move_packages_command(storage,arch,source_repo,target_repo,packages,repo_sign); + if (system(yon_debug_output("%s\n",command))){ + yon_ubl_status_box_render(PACKAGES_MOVE_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(PACKAGES_MOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + free(command); + } + yon_interface_update(widgets); + gtk_widget_destroy(window->MainWindow); + free(window); +} + +void on_move_remove_package(GtkWidget *self, repo_add_window *window){ + GtkTreeIter iter; + GtkTreeModel *model; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ + gtk_list_store_remove(window->PackagesList,&iter); + } + if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->PackagesList),&iter)){ + + gtk_widget_set_sensitive(window->MoveSourceStorageEntry,1); + gtk_widget_set_sensitive(window->MoveSourceRepoEntry,1); + gtk_widget_set_sensitive(window->MoveSourceArchEntry,1); + + gtk_widget_set_sensitive(window->MoveTargetRepoEntry,1); + if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ + gtk_widget_set_sensitive(window->StorageCombo,1); + gtk_widget_set_sensitive(window->RepositoryCombo,1); + gtk_widget_set_sensitive(window->ArchitectureCombo,1); + } + } +} + + +void yon_move_window_set_selected(main_window *widgets, repo_add_window *window){ + GtkTreeIter iter, itar, itor; + + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ + int depth = gtk_tree_store_iter_depth(widgets->RepoList,&iter); + char *storage=NULL, *repo=NULL, *arch=NULL; + storage_struct *storage_str; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,7,&storage_str,-1); + if (depth==2){ + storage = ((arch_struct*)storage_str)->storage_path; + repo = ((arch_struct*)storage_str)->repo_name; + arch = ((arch_struct*)storage_str)->name; + } + if (!yon_char_is_empty(storage)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry),storage); + while(gtk_events_pending()) gtk_main_iteration(); + if (!yon_char_is_empty(repo)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry),repo); + while(gtk_events_pending()) gtk_main_iteration(); + if (!yon_char_is_empty(arch)) gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),arch); + } +} + +repo_add_window *on_move_clicked(GtkWidget *self, main_window *widgets){ + repo_add_window *window = yon_repo_add_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MOVE_PACKAGES_TITLE_LABEL,icon_path,"move-repo-window"); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),MOVE_PACKAGES_TITLE_LABEL); + gtk_button_set_label(GTK_BUTTON(window->AddButton),MOVE_LABEL); + gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),MOVE_PACKAGES_LABEL); + gtk_widget_show(window->MoveSourceFrame); + gtk_widget_show(window->MoveTargetFrame); + gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); + + int size; + config_str storages = (config_str)g_hash_table_get_keys_as_array(main_config.storages,&size); + for (int i=0;iMoveSourceStorageEntry),storages[i],storages[i]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetStorageEntry),storages[i],storages[i]); + } + + GtkTreeIter iter; + yon_sign_list_update(); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); + + gtk_widget_destroy(gtk_widget_get_parent(window->StorageCombo)); + 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); + g_signal_connect(G_OBJECT(window->MoveSourceStorageEntry),"changed",G_CALLBACK(on_move_storage_changed),window); + g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); + g_signal_connect(G_OBJECT(window->MoveSourceArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); + + g_signal_connect(G_OBJECT(window->MoveTargetRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); + g_signal_connect(G_OBJECT(window->MoveTargetArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); -// const char *current = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(self)); -// const char *repo_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(TargetRepoCombo)); - -// if (!yon_char_is_empty(current)&&!yon_char_is_empty(repo_id)){ - -// GtkTreeIter iter, itar; - -// g_signal_handlers_block_by_func(G_OBJECT(TargetArchCombo),on_move_arch_changed,window); -// if (yon_gtk_combo_box_text_find(TargetArchCombo,(char*)current)==-1){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,repo_id); -// gtk_tree_store_append(window->tree_copy,&itar,&iter); -// char *id = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&itar); -// yon_debug_output("%s\n","arch"); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(TargetArchCombo),id,current); -// } -// g_signal_handlers_unblock_by_func(G_OBJECT(TargetArchCombo),on_move_arch_changed,window); -// gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); -// gtk_widget_set_sensitive(window->AddPackageButton,1); -// } -// } -// } - -// void on_move_add_accept(GtkWidget *self, dictionary *dict){ -// repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); -// file_chooser_window *dialog = yon_dictionary_get_data(dict->first->next,file_chooser_window*); -// GSList *list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog->FileChooserWidget)); -// for (int i=0;iPackagesList,&iter); -// gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,files[k],-1); -// } -// } -// } else { -// GtkTreeIter iter; -// int temp_size; -// config_str name = yon_config_load(yon_get_package_name_from_filename(path),&temp_size); -// if (temp_size<=0){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(dialog->StatusBox),PACKAGE_NAME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// yon_char_remove_last_symbol(name[0],'\n'); -// if (!yon_gtk_tree_model_check_exist(GTK_TREE_MODEL(window->PackagesList),&iter,name[0],1)){ -// gtk_list_store_append(window->PackagesList,&iter); -// gtk_list_store_set(window->PackagesList,&iter,1,name[0],2,path,-1); -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// } - -// } -// } -// gtk_widget_destroy(dialog->Window); -// free(dialog); -// GtkTreeIter iter; -// if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->tree_copy),&iter)){ -// gtk_widget_set_sensitive(window->MoveSourceStorageEntry,0); -// gtk_widget_set_sensitive(window->MoveSourceRepoEntry,0); -// gtk_widget_set_sensitive(window->MoveSourceArchEntry,0); - -// gtk_widget_set_sensitive(window->MoveTargetRepoEntry,0); -// gtk_widget_set_sensitive(window->MoveTargetArchEntry,0); - -// if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ -// gtk_widget_set_sensitive(window->StorageCombo,0); -// gtk_widget_set_sensitive(window->RepositoryCombo,0); -// gtk_widget_set_sensitive(window->ArchitectureCombo,0); -// } -// } -// } - -// void on_move_add_package(GtkWidget *self, repo_add_window *window){ -// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->MoveTargetArchEntry))>-1&>k_combo_box_get_active(GTK_COMBO_BOX(window->MoveSourceStorageEntry))>-1){ -// file_chooser_window *dialog = yon_file_chooser_new(); -// yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); -// gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); -// GtkFileFilter *filter = gtk_file_filter_new(); -// gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); -// gtk_file_filter_set_name(filter,"*.pkg.tar.*"); -// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); -// GtkTreeIter iter,itar; -// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),GTK_TREE_MODEL(window->tree_copy),&iter); -// char *target; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&target,3,&dialog->root_path,-1); -// gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->FileChooserWidget),target); - -// dictionary *dict = NULL; -// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); -// yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); - -// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); -// g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); -// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); -// gtk_widget_show(dialog->Window); -// } -// } - -// void on_move_accept(GtkWidget *self, dictionary *dict){ -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); - -// int size = 0; -// config_str packages = NULL; -// GtkTreeIter iter,itar; -// for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){ -// char *target=NULL; -// gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&iter,2,&target,-1); -// if (!yon_char_is_empty(target)){ -// free(yon_char_divide(target,yon_char_find_last(target,'/'))); -// yon_char_parsed_add_or_create_if_exists(packages,&size,target); -// free(target); -// } -// } -// if (size){ -// char *arch = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->MoveSourceArchEntry)); -// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry),GTK_TREE_MODEL(window->tree_copy),&iter); -// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->MoveTargetRepoEntry),GTK_TREE_MODEL(window->tree_copy),&itar); -// char *source_path, *source_repo, *target_path, *target_repo; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&source_repo,-1); -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&target_repo,-1); -// source_path = yon_char_divide(source_repo,yon_char_find_last(source_repo,'/')); -// target_path = yon_char_divide(target_repo,yon_char_find_last(target_repo,'/')); -// char *command = yon_move_packages_command(source_path,arch,source_repo, target_repo, yon_char_parsed_to_string(packages,size," ")); -// yon_debug_output("%s\n",command); -// if (!system(command)){ -// yon_ubl_status_box_render(PACKAGES_MOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); -// gtk_tree_store_clear(widgets->RepoList); -// yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); - -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); -// if (!yon_char_is_empty(id)){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); -// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); -// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); -// on_main_tree_selection_changed(NULL,widgets); -// } -// yon_config_load_update(widgets); -// on_subwindow_close(window->MainWindow); -// } -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// } -// } - -// void on_move_remove_package(GtkWidget *self, repo_add_window *window){ -// GtkTreeIter iter; -// GtkTreeModel *model; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->PackagesTree)),&model,&iter)){ -// gtk_list_store_remove(window->PackagesList,&iter); -// } -// if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->PackagesList),&iter)){ - -// gtk_widget_set_sensitive(window->MoveSourceStorageEntry,1); -// gtk_widget_set_sensitive(window->MoveSourceRepoEntry,1); -// gtk_widget_set_sensitive(window->MoveSourceArchEntry,1); - -// gtk_widget_set_sensitive(window->MoveTargetRepoEntry,1); -// if (window->StorageCombo&&window->RepositoryCombo&&window->ArchitectureCombo){ -// gtk_widget_set_sensitive(window->StorageCombo,1); -// gtk_widget_set_sensitive(window->RepositoryCombo,1); -// gtk_widget_set_sensitive(window->ArchitectureCombo,1); -// } -// } -// } - -// repo_add_window *on_move_clicked(GtkWidget *self, main_window *widgets){ -// repo_add_window *window = yon_repo_add_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),MOVE_PACKAGES_TITLE_LABEL,icon_path,"move-repo-window"); -// gtk_label_set_text(GTK_LABEL(window->HeadLabel),MOVE_PACKAGES_TITLE_LABEL); -// gtk_button_set_label(GTK_BUTTON(window->AddButton),MOVE_LABEL); -// gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),MOVE_PACKAGES_LABEL); -// gtk_widget_show(window->MoveSourceFrame); -// gtk_widget_show(window->MoveTargetFrame); -// gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); -// GtkTreeIter iter; -// for_iter (window->tree_copy,&iter){ -// char *current; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); -// if (!yon_char_is_empty(current)){ -// char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveSourceStorageEntry),path,current); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->MoveTargetStorageEntry),path,current); -// } -// } - -// yon_sign_list_update(); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); -// gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); -// gtk_combo_box_set_active(GTK_COMBO_BOX(window->PackageSignCombo),0); - -// gtk_widget_destroy(gtk_widget_get_parent(window->StorageCombo)); -// 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); -// g_signal_connect(G_OBJECT(window->MoveSourceStorageEntry),"changed",G_CALLBACK(on_move_storage_changed),window); -// g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); -// g_signal_connect(G_OBJECT(window->MoveSourceArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); - -// g_signal_connect(G_OBJECT(window->MoveTargetRepoEntry),"changed",G_CALLBACK(on_move_repo_changed),window); -// g_signal_connect(G_OBJECT(window->MoveTargetArchEntry),"changed",G_CALLBACK(on_move_arch_changed),window); - -// g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_move_add_package),window); -// g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); -// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_move_accept),dict); -// g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_repo_sign_load),window); -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&iter)){ - -// char *target = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->RepoList),&iter); -// int mod = yon_char_count(target,":")+1; -// char *arc=NULL; -// char *repo=NULL; -// char *stor=NULL; -// if (mod ==3){ -// arc = yon_char_new(target); -// char *temp = yon_char_new(target); -// repo = yon_char_divide(temp,yon_char_find_last(temp,':')); -// free(temp); -// temp = yon_char_new(repo); -// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); -// free(temp); -// } else if (mod>=2){ -// repo = yon_char_new(target); -// char *temp = yon_char_new(target); -// stor = yon_char_divide(temp,yon_char_find_last(temp,':')); -// free(temp); -// } else if (mod>=1){ -// stor = yon_char_new(target); -// } - -// if (stor) -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry),stor); -// if (repo) -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry),repo); -// if (arc) -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->MoveSourceArchEntry),arc); -// } -// gtk_widget_show(window->MainWindow); -// return window; -// } \ No newline at end of file + g_signal_connect(G_OBJECT(window->MoveSourceStorageEntry),"changed",G_CALLBACK(on_move_check_fill),window); + g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_move_check_fill),window); + g_signal_connect(G_OBJECT(window->MoveSourceArchEntry),"changed",G_CALLBACK(on_move_check_fill),window); + g_signal_connect(G_OBJECT(window->MoveTargetRepoEntry),"changed",G_CALLBACK(on_move_check_fill),window); + g_signal_connect(G_OBJECT(window->MoveTargetArchEntry),"changed",G_CALLBACK(on_move_check_fill),window); + + g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_move_add_package),window); + g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); + + yon_rmb_menu_setup(window->PackagesTree,(int(*)(void*))gtk_widget_is_sensitive,window->AddPackageButton, + ADD_PACKAGE_LABEL,add_icon_name,G_CALLBACK(on_move_add_package),window, + REMOVE_PACKAGE_LABEL,remove_icon,G_CALLBACK(on_move_remove_package),window, + NULL); + + + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_move_accept),dict); + // g_signal_connect(G_OBJECT(window->MoveSourceRepoEntry),"changed",G_CALLBACK(on_repo_sign_load),window); + yon_move_window_set_selected(widgets,window); + yon_add_window_add_chosen_packages(widgets,window); + gtk_widget_show(window->MainWindow); + return window; +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager-remove.c b/source/ubl-settings-repomanager-remove.c index 70ad2f3..3fdb693 100644 --- a/source/ubl-settings-repomanager-remove.c +++ b/source/ubl-settings-repomanager-remove.c @@ -1,4 +1,4 @@ -// #include "ubl-settings-repomanager.h" +#include "ubl-settings-repomanager.h" // void on_remove_arch_selection_changed(GtkWidget *self, repo_add_window *window){ @@ -9,126 +9,111 @@ // } // } -// void on_remove_accept(GtkWidget *self, dictionary *dict){ -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); -// GtkTreeModel *model; -// GtkTreeIter iter; -// const char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); -// char *storage_path; -// char *repo = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); -// char *arch = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); +void on_remove_accept(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + repo_add_window *window = yon_dictionary_get_data(dict->first->next,repo_add_window*); + const char *storage_path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + const char *repo = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->RepositoryCombo)); + const char *arch = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ArchitectureCombo)); + const char *sign = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); -// if (!yon_char_is_empty(storage_id)){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->tree_copy),&iter,storage_id); -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&storage_path,-1); -// int size=0; -// config_str packages=NULL; -// for_iter(GTK_TREE_MODEL(window->PackagesList),&iter){ -// char *target; -// gtk_tree_model_get(GTK_TREE_MODEL(window->PackagesList),&iter,1,&target,-1); -// yon_char_parsed_add_or_create_if_exists(packages,&size,target); -// } -// if (size){ -// char *sign = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepoSignCombo)); -// char *command; -// if (yon_char_is_empty(sign)){ -// command = yon_delete_packages_command(storage_path,arch,repo,yon_char_parsed_to_string(packages,size," ")); -// } else { -// command = yon_delete_packages_sign_command(storage_path,arch,repo,sign,yon_char_parsed_to_string(packages,size," ")); -// } -// yon_debug_output("%s\n",command); -// if (!system(command)){ -// yon_ubl_status_box_render(PACKAGES_REMOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); -// gtk_tree_store_clear(widgets->RepoList); -// yon_gtk_tree_store_copy_full(window->tree_copy,widgets->RepoList); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(widgets->RepoList)); + if (!yon_char_is_empty(storage_path)){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->PackagesList); + int size; + config_str packages=NULL; -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ArchitectureCombo)); -// if (!yon_char_is_empty(id)){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); -// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); -// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); -// on_main_tree_selection_changed(NULL,widgets); -// } -// } -// yon_config_load_update(widgets); -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// }else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NOTHING_CHOSEN_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// return; -// } -// gtk_widget_destroy(window->MainWindow); -// } + for_iter(model,&iter){ + char *target; + gtk_tree_model_get(model,&iter,2,&target,-1); + char *filename = yon_char_divide(target,yon_char_find_last(target,'/')); + yon_char_parsed_add_or_create_if_exists(packages,&size,target); + } + if (size){ + char *final = yon_char_parsed_to_string(packages,size," "); + char *command = remove_packages_command(storage_path,arch,repo,final,sign); + if (system(yon_debug_output("%s\n",command))){ + yon_ubl_status_box_render(PACKAGES_REMOVE_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_render(PACKAGES_REMOVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + } + } + gtk_widget_destroy(window->MainWindow); + free(window); + yon_interface_update(widgets); +} -// void on_remove_add_package(GtkWidget *self, repo_add_window *window){ -// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))>-1){ -// file_chooser_window *dialog = yon_file_chooser_new(); -// yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); -// gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),CHOSE_PACKAGES_TITLE_LABEL); -// GtkFileFilter *filter = gtk_file_filter_new(); -// gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); -// gtk_file_filter_set_name(filter,"*.pkg.tar.*"); -// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->FileChooserWidget),filter); -// GtkTreeIter iter,itar; -// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->ArchitectureCombo),GTK_TREE_MODEL(window->tree_copy),&iter); -// char *target; -// int temp_size=0; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,&target,-1); -// yon_gtk_tree_iter_get_from_combo_box_id(GTK_COMBO_BOX(window->ArchitectureCombo),GTK_TREE_MODEL(window->tree_copy),&itar); -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&itar,3,&dialog->root_path,-1); -// gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->FileChooserWidget),target); +void on_remove_add_package(GtkWidget *self, repo_add_window *window){ + if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ArchitectureCombo))>-1){ + filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_OPEN); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CHOSE_PACKAGES_TITLE_LABEL,icon_path,"ChooseMoveFileChooserWindow"); + gtk_label_set_text(GTK_LABEL(dialog->HeaderTopic),CHOSE_PACKAGES_TITLE_LABEL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.pkg.tar*[^.sig]"); + gtk_file_filter_set_name(filter,"*.pkg.tar.*"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog->MainFileChooser),filter); + GtkTreeIter iter,itar; + char *target; + const char* storage_path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StorageCombo)); + storage_struct *storage = g_hash_table_lookup(main_config.storages,storage_path); + if (storage){ + const char *repo_name = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->RepositoryCombo)); + repo_struct *repo = g_hash_table_lookup(storage->repos,repo_name); + if (repo){ + target = repo->path; + } + gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog->MainFileChooser),1); + gtk_widget_show(dialog->ChooseFolderCheck); -// dictionary *dict = NULL; -// yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); -// yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); + } + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->MainFileChooser),target); -// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"current-folder-changed",G_CALLBACK(on_folder_changed),dialog); -// g_signal_connect(G_OBJECT(dialog->ChooseButton),"clicked",G_CALLBACK(on_move_add_accept),dict); -// g_signal_connect(G_OBJECT(dialog->FileChooserWidget),"file-activated",G_CALLBACK(on_file_chooser_file_activate),dict); -// gtk_widget_show(dialog->Window); -// } -// } + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"dialog",dialog); + yon_file_chooser_set_root(dialog,target); + if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ + on_move_add_accept(self,dict); + } + } +} -// repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets){ -// repo_add_window *window = yon_repo_add_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),REMOVE_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); -// gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGES_TITLE_LABEL); -// GtkTreeIter iter; -// for_iter (window->tree_copy,&iter){ -// char *current; -// gtk_tree_model_get(GTK_TREE_MODEL(window->tree_copy),&iter,3,¤t,-1); -// if (!yon_char_is_empty(current)){ -// char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(window->tree_copy),&iter); -// gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StorageCombo),path,current); -// } -// } -// gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),REMOVE_PACKAGES_LABEL); -// yon_sign_list_update(); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); -// gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); -// gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); +repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets){ + repo_add_window *window = yon_repo_add_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->Window),REMOVE_PACKAGES_TITLE_LABEL,icon_path,"add-repo-window"); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGES_TITLE_LABEL); + gtk_label_set_text(GTK_LABEL(window->PackagesToAddLabel),REMOVE_PACKAGES_LABEL); + + int size; + config_str storages = (config_str)g_hash_table_get_keys_as_array(main_config.storages,&size); + for (int i=0;iStorageCombo),storages[i],storages[i]); + } + + yon_sign_list_update(); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->RepoSignCombo)); + yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->PackageSignCombo)); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RepoSignCombo),0); + + gtk_widget_hide(gtk_widget_get_parent(window->PackageSignCombo)); -// gtk_button_set_label(GTK_BUTTON(window->AddButton),REMOVE_LABEL); -// 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); -// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); -// g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); -// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); -// g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_remove_arch_selection_changed),window); -// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),dict); -// g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_remove_add_package),window); -// g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); -// g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); -// yon_add_window_set_selected(widgets,window); -// gtk_widget_show(window->MainWindow); -// return window; -// } \ No newline at end of file + gtk_button_set_label(GTK_BUTTON(window->AddButton),REMOVE_LABEL); + 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); + g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_arch_chosen),window); + g_signal_connect(G_OBJECT(window->StorageCombo),"changed",G_CALLBACK(on_add_target_repo_selection_changed),window); + g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_add_target_arch_selection_changed),window); + g_signal_connect(G_OBJECT(window->ArchitectureCombo),"changed",G_CALLBACK(on_add_target_package_selection_changed),window); + g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_remove_accept),dict); + g_signal_connect(G_OBJECT(window->AddPackageButton),"clicked",G_CALLBACK(on_remove_add_package),window); + g_signal_connect(G_OBJECT(window->RemoveButton),"clicked",G_CALLBACK(on_move_remove_package),window); + // g_signal_connect(G_OBJECT(window->RepositoryCombo),"changed",G_CALLBACK(on_repo_sign_load),window); + yon_add_window_set_selected(widgets,window); + yon_add_window_add_chosen_packages(widgets,window); + gtk_widget_show(window->MainWindow); + return window; +} \ No newline at end of file diff --git a/source/ubl-settings-repomanager-storage-list.c b/source/ubl-settings-repomanager-storage-list.c index 6b85cbe..c3fa433 100644 --- a/source/ubl-settings-repomanager-storage-list.c +++ b/source/ubl-settings-repomanager-storage-list.c @@ -4,6 +4,11 @@ void on_repo_signed(GtkWidget *self, storage_repo_block *block){ storage_config_window *window = g_object_get_data(G_OBJECT(self),"window"); const char *sign = gtk_combo_box_get_active_id(GTK_COMBO_BOX(block->SignatureCombo)); + const char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_id); + repo_struct *repo = g_hash_table_lookup(storage->repos,block->repo_name); + // yon_repo_struct_sign(storage,repo,sign); + yon_config_register(repo->path,STORAGE_command,(char*)sign); if (!yon_char_is_empty(block->sign_request)) free(block->sign_request); block->sign_request = yon_char_new(sign); } @@ -13,6 +18,9 @@ void on_repo_removed(GtkWidget *self,storage_repo_block *block){ const char *storage_id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_id); if (g_hash_table_lookup(storage->repos,block->repo_name)){ + repo_struct *repo = g_hash_table_lookup(storage->repos,block->repo_name); + // yon_storage_struct_remove(storage,repo); + yon_config_remove_element(storage->path,repo->path,","); g_hash_table_remove(storage->repos,block->repo_name); gtk_widget_destroy(block->MainBox); yon_storage_repo_block_destroy(block); diff --git a/source/ubl-settings-repomanager-storage-window.c b/source/ubl-settings-repomanager-storage-window.c index fb2e287..9eb4d51 100644 --- a/source/ubl-settings-repomanager-storage-window.c +++ b/source/ubl-settings-repomanager-storage-window.c @@ -3,9 +3,44 @@ // // storage-configure window section +void yon_storage_open_add_repos(char *storage_path, storage_config_window *window){ + int size; + config_str repos = yon_file_list_dirs(storage_path,&size); + + storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_path); + if (size){ + for (int i=0;irepos,repo_name)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->AddEntry); + continue; + } + char *new_repo = yon_char_new(repo_name); + repo_struct *repo = yon_repo_struct_new(); + storage_repo_block *block = yon_storage_repo_block_new(); + g_object_set_data(G_OBJECT(block->SignatureCombo),"repo_storage",repo); + g_object_set_data(G_OBJECT(block->SignatureCombo),"window",window); + g_object_set_data(G_OBJECT(block->RepoRemoveButton),"window",window); + repo->name=new_repo; + block->repo_name=new_repo; + repo->path = yon_char_unite(storage_path,"/",new_repo,NULL); + repo->storage_path = yon_char_new(storage_path); + yon_config_append_element(storage->path,(char*)repo->path,","); + gtk_entry_set_text(GTK_ENTRY(block->RepoNameEntry),new_repo); + gtk_box_pack_start(GTK_BOX(window->ReposBox),block->MainBox,0,0,0); + g_hash_table_insert(storage->repos,repo->name,repo); + // yon_storage_struct_add_repo(storage,repo); + gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); + } + } +} + void on_storage_open(GtkWidget *self, storage_config_window *window){ filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),OPEN_EXISTING_TOOLTIP_LABEL,icon_path,"file_chooser_window"); if (yon_file_chooser_start(dialog)==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->MainFileChooser)); storage_struct *storage = yon_storage_struct_new(); @@ -14,12 +49,18 @@ void on_storage_open(GtkWidget *self, storage_config_window *window){ free(yon_char_divide(storage->name,yon_char_find_last(storage->name,'/'))); g_hash_table_insert(window->storages_copy,storage->path,storage); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage->path,storage->path); + while (gtk_events_pending()) gtk_main_iteration(); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->StoragePathCombo),storage->path); + yon_config_register(storage->path,STORAGE_command,""); + yon_storage_open_add_repos(storage->path,window); } } void on_storage_create(GtkWidget *self, storage_config_window *window){ filechooser_window *dialog = yon_file_chooser_window_new(GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->MainWindow),CREATE_NEW_STORAGE_LABEL,icon_path,"file_chooser_window"); + gtk_button_set_label(GTK_BUTTON(dialog->SaveButton),yon_char_get_localised_from_lib(CREATE_NEW_TOOLTIP_LABEL)); if (yon_file_chooser_start(dialog)==GTK_RESPONSE_APPLY){ storage_struct *storage = yon_storage_struct_new(); storage->path=dialog->last_success_selection; @@ -27,29 +68,43 @@ void on_storage_create(GtkWidget *self, storage_config_window *window){ free(yon_char_divide(storage->name,yon_char_find_last(storage->name,'/'))); g_hash_table_insert(window->storages_copy,storage->path,storage); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),storage->path,storage->path); + while (gtk_events_pending()) gtk_main_iteration(); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->StoragePathCombo),storage->path); + yon_config_register(storage->path,STORAGE_command,""); } } void on_storage_disable(GtkWidget *self, storage_config_window *window){ const char *storage_target = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + if (yon_char_is_empty(storage_target)) return; storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_target); if (storage){ + const char *path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + if (!config((char*)path)){ + yon_config_register((char*)path,STORAGE_command,"-"); + } + yon_config_set_status((char*)path,-1); gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); gtk_combo_box_set_active(GTK_COMBO_BOX(window->StoragePathCombo),0); - g_hash_table_remove(window->storages_copy,storage_target); - yon_storage_sturct_free_full(storage); + // g_hash_table_remove(window->storages_copy,storage_target); + // yon_storage_sturct_free_full(storage); } } void on_storage_remove(GtkWidget *self, storage_config_window *window){ const char *storage_target = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + if (yon_char_is_empty(storage_target)) return; storage_struct *storage = g_hash_table_lookup(window->storages_copy,storage_target); if (storage){ + const char *path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); + if (!config((char*)path)){ + yon_config_register((char*)path,STORAGE_command,"-"); + } + yon_config_set_status((char*)path,-2); gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),gtk_combo_box_get_active(GTK_COMBO_BOX(window->StoragePathCombo))); gtk_combo_box_set_active(GTK_COMBO_BOX(window->StoragePathCombo),0); - g_hash_table_remove(window->storages_copy,storage_target); - yon_storage_sturct_free_full(storage); - yon_char_parsed_add_or_create_if_exists(window->delete_storages,&window->delete_storages_size,(char*)storage_target); + // g_hash_table_remove(window->storages_copy,storage_target); + // yon_storage_sturct_free_full(storage); } } @@ -77,9 +132,11 @@ void on_repo_add(GtkWidget *self, storage_config_window *window){ block->repo_name=new_repo; repo->path = yon_char_unite(storage_target,"/",new_repo,NULL); repo->storage_path = yon_char_new(storage_target); + yon_config_append_element(storage->path,(char*)repo->path,","); gtk_entry_set_text(GTK_ENTRY(block->RepoNameEntry),new_repo); gtk_box_pack_start(GTK_BOX(window->ReposBox),block->MainBox,0,0,0); g_hash_table_insert(storage->repos,repo->name,repo); + // yon_storage_struct_add_repo(storage,repo); gtk_entry_set_text(GTK_ENTRY(window->AddEntry),""); } @@ -112,33 +169,49 @@ void yon_storage_config_update(storage_config_window *window){ } } -void on_storage_accept(GtkWidget *self, dictionary *dict){ - -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// storage_config_window *window = yon_dictionary_get_data(dict->first->next,storage_config_window*); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),NULL); -// gtk_tree_store_clear(main_config.tree_store); -// yon_gtk_tree_store_copy_full(window->storages_copy,main_config.tree_store); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ReposTree),GTK_TREE_MODEL(main_config.tree_store)); -// yon_window_config_save_instant(); -// GtkTreeIter iter; -// const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); -// if (!yon_char_is_empty(id)){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->RepoList),&iter,id); -// gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),gtk_tree_path_new_from_string(id)); -// gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&iter); -// on_main_tree_selection_changed(NULL,widgets); -// } -// on_subwindow_close(self); -// yon_config_load_update(widgets); -// yon_ubl_status_box_render(STORAGES_SAVED_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); +void yon_storage_remove(char *key, storage_struct *storage,void*){ + char *parameter = config(key); + switch (yon_config_get_status(key)){ + case -2: yon_window_config_erase_instant_parameter(key,"storage_info"); + if (rmdir(key)){}; + break; + case -1: yon_window_config_erase_instant_parameter(key,"storage_info"); + break; + case 0: + break; + case 1: yon_window_config_add_instant_parameter(key,"storage_info",parameter,YON_TYPE_STRING); + break; + } + int size; + config_str parsed = yon_char_parse(parameter,&size,","); + for (int i=0;ifirst,main_window*); + storage_config_window *window = yon_dictionary_get_data(dict->first->next,storage_config_window*); + gtk_widget_destroy(window->MainWindow); + g_hash_table_foreach_remove(window->storages_copy,(GHRFunc)yon_storage_remove,NULL); + g_hash_table_unref(window->storages_copy); + free(window); + yon_interface_update(widgets); +} void on_storage_changed(GtkWidget *self, storage_config_window *window){ yon_storage_config_update(window); } +void yon_repo_creation_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target){ + gtk_widget_set_sensitive(target,gtk_combo_box_get_active(toggle)>-1 ? 1 : 0); +} + storage_config_window *yon_storage_config_window_new(){ storage_config_window *window = malloc(sizeof(storage_config_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_storage_config); @@ -160,13 +233,30 @@ storage_config_window *yon_storage_config_window_new(){ window->delete_storages_size=0; yon_storage_hash_table_clone(main_config.storages,window->storages_copy); + + GList *list = g_hash_table_get_values(window->storages_copy); + GList *iter; + for (iter=list;iter;iter=iter->next){ + storage_struct *storage = (storage_struct*)iter->data; + int repos_size; + config_str paths = NULL; + GList *repos = g_hash_table_get_values(storage->repos); + GList *iter2; + for (iter2=repos;iter2;iter2=iter2->next){ + repo_struct *repo = (repo_struct*)iter2->data; + yon_char_parsed_add_or_create_if_exists(paths,&repos_size,repo->path); + } + yon_config_register(storage->path,STORAGE_command,yon_char_parsed_to_string(paths,repos_size,",")); + } g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->OpenExistingButton),"clicked",G_CALLBACK(on_storage_open),window); g_signal_connect(G_OBJECT(window->CreateNewButton),"clicked",G_CALLBACK(on_storage_create),window); - // g_signal_connect(G_OBJECT(window->DisableButton),"clicked",G_CALLBACK(on_storage_disable),window); + g_signal_connect(G_OBJECT(window->DisableButton),"clicked",G_CALLBACK(on_storage_disable),window); g_signal_connect(G_OBJECT(window->DeleteButton),"clicked",G_CALLBACK(on_storage_remove),window); g_signal_connect(G_OBJECT(window->AddRepoButton),"clicked",G_CALLBACK(on_repo_add),window); g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(on_storage_changed),window); + g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(yon_repo_creation_set_sensitive_from_combo_box),window->AddEntry); + g_signal_connect(G_OBJECT(window->StoragePathCombo),"changed",G_CALLBACK(yon_repo_creation_set_sensitive_from_combo_box),window->AddRepoButton); return window; @@ -180,11 +270,11 @@ void on_storage_configure_clicked(GtkWidget *self, main_window *widgets){ GList *listiter; for (listiter = storages;listiter;listiter=listiter->next){ storage_struct *cur_storage = (storage_struct*)listiter->data; - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),cur_storage->name,cur_storage->path); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->StoragePathCombo),cur_storage->path,cur_storage->path); } 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); - // g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_storage_accept),dict); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_storage_accept),dict); gtk_widget_show(window->MainWindow); } diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index 50cd491..d86c2c5 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -5,44 +5,23 @@ config main_config; // // filechooser window section -// void on_file_chooser_entry_changed(GtkEntry *self, file_chooser_window *window){ -// const char *text = gtk_entry_get_text(self); -// GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(window->FileChooserWidget)); -// gtk_file_chooser_remove_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); -// filter = gtk_file_filter_new(); -// char *pattern = !yon_char_is_empty(text)?yon_char_unite("*",text,"*.pkg.tar*[^.sig]",NULL) : "*.pkg.tar*[^.sig]"; -// gtk_file_filter_add_pattern(filter,pattern); -// gtk_file_filter_set_name(filter,"*.pkg.tar*"); -// gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(window->FileChooserWidget),filter); -// if (!yon_char_is_empty(text)) free(pattern); -// } - -// void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict){ -// on_add_accept(self,dict); -// } - -// file_chooser_window *yon_file_chooser_new(){ -// file_chooser_window *window = malloc(sizeof(file_chooser_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_filechooser); -// window->Window = yon_gtk_builder_get_widget(builder,"Window"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel2"); -// window->ChooseButton = yon_gtk_builder_get_widget(builder,"ChooseButton"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); -// window->FileChooserWidget = yon_gtk_builder_get_widget(builder,"FileChooserWidget"); -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(window->NameEntry),"changed",G_CALLBACK(on_file_chooser_entry_changed),window); - -// return window; -// } - // // main window -void on_folder_changed(GtkFileChooser *self, file_chooser_window *dialog){ +void on_folder_changed(GtkFileChooser *self, dictionary *dict){ + repo_add_window *window = yon_dictionary_get_data(dict->first,repo_add_window*); + filechooser_window *dialog = yon_dictionary_get_data(dict->first->next,filechooser_window*); const char *current = gtk_file_chooser_get_current_folder(self); - if (!strstr(current,dialog->root_path)){ - gtk_file_chooser_set_current_folder(self,dialog->root_path); + + const char* storage_path = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceStorageEntry)); + storage_struct *storage = g_hash_table_lookup(main_config.storages,storage_path); + if (storage){ + const char *repo_name = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->MoveSourceRepoEntry)); + repo_struct *repo = g_hash_table_lookup(storage->repos,repo_name); + if (repo){ + if (!strstr(current,repo->path)){ + gtk_file_chooser_set_current_folder(self,repo->path); + } + } } } @@ -65,7 +44,12 @@ char *yon_path_get_name(char *path){ return copy; } +void yon_remove_config_storages(char *key,storage_struct *storage,void*){ + yon_storage_sturct_free_full(storage); +} + int yon_storages_load(main_window *widgets){ + g_hash_table_remove_all(main_config.storages); gsize size; config_str storages = yon_window_config_get_section("storage_info",&size); @@ -73,16 +57,18 @@ int yon_storages_load(main_window *widgets){ for(int i=0;iname=storage_name; storage->path=yon_char_new(storages[i]); + g_hash_table_insert(main_config.storages,storage->path,storage); + if (yon_char_is_empty(repos)) continue; int repos_size; config_str repo_names = yon_char_parse(repos,&repos_size,","); yon_storage_fill_repos(storage,repo_names,repos_size); + yon_char_parsed_free(repo_names,repos_size); } } @@ -94,7 +80,7 @@ void yon_repo_tree_build_storage(char *key, storage_struct *storage, main_window struct repo_tree_build data; data.widgets=widgets; gtk_tree_store_append(widgets->RepoList,&data.storageiter,NULL); - gtk_tree_store_set(widgets->RepoList,&data.storageiter,2,storage->name,3,storage->path,7,storage,8,0,-1); + gtk_tree_store_set(widgets->RepoList,&data.storageiter,0,folder_no_edits,2,storage->name,3,storage->path,7,storage,8,0,-1); g_hash_table_foreach(storage->repos,(GHFunc)yon_repo_tree_build_repo,&data); } @@ -105,98 +91,45 @@ void yon_repo_tree_build_repo(char *key, repo_struct *repo, struct repo_tree_bui } void yon_repo_tree_build_arch(char *key, arch_struct *arch, struct repo_tree_build *data){ + int arch_status = system(yon_repo_get_signature_status_arch(arch->storage_path,arch->repo_name,arch->name)); + int package_status = system(yon_repo_get_signature_status_packages(arch->storage_path,arch->repo_name,arch->name)); + arch_status = WEXITSTATUS(arch_status); + char *image_name = NULL; + char *image_tooltip = NULL; + if (!arch_status&&!package_status){ + image_name = key_icon_name; + image_tooltip = SIGN_LABEL; + } else if (arch_status != 2 || package_status != 2){ + image_name = warning_icon_name; + image_tooltip = UNSIGNED_LABEL; + } + gtk_tree_store_append(data->widgets->RepoList,&data->architer,&data->repoiter); - gtk_tree_store_set(data->widgets->RepoList,&data->architer,2,arch->name,3,arch->path,7,arch,8,2,-1); + gtk_tree_store_set(data->widgets->RepoList,&data->architer,0,image_name,2,arch->name,3,arch->path,7,arch,8,2,9,image_tooltip,-1); } void yon_interface_update(main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model; + GtkTreePath *path = NULL; + yon_sign_list_update(); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ + path = gtk_tree_model_get_path(model,&iter); + } gtk_tree_store_clear(widgets->RepoList); gtk_list_store_clear(widgets->RepoFileList); gtk_list_store_clear(widgets->RepoPackagesList); yon_storages_load(widgets); g_hash_table_foreach(main_config.storages,(GHFunc)yon_repo_tree_build_storage,widgets); + if (path){ + gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),path); + gtk_tree_selection_select_path(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),path); + gtk_tree_path_free(path); + } + on_main_tree_selection_changed(widgets->Window,widgets); } -// void yon_config_load_update(main_window *widgets){ -// gtk_tree_store_clear(widgets->RepoList); -// gsize size=0; -// config_str storages = yon_window_config_get_section("storage_info",&size); -// GtkTreeIter iter,itar,childiter; -// for (int i=0;iRepoList,&iter,NULL); -// gtk_tree_store_set(widgets->RepoList,&iter,0,folder_no_edits,2,name,3,storages[i],-1); -// free(name); -// yon_window_config_get_parameter("storage_info",storages[i],&name,YON_TYPE_STRING); -// if (!yon_char_is_empty(name)){ -// int parsed_size; -// config_str name_parsed = yon_char_parse(name,&parsed_size,","); -// for (int j=0;jRepoList,&itar,&iter); -// gtk_tree_store_set(widgets->RepoList,&itar,2,nm,3,name_parsed[j],-1); -// int size; -// config_str dirs = yon_file_list_dirs(name_parsed[j],&size); -// for (int k=0;kRepoList,&childiter,&itar); -// gtk_tree_store_set(widgets->RepoList,&childiter,0,sign_status_image,2,dirs[k],3,arch_path,-1); -// } -// } -// free(nm); -// } -// yon_char_parsed_free(name_parsed,parsed_size); -// } - -// } -// if (size) -// yon_char_parsed_free(storages,size); -// } - -// config_str yon_tree_store_storage_get_archs(GtkTreeStore *target, GtkTreeIter *storage, int *size){ -// config_str final = NULL; -// GtkTreeIter iter,itar; -// int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,storage); -// for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ -// int archs_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&itar,&iter); -// for (;archs_valid;archs_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&itar)){ -// char *current; -// gtk_tree_model_get(GTK_TREE_MODEL(target),&itar,2,¤t,-1); -// if (yon_char_parsed_check_exist(final,*size,current)==-1) -// yon_char_parsed_add_or_create_if_exists(final,size,current); -// } -// } -// return final; -// } - -// config_str yon_tree_store_repo_get_archs(GtkTreeStore *target, GtkTreeIter *repo, int *size){ -// config_str final = NULL; -// GtkTreeIter iter; -// int repos_valid = gtk_tree_model_iter_children(GTK_TREE_MODEL(target),&iter,repo); -// for (;repos_valid;repos_valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(target),&iter)){ -// char *current; -// gtk_tree_model_get(GTK_TREE_MODEL(target),&iter,2,¤t,-1); -// if (yon_char_parsed_check_exist(final,*size,current)==-1) -// yon_char_parsed_add_or_create_if_exists(final,size,current); -// } -// return final; -// } // char *yon_signature_get(GtkTreeView *target, GtkTreeIter *iter){ // GtkTreeIter itar; @@ -243,7 +176,7 @@ void yon_sublist_packages_build(char *key, char *file, main_window *widgets){ gtk_list_store_set(widgets->RepoFileList,&iter,1,key,-1); } -void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ +void on_main_tree_selection_changed(GtkWidget *, main_window *widgets){ gtk_list_store_clear(widgets->RepoFileList); gtk_list_store_clear(widgets->RepoPackagesList); GtkTreeIter iter; @@ -257,7 +190,45 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){ if (data_type!=YON_REPO_DATA_ARCH){ g_hash_table_foreach(data_struct->repos,(GHFunc)yon_sublist_build,widgets); } else { - g_hash_table_foreach(data_struct->repos,(GHFunc)yon_sublist_packages_build,widgets); + int size; + config_str packages = yon_arch_struct_get_packages((arch_struct*)data_struct, &size); + for (int i=0;istorage_path,((arch_struct*)data_struct)->repo_name,((arch_struct*)data_struct)->name,parsed[1])); + char *sign_icon = ""; + char *sign_tooltip = ""; + if (!sign_status){ + sign_icon = package_signature_icon_name; + sign_tooltip = SIGNED_LABEL; + } else { + sign_icon = package_signature_error_icon_name; + sign_tooltip = UNSIGNED_LABEL; + } + GtkTreeIter itar; + gtk_list_store_append(widgets->RepoFileList,&itar); + gtk_list_store_set(widgets->RepoFileList,&itar,0,sign_icon,1,parsed[0],2,parsed[1],3,sign_tooltip,-1); + } + yon_char_parsed_free(parsed,parsed_size); + } + } + yon_char_parsed_free(packages,size); + } + } +} + +void yon_package_info_set_markup(config_str parsed, int size){ + for (int i=0;i",temp,":",escaped,NULL); + free(parsed[i]); + free(escaped); + free(temp); + parsed[i]=temp2; } } } @@ -269,8 +240,8 @@ void on_package_selection_changed(GtkWidget *self, main_window *widgets){ GtkTreeIter subiter; GtkTreeModel *submodel; if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&submodel,&subiter)) return; - char *target; - gtk_tree_model_get(submodel,&subiter,1,&target,-1); + char *target, *filename; + gtk_tree_model_get(submodel,&subiter,1,&target,2,&filename,-1); enum YON_REPO_DATA_TYPE data_type; gtk_tree_model_get(model,&iter,8,&data_type,-1); switch (data_type){ @@ -278,12 +249,13 @@ void on_package_selection_changed(GtkWidget *self, main_window *widgets){ storage_struct *storage; gtk_tree_model_get(model,&iter,7,&storage,-1); repo_struct *repo = g_hash_table_lookup(storage->repos,target); - - int size; - config_str archs = (config_str)g_hash_table_get_keys_as_array(repo->archs,&size); - char *archs_str = yon_char_parsed_to_string(archs,size,","); - char *info_label = get_repo_info_label(repo->name,archs_str,""); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info_label); + if (repo){ + int size; + config_str archs = (config_str)g_hash_table_get_keys_as_array(repo->archs,&size); + char *archs_str = yon_char_parsed_to_string(archs,size,","); + char *info_label = get_repo_info_label(repo->name,archs_str,""); + gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info_label); + } } break; case YON_REPO_DATA_REPO: { repo_struct *repo; @@ -298,14 +270,15 @@ void on_package_selection_changed(GtkWidget *self, main_window *widgets){ case YON_REPO_DATA_ARCH: { arch_struct *arch; gtk_tree_model_get(model,&iter,7,&arch,-1); - char *filename = g_hash_table_lookup(arch->packages,target); char *path = yon_char_unite(arch->storage_path,"/",arch->repo_name,"/",arch->name,"/",filename,NULL); char *command = get_package_info_command(path); int size; config_str parsed = yon_config_load(command,&size); + yon_package_info_set_markup(parsed,size); char *info_label = yon_char_parsed_to_string(parsed,size,""); - gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),g_markup_escape_text(info_label,strlen(info_label))); + + gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info_label); yon_char_parsed_free(parsed,size); if (!yon_char_is_empty(info_label)) free(info_label); @@ -330,7 +303,7 @@ void yon_combo_box_text_set_signs(GtkComboBoxText *target){ void yon_sign_list_update(){ if (main_config.signs&&main_config.signs_size) yon_char_parsed_free(main_config.signs,main_config.signs_size); - main_config.signs = yon_config_load(get_gpg_keys_command,&main_config.signs_size); + main_config.signs = yon_config_load(yon_debug_output("%s\n",get_gpg_keys_command),&main_config.signs_size); for (int i=0;iExpireEntry),self); -// } - -// void on_key_generate_accept(GtkWidget *self, key_creation_window* window){ -// const char *name = gtk_entry_get_text(GTK_ENTRY(window->NameEntry)); -// const char *type = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->EncryptionCombo)); -// const char *email = gtk_entry_get_text(GTK_ENTRY(window->EmailEntry)); -// char *strength = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->KeyStrengthSpin))); -// const char *comment = gtk_entry_get_text(GTK_ENTRY(window->CommentsEntry)); -// if (!yon_char_is_empty(name)&&strlen(name)<5){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),NAME_SHORT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// yon_ubl_status_highlight_incorrect(window->NameEntry); -// return; -// } -// GtkWidget *highlight_target=NULL; -// if (yon_char_is_empty(name)){ -// highlight_target=window->NameEntry; -// } else if (yon_char_is_empty(type)){ -// highlight_target=window->EncryptionCombo; -// } else if (yon_char_is_empty(email)){ -// highlight_target=window->EmailEntry; -// } else if (yon_char_is_empty(strength)){ -// highlight_target=window->KeyStrengthSpin; -// } -// if (highlight_target){ -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// yon_ubl_status_highlight_incorrect(highlight_target); -// return; -// } -// char *expire = NULL; -// if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ExpireCombo))==1){ -// GDateTime *datetime = g_date_time_new_from_unix_local(yon_calendar_get_last_date()); -// expire = g_date_time_format(datetime,"%Y%m%dT000000"); -// g_date_time_unref(datetime); - -// } -// const char *password = gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); -// const char *password_confirm = gtk_entry_get_text(GTK_ENTRY(window->PasswordConfirmationEntry)); -// int ex_status=0; -// if (yon_char_is_empty(password)&&yon_char_is_empty(password_confirm)){ -// yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password)); -// ex_status = system(yon_debug_output("%s\n",yon_generate_key_no_password_command(type,name,email,strength,comment,expire,password))); -// } else if (!strcmp(password,password_confirm)){ -// yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password)); -// ex_status = system(yon_debug_output("%s\n",yon_generate_key_command(type,name,email,strength,comment,expire,password))); -// } else { -// yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_INCORRECT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); -// yon_ubl_status_highlight_incorrect(window->PasswordConfirmationEntry); -// yon_ubl_status_highlight_incorrect(window->PasswordEntry); -// return; -// } -// if (!ex_status) -// yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// else -// yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); -// gtk_widget_destroy(window->Window); -// yon_sign_list_update(); -// } - -// key_creation_window *yon_key_creation_window_new(){ -// key_creation_window *window = malloc(sizeof(key_creation_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_key); -// window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); -// window->NameEntry = yon_gtk_builder_get_widget(builder,"NameEntry"); -// window->EmailEntry = yon_gtk_builder_get_widget(builder,"EmailEntry"); -// window->CommentsEntry = yon_gtk_builder_get_widget(builder,"CommentsEntry"); -// window->EncryptionCombo = yon_gtk_builder_get_widget(builder,"EncryptionCombo"); -// window->KeyStrengthSpin = yon_gtk_builder_get_widget(builder,"KeyStrengthSpin"); -// window->ExpireCombo = yon_gtk_builder_get_widget(builder,"ExpireCombo"); -// window->ExpireEntry = yon_gtk_builder_get_widget(builder,"ExpireEntry"); -// window->ExpireButton = yon_gtk_builder_get_widget(builder,"ExpireButton"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); -// window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); -// window->PasswordConfirmationEntry = yon_gtk_builder_get_widget(builder,"PasswordConfirmationEntry"); - -// yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordConfirmationEntry)); -// yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); - -// g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireButton); -// g_signal_connect(G_OBJECT(window->ExpireCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),window->ExpireEntry); -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(window->ExpireButton),"clicked",G_CALLBACK(on_calendar_open),window); -// g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window); - -// int size; -// config_str encription_keys = yon_file_open(key_encription_path,&size); -// window->expire_time=0; - -// for (int i=1;iEncryptionCombo),parsed[2],parsed[0]); -// yon_char_parsed_free(parsed,parsed_size); -// } -// gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->EncryptionCombo),"RSA"); -// return window; -// } - -// void on_key_clicked(GtkWidget *self, main_window *widgets){ -// key_creation_window *window = yon_key_creation_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEY_CREATION_TITLE_LABEL,icon_path,"key-create-window"); -// gtk_label_set_text(GTK_LABEL(window->HeadLabel),KEY_CREATION_TITLE_LABEL); -// gtk_widget_show(window->Window); -// } void on_tree_view_activate(GtkWidget *self, GtkTreePath* path, GtkTreeViewColumn* column, main_window *widgets){ gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widgets->ReposTree),path); @@ -476,101 +340,18 @@ void on_update_clicked(GtkWidget *self, main_window *widgets){ yon_interface_update(widgets); } -// void on_sign_window_accept(GtkWidget *self, dictionary *dict){ -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// sign_window *window = yon_dictionary_get_data(dict->first->next,sign_window*); -// GtkTreeModel *model; -// GtkTreeIter iter; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter)){ -// char *arch; -// char *repo; -// char *storage; -// char *signature = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->SignCombo)); -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&iter,3,&arch,-1); -// char *full_path = yon_char_new(arch); -// repo = yon_char_divide(arch,yon_char_find_last(arch,'/')); -// storage = yon_char_divide(repo,yon_char_find_last(repo,'/')); -// storage = yon_char_append(storage,"/"); -// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),NULL); -// char *targets = ""; -// for (int i=0;iRepoFileList),&iter,(GtkTreePath*)g_list_nth_data(list,i)); -// gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoFileList),&iter,2,&pack,-1); -// char *temp = yon_char_unite(targets, " ", full_path,"/",pack,NULL); -// if (!yon_char_is_empty(targets)) free(targets); -// targets=temp; -// } -// if (!system(yon_debug_output("%s\n",yon_sign_package(storage,repo,arch,targets,signature)))){ -// yon_ubl_status_box_render(SIGN_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); -// } -// on_subwindow_close(window->Window); -// } -// } - -// sign_window *yon_sign_window_new(){ -// sign_window *window = malloc(sizeof(sign_window)); -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_sign); - -// window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); -// window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); -// window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); -// window->SignCombo = yon_gtk_builder_get_widget(builder,"SignCombo"); -// window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); -// window->SignButton = yon_gtk_builder_get_widget(builder,"SignButton"); - -// g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - -// return window; -// } - -// void on_packages_sign(GtkWidget *self, main_window *widgets){ -// sign_window *window = yon_sign_window_new(); -// yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),SIGNATURE_TITLE_LABEL,icon_path,"sign-window"); -// yon_combo_box_text_set_signs(GTK_COMBO_BOX_TEXT(window->SignCombo)); -// 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); -// g_signal_connect(G_OBJECT(window->SignButton),"clicked",G_CALLBACK(on_sign_window_accept),dict); -// gtk_widget_show(window->Window); -// } - -// int yon_tree_is_selected(void *widget){ -// main_window *widgets = (main_window*)widget; -// GtkTreeModel *model; -// GtkTreeIter iter, itar; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ -// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&itar); -// if (gtk_tree_store_iter_depth(widgets->RepoList,&itar)==2){ -// return 1; -// } -// } -// return 0; -// } - - -// void on_rmb_remove(GtkWidget *self, main_window *widgets){ - -// repo_add_window *window = on_remove_clicked(NULL,widgets); -// GtkTreeModel *model; -// GtkTreeIter iter; -// char *path; -// gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),&model,&iter); -// gtk_tree_model_get(model,&iter,3,&path,-1); -// GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model); -// for (int i=0;iPackagesList,&itar); -// gtk_list_store_set(window->PackagesList,&itar,1,name,2,full_path,-1); -// free(full_path); -// free(filename); -// free(name); -// } -// } +int yon_tree_is_selected(void *widget){ + main_window *widgets = (main_window*)widget; + GtkTreeModel *model; + GtkTreeIter iter, itar; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ + gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ReposTree)),NULL,&itar); + if (gtk_tree_store_iter_depth(widgets->RepoList,&itar)==2){ + return 1; + } + } + return 0; +} main_window *yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); @@ -607,20 +388,20 @@ main_window *yon_main_window_complete(main_window *widgets){ gtk_style_context_add_class(gtk_widget_get_style_context(widgets->KeyMenuItem),"menuitemtop"); gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); - // g_signal_connect(G_OBJECT(widgets->KeyMenuItem),"activate",G_CALLBACK(on_key_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->KeyMenuItem),"activate",G_CALLBACK(on_key_clicked),widgets); } main_config.tree_store = widgets->RepoList; - // rmb_menu_window *rmb = yon_rmb_menu_setup(widgets->RepoFileTree, yon_tree_is_selected,widgets, - // SIGN_LABEL,lib_key_icon_name,G_CALLBACK(on_packages_sign),widgets, - // MOVE_PACKAGES_TITLE_LABEL,move_icon,G_CALLBACK(on_rmb_move),widgets, - // REMOVE_PACKAGES_TITLE_LABEL,remove_icon,G_CALLBACK(on_rmb_remove),widgets, - // NULL); + rmb_menu_window *rmb = yon_rmb_menu_setup(widgets->RepoFileTree, yon_tree_is_selected,widgets, + SIGN_LABEL,lib_key_icon_name,G_CALLBACK(on_packages_sign),widgets, + MOVE_PACKAGES_TITLE_LABEL,move_icon,G_CALLBACK(on_move_clicked),widgets, + REMOVE_PACKAGES_TITLE_LABEL,remove_icon,G_CALLBACK(on_remove_clicked),widgets, + NULL); g_signal_connect(G_OBJECT(widgets->DBConfigurationButton),"clicked",G_CALLBACK(on_storage_configure_clicked),widgets); - // g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_clicked),widgets); - // g_signal_connect(G_OBJECT(widgets->MoveButton),"clicked",G_CALLBACK(on_move_clicked),widgets); - // g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_add_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->MoveButton),"clicked",G_CALLBACK(on_move_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_remove_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ReposTree),"cursor-changed",G_CALLBACK(on_main_tree_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->CloudButton),"clicked",G_CALLBACK(on_ubl_settings_update_launch),widgets); g_signal_connect(G_OBJECT(widgets->RepoFileTree),"cursor-changed",G_CALLBACK(on_package_selection_changed),widgets); @@ -641,9 +422,9 @@ main_window *yon_main_window_complete(main_window *widgets){ int main(int argc, char *argv[]){ setlocale(LC_ALL, ""); textdomain (LocaleName); + yon_ubl_connect_config((_template_config*)&main_config); 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; diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 5c34572..9f2ad4c 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -17,8 +17,6 @@ #endif #include "ubl-strings.h" -#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-repomanager" - #define _(String) gettext(String) #define glade_path "/com/ublinux/ui/ubl-settings-repomanager.glade" @@ -38,6 +36,7 @@ #define document_deleted "com.ublinux.ubl-settings-repomanager.key-red-symbolic" #define document_added "com.ublinux.ubl-settings-repomanager.key-green-symbolic" +#define add_icon_name "com.ublinux.libublsettingsui-gtk3.increase-symbolic" #define move_icon "com.ublinux.libublsettingsui-gtk3.arrows-left-right-symbolic" #define remove_icon "com.ublinux.libublsettingsui-gtk3.trash-symbolic" @@ -59,14 +58,16 @@ #define key_encription_path "/usr/share/ubl-settings-repomanager/csv/crypt-key.csv" typedef char* string; -#define create_storage_command(path,name) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"'",NULL) +#define create_storage_command(path,name,sign) yon_char_unite("repo-manager add -r '",name,"' -d '", path,"'",!yon_char_is_empty(sign)?" -S ":NULL,sign,NULL) #define add_packages_command(path,arch,name,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' ",packages_path,NULL) #define add_packages_sign_command(path,arch,name,repo_sign,pack_sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -S ",repo_sign," -s ",pack_sign," ",packages_path,NULL) #define add_packages_package_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -s '",sign,"' ",packages_path,NULL) #define add_packages_repo_sign_command(path,arch,name,sign,packages_path) yon_char_unite("repo-manager add -f -r '",name,"' -a '",arch,"' -d '", path,"' -S '",sign,"' ",packages_path,NULL) -#define remove_packages_command(path,arch,name,packages_path) yon_char_unite("repo-manager remove -r '",name,"' -a '",arch,"' -d '", path,"' ",packages_path,NULL) +#define remove_packages_command(path,arch,name,packages_path,sign) yon_char_unite("repo-manager remove -r '",name,"' -a '",arch,"' -d '", path,"' ",sign?"-S ":"",sign?sign:"",sign?" ":"",packages_path,NULL) + +#define repo_sign_command(storage_path, repo, sign) yon_char_unite("repo-manager add -f -r '",repo,"' -d '", storage_path, "' -S ", sign,NULL) -#define yon_move_packages_command(storage,arch, source_repo, target_repo, packages) yon_char_unite("repo-manager move -d '",storage,"' -a '",arch,"' -R '",source_repo,"' -r '",target_repo,"' ", packages,NULL) +#define yon_move_packages_command(storage,arch, source_repo, target_repo, packages,sign) yon_char_unite("repo-manager move -d '",storage,"' -a '",arch,"' -R '",source_repo,"' -r '",target_repo,"' ",sign?"-S ":"",sign?sign:"",sign?" ":"", packages,NULL) #define yon_delete_packages_command(storage,arch, target_repo, packages) yon_char_unite("repo-manager remove -d '",storage,"' -a '",arch,"' -r '",target_repo,"' ", packages,NULL) #define yon_delete_packages_sign_command(storage,arch, target_repo,sign, packages) yon_char_unite("repo-manager remove -d '",storage,"' -a '",arch,"' -r '",target_repo,"' -S '",sign,"' ", packages,NULL) @@ -106,7 +107,7 @@ typedef char* string; #define get_package_info_command(filename) yon_char_unite("pacman -Q --info --file '",filename,"' 2>/dev/null|sed -e 's/ */ /g' -e 's/ : /: /g' -e 's/\\n/ /g' -e 's/^ /\\t/g'",NULL) -#define get_storage_info_label(path, repos, archs) yon_char_unite("",STORAGE_PATH_LABEL,": ", path,"\n\n", REPOS_LABEL,": ",repos,"\n\n",ARCHS_LABEL,": ",archs,NULL) +#define get_storage_info_lab el(path, repos, archs) yon_char_unite("",STORAGE_PATH_LABEL,": ", path,"\n\n", REPOS_LABEL,": ",repos,"\n\n",ARCHS_LABEL,": ",archs,NULL) #define get_repo_info_label(repos, archs,sign) yon_char_unite("",REPO_NAME_LABEL,": ",repos,"\n\n",ARCHS_LABEL,": ",archs,"\n\n",sign,NULL) @@ -118,9 +119,9 @@ Key-Type: ",type,"\n\ Key-Length: 1024\n\ Subkey-Type: ELG-E\n\ Subkey-Length: ",strength,"\n\ -Name-Real: ",name,"\n\ -Name-Comment: ",comment,"\n\ -Name-Email: ",email,"\n\ +Name-Real: ",name,"\n",\ +!yon_char_is_empty(comment)?"Name-Comment: ":"",!yon_char_is_empty(comment)?comment:"",!yon_char_is_empty(comment)?"\n":""\ +"Name-Email: ",email,"\n\ Expire-Date: ",!yon_char_is_empty(expire)?expire:"0","\n\ Passphrase: ",password,"\n\ %commit\n\ @@ -133,15 +134,20 @@ Key-Type: ",type,"\n\ Key-Length: 1024\n\ Subkey-Type: ELG-E\n\ Subkey-Length: ",strength,"\n\ -Name-Real: ",name,"\n\ -Name-Comment: ",comment,"\n\ -Name-Email: ",email,"\n\ +Name-Real: ",name,"\n",\ +!yon_char_is_empty(comment)?"Name-Comment: ":"",!yon_char_is_empty(comment)?comment:"",!yon_char_is_empty(comment)?"\n":""\ +"Name-Email: ",email,"\n\ Expire-Date: ",!yon_char_is_empty(expire)?expire:"0","\n\ %no-protection\n\ %commit\n\ %echo done\n\ EOF",NULL) +#define STORAGE_search_macro "STORAGE[" +#define STORAGE(target) yon_char_unite("STORAGE[",target,"]",NULL) +#define STORAGE_command "echo \"\"" + + typedef char* string; __attribute__((unused)) static \ @@ -236,17 +242,6 @@ typedef struct { config_str delete_storages; } storage_config_window; -typedef struct { - GtkWidget *Window; - GtkWidget *StatusBox; - GtkWidget *HeadLabel; - GtkWidget *CancelButton; - GtkWidget *ChooseButton; - GtkWidget *NameEntry; - GtkWidget *FileChooserWidget; - char *root_path; -} file_chooser_window; - typedef struct { GtkWidget *Window; GtkWidget *StatusBox; @@ -299,7 +294,7 @@ typedef struct { char *storage_path; GHashTable *archs; char *path; - int sign_status; + char *sign_status; } repo_struct; typedef struct { @@ -366,7 +361,6 @@ void on_add_target_repo_selection_changed(GtkWidget *target,repo_add_window *win config_str yon_tree_store_get_all_at_level(GtkTreeStore *target,GtkTreeIter *parent, int *size, int column, int level); gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data); void on_file_chooser_file_activate(GtkWidget *self, dictionary *dict); -file_chooser_window *yon_file_chooser_new(); gboolean yon_storage_filter_func(GtkTreeModel *model,GtkTreeIter *iter,gpointer data); void on_storage_configure_clicked(GtkWidget *self, main_window *widgets); storage_config_window *yon_storage_config_window_new(); @@ -384,7 +378,7 @@ void on_add_clicked(GtkWidget *self, main_window *widgets); void on_rmb_move(GtkWidget *self, main_window *widgets); repo_add_window *on_move_clicked(GtkWidget *self, main_window *widgets); repo_add_window *on_remove_clicked(GtkWidget *self, main_window *widgets); -void on_folder_changed(GtkFileChooser *self, file_chooser_window *dialog); +void on_folder_changed(GtkFileChooser *self, dictionary *dict); void on_move_remove_package(GtkWidget *self, repo_add_window *window); void on_move_add_accept(GtkWidget *self, dictionary *dict); void on_ubl_settings_update_launch(); @@ -407,4 +401,20 @@ void yon_sublist_packages_build(char *key, char *file, main_window *widgets); void yon_sublist_build(char *key, storage_struct *storage, main_window *widgets); void yon_storage_repo_block_destroy(storage_repo_block *block); void yon_storage_hash_table_clone(GHashTable *source_hash, GHashTable *target_hash); -void yon_storage_sturct_free_full(storage_struct *storage); \ No newline at end of file +void yon_storage_sturct_free_full(storage_struct *storage); +void yon_storage_edit_accept(storage_struct *target_struct, storage_struct *source_struct); +void yon_storage_struct_remove(storage_struct *storage,repo_struct *repo); +void yon_storage_struct_add_repo(storage_struct *storage,repo_struct *repo); +void yon_repo_struct_sign(storage_struct *storage, repo_struct *repo,const char *sign); +void yon_storage_remove(char *key, storage_struct *storage,void*); +config_str yon_arch_struct_get_packages(arch_struct *arch, int *size); +void yon_move_window_set_selected(main_window *widgets, repo_add_window *window); +void on_move_add_package(GtkWidget *self, repo_add_window *window); +void on_packages_sign(GtkWidget *self, main_window *widgets); +void yon_add_window_add_chosen_packages(main_window *widgets, repo_add_window *window); +void yon_storage_open_add_repos(char *storage_path, storage_config_window *window); +void yon_package_info_set_markup(config_str parsed, int size); +void on_remove_window_tree_changed(GtkWidget *self, repo_add_window *window); +void on_move_window_tree_changed(GtkWidget *self, repo_add_window *window); +void on_move_check_fill(GtkWidget *self, repo_add_window *window); +void yon_repo_creation_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 0699111..d78e540 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -2,6 +2,8 @@ #define TITLE_LABEL _("Repository manager") #define TITLE_INFO_LABEL _("Repository management and configuring") +#define WIKI_LINK _("https://wiki.ublinux.ru/en/Software/Programs_and_utilities/All/ubl-settings-repomanager") + #define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?") #define HELP_INFO_LABEL _("You will be redirected to documentation website where documentation is\ntranslated and supported by community.") #define HELP_ALWAYS_OPEN_LABEL _("Always redirect to online documentation") @@ -65,6 +67,7 @@ #define STORAGE_LABEL _("Storage:") #define OPEN_EXISTING_TOOLTIP_LABEL _("Open existing") #define CREATE_NEW_TOOLTIP_LABEL _("Create new") +#define CREATE_NEW_STORAGE_LABEL _("Create new storage") #define DISABLE_TOOLTIP_LABEL _("Disable") #define DELETE_TOOLTIP_LABEL _("Delete") #define ADD_REPO_TOOLTIP_LABEL _("Add repository") @@ -86,8 +89,11 @@ #define REPO_SIGN_ERROR_LABEL _("Repository sign failed - repository has no packages") #define DATA_LOADED_LABEL _("Data has been loaded") +#define PACKAGES_ADD_ERROR_LABEL _("Failed to add packages") #define PACKAGES_ADD_SUCCESS_LABEL _("Packages were added successfully") +#define PACKAGES_REMOVE_ERROR_LABEL _("Packages remove has failed") #define PACKAGES_REMOVE_SUCCESS_LABEL _("Packages were removed successfully") +#define PACKAGES_MOVE_ERROR_LABEL _("Packages move has failed") #define PACKAGES_MOVE_SUCCESS_LABEL _("Packages were moved successfully") #define STORAGES_SAVED_LABEL _("Changes saved") #define KEY_CREATION_SUCCESS_LABEL _("Key was successfully created") @@ -161,9 +167,15 @@ #define SIGNATURE_TITLE_LABEL _("Sign packages") #define SIGN_SUCCESS_LABEL _("Packages successfully signed") +#define SIGN_FAIL_LABEL _("Package sign has failed") #define EMPTY_FOLDER_LABEL _("Folder must contain repositories") #define FILES_EXIST_LABEL _("Folder must not be empty") -#define NAME_SHORT_LABEL _("Name must be 5 or more symbols") \ No newline at end of file +#define NAME_SHORT_LABEL _("Name must be 5 or more symbols") + +#define REPO_SAME_CHOSEN_LABEL _("Same repository was chosen for source and target") + +#define SIGNED_LABEL _("Signed") +#define UNSIGNED_LABEL _("Unsigned") \ No newline at end of file diff --git a/ubl-settings-repomanager-banner.png b/ubl-settings-repomanager-banner.png deleted file mode 100644 index 8eb67cb..0000000 Binary files a/ubl-settings-repomanager-banner.png and /dev/null differ diff --git a/ubl-settings-repomanager-configuration.glade b/ubl-settings-repomanager-configuration.glade index 32f8374..ff552d3 100644 --- a/ubl-settings-repomanager-configuration.glade +++ b/ubl-settings-repomanager-configuration.glade @@ -228,6 +228,7 @@ True + False True @@ -239,6 +240,7 @@ True + False True True Add repository diff --git a/ubl-settings-repomanager.glade b/ubl-settings-repomanager.glade index 4ec5e0f..e9a8b07 100644 --- a/ubl-settings-repomanager.glade +++ b/ubl-settings-repomanager.glade @@ -16,6 +16,8 @@ + + @@ -46,6 +48,8 @@ + + @@ -231,6 +235,7 @@ False treeviewcolumn1 2 + 9 @@ -304,6 +309,7 @@ RepoFileList False 1 + 3