1 /**
2 * \file connect.c
3 * Main programs implementing several utilities in one.
4 *
5 * Copyright (C) 2006 Chris A. Debenham <chris@adebenham.com>
6 * Copyright (C) 2008-2010 Linus Walleij <triad@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
28 #include "common.h"
29 #include "util.h"
30 #include "pathutils.h"
31 #include "connect.h"
32
33 LIBMTP_folder_t *folders;
34 LIBMTP_file_t *files;
35 LIBMTP_mtpdevice_t *device;
36
37 static void
split_arg(char * argument,char ** part1,char ** part2)38 split_arg(char * argument, char ** part1, char ** part2)
39 {
40 char *sepp;
41 *part1 = NULL;
42 *part2 = NULL;
43
44 sepp = argument + strcspn(argument, ",");
45 sepp[0] = '\0';
46 *part1 = argument;
47 *part2 = sepp+1;
48 }
49
50 static void
usage(void)51 usage(void)
52 {
53 printf("Usage: connect <command1> <command2>\n");
54 printf("Commands: --delete [filename]\n");
55 printf(" --sendfile [source] [destination]\n");
56 printf(" --sendtrack [source] [destination]\n");
57 printf(" --getfile [source] [destination]\n");
58 printf(" --newfolder [foldername]\n");
59 }
60
61
main(int argc,char ** argv)62 int main (int argc, char **argv)
63 {
64 int ret = 0;
65
66 checklang();
67
68 LIBMTP_Init();
69
70 fprintf(stdout, "libmtp version: " LIBMTP_VERSION_STRING "\n\n");
71
72 device = LIBMTP_Get_First_Device();
73 if (device == NULL) {
74 printf("No devices.\n");
75 return 0;
76 }
77 files = LIBMTP_Get_Filelisting_With_Callback (device, NULL, NULL);
78 folders = LIBMTP_Get_Folder_List (device);
79
80 if ((strncmp(basename(argv[0]),"mtp-delfile",11) == 0) || (strncmp(basename(argv[0]),"delfile",7) == 0)) {
81 ret = delfile_command(argc,argv);
82 } else if ((strncmp(basename(argv[0]),"mtp-getfile",13) == 0) || (strncmp(basename(argv[0]),"getfile",9) == 0)) {
83 ret = getfile_command(argc,argv);
84 } else if ((strncmp(basename(argv[0]),"mtp-newfolder",13) == 0) || (strncmp(basename(argv[0]),"newfolder",9) == 0)) {
85 ret = newfolder_command(argc,argv);
86 } else if ((strncmp(basename(argv[0]),"mtp-sendfile",11) == 0) || (strncmp(basename(argv[0]),"sendfile",7) == 0)) {
87 ret = sendfile_command(argc, argv);
88 } else if ((strncmp(basename(argv[0]),"mtp-sendtr",10) == 0) || (strncmp(basename(argv[0]),"sendtr",6) == 0)) {
89 ret = sendtrack_command(argc, argv);
90 } else {
91 if ( argc < 2 ) {
92 usage ();
93 return 1;
94 }
95
96 while (1) {
97 int option_index = 0;
98 static struct option long_options[] = {
99 {"delete", 1, 0, 'd'},
100 {"sendfile", 1, 0, 'f'},
101 {"getfile", 1, 0, 'g'},
102 {"newfolder", 1, 0, 'n'},
103 {"sendtrack", 1, 0, 't'},
104 {0, 0, 0, 0}
105 };
106
107 int c = getopt_long (argc, argv, "d:f:g:n:t:", long_options, &option_index);
108 if (c == -1)
109 break;
110
111 char *arg1, *arg2;
112 switch (c) {
113 case 'd':
114 printf("Delete %s\n",optarg);
115 ret = delfile_function(optarg);
116 break;
117
118 case 'f':
119 printf("Send file %s\n",optarg);
120 split_arg(optarg,&arg1,&arg2);
121 ret = sendfile_function(arg1,arg2);
122 break;
123
124 case 'g':
125 printf("Get file %s\n",optarg);
126 split_arg(optarg,&arg1,&arg2);
127 ret = getfile_function(arg1,arg2);
128 break;
129
130 case 'n':
131 printf("New folder %s\n",optarg);
132 ret = newfolder_function(optarg);
133 break;
134
135 case 't':
136 printf("Send track %s\n",optarg);
137 split_arg(optarg,&arg1,&arg2);
138 ret = sendtrack_function(arg1,arg2,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,0);
139 break;
140 }
141 }
142
143 if (optind < argc) {
144 printf("Unknown options: ");
145 while (optind < argc)
146 printf("%s ", argv[optind++]);
147 printf("\n");
148 }
149 }
150
151 LIBMTP_Release_Device(device);
152
153 return ret;
154 }
155