#ifndef IDAV_APPLICATION_H
#define IDAV_APPLICATION_H
#include <ui/ui.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <libidav/webdav.h>
#include <libidav/config.h>
#include <cx/linked_list.h>
#ifdef __cplusplus
extern "C" {
#endif
#define APP_STATE_BROWSER_SESSION 100
#define APP_STATE_BROWSER_SELECTION 110
#define RESOURCEVIEWER_STATE_MODIFIED 2000
#define RESOURCEVIEWER_STATE_PROP_SELECTED 2001
#define RESOURCEVIEWER_STATE_PROP_XML 2002
typedef struct DavApp {
DavConfig *dav_config;
UiList *repos;
UiList *transfers;
} DavApp;
typedef struct DavTransfer {
char *label;
size_t label_len;
double progress;
UiObject *window;
time_t last_update;
} DavTransfer;
typedef enum DavResourceViewType {
DAV_RESOURCE_VIEW_PROPERTIES = 0,
DAV_RESOURCE_VIEW_TEXT,
DAV_RESOURCE_VIEW_IMAGE
} DavResourceViewType;
#define DAV_RESOURCEVIEWER_PREVIEW_MAX_SIZE 0x1000000
typedef struct DavBrowser {
UiObject *window;
UiContext *ctx;
DavSession *sn;
UiThreadpool *dav_queue;
CxMap *res_open_inprogress;
char *repo_base;
DavResource *current;
uint64_t res_counter;
CxList *navigation_stack;
bool navstack_enabled;
int navstack_pos;
UiString *path;
UiList *resources;
} DavBrowser;
typedef struct DavPropertyList {
char *ns;
char *name;
char *value_simplified;
char *value_full;
DavXmlNode *xml;
DavBool update;
DavBool isnew;
} DavPropertyList;
typedef struct DavResourceViewer {
UiObject *obj;
UiContext *ctx;
DavSession *sn;
UiThreadpool *dav_queue;
DavResource *current;
char *path;
DavResourceViewType type;
UiInteger *tabview;
UiInteger *loading;
UiString *message;
UiList *properties;
UiText *text;
UiGeneric *image;
UiString *info_url;
UiString *info_name;
UiString *info_type;
UiString *info_encrypted;
UiString *info_etag;
UiString *info_size;
UiInteger *property_type;
UiString *property_ns;
UiString *property_name;
UiString *property_nsdef;
UiText *property_value;
UiString *property_errormsg;
DavPropertyList *selected_property;
DavPropertyList *edit_property;
int error;
char *message_str;
CxBuffer *text_content;
char *tmp_file;
bool properties_modified;
bool loaded;
bool window_closed;
} DavResourceViewer;
typedef struct SessionAuthData {
UiObject *obj;
UiCondVar *cond;
DavSession *sn;
char *user;
char *password;
} SessionAuthData;
void application_init(void);
void application_startup(UiEvent* event, void* data);
void application_create_menu(void);
DavApp* get_application(void);
void* transfers_getlabel(void *data, int col);
void application_register_transfer(DavTransfer *trans);
void application_remove_transfer(DavTransfer *trans);
void application_update_transferlist(void);
DavApp* application_create_app_document(void);
void application_update_repolist(DavApp *app);
DavContext* application_dav_context(void);
void action_refresh(UiEvent *event, void *data);
void action_window_new(UiEvent *event, void *data);
void action_window_close(UiEvent *event, void *data);
void action_repo_selected(UiEvent *event, void *data);
void action_download(UiEvent *event, void *data);
void action_upload_file(UiEvent *event, void *data);
void action_upload_dir(UiEvent *event, void *data);
void action_delete(UiEvent *event, void *data);
void action_selectall(UiEvent *event, void *data);
void action_rename(UiEvent *event, void *data);
void action_newfile(UiEvent *event, void *data);
void action_mkcol(UiEvent *event, void *data);
void action_open_settings(UiEvent *event, void *data);
void action_open_properties(UiEvent *event, void *data);
void action_transfer_selected(UiEvent *event, void *data);
#ifdef __cplusplus
}
#endif
#endif