1//server struct
2#include<time.h>
3#include <dirent.h>
4#define MAX_LENGTH 128
5#define MIN_LENGTH 64
6#define MAX_CONTENT 256
7#define MAXDATASIZE 1024
8#define MINSIZE 64
9
10typedef struct node{
11    char *href;
12    long long int size;
13    int isFolder;
14    char tmptime[MIN_LENGTH];
15    char *name;
16    struct node *next;
17    time_t mtime;
18}CloudFile;
19//CloudFile *FolderList;
20//CloudFile *FileList;
21//CloudFile *FolderTail;
22//CloudFile *FileTail;
23CloudFile *FolderCurrent;
24CloudFile *FolderTmp;
25//CloudFile *OldFolderList;
26//CloudFile *OldFileList;
27CloudFile *FileList_one;
28CloudFile *FileTail_one;
29CloudFile *FileTmp_one;
30CloudFile *TreeFolderList;
31CloudFile *TreeFileList;
32CloudFile *TreeFolderTail;
33CloudFile *TreeFileTail;
34
35typedef struct BROWSE
36{
37    int foldernumber;
38    int filenumber;
39    CloudFile *folderlist;
40    CloudFile *filelist;
41}Browse;
42
43struct ServerTreeNode
44{
45    int level;
46    char *parenthref;
47    Browse *browse;
48    struct ServerTreeNode *Child;
49    struct ServerTreeNode *NextBrother;
50};
51
52typedef struct ServerTreeNode Server_TreeNode;
53
54//Server_TreeNode *ServerRootNode;
55//Server_TreeNode *OldServerRootNode;
56
57
58/*Local item struct and function of every floor*/
59typedef struct LOCALFOLDER{
60    char *path;
61    char name[MAX_CONTENT];
62    struct LOCALFOLDER *next;
63}LocalFolder;
64
65typedef struct LOCALFILE{
66    char *path;
67    char name[MAX_CONTENT];
68    char creationtime[MINSIZE];
69    char lastaccesstime[MINSIZE];
70    char lastwritetime[MINSIZE];
71    long long size;
72    struct LOCALFILE *next;
73}LocalFile;
74
75//LocalFile *LocalFileList;
76//LocalFolder *LocalFolderList;
77//LocalFolder *LocalFolderTmp;
78//LocalFile *LocalFileTmp;
79//LocalFolder *LocalFolderTail;
80//LocalFile *LocalFileTail;
81//LocalFolder *LocalFolderCurrent;
82//LocalFile *SavedLocalFileList;
83
84
85typedef struct LOCAL
86{
87    int foldernumber;
88    int filenumber;
89    LocalFolder *folderlist;
90    LocalFile *filelist;
91}Local;
92
93
94
95Server_TreeNode *create_server_treeroot();
96int browse_to_tree(char *parenthref,Server_TreeNode *node);
97void free_server_tree(Server_TreeNode *node);
98void SearchServerTree(Server_TreeNode* treeRoot);
99int create_sync_list();
100int initMyLocalFolder(Server_TreeNode *servertreenode,int index);
101char *serverpath_to_localpath(char *from_serverpath,int index);
102int is_local_space_enough(CloudFile *do_file,int index);
103long long int get_local_freespace(int index);
104int test_if_dir(const char *dir);
105Local *Find_Floor_Dir(const char *path);
106void free_LocalFolder_item(LocalFolder *head);
107void free_LocalFile_item(LocalFile *head);
108void free_localfloor_node(Local *local);
109int sync_local_with_server_init(Server_TreeNode *treenode,Browse *perform_br,Local *perform_lo,int index);
110char *localpath_to_serverpath(char *from_localpath,int index);
111int ChangeFile_modtime(char *filepath,time_t servermodtime);
112void free_CloudFile_item(CloudFile *head);
113int upload_serverlist(Server_TreeNode *treenode,Browse *perform_br, LocalFolder *localfoldertmp,int index);
114CloudFile *get_CloudFile_node(Server_TreeNode* treeRoot,const char *dofile_href,int a);
115