133 |
135 |
134 *root = strdup(url); |
136 *root = strdup(url); |
135 *path = strdup("/"); |
137 *path = strdup("/"); |
136 } |
138 } |
137 |
139 |
138 void print_resource_error(DavSession *sn, DavResource *res) { |
140 void print_resource_error(DavSession *sn, char *path) { |
139 char *res_url = util_concat_path(sn->base_url, res->path); |
141 char *res_url = util_concat_path(sn->base_url, path); |
140 switch(sn->error) { |
142 switch(sn->error) { |
141 default: { |
143 default: { |
142 fprintf(stderr, "Cannot get resource %s.\n", res_url); |
144 fprintf(stderr, "Operation failed for resource %s.\n", res_url); |
143 break; |
145 break; |
144 } |
146 } |
145 case DAV_NOT_FOUND: { |
147 case DAV_NOT_FOUND: { |
146 fprintf(stderr, "Resource %s not found.\n", res_url); |
148 fprintf(stderr, "Resource %s not found.\n", res_url); |
147 break; |
149 break; |
220 } |
223 } |
221 |
224 |
222 static char* ls_size_str(DavResource *res) { |
225 static char* ls_size_str(DavResource *res) { |
223 char *str = malloc(16); |
226 char *str = malloc(16); |
224 uint64_t size = res->contentlength; |
227 uint64_t size = res->contentlength; |
225 |
228 |
226 if(res->iscollection) { |
229 if(res->iscollection) { |
227 snprintf(str, 16, "%" PRIu64, size); |
230 snprintf(str, 16, ""); |
228 } else if(size < 0x400) { |
231 } else if(size < 0x400) { |
229 snprintf(str, 16, "%" PRIu64 " Bytes", size); |
232 snprintf(str, 16, "%" PRIu64 " bytes", size); |
230 } else if(size < 0x100000) { |
233 } else if(size < 0x100000) { |
231 size /= 0x400; |
234 float s = (float)size/0x400; |
232 snprintf(str, 16, "%" PRIu64 " KiB", size); |
235 int diff = (s*100 - (int)s*100); |
|
236 if(diff > 90) { |
|
237 diff = 0; |
|
238 s += 0.10f; |
|
239 } |
|
240 if(size < 0x2800 && diff != 0) { |
|
241 // size < 10 KiB |
|
242 snprintf(str, 16, "%.1f KiB", s); |
|
243 } else { |
|
244 snprintf(str, 16, "%.0f KiB", s); |
|
245 } |
233 } else if(size < 0x40000000) { |
246 } else if(size < 0x40000000) { |
234 size /= 0x100000; |
247 float s = (float)size/0x100000; |
235 snprintf(str, 16, "%" PRIu64 "MiB", size); |
248 int diff = (s*100 - (int)s*100); |
|
249 if(diff > 90) { |
|
250 diff = 0; |
|
251 s += 0.10f; |
|
252 } |
|
253 if(size < 0xa00000 && diff != 0) { |
|
254 // size < 10 MiB |
|
255 snprintf(str, 16, "%.1f MiB", s); |
|
256 } else { |
|
257 size /= 0x100000; |
|
258 snprintf(str, 16, "%.0f MiB", s); |
|
259 } |
236 } else if(size < 0x1000000000ULL) { |
260 } else if(size < 0x1000000000ULL) { |
237 size /= 0x40000000; |
261 float s = (float)size/0x40000000; |
238 snprintf(str, 16, "%" PRIu64 "GiB", size); |
262 int diff = (s*100 - (int)s*100); |
239 } else { |
263 if(diff > 90) { |
240 size /= 0x1000000000ULL; |
264 diff = 0; |
241 snprintf(str, 16, "%" PRIu64, "TiB", size); |
265 s += 0.10f; |
|
266 } |
|
267 if(size < 0x280000000 && diff != 0) { |
|
268 // size < 10 GiB |
|
269 snprintf(str, 16, "%.1f GiB", s); |
|
270 } else { |
|
271 size /= 0x40000000; |
|
272 snprintf(str, 16, "%.0f GiB", s); |
|
273 } |
|
274 } else { |
|
275 size /= 1024; |
|
276 float s = (float)size/0x40000000; |
|
277 int diff = (s*100 - (int)s*100); |
|
278 if(diff > 90) { |
|
279 diff = 0; |
|
280 s += 0.10f; |
|
281 } |
|
282 if(size < 0x280000000 && diff != 0) { |
|
283 // size < 10 TiB |
|
284 snprintf(str, 16, "%.1f TiB", s); |
|
285 } else { |
|
286 size /= 0x40000000; |
|
287 snprintf(str, 16, "%.0f TiB", s); |
|
288 } |
242 } |
289 } |
243 return str; |
290 return str; |
244 } |
291 } |
245 |
292 |
246 void ls_print_list_elm(DavResource *res, CmdArgs *a) { |
293 void ls_print_list_elm(DavResource *res, CmdArgs *a) { |
434 } else { |
483 } else { |
435 dav_set_content(res, in, (dav_read_func)fread); |
484 dav_set_content(res, in, (dav_read_func)fread); |
436 } |
485 } |
437 |
486 |
438 if(dav_store(res)) { |
487 if(dav_store(res)) { |
439 print_resource_error(sn, res); |
488 print_resource_error(sn, res->path); |
440 fprintf(stderr, "Cannot upload file.\n"); |
489 fprintf(stderr, "Cannot upload file.\n"); |
441 fclose(in); |
490 fclose(in); |
442 return -1; |
491 return -1; |
443 } |
492 } |
444 if(enc) { |
493 if(enc) { |
445 aes_encrypter_close(enc); |
494 aes_encrypter_close(enc); |
446 } |
495 } |
447 fclose(in); |
496 fclose(in); |
448 return 0; |
497 return 0; |
449 } |
498 } |
|
499 |
|
500 int cmd_remove(CmdArgs *a) { |
|
501 if(a->argc < 1) { |
|
502 fprintf(stderr, "Too few arguments\n"); |
|
503 return -1; |
|
504 } |
|
505 |
|
506 DavSession *sn = NULL; |
|
507 char *url = a->argv[0]; |
|
508 char *root = NULL; |
|
509 char *path = NULL; |
|
510 url_get_parts(url, &root, &path); |
|
511 |
|
512 Repository *repo = get_repository(root); |
|
513 if(repo) { |
|
514 sn = dav_session_new_auth(ctx, repo->url, repo->user, repo->password); |
|
515 } else { |
|
516 sn = dav_session_new(ctx, root); |
|
517 } |
|
518 |
|
519 DavResource *res = dav_resource_new(sn, path); |
|
520 if(!res) { |
|
521 fprintf(stderr, "error\n"); |
|
522 return -1; |
|
523 } |
|
524 |
|
525 if(dav_delete(res)) { |
|
526 print_resource_error(sn, res->path); |
|
527 fprintf(stderr, "Cannot delete resource.\n"); |
|
528 return -1; |
|
529 } |
|
530 |
|
531 return 0; |
|
532 } |