[feat] use a pointer to the peer struct as referenc to the device instate of just the name of the device

This commit is contained in:
Julian Sparber
2017-09-03 17:05:58 +02:00
parent 1530816fab
commit 6fe0756cd6
5 changed files with 51 additions and 46 deletions

View File

@@ -49,22 +49,24 @@ static void create_finished_notification (const char *file_name, const int file_
} }
gboolean mainLoopAddPeerCallback (gpointer name) { gboolean mainLoopAddPeerCallback (gpointer peer) {
update_remote_device_list(win, (char *)name); //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; return G_SOURCE_REMOVE;
} }
gboolean mainLoopRemovePeerCallback (gpointer name) { gboolean mainLoopRemovePeerCallback (gpointer peer) {
update_remote_device_list_remove(win, (char *)name); update_remote_device_list_remove(win, (Peer *) peer);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
void callback_add_peer(GObject *instance, char *name, TeleportAppWindow *win ) { void callback_add_peer(GObject *instance, Peer *peer, TeleportAppWindow *win ) {
g_idle_add(mainLoopAddPeerCallback, g_strdup(name)); g_idle_add(mainLoopAddPeerCallback, peer);
} }
void callback_remove_peer(GObject *instance, char *name, TeleportAppWindow *win ) { void callback_remove_peer(GObject *instance, Peer *peer, TeleportAppWindow *win ) {
g_idle_add(mainLoopRemovePeerCallback, g_strdup(name)); g_idle_add(mainLoopRemovePeerCallback, peer);
} }
void callback_notify_user(GObject *instance, char *name, TeleportAppWindow *win ) { void callback_notify_user(GObject *instance, char *name, TeleportAppWindow *win ) {

View File

@@ -3,7 +3,7 @@
#include "teleportapp.h" #include "teleportapp.h"
#include "teleportappwin.h" #include "teleportappwin.h"
#include "server.h" #include "server.h"
#include "teleportpeer.h"
GtkWidget *find_child(GtkWidget *, const gchar *); GtkWidget *find_child(GtkWidget *, const gchar *);
TeleportAppWindow *mainWin; TeleportAppWindow *mainWin;
@@ -45,11 +45,11 @@ teleport_app_window_init (TeleportAppWindow *win)
} }
static void static void
open_file_picker(GtkButton *btn, GString *deviceName) { open_file_picker(GtkButton *btn, Peer *device) {
GtkWidget *dialog; GtkWidget *dialog;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
gint res; 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", dialog = gtk_file_chooser_dialog_new ("Open File",
GTK_WINDOW(mainWin), GTK_WINDOW(mainWin),
@@ -67,15 +67,14 @@ open_file_picker(GtkButton *btn, GString *deviceName) {
GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog); GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
filename = gtk_file_chooser_get_filename (chooser); filename = gtk_file_chooser_get_filename (chooser);
g_print("Choosen file is %s\n", filename); g_print("Choosen file is %s\n", filename);
addRouteToServer(g_compute_checksum_for_string (G_CHECKSUM_SHA256, filename, -1), filename, "localhost"); addRouteToServer(g_compute_checksum_for_string (G_CHECKSUM_SHA256, filename, -1), filename, device->ip);
//open_file (filename);
g_free (filename); g_free (filename);
} }
gtk_widget_destroy (dialog); gtk_widget_destroy (dialog);
} }
void update_remote_device_list(TeleportAppWindow *win, char *name) { void update_remote_device_list(TeleportAppWindow *win, Peer *device) {
TeleportAppWindowPrivate *priv; TeleportAppWindowPrivate *priv;
GtkBuilder *builder_remote_list; GtkBuilder *builder_remote_list;
GtkWidget *row; 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")); 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")); 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); 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")); 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")); //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); //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; TeleportAppWindowPrivate *priv;
GtkWidget *box; GtkWidget *box;
GtkListBoxRow *remote_row; GtkListBoxRow *remote_row;
@@ -115,7 +114,7 @@ void update_remote_device_list_remove(TeleportAppWindow *win, char *name) {
while(remote_row != NULL) { while(remote_row != NULL) {
name_label = GTK_LABEL(find_child(GTK_WIDGET(remote_row), "GtkLabel")); 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)); gtk_container_remove (GTK_CONTAINER(box), GTK_WIDGET(remote_row));
} }
i++; i++;

View File

