# HG changeset patch # User Cristi Magherusan # Date 1186786348 -10800 # Node ID 475eac76a8baae5fdc39b8beaa7f49992be60540 # Parent 68c9906e0ac448d6e0db039113caeed7c5c79c0d MTP upload plugin diff -r 68c9906e0ac4 -r 475eac76a8ba configure.ac --- a/configure.ac Fri Aug 10 23:06:50 2007 +0300 +++ b/configure.ac Sat Aug 11 01:52:28 2007 +0300 @@ -1225,6 +1225,22 @@ AC_MSG_RESULT([*** mms plugin disabled by request ***]) fi + +dnl *** MTP Upload + +AC_ARG_ENABLE(mtp_up, +[ --enable-mtp_up enable mtp upload support. (default=disabled)], +[have_mtp_up=$enableval], +[have_mtp_up=no]) + +if test "x$have_mtp_up" = "xyes"; then + have_mtp_up=yes + PKG_CHECK_MODULES(MTP, [libmtp >= 0.1.0], [GENERAL_PLUGINS="$GENERAL_PLUGINS mtp_up" ], [have_mtp_up="no"]) + MTP_LIBS=`pkg-config --libs libmtp` +else + have_mtp_up=no +fi + dnl *** libparanormal checks AC_ARG_ENABLE(paranormal, @@ -1501,6 +1517,7 @@ echo " Control via event device (evdev-plug): $have_evdevplug" echo " LIRC: $have_lirc" echo " AudioScrobbler Client: $scrobbler" +echo " Upload to MTP device: $have_mtp_up" echo echo " Effect" echo " ------" diff -r 68c9906e0ac4 -r 475eac76a8ba src/mtp_up/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mtp_up/Makefile Sat Aug 11 01:52:28 2007 +0300 @@ -0,0 +1,19 @@ +include ../../mk/rules.mk +include ../../mk/init.mk + +SUBDIRS = + +OBJECTIVE_LIBS = libmtp_up$(SHARED_SUFFIX) + +LIBDIR = $(plugindir)/$(GENERAL_PLUGIN_DIR) + +LIBADD += $(MTP_LIBS) $(GTK_LIBS) $(GLIB_LIBS) $(PANGO_LIBS) +SOURCES = mtp.c + +CFLAGS += $(PICFLAGS) $(GTK_CFLAGS) $(GLIB_CFLAGS) $(PANGO_CFLAGS) $(BEEP_DEFINES) -I../../intl -I../.. + +CFLAGS += -Wall -pedantic -std=c99 $(GCC42_CFLAGS) -D_BSD_SOURCE + +OBJECTS = ${SOURCES:.c=.o} + +include ../../mk/objective.mk diff -r 68c9906e0ac4 -r 475eac76a8ba src/mtp_up/mtp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mtp_up/mtp.c Sat Aug 11 01:52:28 2007 +0300 @@ -0,0 +1,170 @@ +/* + * Audacious MTP upload plugin + * + * Copyright (c) 2007 Cristian Magherusan + * + * 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; under version 3 of the License. + * + * 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, see . + */ + +#include +#include +#include +#include +#include +#define DEBUG 1 + +GMutex * mutex = NULL; +gboolean mtp_initialised = FALSE; +LIBMTP_mtpdevice_t *mtp_device = NULL; +LIBMTP_progressfunc_t *callback; +LIBMTP_file_t *filelist; +Playlist *active_playlist; + +void mtp_init ( void ); +void mtp_cleanup ( void ); +void mtp_prefs ( void ); +void mtp_about ( void ); + +GeneralPlugin mtp_gp = +{ + NULL, /* handle */ + NULL, /* filename */ + "MTP Upload " , /* description */ + mtp_init, /* init */ + mtp_about, /* about */ + mtp_prefs, /* configure */ + mtp_cleanup /* cleanup */ +}; +GtkWidget *menuitem; + +GeneralPlugin *mtp_gplist[] = { &mtp_gp, NULL }; +DECLARE_PLUGIN(mtp_gp, NULL, NULL, NULL, NULL, NULL, mtp_gplist, NULL, NULL) + + +gpointer upload(gpointer arg) +{ + Playlist *current_play; + Tuple *tuple; + gchar *from_path; + gchar *comp; + char *filename; + uint64_t filesize; + struct stat sb; + LIBMTP_file_t *genfile; + int ret; + uint32_t parent_id = 0; + GList *node; + PlaylistEntry *entry; + current_play = g_new0(Playlist,1); + current_play = playlist_get_active(); + node = current_play->entries; + PLAYLIST_LOCK(current_play->mutex); /*needed so that the user doesn't modify the selection*/ + while (node) { + entry = PLAYLIST_ENTRY(node->data); + if (entry->selected) + { + tuple = entry->tuple; + from_path = g_strdup_printf("%s/%s", tuple_get_string(tuple, "file-path"), tuple_get_string(tuple, "file-name")); + comp = g_strescape(from_path,NULL); + if ( stat(from_path, &sb) == -1 ) + { +#if DEBUG + g_print("ERROR!"); +#endif + return NULL; + } + filesize = (uint64_t) sb.st_size; + filename = basename(from_path); + parent_id = 0; + genfile = LIBMTP_new_file_t(); + genfile->filesize = filesize; + genfile->filename = strdup(filename); +#if DEBUG + g_print("Uploading track '%s'\n",comp); +#endif + ret = LIBMTP_Send_File_From_File(mtp_device,comp , genfile, NULL , NULL, parent_id); +#if DEBUG + if (ret == 0) + g_print("Upload finished!\n"); + else + g_print("An error has occured while uploading '%s'...\nUpload failed!!!",comp); +#endif + LIBMTP_destroy_file_t(genfile); + g_free(from_path); + g_free(comp); + entry->selected = FALSE; + } + node = g_list_next(node); + } + PLAYLIST_UNLOCK(current_play->mutex); + return NULL; +} + + void +mtp_prefs ( void ) +{ + /*pref stub*/ +} + + + void +mtp_about ( void ) +{ + /*about stub*/ +} + +void mtp_press() +{ + if(!mutex) + return; + g_mutex_lock(mutex); + if(!mtp_initialised) + { +#if DEBUG + g_print("Initializing the MTP device...\n"); +#endif + mtp_device = LIBMTP_Get_First_Device(); + mtp_initialised = TRUE; + } + g_mutex_unlock(mutex); + if(mtp_device == NULL) + { +#if DEBUG + g_print("No MTP devices have been found !!!"); +#endif + return; + + } + g_thread_create(upload,NULL,FALSE,NULL); +} + +void mtp_init(void) +{ + menuitem=gtk_menu_item_new_with_label("Upload to MTP"); + gtk_widget_show (menuitem); + audacious_menu_plugin_item_add(AUDACIOUS_MENU_PLAYLIST_RCLICK, menuitem); + g_signal_connect (G_OBJECT (menuitem), "button_press_event",G_CALLBACK (mtp_press), NULL); + LIBMTP_Init(); + mutex = g_mutex_new(); +} + +void mtp_cleanup(void) +{ +#if DEBUG + g_print("Cleaning up MTP_upload\n"); +#endif +// audacious_menu_plugin_item_remove(AUDACIOUS_MENU_PLAYLIST, menuitem ); + g_mutex_free (mutex); + mutex = NULL; +} +