Fill the save project as dialog with current project properties
This commit is contained in:
parent
1a954de817
commit
c62d7760b3
107
daemon/room.c
107
daemon/room.c
|
@ -76,13 +76,28 @@ struct ladish_room * ladish_room_create_internal(const uuid_t uuid_ptr, const ch
|
|||
goto free_room;
|
||||
}
|
||||
|
||||
if (object_path != NULL)
|
||||
{
|
||||
room_ptr->object_path = strdup(object_path);
|
||||
if (room_ptr->object_path == NULL)
|
||||
{
|
||||
log_error("strdup() failed for room name");
|
||||
goto free_name;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ladish_graph_create(&room_ptr->graph, object_path))
|
||||
{
|
||||
goto free_name;
|
||||
goto free_opath;
|
||||
}
|
||||
|
||||
return room_ptr;
|
||||
|
||||
free_opath:
|
||||
if (object_path != NULL)
|
||||
{
|
||||
free(room_ptr->object_path);
|
||||
}
|
||||
free_name:
|
||||
free(room_ptr->name);
|
||||
free_room:
|
||||
|
@ -745,6 +760,59 @@ ladish_room_handle ladish_room_from_list_node(struct list_head * node_ptr)
|
|||
return (ladish_room_handle)list_entry(node_ptr, struct ladish_room, siblings);
|
||||
}
|
||||
|
||||
static bool ladish_room_fill_project_properties(DBusMessageIter * iter_ptr, struct ladish_room * room_ptr)
|
||||
{
|
||||
DBusMessageIter dict_iter;
|
||||
|
||||
if (!dbus_message_iter_open_container(iter_ptr, DBUS_TYPE_ARRAY, "{sv}", &dict_iter))
|
||||
{
|
||||
log_error("dbus_message_iter_open_container() failed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!dbus_maybe_add_dict_entry_string(&dict_iter, "name", room_ptr->project_name))
|
||||
{
|
||||
log_error("dbus_maybe_add_dict_entry_string() failed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!dbus_maybe_add_dict_entry_string(&dict_iter, "dir", room_ptr->project_dir))
|
||||
{
|
||||
log_error("dbus_maybe_add_dict_entry_string() failed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!dbus_message_iter_close_container(iter_ptr, &dict_iter))
|
||||
{
|
||||
log_error("dbus_message_iter_close_container() failed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ladish_room_emit_project_properties_changed(struct ladish_room * room_ptr)
|
||||
{
|
||||
DBusMessage * message_ptr;
|
||||
DBusMessageIter iter;
|
||||
|
||||
message_ptr = dbus_message_new_signal(room_ptr->object_path, IFACE_ROOM, "ProjectPropertiesChanged");
|
||||
if (message_ptr == NULL)
|
||||
{
|
||||
log_error("dbus_message_new_signal() failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
dbus_message_iter_init_append(message_ptr, &iter);
|
||||
|
||||
if (ladish_room_fill_project_properties(&iter, room_ptr))
|
||||
{
|
||||
dbus_signal_send(g_dbus_connection, message_ptr);
|
||||
}
|
||||
|
||||
dbus_message_unref(message_ptr);
|
||||
}
|
||||
|
||||
/**********************************************************************************/
|
||||
/* D-Bus methods */
|
||||
/**********************************************************************************/
|
||||
|
@ -805,6 +873,33 @@ static void ladish_room_dbus_load_project(struct dbus_method_call * call_ptr)
|
|||
}
|
||||
}
|
||||
|
||||
static void ladish_room_dbus_get_project_properties(struct dbus_method_call * call_ptr)
|
||||
{
|
||||
DBusMessageIter iter;
|
||||
|
||||
call_ptr->reply = dbus_message_new_method_return(call_ptr->message);
|
||||
if (call_ptr->reply == NULL)
|
||||
{
|
||||
goto fail;
|
||||
}
|
||||
|
||||
dbus_message_iter_init_append(call_ptr->reply, &iter);
|
||||
|
||||
if (!ladish_room_fill_project_properties(&iter, room_ptr))
|
||||
{
|
||||
goto fail_unref;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
fail_unref:
|
||||
dbus_message_unref(call_ptr->reply);
|
||||
call_ptr->reply = NULL;
|
||||
|
||||
fail:
|
||||
log_error("Ran out of memory trying to construct method return");
|
||||
}
|
||||
|
||||
#undef room_ptr
|
||||
|
||||
METHOD_ARGS_BEGIN(GetName, "Get room name")
|
||||
|
@ -823,14 +918,24 @@ METHOD_ARGS_BEGIN(LoadProject, "Load project")
|
|||
METHOD_ARG_DESCRIBE_IN("project_dir", "s", "Project directory")
|
||||
METHOD_ARGS_END
|
||||
|
||||
METHOD_ARGS_BEGIN(GetProjectProperties, "Get project properties")
|
||||
SIGNAL_ARG_DESCRIBE("properties", "a{sv}", "project properties")
|
||||
METHOD_ARGS_END
|
||||
|
||||
METHODS_BEGIN
|
||||
METHOD_DESCRIBE(GetName, ladish_room_dbus_get_name) /* sync */
|
||||
METHOD_DESCRIBE(SaveProject, ladish_room_dbus_save_project) /* async */
|
||||
METHOD_DESCRIBE(UnloadProject, ladish_room_dbus_unload_project) /* async */
|
||||
METHOD_DESCRIBE(LoadProject, ladish_room_dbus_load_project) /* async */
|
||||
METHOD_DESCRIBE(GetProjectProperties, ladish_room_dbus_get_project_properties) /* sync */
|
||||
METHODS_END
|
||||
|
||||
SIGNAL_ARGS_BEGIN(ProjectPropertiesChanged, "Project properties changed")
|
||||
SIGNAL_ARG_DESCRIBE("properties", "a{sv}", "project properties")
|
||||
SIGNAL_ARGS_END
|
||||
|
||||
SIGNALS_BEGIN
|
||||
SIGNAL_DESCRIBE(ProjectPropertiesChanged)
|
||||
SIGNALS_END
|
||||
|
||||
INTERFACE_BEGIN(g_interface_room, IFACE_ROOM)
|
||||
|
|
|
@ -55,4 +55,6 @@ struct ladish_room
|
|||
char * project_name;
|
||||
};
|
||||
|
||||
void ladish_room_emit_project_properties_changed(struct ladish_room * room_ptr);
|
||||
|
||||
#endif /* #ifndef ROOM_INTERNAL_H__FAF5B68F_E419_442A_8F9B_C729BAC00422__INCLUDED */
|
||||
|
|
|
@ -188,6 +188,8 @@ static bool ladish_room_save_project_do(struct ladish_room * room_ptr)
|
|||
|
||||
ladish_app_supervisor_save_L1(room_ptr->app_supervisor);
|
||||
|
||||
ladish_room_emit_project_properties_changed(room_ptr);
|
||||
|
||||
ret = true;
|
||||
|
||||
close:
|
||||
|
|
|
@ -33,13 +33,24 @@ void ladish_run_save_project_dialog(ladish_room_proxy_handle room)
|
|||
GtkEntry * path;
|
||||
GtkEntry * name;
|
||||
GtkResponseType response;
|
||||
char * project_dir;
|
||||
char * project_name;
|
||||
|
||||
dialog = get_gtk_builder_widget("project_save_as_dialog");
|
||||
path = GTK_ENTRY(get_gtk_builder_widget("project_save_as_path_entry"));
|
||||
name = GTK_ENTRY(get_gtk_builder_widget("project_save_as_name_entry"));
|
||||
|
||||
gtk_entry_set_text(path, "");
|
||||
gtk_entry_set_text(name, "");
|
||||
if (!ladish_room_proxy_get_project_properties(room, &project_dir, &project_name))
|
||||
{
|
||||
error_message_box("Get project properties failed, please inspect logs.");
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_entry_set_text(path, project_dir);
|
||||
gtk_entry_set_text(name, project_name);
|
||||
|
||||
free(project_name);
|
||||
free(project_dir);
|
||||
|
||||
gtk_widget_show(dialog);
|
||||
response = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
|
|
|
@ -144,4 +144,56 @@ bool ladish_room_proxy_unload_project(ladish_room_proxy_handle proxy)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ladish_room_proxy_get_project_properties(ladish_room_proxy_handle proxy, char ** project_dir, char ** project_name)
|
||||
{
|
||||
DBusMessage * reply_ptr;
|
||||
DBusMessageIter iter;
|
||||
const char * name;
|
||||
const char * dir;
|
||||
char * name_buffer;
|
||||
char * dir_buffer;
|
||||
|
||||
if (!dbus_call(proxy_ptr->service, proxy_ptr->object, IFACE_ROOM, "GetProjectProperties", "", NULL, &reply_ptr))
|
||||
{
|
||||
log_error("GetProjectProperties() failed.");
|
||||
return false;
|
||||
}
|
||||
|
||||
dbus_message_iter_init(reply_ptr, &iter);
|
||||
|
||||
if (!dbus_iter_get_dict_entry_string(&iter, "name", &name))
|
||||
{
|
||||
name = "";
|
||||
}
|
||||
|
||||
if (!dbus_iter_get_dict_entry_string(&iter, "dir", &dir))
|
||||
{
|
||||
dir = "";
|
||||
}
|
||||
|
||||
name_buffer = strdup(name);
|
||||
if (name_buffer == NULL)
|
||||
{
|
||||
log_error("strdup() failed for project name");
|
||||
dbus_message_unref(reply_ptr);
|
||||
return false;
|
||||
}
|
||||
|
||||
dir_buffer = strdup(dir);
|
||||
if (dir_buffer == NULL)
|
||||
{
|
||||
log_error("strdup() failed for project dir");
|
||||
free(name_buffer);
|
||||
dbus_message_unref(reply_ptr);
|
||||
return false;
|
||||
}
|
||||
|
||||
dbus_message_unref(reply_ptr);
|
||||
|
||||
*project_name = name_buffer;
|
||||
*project_dir = dir_buffer;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#undef proxy_ptr
|
||||
|
|
|
@ -37,5 +37,6 @@ char * ladish_room_proxy_get_name(ladish_room_proxy_handle proxy);
|
|||
bool ladish_room_proxy_load_project(ladish_room_proxy_handle proxy, const char * project_dir);
|
||||
bool ladish_room_proxy_save_project(ladish_room_proxy_handle proxy, const char * project_dir, const char * project_name);
|
||||
bool ladish_room_proxy_unload_project(ladish_room_proxy_handle proxy);
|
||||
bool ladish_room_proxy_get_project_properties(ladish_room_proxy_handle proxy, char ** project_dir, char ** project_name);
|
||||
|
||||
#endif /* #ifndef ROOM_PROXY_H__0FDD1790_EF07_4C6C_8C95_0F75E29A3E81__INCLUDED */
|
||||
|
|
Loading…
Reference in New Issue