13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/**
23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * \file folders.c
33aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Example program that lists all folders on a device.
43aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
53aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Copyright (C) 2005-2007 Linus Walleij <triad@df.lth.se>
63aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Copyright (C) 2007 Ted Bullock <tbullock@canada.com>
73aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
83aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This library is free software; you can redistribute it and/or
93aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * modify it under the terms of the GNU Lesser General Public
103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * License as published by the Free Software Foundation; either
113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * version 2 of the License, or (at your option) any later version.
123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This library is distributed in the hope that it will be useful,
143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * but WITHOUT ANY WARRANTY; without even the implied warranty of
153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Lesser General Public License for more details.
173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev *
183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * You should have received a copy of the GNU Lesser General Public
193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * License along with this library; if not, write to the
203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Boston, MA 02111-1307, USA.
223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */
233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "common.h"
243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <stdlib.h>
253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic void dump_folder_list(LIBMTP_folder_t *folderlist, int level)
273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{
283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  int i;
293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  if(folderlist==NULL) {
303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    return;
313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  }
323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  printf("%u\t", folderlist->folder_id);
343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for(i=0;i<level;i++) printf("  ");
353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  printf("%s\n", folderlist->name);
373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  dump_folder_list(folderlist->child, level+1);
393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  dump_folder_list(folderlist->sibling, level);
403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint main (int argc, char **argv)
433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{
443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  LIBMTP_mtpdevice_t *device, *iter;
453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  LIBMTP_folder_t *folders;
463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  LIBMTP_Init();
483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  fprintf(stdout, "Attempting to connect device(s)\n");
493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  switch(LIBMTP_Get_Connected_Devices(&device))
513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  {
523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  case LIBMTP_ERROR_NO_DEVICE_ATTACHED:
533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    fprintf(stdout, "mtp-folders: No Devices have been found\n");
543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    return 0;
553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  case LIBMTP_ERROR_CONNECTING:
563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    fprintf(stderr, "mtp-folders: There has been an error connecting. Exit\n");
573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    return 1;
583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  case LIBMTP_ERROR_MEMORY_ALLOCATION:
593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    fprintf(stderr, "mtp-folders: Memory Allocation Error. Exit\n");
603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    return 1;
613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  /* Unknown general errors - This should never execute */
633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  case LIBMTP_ERROR_GENERAL:
643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  default:
653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    fprintf(stderr, "mtp-folders: Unknown error, please report "
663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev                    "this to the libmtp developers\n");
673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  return 1;
683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  /* Successfully connected at least one device, so continue */
703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  case LIBMTP_ERROR_NONE:
713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    fprintf(stdout, "mtp-folders: Successfully connected\n");
723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    fflush(stdout);
733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  }
743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  /* iterate through connected MTP devices */
763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  for(iter = device; iter != NULL; iter = iter->next)
773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  {
783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  	char *friendlyname;
793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    /* Echo the friendly name so we know which device we are working with */
803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    friendlyname = LIBMTP_Get_Friendlyname(iter);
813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    if (friendlyname == NULL) {
823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      printf("Friendly name: (NULL)\n");
833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    } else {
843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      printf("Friendly name: %s\n", friendlyname);
853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      free(friendlyname);
863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    }
873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    LIBMTP_Dump_Errorstack(iter);
893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    LIBMTP_Clear_Errorstack(iter);    /* Get folder listing */
903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    folders = LIBMTP_Get_Folder_List(iter);
923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    if (folders == NULL) {
943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      fprintf(stdout, "No folders found\n");
953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      LIBMTP_Dump_Errorstack(iter);
963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      LIBMTP_Clear_Errorstack(iter);
973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    } else {
983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev      dump_folder_list(folders,0);
993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    }
1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev    LIBMTP_destroy_folder_t(folders);
1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  }
1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  LIBMTP_Release_Device_List(device);
1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  printf("OK.\n");
1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev
1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev  return 0;
1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev}
110