From a7b6b29a5dd3973f56b5cf9e4b8851a3bdafa986 Mon Sep 17 00:00:00 2001 From: Arkagedon <38785328+ARKAGEDON@users.noreply.github.com> Date: Wed, 26 Oct 2022 19:09:26 +0000 Subject: [PATCH 1/4] Adding a GUI to save your packages --- .vscode/c_cpp_properties.json | 45 +++++++++++++++ .vscode/settings.json | 12 ++++ Makefile | 84 ++++++++++++++++++++++++++++ PackageSaver | Bin 0 -> 26464 bytes include/PkgSaver.h | 17 ++++++ packageManager.sh | 2 +- src/PkgSaver.c | 90 ++++++++++++++++++++++++++++++ src/main.c | 44 +++++++++++++++ src/packageSaver.glade | 102 ++++++++++++++++++++++++++++++++++ src/packageSaver.glade~ | 99 +++++++++++++++++++++++++++++++++ 10 files changed, 494 insertions(+), 1 deletion(-) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/settings.json create mode 100644 Makefile create mode 100755 PackageSaver create mode 100644 include/PkgSaver.h create mode 100644 src/PkgSaver.c create mode 100644 src/main.c create mode 100644 src/packageSaver.glade create mode 100644 src/packageSaver.glade~ diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..5114842 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,45 @@ +{ + "configurations": [ + { + "name": "C Linux GTK3", + "includePath": [ + "${workspaceFolder}/**", + "/usr/lib/glib-2.0/include/", + "/usr/include/gtk-3.0", + "/usr/include/pango-1.0", + "/usr/include/glib-2.0", + "/usr/include/harfbuzz", + "/usr/include/fribidi", + "/usr/include/libpng16", + "/usr/include/cairo", + "/usr/include/pixman-1", + "/usr/include/gdk-pixbuf-2.0", + "/usr/include/libmount", + "/usr/include/blkid", + "/usr/include/gio-unix-2.0", + "/usr/include/atk-1.0", + "/usr/include/at-spi2-atk/2.0", + "/usr/include/at-spi-2.0", + "/usr/include/dbus-1.0", + "/usr/lib/dbus-1.0/include", + "/usr/local/include", + "/usr/include" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c11", + "cppStandard": "c++17", + "intelliSenseMode": "clang-x64", + "compilerArgs": [ + "-Wall", + "-Wextra", + "-mtune=native", + "-no-pie", + "`pkg-config gtk+-3.0 --cflags`", + "`pkg-config --libs gtk+-3.0`", + "-lm" + ] + } + ], + "version": 4 + } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2296ae1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "makefile.launchConfigurations": [ + { + "cwd": "/home/arka/Documents/Dev/C/Projets/PackageSaver", + "binaryPath": "/home/arka/Documents/Dev/C/Projets/PackageSaver/PackageSaver", + "binaryArgs": [] + } + ], + "files.associations": { + "random": "c" + } +} \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c794ac2 --- /dev/null +++ b/Makefile @@ -0,0 +1,84 @@ +NAME := PackageSaver + +#------------------------------------------------# +# INGREDIENTS # +#------------------------------------------------# +# +# INCS header file locations +# +# SRC_DIR source directory +# SRCS source files +# +# BUILD_DIR build directory +# OBJS object files +# DEPS dependency files +# +# CC compiler +# CFLAGS compiler flags +# CPPFLAGS preprocessor flags +# LDFLAGS linker flags +# LDLIBS libraries name + +INCS := include + +SRC_DIR := src +SRCS := PkgSaver.c main.c +SRCS := $(SRCS:%=$(SRC_DIR)/%) + +BUILD_DIR := .build +OBJS := $(SRCS:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) + +CC := gcc +CFLAGS := -Wall `pkg-config --cflags --libs gtk+-3.0` -export-dynamic +CPPFLAGS := $(addprefix -I,$(INCS)) + +#------------------------------------------------# +# UTENSILS # +#------------------------------------------------# +# RM force remove +# MAKE quietly make +# DIR_DUP duplicate directory tree + +RM := rm -f +MAKE := $(MAKE) --silent --no-print-directory +DIR_DUP = mkdir -p $(@D) + + +#------------------------------------------------# +# RECIPES # +#------------------------------------------------# +# all default goal +# $(NAME) link .o -> archive +# $(LIBS) build libraries +# %.o compilation .c -> .o +# clean remove .o +# fclean remove .o + binary +# re remake default goal +# run run the program +# info print the default goal recipe + +all: $(NAME) + +$(NAME): $(OBJS) + $(CC) $(OBJS) -o $(NAME) $(CFLAGS) + +$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c + $(DIR_DUP) + $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< + +clean: + $(RM) $(OBJS) + +fclean: clean + $(RM) $(NAME) + +re: + $(MAKE) fclean + $(MAKE) all + +#------------------------------------------------# +# SPEC # +#------------------------------------------------# + +.PHONY: clean fclean re +.SILENT: diff --git a/PackageSaver b/PackageSaver new file mode 100755 index 0000000000000000000000000000000000000000..b81d99f578ba4f2c68b0b5573349bed7931a43a6 GIT binary patch literal 26464 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 + +typedef struct _treeViewer treeViewer; +struct _treeViewer +{ + GtkTreeView *treeView; + GtkTreeStore *treeStore; +}; + +void init_packages(treeViewer *tv); +void on_ct2_toggled (GtkCellRendererToggle *cell, gchar *path_string, gpointer user_data); +void on_destroy(); + +#endif \ No newline at end of file diff --git a/packageManager.sh b/packageManager.sh index f5cc12d..5089509 100755 --- a/packageManager.sh +++ b/packageManager.sh @@ -82,7 +82,7 @@ do ;; #Pacman is the package manager - pacman) currPkg=$(pacman -Q | sed -n "${pkgI}p" | cut -d" " -f1) + pacman) currPkg=$(pacman -Q | sed -n "${pkgI}p" | cut -d " " -f1) ;; esac diff --git a/src/PkgSaver.c b/src/PkgSaver.c new file mode 100644 index 0000000..e45f91f --- /dev/null +++ b/src/PkgSaver.c @@ -0,0 +1,90 @@ +#include "PkgSaver.h" + +/** + * @brief Function to init the TreeStore content with the packages names + * + * @param tv TreeViewer which needs to be filled + */ +void init_packages(treeViewer *tv) +{ + FILE *fp; + char buffer[1035]; + GtkTreeIter iter; + + /* Getting all the packages */ + fp = popen("pacman -Q | cut -d ' ' -f1", "r"); + if (fp == NULL) { + fprintf(stderr, "Failed to get packages, please open an issue on github\n" ); + exit(1); + } + + /* Read the packages, and adding them into the treeStore*/ + while (fgets(buffer, sizeof(buffer), fp) != NULL) + { + gtk_tree_store_append (tv->treeStore, &iter, NULL); + gtk_tree_store_set(tv->treeStore, &iter, 0, buffer, -1); + gtk_tree_store_set(tv->treeStore, &iter, 1, FALSE, -1); + } + + /* Closing the file */ + pclose(fp); +} + +/** + * @brief Function to get the value of the selected rows + * + * @param selection Selected row + */ +void on_select_changed(GtkTreeSelection *selection) +{ + + gchar *value; + gboolean box; + GtkTreeIter iter; + GtkTreeModel *model; + + if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), &model, &iter) == FALSE) + return; + + /* Getting package column content */ + gtk_tree_model_get(model, &iter, 0, &value, -1); + printf("Select signal received: package = \"%s\"; ", value); + + /* Getting keeping ? column content */ + gtk_tree_model_get(model, &iter, 1, &box, -1); // get column 1 + printf("keeping ? = \"%d\"\n", box); +} + +/** + * @brief Function to change the toggling of a row + * + * @param cell The cell rendered (useless here) + * @param path_string The path of the row we want + * @param user_data TreeViewer which needs to be changed + */ +void on_ct2_toggled (GtkCellRendererToggle *cell, gchar *path_string, gpointer user_data) +{ + GtkTreeIter iter; + GtkTreeModel *model; + gboolean isKept = FALSE; + gchar *packageName; + treeViewer *tv = (treeViewer*) user_data; + + model = gtk_tree_view_get_model(tv->treeView); // get the tree model + + gtk_tree_model_get_iter_from_string (model, &iter, path_string); // get iter from path + + gtk_tree_model_get(model, &iter, 0, &packageName, -1); //Getting the name of the package + gtk_tree_model_get(model, &iter, 1, &isKept, -1); // Getting the value of the boolean + + if (isKept == FALSE) isKept = TRUE; else isKept = FALSE; + + gtk_tree_store_set(tv->treeStore, &iter, 1, isKept, -1); //Changing the checkbox toggling + + return; +} + +void on_destroy() +{ + gtk_main_quit(); +} \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..32b3ae3 --- /dev/null +++ b/src/main.c @@ -0,0 +1,44 @@ +#include "PkgSaver.h" + +int main(int argc, char *argv[]) +{ + /*Initialisation of the window*/ + gtk_init(&argc, &argv); + + GtkBuilder *builder = gtk_builder_new_from_file("src/packageSaver.glade"); + GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); + + g_signal_connect(window, "destroy", G_CALLBACK(on_destroy), NULL); + gtk_builder_connect_signals(builder, NULL); + + + /*Initialisation of the component of the window*/ + treeViewer tv; + tv.treeView = GTK_TREE_VIEW(gtk_builder_get_object(builder, "tv1")); + tv.treeStore = GTK_TREE_STORE(gtk_builder_get_object(builder, "TreeStore")); + GtkTreeViewColumn *cx1 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "cx1")); + GtkTreeViewColumn *cx2 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "cx2")); + GtkCellRenderer *ct1 = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ct1")); + GtkCellRenderer *ct2 = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ct2")); + GtkTreeSelection *select = GTK_TREE_SELECTION(gtk_builder_get_object(builder, "select")); + + gtk_tree_view_column_add_attribute(cx1, ct1, "text", 0); // attach renderer to column + gtk_tree_view_column_add_attribute(cx2, ct2, "active", 1); // attach renderer to column + + select = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv.treeView)); + + /*Init the content of the treestore (all the name of packages)*/ + init_packages(&tv); + + /*Connection all the signal*/ + g_signal_connect (ct2, "toggled", G_CALLBACK (on_ct2_toggled), &tv); + + gtk_widget_show_all(window); + + gtk_main(); + return EXIT_SUCCESS; +} + +// TODO: free all when exiting +// saving the actions into a file ou clipboard +// adding a research by name feature \ No newline at end of file diff --git a/src/packageSaver.glade b/src/packageSaver.glade new file mode 100644 index 0000000..480fd04 --- /dev/null +++ b/src/packageSaver.glade @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + False + False + + + True + False + + + True + True + center + center + True + True + 500 + 200 + + + True + True + TreeStore + horizontal + + + + + + + + autosize + 100 + Package name + True + 0.5 + + + + + + + + 100 + Keeping ? + True + 0.5 + + + + + + + + + + + + Save in a file + 250 + 25 + True + True + True + top + + + + 200 + + + + + Save in clip board + 250 + 25 + True + True + True + top + + + + 250 + 200 + + + + + + diff --git a/src/packageSaver.glade~ b/src/packageSaver.glade~ new file mode 100644 index 0000000..a35e718 --- /dev/null +++ b/src/packageSaver.glade~ @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + False + False + + + True + False + + + True + True + center + center + True + True + 500 + 200 + + + True + True + TreeStore + horizontal + + + + + + + + autosize + 100 + Package name + True + 0.5 + + + + + + + + 100 + Keeping ? + True + 0.5 + + + + + + + + + Save in a file + 250 + 25 + True + True + True + top + + + + 200 + + + + + Save in clip board + 250 + 25 + True + True + True + top + + + + 250 + 200 + + + + + + From c00685e72f8b3bfcc3fc1217c4b5bd0c811eabd6 Mon Sep 17 00:00:00 2001 From: Arkagedon <38785328+ARKAGEDON@users.noreply.github.com> Date: Wed, 26 Oct 2022 22:00:43 +0000 Subject: [PATCH 2/4] Success!! Finishing adding the packageSaver GUI Just check the TODO for next --- PackageSaver | Bin 26464 -> 26856 bytes include/PkgSaver.h | 1 + pkgToSave.txt | 3 +++ src/PkgSaver.c | 46 ++++++++++++++++++++++++++++++++++++++++ src/main.c | 7 ++++-- src/packageSaver.glade | 18 +--------------- src/packageSaver.glade~ | 4 +++- 7 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 pkgToSave.txt diff --git a/PackageSaver b/PackageSaver index b81d99f578ba4f2c68b0b5573349bed7931a43a6..90872e803e206e67de26aecfb29a20d723aca18e 100755 GIT binary patch delta 5368 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 delta 4026 zcmZu!4Nz3q6~6cFF0d;C0{4BqLfV-?lGcj3M{`8?HL6M5Yx*&=Wm7rp5J8AI` zGwWt&)DshJwY3w+FiD-ktZ6WHbkU3?I*l-PYQ{P#)@i!d8cA!FDDm~&``%+=>t*(w zcfRx8bMHOx-un*0Av*je-IHWCW)a?8vLeSMojYk%1aUE60se~NmS(2*YUj1*;e?Px`+({!bRUDbuT-r3?m9Gy(zV$7=o5#Z(6M2&_}SQc9tsU?*C!G_rQ zGG$P-HRKr12p=SRZF`q{=idhbMTIVP&tfb987G!N+l1 zaCc8Pp2c%;$7q36Q*=y+G7EO#%#dcfOVc36jANQ{%n7~>a3Z=6(cuYbCagDGXqMj* ze>vLkioZucvKj^0nl-H^4RazTemI?wdo8xOjGcTsqR)BCMu_OseZ`O$?-#cSOuQLyE zDRHETkYKYUNf&fEHdvIsF#am;N6~WuhrP_727*rL&7M~MTQ;z#|I=qN#u@g~k@2y@ zsCz6)XBif}^n)ac-tL}9Ou3>&pD%!qpP~ype<^wfg0~Hp1Q2YirQP8;D)Zi z#rZmXDZw`%LS6n$aU&v_+NlOP4;sFNssq7S`NMf!-2u^;7|Y#!k^QWL=WDj!W8bsK zsv}4`0)zR}y1v3A#vJc52lhO}*2jSR*eNLYR70NRTpqGM6w)b&91K?S2bJs%kqbj) zqfGuP_`Xc;QfAv4Vn5~{KHHn4e6~HopG^u~8X^yc$iJ7#y}=((B2NvGkA}z|ncUYE zES|)^gV&0(HMWG<%Vl;T7(a>pS%^G8M7GQ1&qeR%K3rYTDV|YZ;$hAn2;OCW@8$sd zdQWx9=Ol5L;=F>+;7dFh+oprcT&_Q0i5Lhj;U3(lKIR$-u4kELd)HePDB}Z_@eL|^ zhHwjXvkmN<$dESNdXV+QIT}kRho$#F`Ek_;mZ%I0Yy8b_sbQ*QVJxRKby7Ir0G={ncbt;83 zjx5>>HyoCTo^K^-gu-J4+8}dA27MdKP`aUMM#dZ$_Qtz{kg{0gE}=AO4EhWXn#ZLJG4yp5u$!2=T%h9vF6Wv zsjk54m|>e?D^>}LE3M)s;zH+NxTOb2E27s&Fls2grNM*k<(`IIg8#{4EhTi~x;@U`yg@z^8{sX8K$8#&dA7B*ev#IaJL zbx|vI!O$X$qa#aZsM3iK0+w;=)==?Ue4to;MM3gnJ0(!Pcnf_2`uX#Bi!D6)wI%d0 zRM%!KQ;Tl3b0WTPilvyEKNZ(tl32|cUK(a0pW)$^STV1AM{0}lNMHq=JVWU}DQy^h zCoEcG(H+4kS(w^*`UhSIU*Yl=mlB*MZn^ocSJ;a3CVdaa|ctEn(HTHxYkQX?vgdH$xfzACbf5JTB|GT+8KlCX?UB zgTXQuUIhP!drv9e@S6P+^QPHw^iZL!&WVt}VlOMt-}j6MHA^Glo26!23^$fqXa$oF zHy$oFZg|z-j`)*m?4R?#2e~}Xq<^s9K~20ocFkK@U0&g42Wl2b%gVvs@GKl(t_Od^ zwiGw3t((`nn_JhqTbkO|jgy~&5knG|0d3*C*;UR&G%{G&IbW~jl`c-y=%OMZ% za)7CEs=t0!F{M%9S#39{|IUrL;N0rj`th9ww51e}X&Fi@Y(r^;ew0Unt|_I}P=+!a uwxK)>{cB2vztn)xT4Jy&C3^s;*gD%Vyi^|cq84_e`N4A8d>z--nEpSZp%_2_ diff --git a/include/PkgSaver.h b/include/PkgSaver.h index 7aa7ce2..4e0b6bf 100644 --- a/include/PkgSaver.h +++ b/include/PkgSaver.h @@ -12,6 +12,7 @@ struct _treeViewer void init_packages(treeViewer *tv); void on_ct2_toggled (GtkCellRendererToggle *cell, gchar *path_string, gpointer user_data); +void on_saveFile_clicked (GtkButton *btn, gpointer user_data); void on_destroy(); #endif \ No newline at end of file diff --git a/pkgToSave.txt b/pkgToSave.txt new file mode 100644 index 0000000..2a6428f --- /dev/null +++ b/pkgToSave.txt @@ -0,0 +1,3 @@ +a52dec +aalib +acl diff --git a/src/PkgSaver.c b/src/PkgSaver.c index e45f91f..4a01f67 100644 --- a/src/PkgSaver.c +++ b/src/PkgSaver.c @@ -84,6 +84,52 @@ void on_ct2_toggled (GtkCellRendererToggle *cell, gchar *path_string, gpointer u return; } +/** + * @brief Function to save packageName into a file + * + * @param btn button clicked + * @param user_data treeView in which data is + */ +void on_saveFile_clicked (GtkButton *btn, gpointer user_data) +{ + treeViewer *tv = (treeViewer*) user_data; + GtkTreeModel *model = gtk_tree_view_get_model(tv->treeView); + GtkTreeIter iter; + gtk_tree_model_get_iter_first(model, &iter); + FILE *fp; + + fp = fopen("pkgToSave.txt", "w"); + if (fp == NULL) + { + fprintf(stderr, "Error opening the file, please open an issue on github!"); + exit(1); + } + int row = 0; + + while (1) + { + gchar *pkgName; + gboolean isKept = FALSE; + + gtk_tree_model_get(model, &iter, 1, &isKept, -1); //Getting the bool of the row + //fprintf(stderr, "row %d\n",row); + /* Checking if the user asked to keep the row or not */ + if (isKept == TRUE) + { + gtk_tree_model_get(model, &iter, 0, &pkgName, -1); // Getting the packageName + fputs(pkgName, fp); + } + + if (gtk_tree_model_iter_next (model, &iter) == FALSE) + { + break; + } + row++; + } + fclose(fp); + //fprintf(stderr, "File closed"); +} + void on_destroy() { gtk_main_quit(); diff --git a/src/main.c b/src/main.c index 32b3ae3..cb98a04 100644 --- a/src/main.c +++ b/src/main.c @@ -21,6 +21,8 @@ int main(int argc, char *argv[]) GtkCellRenderer *ct1 = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ct1")); GtkCellRenderer *ct2 = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ct2")); GtkTreeSelection *select = GTK_TREE_SELECTION(gtk_builder_get_object(builder, "select")); + GtkButton *saveFileButton = GTK_BUTTON(gtk_builder_get_object(builder, "SaveInFile")); + gtk_tree_view_column_add_attribute(cx1, ct1, "text", 0); // attach renderer to column gtk_tree_view_column_add_attribute(cx2, ct2, "active", 1); // attach renderer to column @@ -32,6 +34,7 @@ int main(int argc, char *argv[]) /*Connection all the signal*/ g_signal_connect (ct2, "toggled", G_CALLBACK (on_ct2_toggled), &tv); + g_signal_connect (saveFileButton, "clicked", G_CALLBACK (on_saveFile_clicked), &tv); gtk_widget_show_all(window); @@ -40,5 +43,5 @@ int main(int argc, char *argv[]) } // TODO: free all when exiting -// saving the actions into a file ou clipboard -// adding a research by name feature \ No newline at end of file +// adding a research by name feature + diff --git a/src/packageSaver.glade b/src/packageSaver.glade index 480fd04..c1708e1 100644 --- a/src/packageSaver.glade +++ b/src/packageSaver.glade @@ -68,7 +68,7 @@ Save in a file - 250 + 500 25 True True @@ -80,22 +80,6 @@ 200 - - - Save in clip board - 250 - 25 - True - True - True - top - - - - 250 - 200 - - diff --git a/src/packageSaver.glade~ b/src/packageSaver.glade~ index a35e718..fa7f99f 100644 --- a/src/packageSaver.glade~ +++ b/src/packageSaver.glade~ @@ -56,6 +56,9 @@ Keeping ? True 0.5 + + + @@ -86,7 +89,6 @@ True True top - 250 From 0936a122304af23b5d86b610227ec37fef607d50 Mon Sep 17 00:00:00 2001 From: Arkagedon <38785328+ARKAGEDON@users.noreply.github.com> Date: Sun, 6 Nov 2022 18:39:55 +0000 Subject: [PATCH 3/4] Update readme --- PackageSaver | Bin 26856 -> 0 bytes README.md | 18 ++++++++++++++++-- pkgToSave.txt | 3 --- src/PkgSaver.c | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) delete mode 100755 PackageSaver delete mode 100644 pkgToSave.txt diff --git a/PackageSaver b/PackageSaver deleted file mode 100755 index 90872e803e206e67de26aecfb29a20d723aca18e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26856 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 L+UGFXfr|eHQsA+9 diff --git a/README.md b/README.md index c518a13..5c68430 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,18 @@ ## Package Saver what is it ? -It's a tools to save the package you want to keep for your reinstallation. They are all in a txt file, just need paste them after your reinstallation to have it back +It's a tool to save packages you want to keep for your distro-hopping. They are all in a txt file, just need paste them after your reinstallation to have it back ## What is automated ? -Currently the only automed thing is the detection and the parsing of your package manager (for the moment only pacman and apk are parsed and working). Later I will work on a GUI and a way to just use this programs to reinstall package from a list of packages. +Currently the only automed thing is the detection and the parsing of your package manager (for the moment only pacman and apk are parsed and working, if you want you can help by adding a parsing and making a pull request). + +A GUI is in work in progress build, check the GUI branch. ## How to use it ? +### If you want to use the command line + 1) Make sure you have the correct permission to use it > chmod 777 packageManager.sh @@ -25,6 +29,16 @@ Currently the only automed thing is the detection and the parsing of your packag > ./packageManager.sh +### If you want to use the GUI + +1) Compile the project + +> make + +2) Run the programs, check packages you want to keeps, and after click on the "Save in a file" button. + +> ./PackageSaver + ## How to contribute ? Everyone is free to contribute, just clone the project, make your modification and make a pull request with an explanaition of your changes diff --git a/pkgToSave.txt b/pkgToSave.txt deleted file mode 100644 index 2a6428f..0000000 --- a/pkgToSave.txt +++ /dev/null @@ -1,3 +0,0 @@ -a52dec -aalib -acl diff --git a/src/PkgSaver.c b/src/PkgSaver.c index 4a01f67..5b3ffd4 100644 --- a/src/PkgSaver.c +++ b/src/PkgSaver.c @@ -98,7 +98,7 @@ void on_saveFile_clicked (GtkButton *btn, gpointer user_data) gtk_tree_model_get_iter_first(model, &iter); FILE *fp; - fp = fopen("pkgToSave.txt", "w"); + fp = fopen("packageToKeep.txt", "w"); if (fp == NULL) { fprintf(stderr, "Error opening the file, please open an issue on github!"); From 3a4fb5a63c5bdbb1d77ec67334f734539184296c Mon Sep 17 00:00:00 2001 From: Oxbian Date: Sun, 29 Jan 2023 17:29:58 +0100 Subject: [PATCH 4/4] Finishing the project --- .gitignore | 3 + {src => assets/glade}/packageSaver.glade | 0 src/main.c | 5 +- src/packageSaver.glade~ | 101 ----------------------- 4 files changed, 4 insertions(+), 105 deletions(-) rename {src => assets/glade}/packageSaver.glade (100%) delete mode 100644 src/packageSaver.glade~ diff --git a/.gitignore b/.gitignore index c6127b3..8480e34 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.d # Object files +.build/ *.o *.ko *.obj @@ -50,3 +51,5 @@ modules.order Module.symvers Mkfile.old dkms.conf + +PackageSaver \ No newline at end of file diff --git a/src/packageSaver.glade b/assets/glade/packageSaver.glade similarity index 100% rename from src/packageSaver.glade rename to assets/glade/packageSaver.glade diff --git a/src/main.c b/src/main.c index cb98a04..5292f12 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,7 @@ int main(int argc, char *argv[]) /*Initialisation of the window*/ gtk_init(&argc, &argv); - GtkBuilder *builder = gtk_builder_new_from_file("src/packageSaver.glade"); + GtkBuilder *builder = gtk_builder_new_from_file("assets/glade/packageSaver.glade"); GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); g_signal_connect(window, "destroy", G_CALLBACK(on_destroy), NULL); @@ -42,6 +42,3 @@ int main(int argc, char *argv[]) return EXIT_SUCCESS; } -// TODO: free all when exiting -// adding a research by name feature - diff --git a/src/packageSaver.glade~ b/src/packageSaver.glade~ deleted file mode 100644 index fa7f99f..0000000 --- a/src/packageSaver.glade~ +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - False - False - - - True - False - - - True - True - center - center - True - True - 500 - 200 - - - True - True - TreeStore - horizontal - - - - - - - - autosize - 100 - Package name - True - 0.5 - - - - - - - - 100 - Keeping ? - True - 0.5 - - - - - - - - - - - - Save in a file - 250 - 25 - True - True - True - top - - - - 200 - - - - - Save in clip board - 250 - 25 - True - True - True - top - - - 250 - 200 - - - - - -