dav/sync.h

Sun, 01 Apr 2018 12:40:48 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 01 Apr 2018 12:40:48 +0200
changeset 372
2e15ff88a0ab
parent 369
4322b8953bd5
child 377
d6d7c16dd066
permissions
-rw-r--r--

adds tag management commands to dav-sync

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2018 Olaf Wintermann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef SYNC_H
#define	SYNC_H

#include <curl/curl.h>
#include <libidav/webdav.h>
#include <ucx/list.h>

#include <pthread.h>

#include "sopt.h"

#include "version.h"

#ifdef _WIN32
// TODO: thread includes
#else
#include <pthread.h>
#endif /* _WIN32 */

#ifdef	__cplusplus
extern "C" {
#endif

#define STDIN_BUF_SIZE 2048

typedef struct SyncFile {
    SyncDirectory *dir;
    char *path;
} SyncFile;
    
void print_usage(char *cmd);

pthread_t start_sighandler(pthread_mutex_t *mutex) ;
void stop_sighandler(pthread_mutex_t *mutex, pthread_t tid);

int cmd_pull(CmdArgs *args);
int cmd_push(CmdArgs *args, DavBool archive);

int sync_get_resource(
        CmdArgs *a,
        SyncDirectory *dir,
        DavResource *res,
        SyncDatabase *db,
        int *counter);
int sync_remove_local_resource(SyncDirectory *dir, LocalResource *res);
void sync_remove_local_directory(SyncDirectory *dir, LocalResource *res);
void rename_conflict_file(SyncDirectory *dir, SyncDatabase *db, char *path);
char* create_tmp_download_path(char *path);
void move_to_trash(SyncDirectory *dir, char *path);
UcxList* local_scan(SyncDirectory *dir, SyncDatabase *db);
UcxList* read_changes(SyncDirectory *dir, SyncDatabase *db);
LocalResource* local_resource_new(SyncDirectory *dir, SyncDatabase *db, char *path, int *isdir);
LocalResource* local_resource_copy(LocalResource *res);
int local_resource_is_changed(SyncDirectory *dir, SyncDatabase *db, LocalResource *res);
int remote_resource_is_changed(
        DavSession *sn,
        SyncDirectory *dir,
        SyncDatabase *db,
        LocalResource *res);

int sync_set_status(DavResource *res, char *status);
int sync_remove_status(DavResource *res);
UcxBuffer* sync_get_file_tag_data(SyncDirectory *dir, LocalResource *res);
UcxList* sync_get_file_tags(SyncDirectory *dir, LocalResource *res, DavBool *changed);
UcxList* sync_merge_tags(UcxList *tags1, UcxList *tags2);
int sync_store_tags(SyncDirectory *dir, const char *path, LocalResource *local, DavResource *res);
int sync_store_tags_local(SyncDirectory *dir, LocalResource *local, const char *path, UcxList *tags);
int sync_put_resource(
        SyncDirectory *dir,
        DavResource *res,
        LocalResource *local,
        int *counter);
int sync_mkdir(SyncDirectory *dir, DavResource *res, LocalResource *local);
int sync_delete_remote_resource(DavSession *sn, LocalResource *res, int *counter);
int sync_update_tags(SyncDirectory *dir, DavSession *sn, DavResource *res, LocalResource *local);

void remove_deleted_conflicts(SyncDirectory *dir, SyncDatabase *db);

int cmd_resolve_conflicts(CmdArgs *args);
int cmd_delete_conflicts(CmdArgs *args);

int cmd_trash_info(CmdArgs *args);
int cmd_empty_trash(CmdArgs *args);

int cmd_add_tag(CmdArgs *args);
int cmd_remove_tag(CmdArgs *args);
int cmd_update_tags(CmdArgs *args);
int cmd_tagopt(CmdArgs *args, int cmd);

/*
 * gets the syncdir and resource path for a given file path
 * 
 * returns 0 or error code:
 * 1: file not found
 * 2: file permission error
 * 3: stat error
 * 4: file is not in any syncdir
 * 5: file is in multiple syncdirs
 * 6: syncdir not found
 */
int sync_get_file(CmdArgs *args, const char *path, const char *dir, SyncFile *f);

int cmd_add_directory(CmdArgs *args);
int cmd_list_dirs();
int cmd_check_repositories();

char* create_locktoken_file(const char *syncdirname, const char *locktoken);

#ifdef	__cplusplus
}
#endif

#endif	/* SYNC_H */

mercurial