Main window icons and checks

pull/108/head
parent c87ddd0dfb
commit e95eb12c42
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -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;

@ -16,6 +16,7 @@ void on_storage_open(GtkWidget *self, storage_config_window *window){
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,"");
}
}
@ -31,31 +32,41 @@ void on_storage_create(GtkWidget *self, storage_config_window *window){
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));
yon_config_remove_by_key((char*)path);
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);
}
}
@ -122,7 +133,17 @@ void yon_storage_config_update(storage_config_window *window){
void yon_storage_remove(char *key, storage_struct *storage,void*){
char *parameter = config(key);
yon_window_config_add_instant_parameter(key,"storage_info",parameter,YON_TYPE_STRING);
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;i<size;i++){
@ -142,27 +163,8 @@ void on_storage_accept(GtkWidget *self, dictionary *dict){
g_hash_table_unref(window->storages_copy);
free(window);
yon_interface_update(widgets);
// 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 on_storage_changed(GtkWidget *self, storage_config_window *window){
yon_storage_config_update(window);
}
@ -206,7 +208,7 @@ storage_config_window *yon_storage_config_window_new(){
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);

@ -86,9 +86,11 @@ int yon_storages_load(main_window *widgets){
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);
}
}
@ -100,7 +102,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);
}
@ -111,8 +113,18 @@ 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;
if (arch_status != 2 || package_status != 2){
image_name = warning_icon_name;
} else if (!arch_status&&!package_status){
image_name = key_icon_name;
}
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,-1);
}
void yon_interface_update(main_window *widgets){
@ -263,7 +275,28 @@ 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;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(packages[i],&parsed_size,";");
if (size){
if (strcmp(parsed[0],"-")){
int sign_status = system(yon_repo_get_signature_status(((arch_struct*)data_struct)->storage_path,((arch_struct*)data_struct)->repo_name,((arch_struct*)data_struct)->name,parsed[1]));
char *sign_icon = "";
if (!sign_status){
sign_icon = package_signature_icon_name;
} else {
sign_icon = package_signature_error_icon_name;
}
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],-1);
}
yon_char_parsed_free(parsed,parsed_size);
}
}
yon_char_parsed_free(packages,size);
}
}
}
@ -284,12 +317,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);
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;

@ -420,3 +420,4 @@ 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);
Loading…
Cancel
Save