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