1 /** 2 * \file connect.c 3 * Main programs implementing several utilities in one. 4 * 5 * Copyright (C) 2006 Chris A. Debenham <chris (at) adebenham.com> 6 * Copyright (C) 2008-2009 Linus Walleij <triad (at) df.lth.se> 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the 20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 21 * Boston, MA 02111-1307, USA. 22 */ 23 #include <stdlib.h> 24 #include <libgen.h> 25 #include <getopt.h> 26 #include <string.h> 27 #include "common.h" 28 #include "util.h" 29 #include "pathutils.h" 30 31 LIBMTP_folder_t *folders; 32 LIBMTP_file_t *files; 33 LIBMTP_mtpdevice_t *device; 34 35 void usage(void); 36 void split_arg(char *,char **, char **); 37 void delfile_function(char *); 38 void delfile_command(int, char **); 39 void delfile_usage(void); 40 int sendtrack_function(char *, char *, char *, char *, char *, char *, char *, char *, uint16_t, uint16_t, uint16_t); 41 void sendtrack_command (int, char **); 42 void sendtrack_usage(void); 43 void sendfile_function(char *,char *); 44 void sendfile_command(int, char **); 45 void sendfile_usage(void); 46 void getfile_function(char *,char *); 47 void getfile_command(int, char **); 48 void getfile_usage(void); 49 void newfolder_function(char *); 50 void newfolder_command(int,char **); 51 void newfolder_usage(void); 52 53 void 54 split_arg(char * argument, char ** part1, char ** part2) 55 { 56 char *sepp; 57 *part1 = NULL; 58 *part2 = NULL; 59 60 sepp = argument + strcspn(argument, ","); 61 sepp[0] = '\0'; 62 *part1 = argument; 63 *part2 = sepp+1; 64 } 65 66 void 67 usage(void) 68 { 69 printf("Usage: connect <command1> <command2>\n"); 70 printf("Commands: --delete [filename]\n"); 71 printf(" --sendfile [source] [destination]\n"); 72 printf(" --sendtrack [source] [destination]\n"); 73 printf(" --getfile [source] [destination]\n"); 74 printf(" --newfolder [foldername]\n"); 75 } 76 77 78 int main (int argc, char **argv) 79 { 80 checklang(); 81 82 LIBMTP_Init(); 83 84 fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n"); 85 86 device = LIBMTP_Get_First_Device(); 87 if (device == NULL) { 88 printf("No devices.\n"); 89 return 0; 90 } 91 files = LIBMTP_Get_Filelisting_With_Callback (device, NULL, NULL); 92 folders = LIBMTP_Get_Folder_List (device); 93 94 if ((strncmp(basename(argv[0]),"mtp-delfile",11) == 0) || (strncmp(basename(argv[0]),"delfile",7) == 0)) { 95 delfile_command(argc,argv); 96 } else if ((strncmp(basename(argv[0]),"mtp-getfile",13) == 0) || (strncmp(basename(argv[0]),"getfile",9) == 0)) { 97 getfile_command(argc,argv); 98 } else if ((strncmp(basename(argv[0]),"mtp-newfolder",13) == 0) || (strncmp(basename(argv[0]),"newfolder",9) == 0)) { 99 newfolder_command(argc,argv); 100 } else if ((strncmp(basename(argv[0]),"mtp-sendfile",11) == 0) || (strncmp(basename(argv[0]),"sendfile",7) == 0)) { 101 sendfile_command(argc, argv); 102 } else if ((strncmp(basename(argv[0]),"mtp-sendtr",10) == 0) || (strncmp(basename(argv[0]),"sendtr",6) == 0)) { 103 sendtrack_command(argc, argv); 104 } else { 105 if ( argc < 2 ) { 106 usage (); 107 return 1; 108 } 109 110 while (1) { 111 int option_index = 0; 112 static struct option long_options[] = { 113 {"delete", 1, 0, 'd'}, 114 {"sendfile", 1, 0, 'f'}, 115 {"getfile", 1, 0, 'g'}, 116 {"newfolder", 1, 0, 'n'}, 117 {"sendtrack", 1, 0, 't'}, 118 {0, 0, 0, 0} 119 }; 120 121 int c = getopt_long (argc, argv, "d:f:g:n:t:", long_options, &option_index); 122 if (c == -1) 123 break; 124 125 char *arg1, *arg2; 126 switch (c) { 127 case 'd': 128 printf("Delete %s\n",optarg); 129 delfile_function(optarg); 130 break; 131 132 case 'f': 133 printf("Send file %s\n",optarg); 134 split_arg(optarg,&arg1,&arg2); 135 sendfile_function(arg1,arg2); 136 break; 137 138 case 'g': 139 printf("Get file %s\n",optarg); 140 split_arg(optarg,&arg1,&arg2); 141 getfile_function(arg1,arg2); 142 break; 143 144 case 'n': 145 printf("New folder %s\n",optarg); 146 newfolder_function(optarg); 147 break; 148 149 case 't': 150 printf("Send track %s\n",optarg); 151 split_arg(optarg,&arg1,&arg2); 152 sendtrack_function(arg1,arg2,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0); 153 break; 154 } 155 } 156 157 if (optind < argc) { 158 printf("Unknown options: "); 159 while (optind < argc) 160 printf("%s ", argv[optind++]); 161 printf("\n"); 162 } 163 } 164 165 LIBMTP_Release_Device(device); 166 167 exit (0); 168 } 169 170