newplaylist.c revision cd9f49913d12199fa7971309530a37f664df916e
13d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij/** 23d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * \file newplaylist.c 33d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * Example program to create a playlist on a device. 43d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * 53d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * Copyright (C) 2006 Robert Reardon <rreardon@monkshatch.vispa.com> 63d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * 73d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * This library is free software; you can redistribute it and/or 83d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * modify it under the terms of the GNU Lesser General Public 93d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * License as published by the Free Software Foundation; either 103d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * version 2 of the License, or (at your option) any later version. 113d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * 123d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * This library is distributed in the hope that it will be useful, 133d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * but WITHOUT ANY WARRANTY; without even the implied warranty of 143d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 153d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * Lesser General Public License for more details. 163d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * 173d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * You should have received a copy of the GNU Lesser General Public 183d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * License along with this library; if not, write to the 193d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 203d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij * Boston, MA 02111-1307, USA. 213d78c4ce5b4b4f38929792b6e392df1416b578b7Linus Walleij */ 22508705f40e77e580e42da11b74368df89a2dbbafrreardon#include "common.h" 23508705f40e77e580e42da11b74368df89a2dbbafrreardon#include "string.h" 24508705f40e77e580e42da11b74368df89a2dbbafrreardon#include <sys/stat.h> 25508705f40e77e580e42da11b74368df89a2dbbafrreardon#include <fcntl.h> 26508705f40e77e580e42da11b74368df89a2dbbafrreardon#include <errno.h> 27508705f40e77e580e42da11b74368df89a2dbbafrreardon 28508705f40e77e580e42da11b74368df89a2dbbafrreardonstatic void usage(void) { 29508705f40e77e580e42da11b74368df89a2dbbafrreardon printf("Usage: newplaylist -i <fileid/trackid> -n <playlistname>\n"); 30508705f40e77e580e42da11b74368df89a2dbbafrreardon exit(0); 31508705f40e77e580e42da11b74368df89a2dbbafrreardon} 32508705f40e77e580e42da11b74368df89a2dbbafrreardon 33508705f40e77e580e42da11b74368df89a2dbbafrreardonint main (int argc, char **argv) { 34508705f40e77e580e42da11b74368df89a2dbbafrreardon int opt; 35508705f40e77e580e42da11b74368df89a2dbbafrreardon extern int optind; 36508705f40e77e580e42da11b74368df89a2dbbafrreardon extern char *optarg; 37508705f40e77e580e42da11b74368df89a2dbbafrreardon LIBMTP_mtpdevice_t *device = NULL; 38508705f40e77e580e42da11b74368df89a2dbbafrreardon int idcount = 0; 39508705f40e77e580e42da11b74368df89a2dbbafrreardon uint32_t *ids = NULL; 40508705f40e77e580e42da11b74368df89a2dbbafrreardon uint32_t *tmp = NULL; 41508705f40e77e580e42da11b74368df89a2dbbafrreardon char *playlistname = NULL; 42508705f40e77e580e42da11b74368df89a2dbbafrreardon 43cd9f49913d12199fa7971309530a37f664df916etedbullock fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n"); 44cd9f49913d12199fa7971309530a37f664df916etedbullock 45508705f40e77e580e42da11b74368df89a2dbbafrreardon while ( (opt = getopt(argc, argv, "hn:i:")) != -1 ) { 46508705f40e77e580e42da11b74368df89a2dbbafrreardon switch (opt) { 47508705f40e77e580e42da11b74368df89a2dbbafrreardon case 'h': 48508705f40e77e580e42da11b74368df89a2dbbafrreardon usage(); 49508705f40e77e580e42da11b74368df89a2dbbafrreardon case 'i': 50508705f40e77e580e42da11b74368df89a2dbbafrreardon idcount++; 51508705f40e77e580e42da11b74368df89a2dbbafrreardon if ((tmp = realloc(ids, sizeof(uint32_t) * (idcount))) == NULL) { 52508705f40e77e580e42da11b74368df89a2dbbafrreardon printf("realloc failed\n"); 53508705f40e77e580e42da11b74368df89a2dbbafrreardon return 1; 54508705f40e77e580e42da11b74368df89a2dbbafrreardon } 55508705f40e77e580e42da11b74368df89a2dbbafrreardon ids = tmp; 56508705f40e77e580e42da11b74368df89a2dbbafrreardon ids[(idcount-1)] = atoi(strdup(optarg)); 57508705f40e77e580e42da11b74368df89a2dbbafrreardon break; 58508705f40e77e580e42da11b74368df89a2dbbafrreardon case 'n': 59508705f40e77e580e42da11b74368df89a2dbbafrreardon playlistname = strdup(optarg); 60508705f40e77e580e42da11b74368df89a2dbbafrreardon break; 61508705f40e77e580e42da11b74368df89a2dbbafrreardon default: 62508705f40e77e580e42da11b74368df89a2dbbafrreardon usage(); 63508705f40e77e580e42da11b74368df89a2dbbafrreardon } 64508705f40e77e580e42da11b74368df89a2dbbafrreardon } 65508705f40e77e580e42da11b74368df89a2dbbafrreardon argc -= optind; 66508705f40e77e580e42da11b74368df89a2dbbafrreardon argv += optind; 67508705f40e77e580e42da11b74368df89a2dbbafrreardon 68508705f40e77e580e42da11b74368df89a2dbbafrreardon if ( playlistname == NULL) { 69508705f40e77e580e42da11b74368df89a2dbbafrreardon printf("You need to supply a playlist name.\n"); 70508705f40e77e580e42da11b74368df89a2dbbafrreardon usage(); 71508705f40e77e580e42da11b74368df89a2dbbafrreardon } 72508705f40e77e580e42da11b74368df89a2dbbafrreardon 73508705f40e77e580e42da11b74368df89a2dbbafrreardon if (idcount == 0) { 74508705f40e77e580e42da11b74368df89a2dbbafrreardon printf("You need to supply one or more track IDs\n"); 75508705f40e77e580e42da11b74368df89a2dbbafrreardon usage(); 76508705f40e77e580e42da11b74368df89a2dbbafrreardon } 77508705f40e77e580e42da11b74368df89a2dbbafrreardon 78508705f40e77e580e42da11b74368df89a2dbbafrreardon 79508705f40e77e580e42da11b74368df89a2dbbafrreardon LIBMTP_Init(); 80508705f40e77e580e42da11b74368df89a2dbbafrreardon device = LIBMTP_Get_First_Device(); 81508705f40e77e580e42da11b74368df89a2dbbafrreardon if (device == NULL) { 82508705f40e77e580e42da11b74368df89a2dbbafrreardon printf("No devices.\n"); 83508705f40e77e580e42da11b74368df89a2dbbafrreardon return 0; 84508705f40e77e580e42da11b74368df89a2dbbafrreardon } 85508705f40e77e580e42da11b74368df89a2dbbafrreardon 86508705f40e77e580e42da11b74368df89a2dbbafrreardon LIBMTP_playlist_t *playlist = LIBMTP_new_playlist_t(); 87508705f40e77e580e42da11b74368df89a2dbbafrreardon playlist->name = playlistname; 88508705f40e77e580e42da11b74368df89a2dbbafrreardon playlist->no_tracks = idcount; 89508705f40e77e580e42da11b74368df89a2dbbafrreardon playlist->tracks = ids; 90508705f40e77e580e42da11b74368df89a2dbbafrreardon int ret = LIBMTP_Create_New_Playlist(device,playlist,0); 91508705f40e77e580e42da11b74368df89a2dbbafrreardon if (ret != 0) { 92070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij printf("Couldn't create playlist object\n"); 93070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij LIBMTP_Dump_Errorstack(device); 94070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij LIBMTP_Clear_Errorstack(device); 95508705f40e77e580e42da11b74368df89a2dbbafrreardon } 96508705f40e77e580e42da11b74368df89a2dbbafrreardon else { 97070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij printf("Created new playlist: %u\n", playlist->playlist_id); 98508705f40e77e580e42da11b74368df89a2dbbafrreardon } 99508705f40e77e580e42da11b74368df89a2dbbafrreardon 100508705f40e77e580e42da11b74368df89a2dbbafrreardon LIBMTP_Release_Device(device); 101508705f40e77e580e42da11b74368df89a2dbbafrreardon printf("OK.\n"); 102508705f40e77e580e42da11b74368df89a2dbbafrreardon return 0; 103508705f40e77e580e42da11b74368df89a2dbbafrreardon} 104508705f40e77e580e42da11b74368df89a2dbbafrreardon 105