master #99

Merged
asmeron merged 8 commits from YanTheKaller/ubl-settings-repomanager:master into master 5 months ago

@ -125,8 +125,8 @@ void on_file_chooser_file_activate(GtkFileChooser *self, repo_add_window *window
gtk_list_store_append(window->PackagesList,&iter); gtk_list_store_append(window->PackagesList,&iter);
gtk_list_store_set(window->PackagesList,&iter,1,filename,2,path,-1); gtk_list_store_set(window->PackagesList,&iter,1,filename,2,path,-1);
free(filename); free(filename);
g_slist_free(list);
} }
g_slist_free(list);
} }
gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(self))); gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(self)));
} }
@ -721,7 +721,7 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){
char *repo_string = yon_char_parsed_to_string(repos,size,", "); char *repo_string = yon_char_parsed_to_string(repos,size,", ");
char *archs_string = yon_char_parsed_to_string(archs,arch_size,", "); char *archs_string = yon_char_parsed_to_string(archs,arch_size,", ");
char *info = get_storage_info_label(target,repo_string,archs_string); char *info = get_storage_info_label(target,repo_string,archs_string);
gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),info); gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info);
int lvlsize; int lvlsize;
config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,2); config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,2);
for (int i=0;i<lvlsize;i++){ for (int i=0;i<lvlsize;i++){
@ -742,7 +742,7 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){
char *archs_string = yon_char_parsed_to_string(archs,arch_size,", "); char *archs_string = yon_char_parsed_to_string(archs,arch_size,", ");
char *sign = yon_signature_get(GTK_TREE_VIEW(widgets->ReposTree),&iter); char *sign = yon_signature_get(GTK_TREE_VIEW(widgets->ReposTree),&iter);
char *info = get_repo_info_label(name,archs_string,sign); char *info = get_repo_info_label(name,archs_string,sign);
gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),info); gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info);
int lvlsize; int lvlsize;
config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,3); config_str level = yon_tree_store_get_all_at_level(widgets->RepoList,&iter,&lvlsize,2,3);
for (int i=0;i<lvlsize;i++){ for (int i=0;i<lvlsize;i++){
@ -761,7 +761,7 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){
char *trg; char *trg;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&itor,2,&trg,-1); gtk_tree_model_get(GTK_TREE_MODEL(widgets->RepoList),&itor,2,&trg,-1);
char *info = get_arch_info_label(trg,name); char *info = get_arch_info_label(trg,name);
gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),info); gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),info);
char *packages; char *packages;
int size; int size;
char *arch = yon_char_new(target); char *arch = yon_char_new(target);
@ -807,7 +807,7 @@ void on_main_tree_selection_changed(GtkWidget *self, main_window *widgets){
} }
void on_package_selection_changed(GtkWidget *self, main_window *widgets){ void on_package_selection_changed(GtkWidget *self, main_window *widgets){
gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),""); gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),"");
GtkTreeIter iter,itar; GtkTreeIter iter,itar;
GtkTreeModel *model, *model2; GtkTreeModel *model, *model2;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->RepoFileTree)),&model,&iter)){
@ -827,10 +827,22 @@ void on_package_selection_changed(GtkWidget *self, main_window *widgets){
char *command = get_package_info_command(yon_char_unite(path,"/",filename,NULL)); char *command = get_package_info_command(yon_char_unite(path,"/",filename,NULL));
yon_debug_output("%s\n",command); yon_debug_output("%s\n",command);
config_str parsed = yon_config_load(command,&size); config_str parsed = yon_config_load(command,&size);
for (int i=0;i<size;i++){
if (!yon_char_is_empty(parsed[i])&&strcmp(parsed[i],"\n")&&strstr(parsed[i],":")){
char *title = yon_char_divide_search(parsed[i],":",-1);
char *temp = parsed[i];
if (strstr(temp,"@")||strstr(temp,"<")||strstr(temp,">")) temp = g_markup_escape_text(temp,strlen(temp));
temp = yon_char_replace(temp,">","&gt;");
temp = yon_char_replace(temp,"<","&lt;");
parsed[i] = yon_char_unite("<b>",title,":</b>",temp,NULL);
if (!yon_char_is_empty(temp)) free(temp);
if (!yon_char_is_empty(title)) free(title);
}
}
char *full = yon_char_parsed_to_string(parsed,size,""); char *full = yon_char_parsed_to_string(parsed,size,"");
gtk_label_set_text(GTK_LABEL(widgets->InformationLabel),full); gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),full);
yon_char_parsed_free(parsed,size); yon_char_parsed_free(parsed,size);
free(full); if (!yon_char_is_empty(full)) free(full);
break; break;
} }
} }
@ -873,6 +885,11 @@ void on_key_generate_accept(GtkWidget *self, key_creation_window* window){
const char *email = gtk_entry_get_text(GTK_ENTRY(window->EmailEntry)); 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))); 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)); 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; GtkWidget *highlight_target=NULL;
if (yon_char_is_empty(name)){ if (yon_char_is_empty(name)){
highlight_target=window->NameEntry; highlight_target=window->NameEntry;
@ -882,8 +899,6 @@ void on_key_generate_accept(GtkWidget *self, key_creation_window* window){
highlight_target=window->EmailEntry; highlight_target=window->EmailEntry;
} else if (yon_char_is_empty(strength)){ } else if (yon_char_is_empty(strength)){
highlight_target=window->KeyStrengthSpin; highlight_target=window->KeyStrengthSpin;
} else if (yon_char_is_empty(comment)){
highlight_target=window->CommentsEntry;
} }
if (highlight_target){ if (highlight_target){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
@ -905,12 +920,14 @@ void on_key_generate_accept(GtkWidget *self, key_creation_window* window){
ex_status = system(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 { } else {
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_INCORRECT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); 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; return;
} }
if (!ex_status) if (!ex_status)
yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(KEY_CREATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
else else
yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(KEY_CREATION_FAILURE_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
gtk_widget_destroy(window->Window); gtk_widget_destroy(window->Window);
yon_sign_list_update(); yon_sign_list_update();
} }
@ -934,6 +951,11 @@ key_creation_window *yon_key_creation_window_new(){
window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry");
window->PasswordConfirmationEntry = yon_gtk_builder_get_widget(builder,"PasswordConfirmationEntry"); 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->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->ExpireButton),"clicked",G_CALLBACK(on_calendar_open),window);
g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window); g_signal_connect(G_OBJECT(window->AddButton),"clicked",G_CALLBACK(on_key_generate_accept),window);
@ -949,6 +971,7 @@ key_creation_window *yon_key_creation_window_new(){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->EncryptionCombo),parsed[2],parsed[0]); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->EncryptionCombo),parsed[2],parsed[0]);
yon_char_parsed_free(parsed,parsed_size); yon_char_parsed_free(parsed,parsed_size);
} }
gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->EncryptionCombo),"RSA");
return window; return window;
} }

