newplaylist.c revision ea68f1f3e59ed3fbc02cf64e8f2779d67806ad12
18f7377353db29efe0a506123deec03d70935957aAjay Panicker/** 28f7377353db29efe0a506123deec03d70935957aAjay Panicker * \file newplaylist.c 38f7377353db29efe0a506123deec03d70935957aAjay Panicker * Example program to create a playlist on a device. 48f7377353db29efe0a506123deec03d70935957aAjay Panicker * 58f7377353db29efe0a506123deec03d70935957aAjay Panicker * Copyright (C) 2006 Robert Reardon <rreardon@monkshatch.vispa.com> 68f7377353db29efe0a506123deec03d70935957aAjay Panicker * 78f7377353db29efe0a506123deec03d70935957aAjay Panicker * This library is free software; you can redistribute it and/or 88f7377353db29efe0a506123deec03d70935957aAjay Panicker * modify it under the terms of the GNU Lesser General Public 98f7377353db29efe0a506123deec03d70935957aAjay Panicker * License as published by the Free Software Foundation; either 108f7377353db29efe0a506123deec03d70935957aAjay Panicker * version 2 of the License, or (at your option) any later version. 118f7377353db29efe0a506123deec03d70935957aAjay Panicker * 128f7377353db29efe0a506123deec03d70935957aAjay Panicker * This library is distributed in the hope that it will be useful, 138f7377353db29efe0a506123deec03d70935957aAjay Panicker * but WITHOUT ANY WARRANTY; without even the implied warranty of 148f7377353db29efe0a506123deec03d70935957aAjay Panicker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 158f7377353db29efe0a506123deec03d70935957aAjay Panicker * Lesser General Public License for more details. 168f7377353db29efe0a506123deec03d70935957aAjay Panicker * 178f7377353db29efe0a506123deec03d70935957aAjay Panicker * You should have received a copy of the GNU Lesser General Public 188f7377353db29efe0a506123deec03d70935957aAjay Panicker * License along with this library; if not, write to the 198f7377353db29efe0a506123deec03d70935957aAjay Panicker * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 208f7377353db29efe0a506123deec03d70935957aAjay Panicker * Boston, MA 02111-1307, USA. 218f7377353db29efe0a506123deec03d70935957aAjay Panicker */ 228f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "common.h" 238f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "string.h" 248f7377353db29efe0a506123deec03d70935957aAjay Panicker#include <sys/stat.h> 258f7377353db29efe0a506123deec03d70935957aAjay Panicker#include <fcntl.h> 268f7377353db29efe0a506123deec03d70935957aAjay Panicker#include <errno.h> 278f7377353db29efe0a506123deec03d70935957aAjay Panicker 288f7377353db29efe0a506123deec03d70935957aAjay Panickerstatic void usage(void) { 298f7377353db29efe0a506123deec03d70935957aAjay Panicker printf("Usage: newplaylist -i <fileid/trackid> -n <playlistname>\n"); 308f7377353db29efe0a506123deec03d70935957aAjay Panicker exit(0); 318f7377353db29efe0a506123deec03d70935957aAjay Panicker} 328f7377353db29efe0a506123deec03d70935957aAjay Panicker 338f7377353db29efe0a506123deec03d70935957aAjay Panickerint main (int argc, char **argv) { 348f7377353db29efe0a506123deec03d70935957aAjay Panicker int opt; 358f7377353db29efe0a506123deec03d70935957aAjay Panicker extern int optind; 368f7377353db29efe0a506123deec03d70935957aAjay Panicker extern char *optarg; 378f7377353db29efe0a506123deec03d70935957aAjay Panicker LIBMTP_mtpdevice_t *device = NULL; 388f7377353db29efe0a506123deec03d70935957aAjay Panicker int idcount = 0; 398f7377353db29efe0a506123deec03d70935957aAjay Panicker uint32_t *ids = NULL; 408f7377353db29efe0a506123deec03d70935957aAjay Panicker uint32_t *tmp = NULL; 418f7377353db29efe0a506123deec03d70935957aAjay Panicker char *playlistname = NULL; 428f7377353db29efe0a506123deec03d70935957aAjay Panicker char *rest; 438f7377353db29efe0a506123deec03d70935957aAjay Panicker 448f7377353db29efe0a506123deec03d70935957aAjay Panicker fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n"); 458f7377353db29efe0a506123deec03d70935957aAjay Panicker 468f7377353db29efe0a506123deec03d70935957aAjay Panicker while ( (opt = getopt(argc, argv, "hn:i:")) != -1 ) { 478f7377353db29efe0a506123deec03d70935957aAjay Panicker switch (opt) { 488f7377353db29efe0a506123deec03d70935957aAjay Panicker case 'h': 498f7377353db29efe0a506123deec03d70935957aAjay Panicker usage(); 508f7377353db29efe0a506123deec03d70935957aAjay Panicker case 'i': 518f7377353db29efe0a506123deec03d70935957aAjay Panicker idcount++; 528f7377353db29efe0a506123deec03d70935957aAjay Panicker if ((tmp = realloc(ids, sizeof(uint32_t) * (idcount))) == NULL) { 538f7377353db29efe0a506123deec03d70935957aAjay Panicker printf("realloc failed\n"); 548f7377353db29efe0a506123deec03d70935957aAjay Panicker return 1; 558f7377353db29efe0a506123deec03d70935957aAjay Panicker } 568f7377353db29efe0a506123deec03d70935957aAjay Panicker ids = tmp; 578f7377353db29efe0a506123deec03d70935957aAjay Panicker ids[(idcount-1)] = strtoul(optarg, &rest, 0); 588f7377353db29efe0a506123deec03d70935957aAjay Panicker break; 598f7377353db29efe0a506123deec03d70935957aAjay Panicker case 'n': 608f7377353db29efe0a506123deec03d70935957aAjay Panicker playlistname = strdup(optarg); 618f7377353db29efe0a506123deec03d70935957aAjay Panicker break; 628f7377353db29efe0a506123deec03d70935957aAjay Panicker default: 638f7377353db29efe0a506123deec03d70935957aAjay Panicker usage(); 648f7377353db29efe0a506123deec03d70935957aAjay Panicker } 658f7377353db29efe0a506123deec03d70935957aAjay Panicker } 668f7377353db29efe0a506123deec03d70935957aAjay Panicker argc -= optind; 678f7377353db29efe0a506123deec03d70935957aAjay Panicker argv += optind; 688f7377353db29efe0a506123deec03d70935957aAjay Panicker 698f7377353db29efe0a506123deec03d70935957aAjay Panicker if ( playlistname == NULL) { 708f7377353db29efe0a506123deec03d70935957aAjay Panicker printf("You need to supply a playlist name.\n"); 718f7377353db29efe0a506123deec03d70935957aAjay Panicker usage(); 728f7377353db29efe0a506123deec03d70935957aAjay Panicker } 73 74 if (idcount == 0) { 75 printf("You need to supply one or more track IDs\n"); 76 usage(); 77 } 78 79 80 LIBMTP_Init(); 81 device = LIBMTP_Get_First_Device(); 82 if (device == NULL) { 83 printf("No devices.\n"); 84 return 0; 85 } 86 87 LIBMTP_playlist_t *playlist = LIBMTP_new_playlist_t(); 88 playlist->name = playlistname; 89 playlist->no_tracks = idcount; 90 playlist->tracks = ids; 91 playlist->parent_id = 0; 92 playlist->storage_id = 0; 93 int ret = LIBMTP_Create_New_Playlist(device,playlist); 94 if (ret != 0) { 95 printf("Couldn't create playlist object\n"); 96 LIBMTP_Dump_Errorstack(device); 97 LIBMTP_Clear_Errorstack(device); 98 } 99 else { 100 printf("Created new playlist: %u\n", playlist->playlist_id); 101 } 102 103 LIBMTP_Release_Device(device); 104 printf("OK.\n"); 105 return 0; 106} 107 108