OLD | NEW |
1 /** | 1 /** |
2 * \file files.c | 2 * \file files.c |
3 * Example program that lists all files on a device. | 3 * Example program that lists all files on a device. |
4 * | 4 * |
5 * Copyright (C) 2005-2012 Linus Walleij <triad@df.lth.se> | 5 * Copyright (C) 2005-2012 Linus Walleij <triad@df.lth.se> |
6 * Copyright (C) 2007 Ted Bullock <tbullock@canada.com> | 6 * Copyright (C) 2007 Ted Bullock <tbullock@canada.com> |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Lesser General Public | 9 * modify it under the terms of the GNU Lesser General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 28 matching lines...) Expand all Loading... |
39 printf(" File size %llu (0x%016llX) bytes\n", | 39 printf(" File size %llu (0x%016llX) bytes\n", |
40 (long long unsigned int) file->filesize, | 40 (long long unsigned int) file->filesize, |
41 (long long unsigned int) file->filesize); | 41 (long long unsigned int) file->filesize); |
42 #endif | 42 #endif |
43 } | 43 } |
44 printf(" Parent ID: %u\n", file->parent_id); | 44 printf(" Parent ID: %u\n", file->parent_id); |
45 printf(" Storage ID: 0x%08X\n", file->storage_id); | 45 printf(" Storage ID: 0x%08X\n", file->storage_id); |
46 printf(" Filetype: %s\n", LIBMTP_Get_Filetype_Description(file->filetype)); | 46 printf(" Filetype: %s\n", LIBMTP_Get_Filetype_Description(file->filetype)); |
47 } | 47 } |
48 | 48 |
49 int main (int argc, char **argv) | 49 static void |
| 50 dump_files(LIBMTP_mtpdevice_t *device, uint32_t storageid, int leaf) |
50 { | 51 { |
51 LIBMTP_mtpdevice_t *device_list, *device; | |
52 LIBMTP_file_t *files; | 52 LIBMTP_file_t *files; |
53 | 53 |
| 54 /* Get file listing. */ |
| 55 files = LIBMTP_Get_Files_And_Folders(device, |
| 56 storageid, |
| 57 leaf); |
| 58 if (files == NULL) { |
| 59 LIBMTP_Dump_Errorstack(device); |
| 60 LIBMTP_Clear_Errorstack(device); |
| 61 } else { |
| 62 LIBMTP_file_t *file, *tmp; |
| 63 file = files; |
| 64 while (file != NULL) { |
| 65 /* Please don't print these */ |
| 66 if (file->filetype == LIBMTP_FILETYPE_FOLDER) { |
| 67 dump_files(device, storageid, file->item_id); |
| 68 } else { |
| 69 dump_fileinfo(file); |
| 70 } |
| 71 tmp = file; |
| 72 file = file->next; |
| 73 LIBMTP_destroy_file_t(tmp); |
| 74 } |
| 75 } |
| 76 } |
| 77 |
| 78 int main(int argc, char **argv) |
| 79 { |
| 80 LIBMTP_raw_device_t *rawdevices; |
| 81 int numrawdevices; |
| 82 LIBMTP_error_number_t err; |
| 83 int i; |
| 84 |
54 fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n"); | 85 fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n"); |
55 | 86 |
56 LIBMTP_Init(); | 87 LIBMTP_Init(); |
57 | 88 |
58 switch(LIBMTP_Get_Connected_Devices(&device_list)) | 89 err = LIBMTP_Detect_Raw_Devices(&rawdevices, &numrawdevices); |
| 90 switch(err) |
59 { | 91 { |
60 case LIBMTP_ERROR_NO_DEVICE_ATTACHED: | 92 case LIBMTP_ERROR_NO_DEVICE_ATTACHED: |
61 fprintf(stdout, "mtp-files: No Devices have been found\n"); | 93 fprintf(stdout, "mtp-files: No Devices have been found\n"); |
62 return 0; | 94 return 0; |
63 case LIBMTP_ERROR_CONNECTING: | 95 case LIBMTP_ERROR_CONNECTING: |
64 fprintf(stderr, "mtp-files: There has been an error connecting. Exit\n"); | 96 fprintf(stderr, "mtp-files: There has been an error connecting. Exit\n"); |
65 return 1; | 97 return 1; |
66 case LIBMTP_ERROR_MEMORY_ALLOCATION: | 98 case LIBMTP_ERROR_MEMORY_ALLOCATION: |
67 fprintf(stderr, "mtp-files: Memory Allocation Error. Exit\n"); | 99 fprintf(stderr, "mtp-files: Memory Allocation Error. Exit\n"); |
68 return 1; | 100 return 1; |
69 | 101 |
70 /* Unknown general errors - This should never execute */ | 102 /* Unknown general errors - This should never execute */ |
71 case LIBMTP_ERROR_GENERAL: | 103 case LIBMTP_ERROR_GENERAL: |
72 default: | 104 default: |
73 fprintf(stderr, "mtp-files: Unknown error, please report " | 105 fprintf(stderr, "mtp-files: Unknown error, please report " |
74 "this to the libmtp developers\n"); | 106 "this to the libmtp developers\n"); |
75 return 1; | 107 return 1; |
76 | 108 |
77 /* Successfully connected at least one device, so continue */ | 109 /* Successfully connected at least one device, so continue */ |
78 case LIBMTP_ERROR_NONE: | 110 case LIBMTP_ERROR_NONE: |
79 fprintf(stdout, "mtp-files: Successfully connected\n"); | 111 fprintf(stdout, "mtp-files: Successfully connected\n"); |
80 fflush(stdout); | 112 fflush(stdout); |
| 113 break; |
81 } | 114 } |
82 | 115 |
83 /* iterate through connected MTP devices */ | 116 /* iterate through connected MTP devices */ |
84 for(device = device_list; device != NULL; device = device->next) | 117 for (i = 0; i < numrawdevices; i++) { |
85 { | 118 LIBMTP_mtpdevice_t *device; |
| 119 LIBMTP_devicestorage_t *storage; |
86 char *friendlyname; | 120 char *friendlyname; |
87 | 121 |
| 122 device = LIBMTP_Open_Raw_Device_Uncached(&rawdevices[i]); |
| 123 if (device == NULL) { |
| 124 fprintf(stderr, "Unable to open raw device %d\n", i); |
| 125 continue; |
| 126 } |
| 127 |
88 /* Echo the friendly name so we know which device we are working with */ | 128 /* Echo the friendly name so we know which device we are working with */ |
89 friendlyname = LIBMTP_Get_Friendlyname(device); | 129 friendlyname = LIBMTP_Get_Friendlyname(device); |
90 if (friendlyname == NULL) { | 130 if (friendlyname == NULL) { |
91 printf("Listing File Information on Device with name: (NULL)\n"); | 131 printf("Listing File Information on Device with name: (NULL)\n"); |
92 } else { | 132 } else { |
93 printf("Listing File Information on Device with name: %s\n", friendlyname)
; | 133 printf("Listing File Information on Device with name: %s\n", friendlyname)
; |
94 free(friendlyname); | 134 free(friendlyname); |
95 } | 135 } |
96 | 136 |
97 » /* Get track listing. */ | 137 LIBMTP_Dump_Errorstack(device); |
98 » files = LIBMTP_Get_Filelisting_With_Callback(device, NULL, NULL); | 138 LIBMTP_Clear_Errorstack(device); |
99 » if (files == NULL) { | 139 |
100 » printf("No files.\n"); | 140 /* Loop over storages */ |
101 » LIBMTP_Dump_Errorstack(device); | 141 for (storage = device->storage; storage != 0; storage = storage->next) { |
102 » LIBMTP_Clear_Errorstack(device); | 142 dump_files(device, storage->id, 0); |
103 » } else { | 143 } |
104 » LIBMTP_file_t *file, *tmp; | 144 LIBMTP_Release_Device(device); |
105 » file = files; | |
106 » while (file != NULL) { | |
107 » dump_fileinfo(file); | |
108 » tmp = file; | |
109 » file = file->next; | |
110 » LIBMTP_destroy_file_t(tmp); | |
111 } | |
112 » } | |
113 } | 145 } |
114 | 146 |
115 LIBMTP_Release_Device_List(device_list); | 147 free(rawdevices); |
| 148 |
116 printf("OK.\n"); | 149 printf("OK.\n"); |
117 exit (0); | 150 exit (0); |
118 } | 151 } |
OLD | NEW |