Allow multiple files to be sent
Subsystems (2)
PATCH 1/1 Allow multiple files to be sent
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
This one adds support for sending multiple files, change the command-line option to match those of gnome-obex-send, as well as add a TODO list at the top of the file.
Cheers
Index: main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.11
main.c +99 -33
@@ -21,6 +21,15 @@* */ +/* TODO +* - Fix passing URIs and relative paths as options +* - Special nice error for Palm Pilots +* - Support cancelling a transfer from the phone +* - Show the remote device name if possible +* - Truncate long filenames nicely for remote devices +* - Close button should be "Cancel" during operations +*/ +#ifdef HAVE_CONFIG_H #include <config.h> #endif
@@ -42,24 +51,40 @@ static GtkWidget *label_filename;static GtkWidget *label_status;static GtkWidget *progress; -static gint filesize =-1 ; +static guint64 filesize =-1 ; +static guint current_file =0 ; -static gchar *open_file_dialog (void ) +static gchar **open_file_dialog (void ) {GtkWidget *dialog; -gchar *filename =NULL ; +GSList *list, *l; +gchar **filenames =NULL ; dialog =gtk_file_chooser_dialog_new (_ ("Select File" ),NULL ,GTK_FILE_CHOOSER_ACTION_OPEN ,GTK_STOCK_CANCEL ,GTK_RESPONSE_CANCEL ,GTK_STOCK_OPEN ,GTK_RESPONSE_ACCEPT ,NULL ); +gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE); -if (gtk_dialog_run (GTK_DIALOG (dialog)) ==GTK_RESPONSE_ACCEPT ) - filename =gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); +if (gtk_dialog_run (GTK_DIALOG (dialog)) ==GTK_RESPONSE_ACCEPT ) { +GPtrArray *array; + + list =gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (dialog)); +if (list ==NULL ) { +gtk_widget_destroy (dialog); +return NULL ; + } + array =g_ptr_array_new (); +for (l = list; l !=NULL ; l = l->next) +g_ptr_array_add (array, l->data); +g_slist_free (list); + + filenames = (char **) array; + }gtk_widget_destroy (dialog); -return filename; +return filenames; } static void selected_device_changed(BluetoothDeviceSelection *selector,
@@ -114,11 +139,32 @@ static void response_callback(GtkWidgetgtk_main_quit (); } +static void set_filename (GtkWidget *label,const gchar *filename) +{ +gchar *display, *text; + +if (g_str_has_prefix (filename,"file:///" ) != FALSE) { +gchar *local; + + local =g_filename_from_uri (filename,NULL ,NULL ); + display =g_filename_display_basename (local); +g_free (local); + }else if (filename[0 ] =='/' ) { + display =g_filename_display_basename (filename); + }else { + display =g_filename_display_name (filename); + } + + text =g_strdup_printf ("<b>%s</b>" , display); +g_free (display); +gtk_label_set_markup (GTK_LABEL (label), text); +g_free (text); +} +static void create_window (const gchar *filename) {GtkWidget *vbox;GtkWidget *label; -gchar *text; dialog = gtk_dialog_new_with_buttons(_("File Transfer"), NULL, GTK_DIALOG_NO_SEPARATOR,
@@ -147,9 +193,7 @@ static void create_window(const gchar *f label_status = label; - text =g_strdup_printf ("<b>%s</b>" , filename); -gtk_label_set_markup (GTK_LABEL (label_filename), text); -g_free (text); +set_filename (label_filename, filename);gtk_label_set_markup (GTK_LABEL (label_status),_ ("Connecting..." ));
@@ -181,7 +225,7 @@ static void transfer_progress(DBusGProxygchar *text;gdouble fraction; - text =g_strdup_printf (_ ("Transfered %d of %d bytes" ), bytes, filesize); + text =g_strdup_printf (_ ("Transfered %d of %" G_GUINT64_FORMAT " bytes" ), bytes, filesize);gtk_label_set_markup (GTK_LABEL (label_status), text);g_free (text);
@@ -191,30 +235,51 @@ static void transfer_progress(DBusGProxystatic void transfer_completed (DBusGProxy *proxy,gpointer user_data) { +gchar **filenames = user_data; +gtk_label_set_markup (GTK_LABEL (label_status),_ ("Completed" ));gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress),1.0 ); -dbus_g_proxy_call (proxy,"Disconnect" ,NULL ,G_TYPE_INVALID , -G_TYPE_INVALID ); + current_file++; -gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), +/* Any more files to process? */ +if (filenames[current_file] !=NULL ) { +GError *error =NULL ; + +//FIXME process filename to a proper local path +set_filename (label_filename, filenames[current_file]); +dbus_g_proxy_call (proxy,"SendFile" , &error, +G_TYPE_STRING , filenames[current_file],G_TYPE_INVALID , +G_TYPE_INVALID ); + +if (error !=NULL ) { +g_printerr ("Sending of file %s failed: %s\n" , filenames[current_file], + error->message); +g_error_free (error); +gtk_main_quit (); + } + }else { +dbus_g_proxy_call (proxy,"Disconnect" ,NULL ,G_TYPE_INVALID , +G_TYPE_INVALID ); +gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),GTK_RESPONSE_CLOSE , TRUE); + } }static void session_connected (DBusGProxy *proxy,gpointer user_data) { -gchar *filename = user_data; +gchar **filenames = user_data;GError *error =NULL ;gtk_label_set_markup (GTK_LABEL (label_status),_ ("Connected" ));dbus_g_proxy_call (proxy,"SendFile" , &error, -G_TYPE_STRING , filename,G_TYPE_INVALID , +G_TYPE_STRING , filenames[current_file],G_TYPE_INVALID ,G_TYPE_INVALID );if (error !=NULL ) { -g_printerr ("Sending of file %s failed: %s\n" , filename, +g_printerr ("Sending of file %s failed: %s\n" , filenames[current_file], error->message);g_error_free (error);gtk_main_quit ();
@@ -261,7 +326,7 @@ static void create_notify(DBusGProxy *pr G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);dbus_g_proxy_connect_signal (proxy,"TransferStarted" , -G_CALLBACK (transfer_started),NULL ,NULL ); +G_CALLBACK (transfer_started), user_data,NULL );dbus_g_proxy_add_signal (proxy,"TransferProgress" ,G_TYPE_UINT ,G_TYPE_INVALID );
@@ -272,17 +337,20 @@ static void create_notify(DBusGProxy *prdbus_g_proxy_add_signal (proxy,"TransferCompleted" ,G_TYPE_INVALID );dbus_g_proxy_connect_signal (proxy,"TransferCompleted" , -G_CALLBACK (transfer_completed),NULL ,NULL ); +G_CALLBACK (transfer_completed), user_data,NULL );dbus_g_proxy_call (proxy,"Connect" ,NULL ,G_TYPE_INVALID ,G_TYPE_INVALID ); }static gchar *option_device =NULL ; +static gchar **filenames =NULL ;static GOptionEntry options[] = { - {"device" ,0 ,0 ,G_OPTION_ARG_STRING , &option_device, -N_ ("Remote device to use" ),"ADDRESS" }, + {"dest" ,'d' ,0 ,G_OPTION_ARG_STRING , &option_device, +N_ ("Remote device to use" ),"ADDRESS" }, + {G_OPTION_REMAINING ,'\0' ,0 ,G_OPTION_ARG_FILENAME_ARRAY , &filenames, +N_ ("Files to send" ),NULL }, {NULL }, };
@@ -290,7 +358,7 @@ int main(int argc, char *argv[]) {DBusGProxy *proxy;GError *error; -gchar *filename, *address; +gchar *address;bindtextdomain (GETTEXT_PACKAGE ,LOCALEDIR );bind_textdomain_codeset (GETTEXT_PACKAGE ,"UTF-8" );
@@ -298,7 +366,7 @@ int main(int argc, char *argv[]) error =NULL ; -if (gtk_init_with_args (&argc, &argv,"[FILE...]" , +if (gtk_init_with_args (&argc, &argv,"[FILENAMES...]" , options,GETTEXT_PACKAGE , &error) == FALSE) {if (error !=NULL ) {g_printerr ("%s\n" , error->message);
@@ -311,17 +379,15 @@ int main(int argc, char *argv[])gtk_window_set_default_icon_name ("stock_bluetooth" ); -if (argc <2 ) { - filename =open_file_dialog (); -if (filename ==NULL ) +if (filenames ==NULL ) { + filenames =open_file_dialog (); +if (filenames ==NULL )gtk_exit (1 ); - }else - filename =g_strdup (argv[1 ]); + }if (option_device ==NULL ) { address =browse_device_dialog ();if (address ==NULL ) { -g_free (filename);gtk_exit (1 ); } }else
@@ -345,22 +411,22 @@ int main(int argc, char *argv[])gtk_exit (1 ); } -create_window (filename); +create_window (filenames[0 ]); proxy =dbus_g_proxy_new_for_name (conn,"org.openobex" ,"/org/openobex" ,"org.openobex.Manager" );dbus_g_proxy_begin_call (proxy,"CreateBluetoothSession" , - create_notify, filename,NULL , + create_notify, filenames,NULL ,G_TYPE_STRING , address,G_TYPE_STRING ,"opp" , -G_TYPE_BOOLEAN , FALSE,G_TYPE_INVALID ); +G_TYPE_INVALID );gtk_main ();dbus_g_connection_unref (conn);g_free (address); -g_free (filename); +g_strfreev (filenames);return 0 ; }
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Hello again,
Quoted 3 lines · Bastien Nocera
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
Another patch, based on Tadas' gnome-obex-send port.
- Fix to run with the latest obex-data-server (in 2 places)
- Add an appropriate error when the target device is a Palm
- Accept relative local paths and URIs as well as absolute filenames as arguments (needed for ease of use and nautilus-sendto, respectively)
- Gather the name of the Bluetooth device from hcid to show in the UI
Cheers
Index: Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.7
Makefile.am +6 -6
@@ -1,5 +1,5 @@ -noinst_PROGRAMS = bluetooth-sendto +bin_PROGRAMS = bluetooth-sendto bluetooth_sendto_SOURCES = main.c
@@ -8,7 +8,7 @@ bluetooth_sendto_LDADD = $(top_builddir) AM_CFLAGS = @DBUS_CFLAGS@ @GTK_CFLAGS@ -BUILT_SOURCES = marshal.h marshal.c +BUILT_SOURCES = sendto-marshal.h sendto-marshal.c nodist_bluetooth_sendto_SOURCES = $(BUILT_SOURCES)
@@ -22,8 +22,8 @@ EXTRA_DIST = $(noinst_MANS) marshal.list MAINTAINERCLEANFILES = Makefile.in -marshal.h: marshal.list - $(GLIB_GENMARSHAL) --prefix=marshal $< --header > $@ +sendto-marshal.h: marshal.list + $(GLIB_GENMARSHAL) --prefix=sendto_marshal $< --header > $@ -marshal.c: marshal.list - $(GLIB_GENMARSHAL) --prefix=marshal $< --body > $@ +sendto-marshal.c: marshal.list + $(GLIB_GENMARSHAL) --prefix=sendto_marshal $< --body > $@
Index: main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.11
main.c +737 -247
1,103 lines not on this page · raw message
Index: marshal.list
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/marshal.list,v retrieving revision 1.1
marshal.list +1 -0
@@ -1 +1,2 @@ VOID:STRING,STRING,INT +VOID:STRING,STRING
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Quoted 7 lines · Bastien Nocera
Hello again,
Quoted 3 lines · Bastien Nocera
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
Quoted 7 lines
Another patch, based on Tadas' gnome-obex-send port.
- Fix to run with the latest obex-data-server (in 2 places)
- Add an appropriate error when the target device is a Palm
- Accept relative local paths and URIs as well as absolute filenames as arguments (needed for ease of use and nautilus-sendto, respectively)
- Gather the name of the Bluetooth device from hcid to show in the UI
Updated patch to use the marshal file in common/ instead of our own.
Cheers
Index: common/marshal.list
===================================================================
RCS file: /cvsroot/bluez/gnome/common/marshal.list,v retrieving revision 1.1
marshal.list +1 -0
@@ -1,2 +1,3 @@ VOID:STRING,UINT,INT VOID:STRING,STRING +VOID:STRING,STRING,INT
Index: sendto/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.7
Makefile.am +1 -8
@@ -8,8 +8,6 @@ bluetooth_sendto_LDADD = $(top_builddir) AM_CFLAGS = @DBUS_CFLAGS@ @GTK_CFLAGS@ -BUILT_SOURCES = marshal.h marshal.c - nodist_bluetooth_sendto_SOURCES = $(BUILT_SOURCES) INCLUDES = -I$(top_srcdir)/common
@@ -18,12 +16,7 @@ CLEANFILES = $(BUILT_SOURCES) noinst_MANS = bluetooth-sendto.1 -EXTRA_DIST = $(noinst_MANS) marshal.list +EXTRA_DIST = $(noinst_MANS) MAINTAINERCLEANFILES = Makefile.in -marshal.h: marshal.list - $(GLIB_GENMARSHAL) --prefix=marshal $< --header > $@ - -marshal.c: marshal.list - $(GLIB_GENMARSHAL) --prefix=marshal $< --body > $@
Index: sendto/main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.12
main.c +737 -247
1,103 lines not on this page · raw message
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Quoted 10 lines · Bastien Nocera
Quoted 9 lines · Bastien Nocera
Hello again,
Quoted 3 lines · Bastien Nocera
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
Another patch, based on Tadas' gnome-obex-send port.
Quoted 7 lines
Quoted 5 lines
- Fix to run with the latest obex-data-server (in 2 places)
- Add an appropriate error when the target device is a Palm
- Accept relative local paths and URIs as well as absolute filenames as arguments (needed for ease of use and nautilus-sendto, respectively)
- Gather the name of the Bluetooth device from hcid to show in the UIUpdated patch to use the marshal file in common/ instead of our own.
Updated patch:
- follow coding style
- move the helper dialogues in another file
Cheers
Index: Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.8
Makefile.am +2 -1
@@ -1,7 +1,7 @@ noinst_PROGRAMS = bluetooth-sendto -bluetooth_sendto_SOURCES = main.c +bluetooth_sendto_SOURCES = main.c utils.c utils.h bluetooth_sendto_LDADD = $(top_builddir)/common/libcommon.a \ @GTK_LIBS@ @DBUS_LIBS@
@@ -15,3 +15,4 @@ noinst_MANS = bluetooth-sendto.1 EXTRA_DIST = $(noinst_MANS) MAINTAINERCLEANFILES = Makefile.in +
Index: main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.12
main.c +655 -230
1,006 lines not on this page · raw message
utils.c new file +115 -0
115 lines not on this page · raw message
utils.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* bluetooth-sendto +* +* BlueZ - Bluetooth protocol stack for Linux +* +* Copyright (C) 2005-2007 Marcel Holtmann <[email protected]> +* Copyright (C) 2006-2007 Tadas Dailyda <[email protected]> +* Copyright (C) 2007 Bastien Nocera <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +* +*/ + +#include <glib.h> + +gchar *browse_device_dialog (void ); +GSList *select_files_dialog (void ); +
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Quoted 17 lines · Bastien Nocera
Quoted 16 lines · Bastien Nocera
Quoted 14 lines · Bastien Nocera
Hello again,
Quoted 3 lines · Bastien Nocera
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
Another patch, based on Tadas' gnome-obex-send port.
- Fix to run with the latest obex-data-server (in 2 places)
- Add an appropriate error when the target device is a Palm
- Accept relative local paths and URIs as well as absolute filenames as arguments (needed for ease of use and nautilus-sendto, respectively)
- Gather the name of the Bluetooth device from hcid to show in the UI
Quoted 5 lines
Quoted 1 line
Updated patch to use the marshal file in common/ instead of our own.
Updated patch:
- follow coding style
- move the helper dialogues in another file
And the function declarations on one line.
Index: Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.8
Makefile.am +2 -1
@@ -1,7 +1,7 @@ noinst_PROGRAMS = bluetooth-sendto -bluetooth_sendto_SOURCES = main.c +bluetooth_sendto_SOURCES = main.c utils.c utils.h bluetooth_sendto_LDADD = $(top_builddir)/common/libcommon.a \ @GTK_LIBS@ @DBUS_LIBS@
@@ -15,3 +15,4 @@ noinst_MANS = bluetooth-sendto.1 EXTRA_DIST = $(noinst_MANS) MAINTAINERCLEANFILES = Makefile.in +
Index: main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.12
main.c +634 -227
985 lines not on this page · raw message
utils.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* bluetooth-sendto +* +* BlueZ - Bluetooth protocol stack for Linux +* +* Copyright (C) 2005-2007 Marcel Holtmann <[email protected]> +* Copyright (C) 2006-2007 Tadas Dailyda <[email protected]> +* Copyright (C) 2007 Bastien Nocera <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +* +*/ + +#include <glib.h> + +gchar *browse_device_dialog (void ); +GSList *select_files_dialog (void ); +
utils.c new file +112 -0
112 lines not on this page · raw message
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
PATCH 1/1 Updated sendto
Quoted 18 lines · Bastien Nocera
Quoted 17 lines · Bastien Nocera
Quoted 16 lines · Bastien Nocera
Quoted 14 lines · Bastien Nocera
Hello again,
Quoted 3 lines · Bastien Nocera
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
Another patch, based on Tadas' gnome-obex-send port.
- Fix to run with the latest obex-data-server (in 2 places)
- Add an appropriate error when the target device is a Palm
- Accept relative local paths and URIs as well as absolute filenames as arguments (needed for ease of use and nautilus-sendto, respectively)
- Gather the name of the Bluetooth device from hcid to show in the UI
Quoted 7 lines
Quoted 5 lines
Quoted 1 line
Updated patch to use the marshal file in common/ instead of our own.
Updated patch:
- follow coding style
- move the helper dialogues in another fileAnd the function declarations on one line.
And remove the BluetoothSend *app bits.
Index: sendto/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.10
Makefile.am +2 -1
@@ -1,7 +1,7 @@ bin_PROGRAMS = bluetooth-sendto -bluetooth_sendto_SOURCES = main.c +bluetooth_sendto_SOURCES = main.c utils.c utils.h bluetooth_sendto_LDADD = $(top_builddir)/common/libcommon.a \ @GTK_LIBS@ @DBUS_LIBS@
@@ -15,3 +15,4 @@ man_MANS = bluetooth-sendto.1 EXTRA_DIST = $(man_MANS) MAINTAINERCLEANFILES = Makefile.in +
Index: sendto/main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.16
main.c +619 -259
1,009 lines not on this page · raw message
utils.c new file +112 -0
112 lines not on this page · raw message
utils.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* bluetooth-sendto +* +* BlueZ - Bluetooth protocol stack for Linux +* +* Copyright (C) 2005-2007 Marcel Holtmann <[email protected]> +* Copyright (C) 2006-2007 Tadas Dailyda <[email protected]> +* Copyright (C) 2007 Bastien Nocera <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +* +*/ + +#include <glib.h> + +gchar *browse_device_dialog (void ); +GSList *select_files_dialog (void ); +
Index: po/POTFILES.in
===================================================================
RCS file: /cvsroot/bluez/gnome/po/POTFILES.in,v
retrieving revision 1.14
POTFILES.in +2 -0
@@ -17,3 +17,5 @@ analyzer/dialog.c analyzer/tracer.c analyzer/bluetooth-analyzer.desktop.in analyzer/bluetooth-manager.xml.in +sendto/main.c +sendto/utils.c
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Re: [Bluez-devel] [PATCH] Updated sendto
Quoted 21 lines · Bastien Nocera
Quoted 20 lines · Bastien Nocera
Quoted 19 lines · Bastien Nocera
Quoted 17 lines · Bastien Nocera
Quoted 7 lines · Bastien Nocera
Hello again,
Quoted 3 lines · Bastien Nocera
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
Quoted 7 lines
Another patch, based on Tadas' gnome-obex-send port.
- Fix to run with the latest obex-data-server (in 2 places)
- Add an appropriate error when the target device is a Palm
- Accept relative local paths and URIs as well as absolute filenames as arguments (needed for ease of use and nautilus-sendto, respectively)
- Gather the name of the Bluetooth device from hcid to show in the UIUpdated patch to use the marshal file in common/ instead of our own.
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
Updated patch:
- follow coding style
- move the helper dialogues in another fileAnd the function declarations on one line.
And remove the BluetoothSend *app bits.
And one that builds.
Index: sendto/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.10
Makefile.am +2 -1
@@ -1,7 +1,7 @@ bin_PROGRAMS = bluetooth-sendto -bluetooth_sendto_SOURCES = main.c +bluetooth_sendto_SOURCES = main.c utils.c utils.h bluetooth_sendto_LDADD = $(top_builddir)/common/libcommon.a \ @GTK_LIBS@ @DBUS_LIBS@
@@ -15,3 +15,4 @@ man_MANS = bluetooth-sendto.1 EXTRA_DIST = $(man_MANS) MAINTAINERCLEANFILES = Makefile.in +
Index: sendto/main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.17
main.c +630 -237
991 lines not on this page · raw message
Index: po/POTFILES.in
===================================================================
RCS file: /cvsroot/bluez/gnome/po/POTFILES.in,v
retrieving revision 1.14
POTFILES.in +2 -0
@@ -17,3 +17,5 @@ analyzer/dialog.c analyzer/tracer.c analyzer/bluetooth-analyzer.desktop.in analyzer/bluetooth-manager.xml.in +sendto/main.c +sendto/utils.c
utils.c new file +112 -0
112 lines not on this page · raw message
utils.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* bluetooth-sendto +* +* BlueZ - Bluetooth protocol stack for Linux +* +* Copyright (C) 2005-2007 Marcel Holtmann <[email protected]> +* Copyright (C) 2006-2007 Tadas Dailyda <[email protected]> +* Copyright (C) 2007 Bastien Nocera <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +* +*/ + +#include <glib.h> + +gchar *browse_device_dialog (void ); +GSList *select_files_dialog (void ); +
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Re: [Bluez-devel] [PATCH] Updated sendto
Quoted 26 lines · Bastien Nocera
Quoted 25 lines · Bastien Nocera
Quoted 24 lines · Bastien Nocera
Quoted 22 lines · Bastien Nocera
Quoted 10 lines · Bastien Nocera
Quoted 9 lines · Bastien Nocera
Hello again,
Quoted 3 lines · Bastien Nocera
Heya,
Another for bluetooth-sento feature parity with gnome-obex-send.
Another patch, based on Tadas' gnome-obex-send port.
Quoted 7 lines
Quoted 5 lines
- Fix to run with the latest obex-data-server (in 2 places)
- Add an appropriate error when the target device is a Palm
- Accept relative local paths and URIs as well as absolute filenames as arguments (needed for ease of use and nautilus-sendto, respectively)
- Gather the name of the Bluetooth device from hcid to show in the UIUpdated patch to use the marshal file in common/ instead of our own.
Updated patch:
- follow coding style
- move the helper dialogues in another file
Quoted 5 lines
Quoted 3 lines
Quoted 1 line
And the function declarations on one line.
And remove the BluetoothSend *app bits.
And one that builds.
And one that works with obex-data-server 0.1
Thanks!
Index: po/POTFILES.in
===================================================================
RCS file: /cvsroot/bluez/gnome/po/POTFILES.in,v
retrieving revision 1.14
POTFILES.in +2 -0
@@ -17,3 +17,5 @@ analyzer/dialog.c analyzer/tracer.c analyzer/bluetooth-analyzer.desktop.in analyzer/bluetooth-manager.xml.in +sendto/main.c +sendto/utils.c
Index: sendto/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.10
Makefile.am +2 -1
@@ -1,7 +1,7 @@ bin_PROGRAMS = bluetooth-sendto -bluetooth_sendto_SOURCES = main.c +bluetooth_sendto_SOURCES = main.c utils.c utils.h bluetooth_sendto_LDADD = $(top_builddir)/common/libcommon.a \ @GTK_LIBS@ @DBUS_LIBS@
@@ -15,3 +15,4 @@ man_MANS = bluetooth-sendto.1 EXTRA_DIST = $(man_MANS) MAINTAINERCLEANFILES = Makefile.in +
Index: sendto/main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.20
main.c +629 -240
996 lines not on this page · raw message
utils.c new file +112 -0
112 lines not on this page · raw message
utils.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* bluetooth-sendto +* +* BlueZ - Bluetooth protocol stack for Linux +* +* Copyright (C) 2005-2007 Marcel Holtmann <[email protected]> +* Copyright (C) 2006-2007 Tadas Dailyda <[email protected]> +* Copyright (C) 2007 Bastien Nocera <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +* +*/ + +#include <glib.h> + +gchar *browse_device_dialog (void ); +GSList *select_files_dialog (void ); +
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Re: [Bluez-devel] [PATCH] Updated sendto
On Thu, 2008-02-07 at 00:59 +0000, Bastien Nocera wrote:
<snip>
Quoted 1 line
And one that works with obex-data-server 0.1
Updated against current CVS, and fix a memleak when getting the adapters list. New main.c file attached as well, for easier review.
Cheers
Index: po/POTFILES.in
===================================================================
RCS file: /cvsroot/bluez/gnome/po/POTFILES.in,v
retrieving revision 1.18
POTFILES.in +2 -0
@@ -21,3 +21,5 @@ analyzer/dialog.c analyzer/tracer.c analyzer/bluetooth-analyzer.desktop.in analyzer/bluetooth-manager.xml.in +sendto/main.c +sendto/utils.c
Index: sendto/Makefile.am
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/Makefile.am,v retrieving revision 1.10
Makefile.am +2 -1
@@ -1,7 +1,7 @@ bin_PROGRAMS = bluetooth-sendto -bluetooth_sendto_SOURCES = main.c +bluetooth_sendto_SOURCES = main.c utils.c utils.h bluetooth_sendto_LDADD = $(top_builddir)/common/libcommon.a \ @GTK_LIBS@ @DBUS_LIBS@
@@ -15,3 +15,4 @@ man_MANS = bluetooth-sendto.1 EXTRA_DIST = $(man_MANS) MAINTAINERCLEANFILES = Makefile.in +
Index: sendto/main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.23
main.c +630 -244
1,001 lines not on this page · raw message
utils.c new file +112 -0
112 lines not on this page · raw message
utils.h new file +30 -0
@@ -0,0 +1,30 @@ +/* +* bluetooth-sendto +* +* BlueZ - Bluetooth protocol stack for Linux +* +* Copyright (C) 2005-2007 Marcel Holtmann <[email protected]> +* Copyright (C) 2006-2007 Tadas Dailyda <[email protected]> +* Copyright (C) 2007 Bastien Nocera <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +* +*/ + +#include <glib.h> + +gchar *browse_device_dialog (void ); +GSList *select_files_dialog (void ); +
/*
*
* BlueZ - Bluetooth protocol stack for Linux
*
* Copyright (C) 2005-2008 Marcel Holtmann <[email protected]> * Copyright (C) 2006-2007 Tadas Dailyda <[email protected]> * Copyright (C) 2007 Bastien Nocera <[email protected]> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
#include <dbus/dbus-glib.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
#include "dbus-glue.h"
#include "marshal.h"
#include "utils.h"
/* DBus */
static DBusGConnection *connection = NULL;
static DBusGProxy *manager_proxy = NULL;
static DBusGProxy *session_proxy = NULL;
/* GTK */
static GtkWidget *main_dialog, *from_label, *operation_label, *progress_bar; /* sending related */
static gsize file_length = 0;
static guint file_count = 0;
static guint current_file = 0;
static GSList *file_list = NULL;
static guint byte_count = 0;
static guint bytes_sent = 0;
static gint64 first_transfer_time = 0;
static gint64 last_update_time = 0;
typedef enum {
BUTTONS_OK,
BUTTONS_RETRY_CANCEL,
BUTTONS_RETRY_SKIP_CANCEL
} ButtonSet;
/* Command line options */
static gchar **files_to_send = NULL;
static gchar *bdaddrstr = NULL;
static gchar *device_name = NULL;
#define DIALOG_RESPONSE_SKIP 1
#define DIALOG_RESPONSE_RETRY 2
static void error_occurred_cb(DBusGProxy *proxy, const gchar *error_name,
const gchar *error_message, gpointer user_data);
static const GOptionEntry options[] = {
{"dest", 'd', 0, G_OPTION_ARG_STRING, &bdaddrstr,
"Bluetooth address of destination device", "BDADDR"},
{G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_FILENAME_ARRAY, &files_to_send},
{NULL}
};static gint64 get_system_time(void)
{
struct timeval tmp;
gettimeofday(&tmp, NULL);
return (gint64)tmp.tv_usec + (gint64)tmp.tv_sec * G_GINT64_CONSTANT(1000000);
}static gboolean is_palm_device(const gchar *bdaddr)
{
return (g_str_has_prefix(bdaddr, "00:04:6B")
|| g_str_has_prefix(bdaddr, "00:07:E0")
|| g_str_has_prefix(bdaddr, "00:0E:20"));
}/* Return the local absolute filename for the file, and its size
* if the file exists and is stat()'able */
static gchar *normalise_filename(const gchar *filename, gint64 *size)
{
char *ret;
struct stat file_stat;
g_return_val_if_fail(filename != NULL, NULL);
g_return_val_if_fail(size != NULL, NULL);
if (g_str_has_prefix(filename, "file://")) {
ret = g_filename_from_uri(filename, NULL, NULL);
if (ret == NULL)
return NULL;
} else if (filename[0] == '/') {
ret = g_strdup(filename);
} else {
gchar *curdir;
curdir = g_get_current_dir();
ret = g_build_filename(curdir, filename, NULL);
g_free(curdir);
}
if (!g_file_test(ret, G_FILE_TEST_IS_REGULAR)) {
g_free(ret);
return NULL;
}
if (!g_stat(ret, &file_stat)) {
*size = file_stat.st_size;
} else {
g_free(ret);
return NULL;
}
return ret;
}static gchar *get_device_name(void)
{
DBusGConnection *connection;
DBusGProxy *manager;
GError *error = NULL;
gchar *name, **adapters;
guint i;
name = NULL;
connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL);
if (connection == NULL)
return NULL;
manager = dbus_g_proxy_new_for_name(connection, "org.bluez",
"/org/bluez", "org.bluez.Manager");
if (!manager) {
dbus_g_connection_unref(connection);
return NULL;
}
if (!manager_list_adapters(manager, &adapters, &error)) {
g_object_unref(manager);
dbus_g_connection_unref(connection);
return NULL;
}
for (i = 0; adapters[i] != NULL; i++) {
DBusGProxy *adapter;
adapter = dbus_g_proxy_new_for_name(connection, "org.bluez",
adapters[i], "org.bluez.Adapter");
if (dbus_g_proxy_call(adapter, "GetRemoteName", NULL,
G_TYPE_STRING, bdaddrstr, G_TYPE_INVALID,
G_TYPE_STRING, &name, G_TYPE_INVALID)) {
if (name != NULL && name[0] != '\0') {
g_object_unref(adapter);
break;
}
}
g_object_unref(adapter);
}
g_strfreev(adapters);
g_object_unref(manager);
dbus_g_connection_unref(connection);
return name;
}static gint show_error_dialog(GtkWindow *parent, ButtonSet buttons,
const gchar *primary_text, const gchar *secondary_text)
{
GtkWidget *dialog;
gchar *primary_text_markup;
gint ret;
primary_text_markup = g_strdup_printf("<span weight=\"bold\" size=\"larger\">%s</span>",
primary_text);
dialog = gtk_message_dialog_new_with_markup(parent, 0, GTK_MESSAGE_ERROR,
buttons==BUTTONS_OK? GTK_BUTTONS_OK: GTK_BUTTONS_CANCEL,
primary_text_markup);
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
secondary_text);
if (buttons == BUTTONS_RETRY_SKIP_CANCEL) {
gtk_dialog_add_button(GTK_DIALOG(dialog), _("Skip"),
DIALOG_RESPONSE_SKIP);
}
if (buttons != BUTTONS_OK) {
gtk_dialog_add_button(GTK_DIALOG(dialog), _("Retry"),
DIALOG_RESPONSE_RETRY);
}
ret = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
g_free(primary_text_markup);
return ret;
}static gint show_connection_error_dialog(GtkWindow *parent, const gchar *bdaddr,
const gchar *primary_text)
{
if (!is_palm_device(bdaddrstr)) {
return show_error_dialog(parent,
BUTTONS_RETRY_CANCEL,
primary_text,
_("Make sure that remote device is on and that it accepts Bluetooth connections."));
} else {
return show_error_dialog(parent,
BUTTONS_RETRY_CANCEL,
primary_text,
_("Make sure \"Beam receive\" is enabled in the Power preferences, and Bluetooth is enabled, on your Palm device."));
}
}static gint handle_file_sending_error(const gchar *error_text,
const gchar *error_secondary_text)
{
ButtonSet buttons;
gint response_id;
if (file_count > 1 && current_file < file_count - 1)
buttons = BUTTONS_RETRY_SKIP_CANCEL;
else
buttons = BUTTONS_RETRY_CANCEL;
response_id = show_error_dialog(GTK_WINDOW(main_dialog), buttons,
error_text, error_secondary_text);
switch (response_id) {
case DIALOG_RESPONSE_SKIP:
current_file++;
bytes_sent += file_length;
case DIALOG_RESPONSE_RETRY:
return TRUE;
case GTK_RESPONSE_CANCEL:
default:
gtk_main_quit();
break;
}
return response_id;
}static void cancel_clicked_cb(GtkWidget *button, gpointer user_data)
{
gtk_main_quit();
}static void ui_init(void)
{
GtkWidget *vbox, *vbox_parent, *table;
GtkWidget *label1, *label2, *label3, *target_label;
GtkWidget *button;
gchar *text;
/* initialize UI */
device_name = get_device_name();
/* main dialog */
main_dialog = gtk_dialog_new();
gtk_dialog_set_has_separator(GTK_DIALOG(main_dialog), FALSE);
gtk_window_set_title(GTK_WINDOW(main_dialog),
_("Bluetooth file transfer"));
gtk_window_set_icon_name(GTK_WINDOW(main_dialog), "stock_bluetooth");
gtk_window_set_type_hint(GTK_WINDOW(main_dialog),
GDK_WINDOW_TYPE_HINT_NORMAL);
gtk_window_set_position(GTK_WINDOW(main_dialog), GTK_WIN_POS_CENTER);
gtk_window_set_resizable(GTK_WINDOW(main_dialog), FALSE);
gtk_widget_set(main_dialog, "width-request", 400, NULL);
button = gtk_dialog_add_button(GTK_DIALOG(main_dialog),
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(cancel_clicked_cb), NULL);
gtk_container_set_border_width(GTK_CONTAINER(main_dialog), 6);
/* table elements */
from_label = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(from_label), 0, 0.5);
gtk_label_set_ellipsize(GTK_LABEL(from_label), PANGO_ELLIPSIZE_MIDDLE);
target_label = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(target_label), 0, 0.5);
gtk_label_set_ellipsize(GTK_LABEL(target_label), PANGO_ELLIPSIZE_END);
gtk_label_set_text(GTK_LABEL(target_label), device_name ? device_name : bdaddrstr);
label2 = gtk_label_new(NULL);
text = g_markup_printf_escaped("<b>%s</b>", _("From:"));
gtk_label_set_markup(GTK_LABEL(label2), text);
g_free(text);
label3 = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(label3), 1, 0.5);
text = g_markup_printf_escaped("<b>%s</b>", _("To:"));
gtk_label_set_markup(GTK_LABEL(label3), text);
g_free(text);
/* table */
table = gtk_table_new(2, 2, FALSE);
gtk_table_set_col_spacings(GTK_TABLE(table), 4);
gtk_table_set_row_spacings(GTK_TABLE(table), 4);
gtk_table_attach_defaults(GTK_TABLE(table), from_label, 1, 2, 0, 1);
gtk_table_attach_defaults(GTK_TABLE(table), target_label, 1, 2, 1, 2);
gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
gtk_table_attach(GTK_TABLE(table), label3, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
/* vbox elements */
label1 = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(label1), 0, 0.5);
text = g_markup_printf_escaped("<span weight=\"bold\" size=\"larger\">%s</span>",
_("Sending files via bluetooth"));
gtk_label_set_markup(GTK_LABEL(label1), text);
g_free(text);
progress_bar = gtk_progress_bar_new();
gtk_progress_bar_set_ellipsize(GTK_PROGRESS_BAR(progress_bar),
PANGO_ELLIPSIZE_END);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress_bar),
_("Connecting..."));
operation_label = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(operation_label), 0, 0.5);
gtk_label_set_ellipsize(GTK_LABEL(operation_label), PANGO_ELLIPSIZE_END);
/* vbox */
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_set_spacing(GTK_BOX(vbox), 6);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
gtk_box_pack_start_defaults(GTK_BOX(vbox), label1);
gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 9);
gtk_box_pack_start_defaults(GTK_BOX(vbox), progress_bar);
gtk_box_pack_start(GTK_BOX(vbox), operation_label, TRUE, TRUE, 2);
vbox_parent = gtk_bin_get_child(GTK_BIN(main_dialog));
gtk_box_pack_start_defaults(GTK_BOX(vbox_parent), vbox);
/* show it */
gtk_widget_show_all(main_dialog);
}static gboolean send_one(gpointer user_data)
{
const gchar *fname;
gint ret;
gchar *bname, *dirname;
GError *err = NULL;
gchar *operation_text, *operation_markup, *progressbar_text;
if ((fname = g_slist_nth_data(file_list, current_file))) {
/* there's a file to send */
dbus_g_proxy_call(session_proxy, "SendFile", &err,
G_TYPE_STRING, fname, G_TYPE_INVALID, G_TYPE_INVALID);
if (err != NULL) {
ret = handle_file_sending_error(_("Unable to read file"),
err->message);
if (ret != GTK_RESPONSE_CANCEL) {
g_idle_add((GSourceFunc) send_one, NULL);
}
g_error_free(err);
return FALSE;
}
if (!first_transfer_time) {
first_transfer_time = get_system_time();
}
bname = g_path_get_basename(fname);
dirname = g_path_get_dirname(fname);
operation_text = g_strdup_printf(_("Sending %s"), bname);
operation_markup = g_markup_printf_escaped("<i>%s</i>", operation_text);
progressbar_text = g_strdup_printf(_("Sending file: %d of %d"),
current_file+1,
file_count);
gtk_label_set_text(GTK_LABEL(from_label), dirname);
gtk_label_set_markup(GTK_LABEL(operation_label), operation_markup);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress_bar),
progressbar_text);
g_free(bname);
g_free(dirname);
g_free(operation_text);
g_free(operation_markup);
g_free(progressbar_text);
} else {
/* nothing left to send, time to quit */
gtk_main_quit();
}
return FALSE;
}static void session_connected_cb(DBusGProxy *proxy, gpointer user_data)
{
/* OBEX connect has succeeded, so start sending */
g_idle_add((GSourceFunc) send_one, NULL);
}static void transfer_started_cb(DBusGProxy *proxy, const gchar *filename,
const gchar *local_path, guint64 byte_count, gpointer user_data)
{
file_length = byte_count;
}static void transfer_cancelled_cb(DBusGProxy *proxy, gpointer user_data)
{
gint ret;
gchar *error_text;
error_text = g_strdup_printf(_("An error occured while sending file '%s'"),
(gchar *)g_slist_nth_data(file_list, current_file));
ret = handle_file_sending_error(error_text,
_("The remote device cancelled the transfer"));
if (ret != GTK_RESPONSE_CANCEL)
g_idle_add((GSourceFunc) send_one, NULL);
g_free(error_text);
}static void transfer_progress_cb(DBusGProxy *proxy, guint64 bytes_transferred, gpointer user_data)
{
gdouble frac;
guint actual_bytes_sent;
gint elapsed_time;
gint transfer_rate;
gint time_remaining;
gint64 current_time;
gchar *str, *str2;
gchar *progressbar_text;
/* update progress bar fraction */
actual_bytes_sent = bytes_sent + bytes_transferred;
frac = (gdouble)actual_bytes_sent / byte_count;
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar), frac);
/* update progress bar text (time remaining)
* (only update once in a second) */
current_time = get_system_time();
elapsed_time = (current_time - first_transfer_time) / 1000000;
if (last_update_time) {
if (current_time < last_update_time + 1000000)
return;
else
last_update_time = current_time;
} else {
last_update_time = current_time;
}
if (!elapsed_time)
return;
transfer_rate = actual_bytes_sent / elapsed_time;
if (transfer_rate == 0)
return;
time_remaining = (byte_count - actual_bytes_sent) / transfer_rate;
if (time_remaining >= 3600) {
str = g_strdup_printf(_("(%d:%02d:%d Remaining)"),
time_remaining / 3600,
(time_remaining % 3600) / 60,
(time_remaining % 3600) % 60);
} else {
str = g_strdup_printf(_("(%d:%02d Remaining)"),
time_remaining / 60,
time_remaining % 60);
}
/* Translators:
* Sending file 1 of 3 */
str2 = g_strdup_printf(_("Sending file %d of %d"),
current_file + 1,
file_count);
progressbar_text = g_strconcat(str2, " ", str, NULL);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress_bar),
progressbar_text);
g_free(str);
g_free(str2);
g_free(progressbar_text);
}static void transfer_completed_cb(DBusGProxy *proxy, gpointer user_data)
{
current_file++;
bytes_sent += file_length;
g_idle_add((GSourceFunc) send_one, NULL);
}static void session_created_cb(DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
{
GError *error = NULL;
const gchar *path = NULL;
if (!dbus_g_proxy_end_call(proxy, call, &error,
DBUS_TYPE_G_OBJECT_PATH, &path, G_TYPE_INVALID)) {
const gchar *error_name = NULL;
gint response_id;
if (error && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
error_name = dbus_g_error_get_name(error);
if (error_name && !strcmp(error_name, "org.openobex.Error.ConnectionAttemptFailed")) {
response_id = show_connection_error_dialog(GTK_WINDOW(main_dialog), bdaddrstr, error->message);
if (response_id == DIALOG_RESPONSE_RETRY) {
/* Try to create Session again */
dbus_g_proxy_begin_call(manager_proxy,
"CreateBluetoothSession",
(DBusGProxyCallNotify) session_created_cb, NULL, NULL,
G_TYPE_STRING, bdaddrstr, G_TYPE_STRING, "opp",
G_TYPE_BOOLEAN, FALSE, G_TYPE_INVALID);
goto out;
}
} else {
show_error_dialog(GTK_WINDOW(main_dialog), BUTTONS_OK,
error->message, "");
}
/* Failed, quit main loop */
gtk_main_quit();
goto out;
}
session_proxy = dbus_g_proxy_new_for_name(connection,
"org.openobex",
path,
"org.openobex.Session");
dbus_g_proxy_add_signal(session_proxy, "Connected",
G_TYPE_INVALID);
dbus_g_proxy_connect_signal(session_proxy, "Connected",
G_CALLBACK(session_connected_cb), NULL, NULL);
dbus_g_proxy_add_signal(session_proxy, "TransferStarted",
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(session_proxy, "TransferStarted",
G_CALLBACK(transfer_started_cb), NULL, NULL);
dbus_g_proxy_add_signal(session_proxy, "Cancelled",
G_TYPE_INVALID);
dbus_g_proxy_connect_signal(session_proxy, "Cancelled",
G_CALLBACK(transfer_cancelled_cb), NULL, NULL);
dbus_g_proxy_add_signal(session_proxy, "ErrorOccurred",
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(session_proxy, "ErrorOccurred",
G_CALLBACK(error_occurred_cb), NULL, NULL);
dbus_g_proxy_add_signal(session_proxy, "TransferProgress",
G_TYPE_UINT64, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(session_proxy, "TransferProgress",
G_CALLBACK(transfer_progress_cb), NULL, NULL);
dbus_g_proxy_add_signal(session_proxy, "TransferCompleted",
G_TYPE_INVALID);
dbus_g_proxy_connect_signal(session_proxy, "TransferCompleted",
G_CALLBACK(transfer_completed_cb), NULL, NULL);
dbus_g_proxy_call(session_proxy, "Connect", &error, G_TYPE_INVALID,
G_TYPE_INVALID);out:
if (error) g_error_free(error); }
static void error_occurred_cb(DBusGProxy *proxy, const gchar *error_name, const gchar *error_message, gpointer user_data)
{
gint ret;
gboolean link_error = FALSE;
gchar *error_text;
const gchar *reason;
g_message("ErrorOccurred");
g_message("Error name: %s", error_name);
g_message("Error message: %s", error_message);
error_text = g_strdup_printf(_("An error occured while sending file '%s'"),
(gchar *)g_slist_nth_data(file_list, current_file));
if (!strcmp(error_name, "org.openobex.Error.LinkError")) {
/* Connection to remote device was lost */
g_object_unref(G_OBJECT(session_proxy));
reason = _("Connection to remote device was lost");
link_error = TRUE;
} else if (!strcmp(error_name, "org.openobex.Error.Forbidden")) {
reason = _("Remote device rejected file");
} else {
reason = _("Unknown error");
}
ret = handle_file_sending_error(error_text, reason);
if (ret != GTK_RESPONSE_CANCEL) {
if (link_error) {
/* Need to reestablish connection */
dbus_g_proxy_begin_call(manager_proxy, "CreateBluetoothSession",
(DBusGProxyCallNotify) session_created_cb, NULL, NULL,
G_TYPE_STRING, bdaddrstr, G_TYPE_STRING, "opp",
G_TYPE_INVALID);
} else {
g_idle_add((GSourceFunc) send_one, NULL);
}
}
g_free(error_text);
}static void free_mem(void)
{
if (files_to_send)
g_strfreev(files_to_send);
g_free(bdaddrstr);
if (main_dialog)
gtk_widget_destroy (main_dialog);
if (G_IS_OBJECT(manager_proxy))
g_object_unref(G_OBJECT(manager_proxy));
if (G_IS_OBJECT(session_proxy))
g_object_unref (G_OBJECT(session_proxy));
g_slist_free(file_list);
}static void name_owner_changed(DBusGProxy *proxy, const char *name,
const char *prev, const char *new, gpointer user_data)
{
if (g_str_equal(name, "org.openobex") == TRUE && *new == '\0')
gtk_main_quit();
}int main(int argc, char *argv[])
{
GOptionContext *option_context;
GError *error = NULL;
guint i;
/* initialize gettext */
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
textdomain(GETTEXT_PACKAGE);
/* parse command line arguments */
option_context = g_option_context_new("<file list>");
g_option_context_add_main_entries(option_context, options, GETTEXT_PACKAGE);
g_option_context_add_group(option_context, gtk_get_option_group(TRUE));
g_option_context_parse(option_context, &argc, &argv, &error);
g_option_context_free(option_context);
if (error) {
printf("Usage:\n");
printf(" %s [--dest=BDADDR] <file list>\n", g_get_prgname());
g_error_free(error);
free_mem();
return 0;
}
gtk_init(&argc, &argv);
/* init DBus connection */
connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
if (!connection) {
show_error_dialog(NULL, GTK_BUTTONS_OK,
_("Please verify that D-Bus is correctly installed and setup."), error->message);
g_error_free(error);
return 1;
}
main_dialog = NULL;
from_label = NULL;
operation_label = NULL;
progress_bar = NULL;
/* get a list of files to send from command-line */
if (files_to_send)
file_count = g_strv_length(files_to_send);
else
file_count = 0;
for (i = 0; i < file_count; i++) {
file_list = g_slist_append(file_list,
g_strdup(*(files_to_send + i)));
}
/* show file chooser if no files were specified */
if (!file_count) {
file_list = select_files_dialog();
file_count = g_slist_length(file_list);
}
/* Check if there are some files to send */
if (!file_count) {
free_mem();
return 0;
}
/* Check for non regular and non existand files and
* determine total bytes to send */
for (i = 0; i < file_count; i++) {
GSList *item;
gchar *path, *filename;
gint64 size;
item = g_slist_nth(file_list, i);
path = (gchar *) item->data;
filename = normalise_filename(path, &size);
if (filename == NULL) {
g_free(path);
file_list = g_slist_remove_link(file_list, item);
continue;
}
g_free(item->data);
item->data = filename;
byte_count += size;
}
/* determine Bluetooth device to send to */
if (!bdaddrstr) {
bdaddrstr = browse_device_dialog();
if (!bdaddrstr) {
free_mem();
return 0;
}
}
dbus_g_object_register_marshaller(marshal_VOID__STRING_STRING_UINT64,
G_TYPE_NONE, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
dbus_g_object_register_marshaller(marshal_VOID__STRING_STRING,
G_TYPE_NONE, G_TYPE_STRING,
G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_object_register_marshaller(marshal_VOID__UINT64,
G_TYPE_NONE, G_TYPE_UINT64, G_TYPE_INVALID);
/* init UI */
ui_init();
/* init DBus proxy, create Session */
manager_proxy = dbus_g_proxy_new_for_name(connection,
"org.openobex",
"/org/openobex",
"org.openobex.Manager");
dbus_g_proxy_add_signal(manager_proxy, "NameOwnerChanged",
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(manager_proxy, "NameOwnerChanged",
G_CALLBACK(name_owner_changed), NULL, NULL);
dbus_g_proxy_begin_call(manager_proxy, "CreateBluetoothSession",
(DBusGProxyCallNotify) session_created_cb, NULL, NULL,
G_TYPE_STRING, bdaddrstr, G_TYPE_STRING, "opp",
G_TYPE_INVALID);
/* Go into main loop */
gtk_main();
/* done sending, free memory */
free_mem();
return 0;
}-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Re: [Bluez-devel] [PATCH] Updated sendto
Quoted 6 lines · Bastien Nocera
On Thu, 2008-02-07 at 00:59 +0000, Bastien Nocera wrote:
<snip>Quoted 1 line
And one that works with obex-data-server 0.1
Updated against current CVS, and fix a memleak when getting the adapters list. New
main.cfile attached as well, for easier review.
Updated against current CVS.
Index: dialog.h
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/dialog.h,v
retrieving revision 1.1
dialog.h +2 -0
@@ -21,5 +21,7 @@* */ +#include <glib.h> +gchar *show_browse_dialog (void );GSList *show_select_dialog (void );
Index: main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.24
main.c +645 -195
952 lines not on this page · raw message
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Marcel Holtmann
maintainerRe: [Bluez-devel] [PATCH] Updated sendto
Hi Bastien,
Quoted 8 lines
Quoted 6 lines
Quoted 2 lines
And one that works with obex-data-server 0.1
Updated against current CVS, and fix a memleak when getting the adapters
list. Newmain.cfile attached as well, for easier review.Updated against current CVS.
I've been through the main.c as whole and the actual patch. As you saw, I took the dialogs out of it since that made sense and was a sane way to do it. I mentioned that I want small patches and if they are small and logical, I apply them most of the times immediately. Smaller patches are easier to review. I am not taking a big chunk blindly.
So current patch is not acceptable. It is actually bad. So first action must be to remove all these useless comments. An example is this:
+ /* Go into main loop */
gtk_main();
Put comments where the code is unclear and not were everybody knows what it is doing. This is a perfect example of wrongly commenting code.
Second of all, I am unhappy with all this usage of gtk_main_quit() in various functions. Can we not just structure the code a lot more cleaner to avoid multiple calls of it. Besides the signal handling, I would expect one extra call in case we automatically wanna close the progress dialog.
After that, I like to see the current sendto patches to look like the obex-send progress bar. It should be not that complicated.
Then we go for sending multiple files after another.
Regards
Marcel
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Re: [Bluez-devel] [PATCH] Updated sendto
Quoted 17 lines · Marcel Holtmann
Hi Bastien,
Quoted 8 lines
Quoted 6 lines
Quoted 2 lines
And one that works with obex-data-server 0.1
Updated against current CVS, and fix a memleak when getting the adapters
list. Newmain.cfile attached as well, for easier review.Updated against current CVS.
I've been through the
main.cas whole and the actual patch. As you saw, I took the dialogs out of it since that made sense and was a sane way to do it. I mentioned that I want small patches and if they are small and logical, I apply them most of the times immediately. Smaller patches are easier to review. I am not taking a big chunk blindly.
Quoted 8 lines
So current patch is not acceptable. It is actually bad. So first action must be to remove all these useless comments. An example is this:
+ /* Go into main loop */
gtk_main();Put comments where the code is unclear and not were everybody knows what it is doing. This is a perfect example of wrongly commenting code.
Done locally.
Quoted 3 lines
Second of all, I am unhappy with all this usage of
gtk_main_quit()in various functions. Can we not just structure the code a lot more cleaner to avoid multiple calls of it.
I don't understand what you mean there.
Quoted 3 lines
Besides the signal handling, I
would expect one extra call in case we automatically wanna close the progress dialog.
Why? If there's no errors, why would you want to see it's finished? What information would be in the dialogue that could be useful?
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Marcel Holtmann
maintainerRe: [Bluez-devel] [PATCH] Updated sendto
Hi Bastien,
Quoted 10 lines
Quoted 8 lines
So current patch is not acceptable. It is actually bad. So first action must be to remove all these useless comments. An example is this:
+ /* Go into main loop */
gtk_main();Put comments where the code is unclear and not were everybody knows what it is doing. This is a perfect example of wrongly commenting code.
Done locally.
do you have an updated patch or do I have to do it by myself.
Quoted 5 lines
Quoted 3 lines
Second of all, I am unhappy with all this usage of
gtk_main_quit()in various functions. Can we not just structure the code a lot more cleaner to avoid multiple calls of it.I don't understand what you mean there.
What I currently got from code review is that we simply call gtk_main_quit() instead of having a little bit better structured code. Just stopping the mainloop at more then 1 or 2 places doesn't seem right to me. Feel free to convince me otherwise.
Quoted 6 lines
Quoted 3 lines
Besides the signal handling, I
would expect one extra call in case we automatically wanna close the progress dialog.Why? If there's no errors, why would you want to see it's finished? What information would be in the dialogue that could be useful?
That behavior is fine with me. However that was not what I said. So I expect two gtk_main_quit() inside the code. One for SIGTERM and one when we are actually done with the transfer.
Regards
Marcel
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Re: [Bluez-devel] [PATCH] Updated sendto
Quoted 8 lines · Marcel Holtmann
Hi Bastien,
Quoted 6 lines
Quoted 6 lines
So current patch is not acceptable. It is actually bad. So first action must be to remove all these useless comments. An example is this:
+ /* Go into main loop */
gtk_main();
Quoted 6 lines
Quoted 4 lines
Quoted 2 lines
Put comments where the code is unclear and not were everybody knows what it is doing. This is a perfect example of wrongly commenting code.
Done locally.
do you have an updated patch or do I have to do it by myself.
It was minimal changes, so I was waiting for response on the other issues.
Quoted 10 lines
Quoted 5 lines
Quoted 3 lines
Second of all, I am unhappy with all this usage of
gtk_main_quit()in various functions. Can we not just structure the code a lot more cleaner to avoid multiple calls of it.I don't understand what you mean there.
What I currently got from code review is that we simply call
gtk_main_quit()instead of having a little bit better structured code. Just stopping the mainloop at more then 1 or 2 places doesn't seem right to me. Feel free to convince me otherwise.
All the uses of gtk_main_quit() could be "exit(0)" instead, but we want to finish the mainloop and finish the cleaning up afterwards. It makes debugging memory leaks easier, as the program can exit cleanly after having mopped up after itself as hard as it could.
There's one instance of gtk_main_quit() that we could move (the one in send_one shouldn't be needed, we should exit as soon as we know the filelist is empty).
Quoted 10 lines
Quoted 6 lines
Quoted 3 lines
Besides the signal handling, I
would expect one extra call in case we automatically wanna close the progress dialog.Why? If there's no errors, why would you want to see it's finished? What information would be in the dialogue that could be useful?
That behavior is fine with me. However that was not what I said. So I expect two
gtk_main_quit()inside the code. One for SIGTERM and one when we are actually done with the transfer.
Do you just want us to exit() on error/user cancellation paths? It makes no practical differences apart from the one mentioned above.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Marcel Holtmann
maintainerRe: [Bluez-devel] [PATCH] Updated sendto
Hi Bastien,
Quoted 51 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
So current patch is not acceptable. It is actually bad. So first action must be to remove all these useless comments. An example is this:
+ /* Go into main loop */
gtk_main();Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
Put comments where the code is unclear and not were everybody knows what it is doing. This is a perfect example of wrongly commenting code.
Done locally.
do you have an updated patch or do I have to do it by myself.
It was minimal changes, so I was waiting for response on the other issues.
Quoted 5 lines
Quoted 5 lines
Quoted 4 lines
Second of all, I am unhappy with all this usage of
gtk_main_quit()in
various functions. Can we not just structure the code a lot more cleaner to avoid multiple calls of it.Quoted 8 lines
Quoted 1 line
I don't understand what you mean there.
What I currently got from code review is that we simply call
gtk_main_quit()instead of having a little bit better structured code.
Just stopping the mainloop at more then 1 or 2 places doesn't seem right
to me. Feel free to convince me otherwise.All the uses of
gtk_main_quit()could be "exit(0)" instead, but we want
to finish the mainloop and finish the cleaning up afterwards. It makes debugging memory leaks easier, as the program can exit cleanly after having mopped up after itself as hard as it could.There's one instance of
gtk_main_quit()that we could move (the one insend_oneshouldn't be needed, we should exit as soon as we know the filelist is empty).Quoted 9 lines
Quoted 8 lines
Quoted 4 lines
Besides the signal handling, I
would expect one extra call in case we automatically wanna close the
progress dialog.Why? If there's no errors, why would you want to see it's finished? What
information would be in the dialogue that could be useful?
Quoted 8 lines
Quoted 4 lines
That behavior is fine with me. However that was not what I said. So I expect two
gtk_main_quit()inside the code. One for SIGTERM and one when
we are actually done with the transfer.Do you just want us to
exit()on error/user cancellation paths? It makes
no practical differences apart from the one mentioned above.
lets use gtk_main_quit() since the exit code doesn't really matter and show me an updated patch. I am still working through the whole thing. We need some simplifications here and there, because the code looks too complicated to me.
Regards
Marcel
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel
Re: [Bluez-devel] [PATCH] Updated sendto
On Tue, 2008-02-26 at 02:21 +0100, Marcel Holtmann wrote:
<snip>
Quoted 4 lines
lets use
gtk_main_quit()since the exit code doesn't really matter and show me an updated patch. I am still working through the whole thing. We need some simplifications here and there, because the code looks too complicated to me.
There's some bits of the code that aren't as easy to read as they could, but it's hard to take a step back when you've used to the code.
Let me know which parts you don't like and we can rework them.
Cheers
Index: sendto/dialog.h
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/dialog.h,v
retrieving revision 1.1
dialog.h +2 -0
@@ -21,5 +21,7 @@* */ +#include <glib.h> +gchar *show_browse_dialog (void );GSList *show_select_dialog (void );
Index: sendto/main.c
===================================================================
RCS file: /cvsroot/bluez/gnome/sendto/main.c,v
retrieving revision 1.24
main.c +635 -195
942 lines not on this page · raw message
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel