newplaylist.c revision 2eaaff0477a5c5ba2aa7631e998f8bd4f77cf75c
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"
242eaaff0477a5c5ba2aa7631e998f8bd4f77cf75cLinus Walleij#include <stdlib.h>
252eaaff0477a5c5ba2aa7631e998f8bd4f77cf75cLinus Walleij#include <limits.h>
26508705f40e77e580e42da11b74368df89a2dbbafrreardon#include <sys/stat.h>
27508705f40e77e580e42da11b74368df89a2dbbafrreardon#include <fcntl.h>
28508705f40e77e580e42da11b74368df89a2dbbafrreardon#include <errno.h>
29508705f40e77e580e42da11b74368df89a2dbbafrreardon
30508705f40e77e580e42da11b74368df89a2dbbafrreardonstatic void usage(void) {
31508705f40e77e580e42da11b74368df89a2dbbafrreardon  printf("Usage: newplaylist -i <fileid/trackid> -n <playlistname>\n");
32508705f40e77e580e42da11b74368df89a2dbbafrreardon  exit(0);
33508705f40e77e580e42da11b74368df89a2dbbafrreardon}
34508705f40e77e580e42da11b74368df89a2dbbafrreardon
35508705f40e77e580e42da11b74368df89a2dbbafrreardonint main (int argc, char **argv) {
36508705f40e77e580e42da11b74368df89a2dbbafrreardon  int opt;
37508705f40e77e580e42da11b74368df89a2dbbafrreardon  extern int optind;
38508705f40e77e580e42da11b74368df89a2dbbafrreardon  extern char *optarg;
39508705f40e77e580e42da11b74368df89a2dbbafrreardon  LIBMTP_mtpdevice_t *device = NULL;
40508705f40e77e580e42da11b74368df89a2dbbafrreardon  int idcount = 0;
41508705f40e77e580e42da11b74368df89a2dbbafrreardon  uint32_t *ids = NULL;
42508705f40e77e580e42da11b74368df89a2dbbafrreardon  uint32_t *tmp = NULL;
43508705f40e77e580e42da11b74368df89a2dbbafrreardon  char *playlistname = NULL;
4420c3b6712c74c05c12b5e5f7123a2d7e1876c40eLinus Walleij  char *rest;
45508705f40e77e580e42da11b74368df89a2dbbafrreardon
46cd9f49913d12199fa7971309530a37f664df916etedbullock  fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n");
47cd9f49913d12199fa7971309530a37f664df916etedbullock
48508705f40e77e580e42da11b74368df89a2dbbafrreardon  while ( (opt = getopt(argc, argv, "hn:i:")) != -1 ) {
49508705f40e77e580e42da11b74368df89a2dbbafrreardon    switch (opt) {
50508705f40e77e580e42da11b74368df89a2dbbafrreardon    case 'h':
51508705f40e77e580e42da11b74368df89a2dbbafrreardon      usage();
52508705f40e77e580e42da11b74368df89a2dbbafrreardon    case 'i':
53508705f40e77e580e42da11b74368df89a2dbbafrreardon      idcount++;
54508705f40e77e580e42da11b74368df89a2dbbafrreardon      if ((tmp = realloc(ids, sizeof(uint32_t) * (idcount))) == NULL) {
55508705f40e77e580e42da11b74368df89a2dbbafrreardon        printf("realloc failed\n");
56508705f40e77e580e42da11b74368df89a2dbbafrreardon        return 1;
57508705f40e77e580e42da11b74368df89a2dbbafrreardon      }
58508705f40e77e580e42da11b74368df89a2dbbafrreardon      ids = tmp;
5920c3b6712c74c05c12b5e5f7123a2d7e1876c40eLinus Walleij      ids[(idcount-1)] = strtoul(optarg, &rest, 0);
60508705f40e77e580e42da11b74368df89a2dbbafrreardon      break;
61508705f40e77e580e42da11b74368df89a2dbbafrreardon    case 'n':
62508705f40e77e580e42da11b74368df89a2dbbafrreardon      playlistname = strdup(optarg);
63508705f40e77e580e42da11b74368df89a2dbbafrreardon      break;
64508705f40e77e580e42da11b74368df89a2dbbafrreardon    default:
65508705f40e77e580e42da11b74368df89a2dbbafrreardon      usage();
66508705f40e77e580e42da11b74368df89a2dbbafrreardon    }
67508705f40e77e580e42da11b74368df89a2dbbafrreardon  }
68508705f40e77e580e42da11b74368df89a2dbbafrreardon  argc -= optind;
69508705f40e77e580e42da11b74368df89a2dbbafrreardon  argv += optind;
70508705f40e77e580e42da11b74368df89a2dbbafrreardon
71508705f40e77e580e42da11b74368df89a2dbbafrreardon  if ( playlistname == NULL) {
72508705f40e77e580e42da11b74368df89a2dbbafrreardon    printf("You need to supply a playlist name.\n");
73508705f40e77e580e42da11b74368df89a2dbbafrreardon    usage();
74508705f40e77e580e42da11b74368df89a2dbbafrreardon  }
75508705f40e77e580e42da11b74368df89a2dbbafrreardon
76508705f40e77e580e42da11b74368df89a2dbbafrreardon  if (idcount == 0) {
77508705f40e77e580e42da11b74368df89a2dbbafrreardon    printf("You need to supply one or more track IDs\n");
78508705f40e77e580e42da11b74368df89a2dbbafrreardon    usage();
79508705f40e77e580e42da11b74368df89a2dbbafrreardon  }
80508705f40e77e580e42da11b74368df89a2dbbafrreardon
81508705f40e77e580e42da11b74368df89a2dbbafrreardon
82508705f40e77e580e42da11b74368df89a2dbbafrreardon  LIBMTP_Init();
83508705f40e77e580e42da11b74368df89a2dbbafrreardon  device = LIBMTP_Get_First_Device();
84508705f40e77e580e42da11b74368df89a2dbbafrreardon  if (device == NULL) {
85508705f40e77e580e42da11b74368df89a2dbbafrreardon    printf("No devices.\n");
86508705f40e77e580e42da11b74368df89a2dbbafrreardon    return 0;
87508705f40e77e580e42da11b74368df89a2dbbafrreardon  }
88508705f40e77e580e42da11b74368df89a2dbbafrreardon
89508705f40e77e580e42da11b74368df89a2dbbafrreardon  LIBMTP_playlist_t *playlist = LIBMTP_new_playlist_t();
90508705f40e77e580e42da11b74368df89a2dbbafrreardon  playlist->name = playlistname;
91508705f40e77e580e42da11b74368df89a2dbbafrreardon  playlist->no_tracks = idcount;
92508705f40e77e580e42da11b74368df89a2dbbafrreardon  playlist->tracks = ids;
93ea68f1f3e59ed3fbc02cf64e8f2779d67806ad12Linus Walleij  playlist->parent_id = 0;
94ea68f1f3e59ed3fbc02cf64e8f2779d67806ad12Linus Walleij  playlist->storage_id = 0;
95ea68f1f3e59ed3fbc02cf64e8f2779d67806ad12Linus Walleij  int ret = LIBMTP_Create_New_Playlist(device,playlist);
96508705f40e77e580e42da11b74368df89a2dbbafrreardon  if (ret != 0) {
97070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij    printf("Couldn't create playlist object\n");
98070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij    LIBMTP_Dump_Errorstack(device);
99070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij    LIBMTP_Clear_Errorstack(device);
100508705f40e77e580e42da11b74368df89a2dbbafrreardon  }
101508705f40e77e580e42da11b74368df89a2dbbafrreardon  else {
102070e9b4a25c2384f070f20b92c8101c9e3f58f33Linus Walleij    printf("Created new playlist: %u\n", playlist->playlist_id);
103508705f40e77e580e42da11b74368df89a2dbbafrreardon  }
104508705f40e77e580e42da11b74368df89a2dbbafrreardon
105508705f40e77e580e42da11b74368df89a2dbbafrreardon  LIBMTP_Release_Device(device);
106508705f40e77e580e42da11b74368df89a2dbbafrreardon  printf("OK.\n");
107508705f40e77e580e42da11b74368df89a2dbbafrreardon  return 0;
108508705f40e77e580e42da11b74368df89a2dbbafrreardon}
109508705f40e77e580e42da11b74368df89a2dbbafrreardon
110