application/davcontroller.c

changeset 52
0c881944fa10
parent 51
e324291ca9f8
child 53
da05df77652e
equal deleted inserted replaced
51:e324291ca9f8 52:0c881944fa10
254 } else if(cx_strsuffix(path, CX_STR(".xml"))) { 254 } else if(cx_strsuffix(path, CX_STR(".xml"))) {
255 type = DAV_RESOURCE_VIEW_TEXT; 255 type = DAV_RESOURCE_VIEW_TEXT;
256 } 256 }
257 } 257 }
258 258
259 dav_resourceviewer_new(browser, res->path, type); 259 resourceviewer_new(browser, res->path, type);
260 } 260 }
261 261
262 void davbrowser_add2navstack(DavBrowser *browser, const char *base, const char *path) { 262 void davbrowser_add2navstack(DavBrowser *browser, const char *base, const char *path) {
263 if (browser->navstack_enabled) { 263 if (browser->navstack_enabled) {
264 for (int i = 0; i < browser->navstack_pos; i++) { 264 for (int i = 0; i < browser->navstack_pos; i++) {
965 965
966 download->ui = ui; 966 download->ui = ui;
967 download->browser = browser; 967 download->browser = browser;
968 download->sn = reslist->session; 968 download->sn = reslist->session;
969 download->download_sn = dav_session_clone(download->sn); 969 download->download_sn = dav_session_clone(download->sn);
970 download->reslist = reslist; 970 download->reslist = reslist; // TODO: is this safe or do we need a copy?
971 download->local_path = strdup(local_path); 971 download->local_path = strdup(local_path);
972 972
973 download->queue = ui_threadpool_create(1); 973 download->queue = ui_threadpool_create(1);
974 974
975 // create download progress window 975 // create download progress window
1232 doc->text = ui_text_new(ctx, "text"); 1232 doc->text = ui_text_new(ctx, "text");
1233 doc->image = ui_generic_new(ctx, "image"); 1233 doc->image = ui_generic_new(ctx, "image");
1234 1234
1235 doc->properties = ui_list_new(ctx, "properties"); 1235 doc->properties = ui_list_new(ctx, "properties");
1236 1236
1237 doc->info_url = ui_string_new(ctx, "info_url");
1238 doc->info_name = ui_string_new(ctx, "info_name");
1239 doc->info_type = ui_string_new(ctx, "info_type");
1240 doc->info_encrypted = ui_string_new(ctx, "info_encrypted");
1241 doc->info_etag = ui_string_new(ctx, "info_etag");
1242 doc->info_size = ui_string_new(ctx, "info_size");
1243
1237 return doc; 1244 return doc;
1238 } 1245 }
1239 1246
1240 static char* gen_tmp_download_filename(const char *name) { 1247 static char* gen_tmp_download_filename(const char *name) {
1241 char *dir = ui_getappdir(); 1248 char *dir = ui_getappdir();
1253 1260
1254 DavResource *res = dav_resource_new(doc->sn, doc->path); 1261 DavResource *res = dav_resource_new(doc->sn, doc->path);
1255 doc->error = dav_load(res); 1262 doc->error = dav_load(res);
1256 if(!doc->error) { 1263 if(!doc->error) {
1257 doc->current = res; 1264 doc->current = res;
1265
1266 char *url = util_concat_path(res->session->base_url, res->href);
1267 ui_set(doc->info_url, url);
1268 free(url);
1269
1270 ui_set(doc->info_name, res->name);
1271
1272 if(res->iscollection) {
1273 ui_set(doc->info_type, "Collection");
1274 } else {
1275 if(res->contenttype) {
1276 cxmutstr type = cx_asprintf("Resource (%s)", res->contenttype);
1277 ui_set(doc->info_type, type.ptr);
1278 free(type.ptr);
1279 } else {
1280 ui_set(doc->info_type, "Resource");
1281 }
1282 }
1283
1284 char *keyprop = dav_get_string_property_ns(
1285 res,
1286 DAV_NS,
1287 "crypto-key");
1288 if(keyprop) {
1289 cxmutstr info_encrypted = cx_asprintf("Yes Key: %s", keyprop);
1290 ui_set(doc->info_encrypted, info_encrypted.ptr);
1291 free(info_encrypted.ptr);
1292 } else {
1293 ui_set(doc->info_encrypted, "No");
1294 }
1295
1296 char *etag = dav_get_string_property_ns(
1297 res,
1298 "DAV:",
1299 "getetag");
1300 ui_set(doc->info_etag, etag);
1301
1302 if(res->contentlength > 0) {
1303 char *sz = util_size_str(FALSE, res->contentlength);
1304 cxmutstr size_str = cx_asprintf("%s (%" PRIu64 " bytes)", sz, res->contentlength);
1305 ui_set(doc->info_size, size_str.ptr);
1306 free(size_str.ptr);
1307 } else {
1308 ui_set(doc->info_size, "0");
1309 }
1310
1311
1312 size_t count = 0;
1313 DavPropName *properties = dav_get_property_names(res, &count);
1314 for(int i=0;i<count;i++) {
1315 DavPropertyList *prop = ui_malloc(doc->ctx, sizeof(DavPropertyList));
1316 prop->ns = properties[i].ns ? ui_strdup(doc->ctx, properties[i].ns) : NULL;
1317 prop->name = ui_strdup(doc->ctx, properties[i].name);
1318
1319 DavXmlNode *xval = dav_get_property_ns(res, prop->ns, prop->name);
1320 if(xval) {
1321 if(dav_xml_isstring(xval)) {
1322 char *value = dav_xml_getstring(xval);
1323 if(value) {
1324 prop->value_simplified = NULL;
1325 prop->value_full = ui_strdup(doc->ctx, value);
1326 }
1327 } else {
1328 DavXmlNode *x = xval->type == DAV_XML_ELEMENT ? xval : dav_xml_nextelm(xval);
1329 cxmutstr value = cx_asprintf_a(ui_allocator(doc->ctx), "<%s>...</%s>", x->name, x->name);
1330 prop->value_simplified = value.ptr;
1331 }
1332 }
1333
1334 ui_list_append(doc->properties, prop);
1335 }
1336 doc->properties->update(doc->properties, 0);
1337
1258 1338
1259 if(res->contentlength < DAV_RESOURCEVIEWER_PREVIEW_MAX_SIZE) { 1339 if(res->contentlength < DAV_RESOURCEVIEWER_PREVIEW_MAX_SIZE) {
1260 if(doc->type == DAV_RESOURCE_VIEW_TEXT) { 1340 if(doc->type == DAV_RESOURCE_VIEW_TEXT) {
1261 doc->text_content = cxBufferCreate(NULL, res->contentlength, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND|CX_BUFFER_FREE_CONTENTS); 1341 doc->text_content = cxBufferCreate(NULL, res->contentlength, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND|CX_BUFFER_FREE_CONTENTS);
1262 int err = dav_get_content(res, doc->text_content, (dav_write_func)cxBufferWrite); 1342 int err = dav_get_content(res, doc->text_content, (dav_write_func)cxBufferWrite);

mercurial