@ -90,13 +90,13 @@ typedef char* string;
#define yon_sign_package(storage,repo,arch,target,sign) yon_char_unite("repo-manager add -r ''",repo,"'' -a '",arch,"' -d '", storage,"' -s ",sign," ",target,NULL) #define yon_sign_package(storage,repo,arch,target,sign) yon_char_unite("repo-manager add -r ''",repo,"'' -a '",arch,"' -d '", storage,"' -s ",sign," ",target,NULL)
#define yon_sign_repo(storage,repo,sign) yon_char_unite("repo-manager add -f -r ''",repo,"'' -d '", storage,"' --sign-repo=",sign,NULL) #define yon_sign_repo(storage,repo,sign) yon_char_unite("repo-manager add -f -r ''",repo,"'' -d '", storage,"' --sign-repo=",sign,NULL)
#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_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_label(path, repos, archs) yon_char_unite("<b>",STORAGE_PATH_LABEL,":</b> ", path,"\n\n<b>", REPOS_LABEL,":</b> ",repos,"\n\n<b>",ARCHS_LABEL,":</b> ",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) #define get_repo_info_label(repos, archs,sign) yon_char_unite("<b>",REPO_NAME_LABEL,":</b> ",repos,"\n\n<b>",ARCHS_LABEL,":</b> ",archs,"\n\n",sign,NULL)
#define get_arch_info_label(repos, archs) yon_char_unite(REPO_NAME_LABEL,": ",repos,"\n\n",ARCHS_LABEL,": ",archs,NULL) #define get_arch_info_label(repos, archs) yon_char_unite("<b>",REPO_NAME_LABEL,":</b> ",repos,"\n\n<b>",ARCHS_LABEL,":</b> ",archs,NULL)
#define yon_generate_key_command(type,name,email,strength,comment,expire,password) yon_char_unite("gpg --batch --gen-key <<EOF\n\ #define yon_generate_key_command(type,name,email,strength,comment,expire,password) yon_char_unite("gpg --batch --gen-key <<EOF\n\
%echo Generating a basic OpenPGP key\n\ %echo Generating a basic OpenPGP key\n\
@ -107,7 +107,7 @@ Subkey-Length: ",strength,"\n\
Name-Real: ",name,"\n\ Name-Real: ",name,"\n\
Name-Comment: ",comment,"\n\ Name-Comment: ",comment,"\n\
Name-Email: ",email,"\n\ Name-Email: ",email,"\n\
Expire-Date: ",expire,"\n\ Expire-Date: ",!yon_char_is_empty(expire)?expire:"0","\n\
Passphrase: ",password,"\n\ Passphrase: ",password,"\n\
%commit\n\ %commit\n\
%echo done\n\ %echo done\n\
@ -122,7 +122,7 @@ Subkey-Length: ",strength,"\n\
Name-Real: ",name,"\n\ Name-Real: ",name,"\n\
Name-Comment: ",comment,"\n\ Name-Comment: ",comment,"\n\
Name-Email: ",email,"\n\ Name-Email: ",email,"\n\
Expire-Date: ",expire,"\n\ Expire-Date: ",!yon_char_is_empty(expire)?expire:"0","\n\
%no-protection\n\ %no-protection\n\
%commit\n\ %commit\n\
%echo done\n\ %echo done\n\

