Mercurial > audlegacy-plugins
diff src/mtp_up/mtp.c @ 1456:475eac76a8ba
MTP upload plugin
| author | Cristi Magherusan <majeru@atheme-project.org> |
|---|---|
| date | Sat, 11 Aug 2007 01:52:28 +0300 |
| parents | |
| children | b2debf8c9ec8 |
line wrap: on
line diff
--- /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 <majeru@atheme.org> + * + * 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 <http://www.gnu.org/licenses>. + */ + +#include <glib.h> +#include <libmtp.h> +#include <audacious/plugin.h> +#include <audacious/playlist.h> +#include <audacious/ui_plugin_menu.h> +#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; +} +
