34 #include <time.h> |
34 #include <time.h> |
35 #include <libxml/xmlerror.h> |
35 #include <libxml/xmlerror.h> |
36 #include <sys/types.h> |
36 #include <sys/types.h> |
37 #include <ucx/string.h> |
37 #include <ucx/string.h> |
38 #include <ucx/utils.h> |
38 #include <ucx/utils.h> |
|
39 #include <ucx/properties.h> |
39 #include <dirent.h> |
40 #include <dirent.h> |
40 |
41 |
41 #include <libidav/webdav.h> |
42 #include <libidav/webdav.h> |
42 #include <libidav/utils.h> |
43 #include <libidav/utils.h> |
43 |
44 |
47 #include "db.h" |
48 #include "db.h" |
48 #include "error.h" |
49 #include "error.h" |
49 #include "assistant.h" |
50 #include "assistant.h" |
50 |
51 |
51 #include "sync.h" |
52 #include "sync.h" |
52 #include "ucx/properties.h" |
|
53 #include "libidav/session.h" |
53 #include "libidav/session.h" |
54 |
54 |
55 static DavContext *ctx; |
55 static DavContext *ctx; |
56 |
56 |
57 static void xmlerrorfnc(void * c, const char * msg, ... ) { |
57 static void xmlerrorfnc(void * c, const char * msg, ... ) { |
107 ret = cmd_delete_conflicts(args); |
107 ret = cmd_delete_conflicts(args); |
108 } else if(!strcmp(cmd, "trash-info")) { |
108 } else if(!strcmp(cmd, "trash-info")) { |
109 ret = cmd_trash_info(args); |
109 ret = cmd_trash_info(args); |
110 } else if(!strcmp(cmd, "empty-trash")) { |
110 } else if(!strcmp(cmd, "empty-trash")) { |
111 ret = cmd_empty_trash(args); |
111 ret = cmd_empty_trash(args); |
112 } else if(!strcmp(cmd, "add-directory")) { |
112 } else if(!strcmp(cmd, "add-dir") |
|
113 || !strcmp(cmd, "add-directory")) { |
113 ret = cmd_add_directory(args); |
114 ret = cmd_add_directory(args); |
114 } else if(!strcmp(cmd, "list-directories")) { |
115 } else if(!strcmp(cmd, "list-dirs") |
115 ret = list_syncdirs(); |
116 || !strcmp(cmd, "list-directories")) { |
116 } else if(!strcmp(cmd, "check-repositories")) { |
117 ret = cmd_list_dirs(); |
|
118 } else if(!strcmp(cmd, "check-repos") |
|
119 || !strcmp(cmd, "check-repositories")) { |
117 ret = cmd_check_repositories(); |
120 ret = cmd_check_repositories(); |
118 } else { |
121 } else { |
119 print_usage(argv[0]); |
122 print_usage(argv[0]); |
120 } |
123 } |
121 } |
124 } |
152 fprintf(stderr, " -v verbose output (all commands)\n\n"); |
155 fprintf(stderr, " -v verbose output (all commands)\n\n"); |
153 |
156 |
154 fprintf(stderr, "Config commands:\n"); |
157 fprintf(stderr, "Config commands:\n"); |
155 fprintf(stderr, " add-directory\n"); |
158 fprintf(stderr, " add-directory\n"); |
156 fprintf(stderr, " list-directories\n"); |
159 fprintf(stderr, " list-directories\n"); |
157 fprintf(stderr, " check (or check-config)\n"); |
160 fprintf(stderr, " check-config\n"); |
158 fprintf(stderr, " check-repositories\n\n"); |
161 fprintf(stderr, " check-repositories\n\n"); |
159 } |
162 } |
160 |
163 |
161 static int res_matches_filter(SyncDirectory *dir, char *res_path) { |
164 static int res_matches_filter(SyncDirectory *dir, char *res_path) { |
162 // trash filter |
165 // trash filter |
1636 free(db); |
1639 free(db); |
1637 |
1640 |
1638 return ret; |
1641 return ret; |
1639 } |
1642 } |
1640 |
1643 |
|
1644 int cmd_list_dirs() { |
|
1645 UcxMapIterator iter = scfg_directory_iterator(); |
|
1646 SyncDirectory *dir; |
|
1647 UCX_MAP_FOREACH(key, dir, iter) { |
|
1648 printf("%s\n", dir->name); |
|
1649 } |
|
1650 return 0; |
|
1651 } |
|
1652 |
1641 int cmd_check_repositories() { |
1653 int cmd_check_repositories() { |
1642 fprintf(stderr, "Not implemented.\n"); |
1654 int ret = EXIT_SUCCESS; |
1643 return EXIT_FAILURE; |
1655 |
1644 } |
1656 UcxList *reponames = NULL; |
|
1657 { |
|
1658 UcxMapIterator iter = scfg_directory_iterator(); |
|
1659 SyncDirectory *dir; |
|
1660 UCX_MAP_FOREACH(key, dir, iter) { |
|
1661 reponames = ucx_list_append_once(reponames, |
|
1662 dir->repository, ucx_strcmp, NULL); |
|
1663 } |
|
1664 } |
|
1665 |
|
1666 UCX_FOREACH(listelem, reponames) { |
|
1667 char *reponame = listelem->data; |
|
1668 printf("Checking %s... ", reponame); |
|
1669 Repository* repo = get_repository(sstr(reponame)); |
|
1670 if (!repo) { |
|
1671 printf(" not found in config.xml!\n"); |
|
1672 ret = EXIT_FAILURE; |
|
1673 } else { |
|
1674 DavSession *sn = create_session(ctx, repo, repo->url); |
|
1675 if (sn) { |
|
1676 DavResource *res = dav_query(sn, |
|
1677 "select - from / with depth = 0"); |
|
1678 if (res) { |
|
1679 printf("OK.\n"); |
|
1680 dav_resource_free(res); |
|
1681 } else { |
|
1682 printf("unavailable!\n"); |
|
1683 ret = EXIT_FAILURE; |
|
1684 } |
|
1685 dav_session_destroy(sn); |
|
1686 } else { |
|
1687 printf("cannot create session!\n"); |
|
1688 ret = EXIT_FAILURE; |
|
1689 } |
|
1690 } |
|
1691 } |
|
1692 |
|
1693 ucx_list_free(reponames); |
|
1694 |
|
1695 return ret; |
|
1696 } |