@ -164,4 +164,6 @@
#define EMPTY_FOLDER_LABEL _("Folder must contain repositories") #define EMPTY_FOLDER_LABEL _("Folder must contain repositories")
#define FILES_EXIST_LABEL _("Folder must not be empty") #define FILES_EXIST_LABEL _("Folder must not be empty")
#define NAME_SHORT_LABEL _("Name must be 5 or more symbols")

@ -190,6 +190,7 @@
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="hscrollbar-policy">never</property>
<child> <child>
<object class="GtkViewport"> <object class="GtkViewport">
<property name="visible">True</property> <property name="visible">True</property>

@ -288,6 +288,7 @@
<child> <child>
<object class="GtkEntry" id="ExpireEntry"> <object class="GtkEntry" id="ExpireEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
</object> </object>
<packing> <packing>
@ -299,6 +300,7 @@
<child> <child>
<object class="GtkButton" id="ExpireButton"> <object class="GtkButton" id="ExpireButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="image">image1</property> <property name="image">image1</property>
@ -343,6 +345,8 @@
<object class="GtkEntry" id="PasswordEntry"> <object class="GtkEntry" id="PasswordEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -379,6 +383,8 @@
<object class="GtkEntry" id="PasswordConfirmationEntry"> <object class="GtkEntry" id="PasswordConfirmationEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>

@ -21,6 +21,7 @@
<object class="GtkEntry" id="RepoNameEntry"> <object class="GtkEntry" id="RepoNameEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="width-chars">10</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>

@ -524,3 +524,7 @@ msgstr ""
#: source/ubl-strings.h:167 #: source/ubl-strings.h:167
msgid "Folder must not be empty" msgid "Folder must not be empty"
msgstr "" msgstr ""
#: source/ubl-strings.h:167
msgid "Name must be 5 or more symbols"
msgstr ""

@ -407,7 +407,7 @@ msgstr "Выберите репозиторий или пакет для под
#: source/ubl-strings.h:117 #: source/ubl-strings.h:117
msgid "Name:" msgid "Name:"
msgstr "Название:" msgstr "Имя:"
#: source/ubl-strings.h:118 #: source/ubl-strings.h:118
msgid "Branches:" msgid "Branches:"
@ -536,3 +536,7 @@ msgstr "Директория должна содержать репозитор
#: source/ubl-strings.h:167 #: source/ubl-strings.h:167
msgid "Folder must not be empty" msgid "Folder must not be empty"
msgstr "Директория должна быть пустой" msgstr "Директория должна быть пустой"
#: source/ubl-strings.h:167
msgid "Name must be 5 or more symbols"
msgstr "Имя должно быть в длину 5 или больше символов"

Loading…
Cancel
Save