| /** |
| * \file connect.c |
| * Main programs implementing several utilities in one. |
| * |
| * Copyright (C) 2006 Chris A. Debenham <chris@adebenham.com> |
| * Copyright (C) 2008-2009 Linus Walleij <triad@df.lth.se> |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| * Boston, MA 02111-1307, USA. |
| */ |
| #include <stdlib.h> |
| #include <libgen.h> |
| #include <getopt.h> |
| #include <string.h> |
| #include "common.h" |
| #include "util.h" |
| #include "pathutils.h" |
| |
| LIBMTP_folder_t *folders; |
| LIBMTP_file_t *files; |
| LIBMTP_mtpdevice_t *device; |
| |
| void usage(void); |
| void split_arg(char *,char **, char **); |
| void delfile_function(char *); |
| void delfile_command(int, char **); |
| void delfile_usage(void); |
| int sendtrack_function(char *, char *, char *, char *, char *, char *, char *, char *, uint16_t, uint16_t, uint16_t); |
| void sendtrack_command (int, char **); |
| void sendtrack_usage(void); |
| void sendfile_function(char *,char *); |
| void sendfile_command(int, char **); |
| void sendfile_usage(void); |
| void getfile_function(char *,char *); |
| void getfile_command(int, char **); |
| void getfile_usage(void); |
| void newfolder_function(char *); |
| void newfolder_command(int,char **); |
| void newfolder_usage(void); |
| |
| void |
| split_arg(char * argument, char ** part1, char ** part2) |
| { |
| char *sepp; |
| *part1 = NULL; |
| *part2 = NULL; |
| |
| sepp = argument + strcspn(argument, ","); |
| sepp[0] = '\0'; |
| *part1 = argument; |
| *part2 = sepp+1; |
| } |
| |
| void |
| usage(void) |
| { |
| printf("Usage: connect <command1> <command2>\n"); |
| printf("Commands: --delete [filename]\n"); |
| printf(" --sendfile [source] [destination]\n"); |
| printf(" --sendtrack [source] [destination]\n"); |
| printf(" --getfile [source] [destination]\n"); |
| printf(" --newfolder [foldername]\n"); |
| } |
| |
| |
| int main (int argc, char **argv) |
| { |
| checklang(); |
| |
| LIBMTP_Init(); |
| |
| fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n"); |
| |
| device = LIBMTP_Get_First_Device(); |
| if (device == NULL) { |
| printf("No devices.\n"); |
| return 0; |
| } |
| files = LIBMTP_Get_Filelisting_With_Callback (device, NULL, NULL); |
| folders = LIBMTP_Get_Folder_List (device); |
| |
| if ((strncmp(basename(argv[0]),"mtp-delfile",11) == 0) || (strncmp(basename(argv[0]),"delfile",7) == 0)) { |
| delfile_command(argc,argv); |
| } else if ((strncmp(basename(argv[0]),"mtp-getfile",13) == 0) || (strncmp(basename(argv[0]),"getfile",9) == 0)) { |
| getfile_command(argc,argv); |
| } else if ((strncmp(basename(argv[0]),"mtp-newfolder",13) == 0) || (strncmp(basename(argv[0]),"newfolder",9) == 0)) { |
| newfolder_command(argc,argv); |
| } else if ((strncmp(basename(argv[0]),"mtp-sendfile",11) == 0) || (strncmp(basename(argv[0]),"sendfile",7) == 0)) { |
| sendfile_command(argc, argv); |
| } else if ((strncmp(basename(argv[0]),"mtp-sendtr",10) == 0) || (strncmp(basename(argv[0]),"sendtr",6) == 0)) { |
| sendtrack_command(argc, argv); |
| } else { |
| if ( argc < 2 ) { |
| usage (); |
| return 1; |
| } |
| |
| while (1) { |
| int option_index = 0; |
| static struct option long_options[] = { |
| {"delete", 1, 0, 'd'}, |
| {"sendfile", 1, 0, 'f'}, |
| {"getfile", 1, 0, 'g'}, |
| {"newfolder", 1, 0, 'n'}, |
| {"sendtrack", 1, 0, 't'}, |
| {0, 0, 0, 0} |
| }; |
| |
| int c = getopt_long (argc, argv, "d:f:g:n:t:", long_options, &option_index); |
| if (c == -1) |
| break; |
| |
| char *arg1, *arg2; |
| switch (c) { |
| case 'd': |
| printf("Delete %s\n",optarg); |
| delfile_function(optarg); |
| break; |
| |
| case 'f': |
| printf("Send file %s\n",optarg); |
| split_arg(optarg,&arg1,&arg2); |
| sendfile_function(arg1,arg2); |
| break; |
| |
| case 'g': |
| printf("Get file %s\n",optarg); |
| split_arg(optarg,&arg1,&arg2); |
| getfile_function(arg1,arg2); |
| break; |
| |
| case 'n': |
| printf("New folder %s\n",optarg); |
| newfolder_function(optarg); |
| break; |
| |
| case 't': |
| printf("Send track %s\n",optarg); |
| split_arg(optarg,&arg1,&arg2); |
| sendtrack_function(arg1,arg2,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0); |
| break; |
| } |
| } |
| |
| if (optind < argc) { |
| printf("Unknown options: "); |
| while (optind < argc) |
| printf("%s ", argv[optind++]); |
| printf("\n"); |
| } |
| } |
| |
| LIBMTP_Release_Device(device); |
| |
| exit (0); |
| } |
| |