From 6fe0756cd62540ee2b3c53419a637ad96a045d8a Mon Sep 17 00:00:00 2001 From: Julian Sparber Date: Sun, 3 Sep 2017 17:05:58 +0200 Subject: [PATCH] [feat] use a pointer to the peer struct as referenc to the device instate of just the name of the device --- src/teleportapp.c | 18 +++++++++-------- src/teleportappwin.c | 19 +++++++++--------- src/teleportappwin.h | 5 +++-- src/teleportpeer.c | 46 ++++++++++++++++++++------------------------ src/teleportpeer.h | 9 ++++++++- 5 files changed, 51 insertions(+), 46 deletions(-) diff --git a/src/teleportapp.c b/src/teleportapp.c index efe5776..0608593 100644 --- a/src/teleportapp.c +++ b/src/teleportapp.c @@ -49,22 +49,24 @@ static void create_finished_notification (const char *file_name, const int file_ } -gboolean mainLoopAddPeerCallback (gpointer name) { - update_remote_device_list(win, (char *)name); +gboolean mainLoopAddPeerCallback (gpointer peer) { + //g_print("new New device name is %p\n", ((Peer *)peer)); + //g_print("new New device name is %s\n", ((Peer *)peer)->name); + update_remote_device_list(win, (Peer *) peer); return G_SOURCE_REMOVE; } -gboolean mainLoopRemovePeerCallback (gpointer name) { - update_remote_device_list_remove(win, (char *)name); +gboolean mainLoopRemovePeerCallback (gpointer peer) { + update_remote_device_list_remove(win, (Peer *) peer); return G_SOURCE_REMOVE; } -void callback_add_peer(GObject *instance, char *name, TeleportAppWindow *win ) { - g_idle_add(mainLoopAddPeerCallback, g_strdup(name)); +void callback_add_peer(GObject *instance, Peer *peer, TeleportAppWindow *win ) { + g_idle_add(mainLoopAddPeerCallback, peer); } -void callback_remove_peer(GObject *instance, char *name, TeleportAppWindow *win ) { - g_idle_add(mainLoopRemovePeerCallback, g_strdup(name)); +void callback_remove_peer(GObject *instance, Peer *peer, TeleportAppWindow *win ) { + g_idle_add(mainLoopRemovePeerCallback, peer); } void callback_notify_user(GObject *instance, char *name, TeleportAppWindow *win ) { diff --git a/src/teleportappwin.c b/src/teleportappwin.c index b4e7aca..4e08edd 100644 --- a/src/teleportappwin.c +++ b/src/teleportappwin.c @@ -3,7 +3,7 @@ #include "teleportapp.h" #include "teleportappwin.h" #include "server.h" - +#include "teleportpeer.h" GtkWidget *find_child(GtkWidget *, const gchar *); TeleportAppWindow *mainWin; @@ -45,11 +45,11 @@ teleport_app_window_init (TeleportAppWindow *win) } static void -open_file_picker(GtkButton *btn, GString *deviceName) { +open_file_picker(GtkButton *btn, Peer *device) { GtkWidget *dialog; GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; gint res; - g_print("Open file chooser for submitting a file to %s\n", deviceName); + g_print("Open file chooser for submitting a file to %s with Address %s\n", device->name, device->ip); dialog = gtk_file_chooser_dialog_new ("Open File", GTK_WINDOW(mainWin), @@ -67,15 +67,14 @@ open_file_picker(GtkButton *btn, GString *deviceName) { GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog); filename = gtk_file_chooser_get_filename (chooser); g_print("Choosen file is %s\n", filename); - addRouteToServer(g_compute_checksum_for_string (G_CHECKSUM_SHA256, filename, -1), filename, "localhost"); - //open_file (filename); + addRouteToServer(g_compute_checksum_for_string (G_CHECKSUM_SHA256, filename, -1), filename, device->ip); g_free (filename); } gtk_widget_destroy (dialog); } -void update_remote_device_list(TeleportAppWindow *win, char *name) { +void update_remote_device_list(TeleportAppWindow *win, Peer *device) { TeleportAppWindowPrivate *priv; GtkBuilder *builder_remote_list; GtkWidget *row; @@ -89,10 +88,10 @@ void update_remote_device_list(TeleportAppWindow *win, char *name) { row = GTK_WIDGET (gtk_builder_get_object (builder_remote_list, "remote_device_row")); name_label = GTK_LABEL (gtk_builder_get_object (builder_remote_list, "device_name")); - gtk_label_set_text(name_label, name); + gtk_label_set_text(name_label, device->name); gtk_list_box_insert(GTK_LIST_BOX(priv->remote_devices_list), row, -1); send_btn = GTK_BUTTON (gtk_builder_get_object (builder_remote_list, "send_btn")); - g_signal_connect (send_btn, "clicked", G_CALLBACK (open_file_picker), name); + g_signal_connect (send_btn, "clicked", G_CALLBACK (open_file_picker), device); //line = GTK_WIDGET (gtk_builder_get_object (builder_remote_list, "remote_space_row")); //gtk_list_box_insert(GTK_LIST_BOX(priv->remote_devices_list), line, -1); @@ -100,7 +99,7 @@ void update_remote_device_list(TeleportAppWindow *win, char *name) { } -void update_remote_device_list_remove(TeleportAppWindow *win, char *name) { +void update_remote_device_list_remove(TeleportAppWindow *win, Peer *device) { TeleportAppWindowPrivate *priv; GtkWidget *box; GtkListBoxRow *remote_row; @@ -115,7 +114,7 @@ void update_remote_device_list_remove(TeleportAppWindow *win, char *name) { while(remote_row != NULL) { name_label = GTK_LABEL(find_child(GTK_WIDGET(remote_row), "GtkLabel")); - if (name_label != NULL && g_strcmp0(name, gtk_label_get_text(name_label)) == 0) { + if (name_label != NULL && g_strcmp0(device->name, gtk_label_get_text(name_label)) == 0) { gtk_container_remove (GTK_CONTAINER(box), GTK_WIDGET(remote_row)); } i++; diff --git a/src/teleportappwin.h b/src/teleportappwin.h index eeff103..65ea79d 100644 --- a/src/teleportappwin.h +++ b/src/teleportappwin.h @@ -3,6 +3,7 @@ #include #include "teleportapp.h" +#include "teleportpeer.h" #define TELEPORT_APP_WINDOW_TYPE (teleport_app_window_get_type ()) @@ -11,8 +12,8 @@ G_DECLARE_FINAL_TYPE (TeleportAppWindow, teleport_app_window, TELEPORT, APP_WIND TeleportAppWindow *teleport_app_window_new (TeleportApp *app); void teleport_app_window_open (TeleportAppWindow *win, GFile *file); - extern void update_remote_device_list(TeleportAppWindow *, char *); - extern void update_remote_device_list_remove(TeleportAppWindow *, char *); + extern void update_remote_device_list(TeleportAppWindow *, Peer *); + extern void update_remote_device_list_remove(TeleportAppWindow *, Peer *); #endif /* __TELEPORTAPPWIN_H */ diff --git a/src/teleportpeer.c b/src/teleportpeer.c index 23c7554..1631b5b 100644 --- a/src/teleportpeer.c +++ b/src/teleportpeer.c @@ -5,19 +5,12 @@ enum { ADD, REMOVE, N_SIGNALS }; -typedef struct Peers { - char *name; - char *ip; - gint port; -} Peer; - static gint signalIds [N_SIGNALS]; struct _TeleportPeer { GObject parent; GArray *list; - /* instance members */ }; @@ -44,7 +37,7 @@ teleport_peer_class_init (TeleportPeerClass *klass) NULL /* C marshaller */, G_TYPE_NONE /* return_type */, 1, - G_TYPE_STRING); + G_TYPE_POINTER); signalIds[REMOVE] = g_signal_new ("removepeer", G_TYPE_OBJECT, @@ -55,14 +48,14 @@ teleport_peer_class_init (TeleportPeerClass *klass) NULL /* C marshaller */, G_TYPE_NONE /* return_type */, 1, - G_TYPE_STRING); + G_TYPE_POINTER); } static void teleport_peer_init (TeleportPeer *self) { - self->list = g_array_new (FALSE, FALSE, sizeof(Peer)); + self->list = g_array_new (FALSE, FALSE, sizeof(Peer *)); } gchar * teleport_peer_get_name (TeleportPeer *self, gint index, GError **error) @@ -71,47 +64,50 @@ gchar * teleport_peer_get_name (TeleportPeer *self, gint index, GError **error) //g_return_if_fail (error == NULL || *error == NULL); if (index > self->list->len-1) return NULL; - Peer element = g_array_index(self->list, Peer, index); - return element.name; + Peer *element = g_array_index(self->list, Peer *, index); + return element->name; } gchar * teleport_peer_get_ip (TeleportPeer *self, gint index, GError **error) { //g_return_if_fail (TELEPORT_IS_PEER (self)); //g_return_if_fail (error == NULL || *error == NULL); - Peer element = g_array_index(self->list, Peer, index); + Peer *element = g_array_index(self->list, Peer *, index); if (index > self->list->len-1) return NULL; - return element.ip; + return element->ip; } gint teleport_peer_get_port (TeleportPeer *self, gint index, GError **error) { - Peer element = g_array_index(self->list, Peer, index); + Peer *element = g_array_index(self->list, Peer*, index); if (index > self->list->len-1) return 0; - return element.port; + return element->port; } void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port) { - Peer new; - new.ip = ip; - new.port = port; - new.name = name; + Peer *new = g_new(Peer, 1); + new->ip = ip; + new->port = port; + new->name = name; g_array_append_val(self->list, new); - g_signal_emit (self, signalIds[ADD], 0, name); + + g_signal_emit (self, signalIds[ADD], 0, new); } -void teleport_peer_remove_peer (TeleportPeer *self, gchar * name) +void teleport_peer_remove_peer (TeleportPeer *self, Peer *device) { Peer element; gboolean found = FALSE; + //Maybe I could just compare the addresses for (int i = 0; i < self->list->len && !found; i++) { - Peer element = g_array_index(self->list, Peer, i); - if (g_strcmp0(element.name, name) == 0) { + Peer *element = g_array_index(self->list, Peer *, i); + if (g_strcmp0(element->name, device->name) == 0) { found = TRUE; g_array_remove_index(self->list, i); } } - g_signal_emit (self, signalIds[REMOVE], 0, name); + g_signal_emit (self, signalIds[REMOVE], 0, device); } + diff --git a/src/teleportpeer.h b/src/teleportpeer.h index 285ce65..1e686b1 100644 --- a/src/teleportpeer.h +++ b/src/teleportpeer.h @@ -6,10 +6,17 @@ #define TELEPORT_TYPE_PEER teleport_peer_get_type () G_DECLARE_FINAL_TYPE (TeleportPeer, teleport_peer, TELEPORT, PEER, GObject) +typedef struct Peers { + char *name; + char *ip; + gint port; +} Peer; + + gchar* teleport_peer_get_name (TeleportPeer *self, gint index, GError **error); gchar* teleport_peer_get_ip (TeleportPeer *self, gint index, GError **error); gint teleport_peer_get_port (TeleportPeer *self, gint index, GError **error); void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port); -void teleport_peer_remove_peer (TeleportPeer *self, gchar * name); +void teleport_peer_remove_peer (TeleportPeer *, Peer *); #endif /* __TELEPORTPEER_H */