seafile/daemon/filelock-mgr.h
feiniks 3290f3fd80
Get notification from server (#2527)
* Get notification from server

Don't sync repo when repo is subscribed

Get notification from server

* Disconnect notification server when subscribed repos is 0 and modify log info

* Add jwt certification

* Use server lock

* VS add libwebsockets

* Add check notification server

* Check notif server once

* Check locks and folder perms after fileserver is recovered

* Add comment

Co-authored-by: heran yang <heran.yang@seafile.com>
2022-12-24 16:51:55 +08:00

124 lines
3.7 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#ifndef SEAF_FILELOCK_MGR_H
#define SEAF_FILELOCK_MGR_H
#include <glib.h>
struct _SeafileSession;
struct _FilelockMgrPriv;
struct _SeafFilelockManager {
struct _SeafileSession *session;
struct _FilelockMgrPriv *priv;
};
typedef struct _SeafFilelockManager SeafFilelockManager;
struct _SeafFilelockManager *
seaf_filelock_manager_new (struct _SeafileSession *session);
int
seaf_filelock_manager_init (SeafFilelockManager *mgr);
int
seaf_filelock_manager_start (SeafFilelockManager *mgr);
gboolean
seaf_filelock_manager_is_file_locked (SeafFilelockManager *mgr,
const char *repo_id,
const char *path);
typedef enum FileLockStatus {
FILE_NOT_LOCKED = 0,
FILE_LOCKED_BY_OTHERS,
FILE_LOCKED_BY_ME_MANUAL,
FILE_LOCKED_BY_ME_AUTO,
} FileLockStatus;
/* When a file is locked by me, it can have two reasons:
* - Locked by the user manually
* - Auto-Locked by Seafile when it detects Office opens the file.
*/
typedef enum FileLockType {
LOCKED_OTHERS = 0,
LOCKED_MANUAL,
LOCKED_AUTO,
} FileLockType;
int
seaf_filelock_manager_get_lock_status (SeafFilelockManager *mgr,
const char *repo_id,
const char *path);
gboolean
seaf_filelock_manager_is_file_locked_by_me (SeafFilelockManager *mgr,
const char *repo_id,
const char *path);
/* Remove locking from the file on worktree */
void
seaf_filelock_manager_lock_wt_file (SeafFilelockManager *mgr,
const char *repo_id,
const char *path);
/* Add locking to the file on worktree */
void
seaf_filelock_manager_unlock_wt_file (SeafFilelockManager *mgr,
const char *repo_id,
const char *path);
int
seaf_filelock_manager_update (SeafFilelockManager *mgr,
const char *repo_id,
GHashTable *new_locked_files);
int
seaf_filelock_manager_update_timestamp (SeafFilelockManager *mgr,
const char *repo_id,
gint64 timestamp);
gint64
seaf_filelock_manager_get_timestamp (SeafFilelockManager *mgr,
const char *repo_id);
int
seaf_filelock_manager_remove (SeafFilelockManager *mgr,
const char *repo_id);
int
seaf_filelock_manager_mark_file_locked (SeafFilelockManager *mgr,
const char *repo_id,
const char *path,
FileLockType type);
int
seaf_filelock_manager_mark_file_unlocked (SeafFilelockManager *mgr,
const char *repo_id,
const char *path);
struct FileLockInfo {
char repo_id[37];
char *path;
int status;
};
typedef struct FileLockInfo FileLockInfo;
void file_lock_info_free (FileLockInfo *info);
GList *
seaf_filelock_manager_get_auto_locked_files (SeafFilelockManager *mgr);
int
seaf_filelock_manager_lock_file (SeafFilelockManager *mgr,
const char *repo_id,
const char *path,
FileLockType type);
int
seaf_filelock_manager_unlock_file (SeafFilelockManager *mgr,
const char *repo_id,
const char *path);
#endif