@@ -3,6 +3,7 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "teleportapp.h" #include "teleportapp.h"
#include "teleportpeer.h"
#define TELEPORT_APP_WINDOW_TYPE (teleport_app_window_get_type ()) #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); TeleportAppWindow *teleport_app_window_new (TeleportApp *app);
void teleport_app_window_open (TeleportAppWindow *win, void teleport_app_window_open (TeleportAppWindow *win,
GFile *file); GFile *file);
extern void update_remote_device_list(TeleportAppWindow *, char *); extern void update_remote_device_list(TeleportAppWindow *, Peer *);
extern void update_remote_device_list_remove(TeleportAppWindow *, char *); extern void update_remote_device_list_remove(TeleportAppWindow *, Peer *);
#endif /* __TELEPORTAPPWIN_H */ #endif /* __TELEPORTAPPWIN_H */

View File

@@ -5,19 +5,12 @@ enum {
ADD, REMOVE, N_SIGNALS ADD, REMOVE, N_SIGNALS
}; };
typedef struct Peers {
char *name;
char *ip;
gint port;
} Peer;
static gint signalIds [N_SIGNALS]; static gint signalIds [N_SIGNALS];
struct _TeleportPeer struct _TeleportPeer
{ {
GObject parent; GObject parent;
GArray *list; GArray *list;
/* instance members */ /* instance members */
}; };
@@ -44,7 +37,7 @@ teleport_peer_class_init (TeleportPeerClass *klass)
NULL /* C marshaller */, NULL /* C marshaller */,
G_TYPE_NONE /* return_type */, G_TYPE_NONE /* return_type */,
1, 1,
G_TYPE_STRING); G_TYPE_POINTER);
signalIds[REMOVE] = g_signal_new ("removepeer", signalIds[REMOVE] = g_signal_new ("removepeer",
G_TYPE_OBJECT, G_TYPE_OBJECT,
@@ -55,14 +48,14 @@ teleport_peer_class_init (TeleportPeerClass *klass)
NULL /* C marshaller */, NULL /* C marshaller */,
G_TYPE_NONE /* return_type */, G_TYPE_NONE /* return_type */,
1, 1,
G_TYPE_STRING); G_TYPE_POINTER);
} }
static void static void
teleport_peer_init (TeleportPeer *self) 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) 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); //g_return_if_fail (error == NULL || *error == NULL);
if (index > self->list->len-1) if (index > self->list->len-1)
return NULL; return NULL;
Peer element = g_array_index(self->list, Peer, index); Peer *element = g_array_index(self->list, Peer *, index);
return element.name; return element->name;
} }
gchar * teleport_peer_get_ip (TeleportPeer *self, gint index, GError **error) gchar * teleport_peer_get_ip (TeleportPeer *self, gint index, GError **error)
{ {
//g_return_if_fail (TELEPORT_IS_PEER (self)); //g_return_if_fail (TELEPORT_IS_PEER (self));
//g_return_if_fail (error == NULL || *error == NULL); //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) if (index > self->list->len-1)
return NULL; return NULL;
return element.ip; return element->ip;
} }
gint teleport_peer_get_port (TeleportPeer *self, gint index, GError **error) 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) if (index > self->list->len-1)
return 0; return 0;
return element.port; return element->port;
} }
void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port) void teleport_peer_add_peer (TeleportPeer *self, gchar * name, gchar * ip, gint port)
{ {
Peer new; Peer *new = g_new(Peer, 1);
new.ip = ip; new->ip = ip;
new.port = port; new->port = port;
new.name = name; new->name = name;
g_array_append_val(self->list, new); 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; Peer element;
gboolean found = FALSE; gboolean found = FALSE;
//Maybe I could just compare the addresses
for (int i = 0; i < self->list->len && !found; i++) { for (int i = 0; i < self->list->len && !found; i++) {
Peer element = g_array_index(self->list, Peer, i); Peer *element = g_array_index(self->list, Peer *, i);
if (g_strcmp0(element.name, name) == 0) { if (g_strcmp0(element->name, device->name) == 0) {
found = TRUE; found = TRUE;
g_array_remove_index(self->list, i); g_array_remove_index(self->list, i);
} }
} }
g_signal_emit (self, signalIds[REMOVE], 0, name); g_signal_emit (self, signalIds[REMOVE], 0, device);
} }

View File

@@ -6,10 +6,17 @@
#define TELEPORT_TYPE_PEER teleport_peer_get_type () #define TELEPORT_TYPE_PEER teleport_peer_get_type ()
G_DECLARE_FINAL_TYPE (TeleportPeer, teleport_peer, TELEPORT, PEER, GObject) 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_name (TeleportPeer *self, gint index, GError **error);
gchar* teleport_peer_get_ip (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); 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_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 */ #endif /* __TELEPORTPEER_H */