| 76 ui_list_append(browser->resources, res); |
76 ui_list_append(browser->resources, res); |
| 77 } |
77 } |
| 78 |
78 |
| 79 ui_list_update(browser->resources); |
79 ui_list_update(browser->resources); |
| 80 |
80 |
| 81 ui_set_group(ui->ctx, APP_STATE_BROWSER_SESSION); |
81 ui_set_state(ui->ctx, APP_STATE_BROWSER_SESSION); |
| 82 } |
82 } |
| 83 |
83 |
| 84 // ------------------------------ davbrowser_connect2repo ------------------------------ |
84 // ------------------------------ davbrowser_connect2repo ------------------------------ |
| 85 |
85 |
| 86 typedef struct DavConnect2Repo { |
86 typedef struct DavConnect2Repo { |
| 463 if (!browser->sn) { |
463 if (!browser->sn) { |
| 464 return; // TODO: error msg |
464 return; // TODO: error msg |
| 465 } |
465 } |
| 466 |
466 |
| 467 cxmutstr wtitle = cx_asprintf("Upload to: %s", ui_get(browser->path)); |
467 cxmutstr wtitle = cx_asprintf("Upload to: %s", ui_get(browser->path)); |
| 468 UiObject *dialog = ui_simple_window(wtitle.ptr, NULL); |
468 UiObject *dialog = ui_simple_window(wtitle.ptr); |
| 469 free(wtitle.ptr); |
469 free(wtitle.ptr); |
| 470 |
470 |
| 471 DavFileUpload *upload = dav_upload_create(browser, dialog, files); |
471 DavFileUpload *upload = dav_upload_create(browser, dialog, files); |
| 472 transfer_window_init(dialog, action_upload_cancel); |
472 transfer_window_init(dialog, action_upload_cancel); |
| 473 dav_upload_start(upload); |
473 dav_upload_start(upload); |
| 474 application_register_transfer(&upload->trans); |
474 application_register_transfer(&upload->trans); |
| 475 } |
475 } |
| 476 |
476 |
| 477 void davbrowser_download(UiObject *ui, DavBrowser *browser, DavResource *reslist, const char *local_path) { |
477 void davbrowser_download(UiObject *ui, DavBrowser *browser, DavResource *reslist, const char *local_path) { |
| 478 cxmutstr wtitle = cx_asprintf("Download to: %s", local_path); |
478 cxmutstr wtitle = cx_asprintf("Download to: %s", local_path); |
| 479 UiObject *dialog = ui_simple_window(wtitle.ptr, NULL); |
479 UiObject *dialog = ui_simple_window(wtitle.ptr); |
| 480 free(wtitle.ptr); |
480 free(wtitle.ptr); |
| 481 |
481 |
| 482 DavFileDownload *download = dav_download_create(browser, dialog, reslist, local_path); |
482 DavFileDownload *download = dav_download_create(browser, dialog, reslist, local_path); |
| 483 transfer_window_init(dialog, action_download_cancel); |
483 transfer_window_init(dialog, action_download_cancel); |
| 484 dav_download_start(download); |
484 dav_download_start(download); |
| 1112 |
1112 |
| 1113 if(upload->error) { |
1113 if(upload->error) { |
| 1114 cxmutstr errormsg = cx_asprintf("Upload failed: %d", upload->sn->error); // TODO: add full error message |
1114 cxmutstr errormsg = cx_asprintf("Upload failed: %d", upload->sn->error); // TODO: add full error message |
| 1115 ui_dialog(event->obj, .title = "Error", .content = errormsg.ptr, .closebutton_label = "OK"); |
1115 ui_dialog(event->obj, .title = "Error", .content = errormsg.ptr, .closebutton_label = "OK"); |
| 1116 free(errormsg.ptr); |
1116 free(errormsg.ptr); |
| 1117 ui_set_group(event->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
1117 ui_set_state(event->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
| 1118 } |
1118 } |
| 1119 |
1119 |
| 1120 free(upload->text.ptr); |
1120 free(upload->text.ptr); |
| 1121 free(upload); |
1121 free(upload); |
| 1122 } |
1122 } |
| 1132 ui_object_unref(event->obj); |
1132 ui_object_unref(event->obj); |
| 1133 if(res->error) { |
1133 if(res->error) { |
| 1134 cxmutstr errormsg = cx_asprintf("Proppatch failed: %d", res->sn->error); // TODO: add full error message |
1134 cxmutstr errormsg = cx_asprintf("Proppatch failed: %d", res->sn->error); // TODO: add full error message |
| 1135 ui_dialog(event->obj, .title = "Error", .content = errormsg.ptr, .closebutton_label = "OK"); |
1135 ui_dialog(event->obj, .title = "Error", .content = errormsg.ptr, .closebutton_label = "OK"); |
| 1136 free(errormsg.ptr); |
1136 free(errormsg.ptr); |
| 1137 ui_set_group(event->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
1137 ui_set_state(event->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
| 1138 res->properties_modified = TRUE; |
1138 res->properties_modified = TRUE; |
| 1139 } else { |
1139 } else { |
| 1140 CxList *properties = res->properties->data; |
1140 CxList *properties = res->properties->data; |
| 1141 CxIterator i = cxListIterator(properties); |
1141 CxIterator i = cxListIterator(properties); |
| 1142 cx_foreach(DavPropertyList *, prop, i) { |
1142 cx_foreach(DavPropertyList *, prop, i) { |
| 1175 |
1175 |
| 1176 ui_object_ref(res->obj); |
1176 ui_object_ref(res->obj); |
| 1177 ui_threadpool_job(res->dav_queue, ui, jobthr_store_properties, res, uithr_store_properties_finished, res); |
1177 ui_threadpool_job(res->dav_queue, ui, jobthr_store_properties, res, uithr_store_properties_finished, res); |
| 1178 } |
1178 } |
| 1179 |
1179 |
| 1180 ui_unset_group(ui->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
1180 ui_unset_state(ui->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
| 1181 } |
1181 } |
| 1182 |
1182 |
| 1183 void dav_resourceviewer_destroy(DavResourceViewer *res) { |
1183 void dav_resourceviewer_destroy(DavResourceViewer *res) { |
| 1184 |
1184 |
| 1185 } |
1185 } |
| 1186 |
1186 |
| 1187 void dav_resourceviewer_property_remove(DavResourceViewer *res, DavPropertyList *prop) { |
1187 void dav_resourceviewer_property_remove(DavResourceViewer *res, DavPropertyList *prop) { |
| 1188 if(!prop->isnew) { |
1188 if(!prop->isnew) { |
| 1189 dav_remove_property_ns(res->current, prop->ns, prop->name); |
1189 dav_remove_property_ns(res->current, prop->ns, prop->name); |
| 1190 ui_set_group(res->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
1190 ui_set_state(res->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
| 1191 res->properties_modified = TRUE; |
1191 res->properties_modified = TRUE; |
| 1192 } |
1192 } |
| 1193 |
1193 |
| 1194 CxList *properties = res->properties->data; |
1194 CxList *properties = res->properties->data; |
| 1195 cxListFindRemove(properties, prop); |
1195 cxListFindRemove(properties, prop); |
| 1208 prop->xml = NULL; |
1208 prop->xml = NULL; |
| 1209 prop->value_full = ui_strdup(res->ctx, text); |
1209 prop->value_full = ui_strdup(res->ctx, text); |
| 1210 prop->value_simplified = NULL; |
1210 prop->value_simplified = NULL; |
| 1211 prop->update = TRUE; |
1211 prop->update = TRUE; |
| 1212 |
1212 |
| 1213 ui_set_group(res->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
1213 ui_set_state(res->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
| 1214 res->properties_modified = TRUE; |
1214 res->properties_modified = TRUE; |
| 1215 ui_list_update(res->properties); |
1215 ui_list_update(res->properties); |
| 1216 } |
1216 } |
| 1217 |
1217 |
| 1218 void dav_resourceviewer_property_update_xml(DavResourceViewer *res, DavPropertyList *prop, DavXmlNode *xml) { |
1218 void dav_resourceviewer_property_update_xml(DavResourceViewer *res, DavPropertyList *prop, DavXmlNode *xml) { |
| 1228 prop->xml = NULL; |
1228 prop->xml = NULL; |
| 1229 prop->isnew = TRUE; |
1229 prop->isnew = TRUE; |
| 1230 prop->update = TRUE; |
1230 prop->update = TRUE; |
| 1231 |
1231 |
| 1232 ui_list_append(res->properties, prop); |
1232 ui_list_append(res->properties, prop); |
| 1233 ui_set_group(res->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
1233 ui_set_state(res->obj->ctx, RESOURCEVIEWER_STATE_MODIFIED); |
| 1234 res->properties_modified = TRUE; |
1234 res->properties_modified = TRUE; |
| 1235 ui_list_update(res->properties); |
1235 ui_list_update(res->properties); |
| 1236 } |
1236 } |
| 1237 |
1237 |
| 1238 void dav_resourceviewer_property_add_xml(DavResourceViewer *res, const char *ns, const char *name, const char *nsdef, DavXmlNode *xml) { |
1238 void dav_resourceviewer_property_add_xml(DavResourceViewer *res, const char *ns, const char *name, const char *nsdef, DavXmlNode *xml) { |