Пример #1
0
int add_all_download_only_dragfolder_socket_list(const char *dir,int index)
{
        struct dirent* ent = NULL;
        char *fullname;
        int fail_flag = 0;
        DIR *dp = opendir(dir);

        if(dp == NULL)
        {
                DEBUG("opendir %s fail",dir);
                fail_flag = 1;
                return -1;
        }

        while (NULL != (ent=readdir(dp)))
        {

                if(ent->d_name[0] == '.')
                        continue;
                if(!strcmp(ent->d_name,".") || !strcmp(ent->d_name,".."))
                        continue;

                fullname = my_malloc((size_t)(strlen(dir)+strlen(ent->d_name)+2));

                sprintf(fullname,"%s/%s",dir,ent->d_name);

                if( test_if_dir(fullname) == 1)
                {
                        add_action_item("createfolder", fullname, g_pSyncList[index]->dragfolder_action_list);
                        add_action_item("createfolder", fullname, g_pSyncList[index]->download_only_socket_head);
                        add_all_download_only_dragfolder_socket_list(fullname,index);
                }
                else
                {
                        add_action_item("createfile",fullname,g_pSyncList[index]->dragfolder_action_list);
                        add_action_item("createfile",fullname,g_pSyncList[index]->download_only_socket_head);
                }
                free(fullname);
        }

        closedir(dp);
        return (fail_flag == 1) ? -1 : 0;
}
Пример #2
0
void del_all_items(char *dir,int index)
{
        struct dirent* ent = NULL;
        DIR *pDir;
        pDir=opendir(dir);

        if(pDir != NULL )
        {
                while (NULL != (ent=readdir(pDir)))
                {
                        if(!strcmp(ent->d_name,".") || !strcmp(ent->d_name,".."))
                                continue;

                        char *fullname;
                        size_t len;
                        len = strlen(dir)+strlen(ent->d_name)+2;
                        fullname = my_malloc(len);
                        sprintf(fullname,"%s/%s",dir,ent->d_name);

                        if(test_if_dir(fullname) == 1)
                        {
                                wait_handle_socket(index);
                                del_all_items(fullname,index);
                        }
                        else
                        {
                                wait_handle_socket(index);
                                add_action_item("remove",fullname,g_pSyncList[index]->server_action_list);
                                remove(fullname);
                        }

                        free(fullname);
                }
                closedir(pDir);

                add_action_item("remove",dir,g_pSyncList[index]->server_action_list);
                remove(dir);
        }
        else
                DEBUG("open %s fail \n",dir);
}
Пример #3
0
int initMyLocalFolder(Server_TreeNode *servertreenode,int index)
{
    int res=0;
    if(servertreenode->browse != NULL)
    {
        CloudFile *init_folder=NULL,*init_file=NULL;
        if(servertreenode->browse->foldernumber > 0)
            init_folder=servertreenode->browse->folderlist->next;
        if(servertreenode->browse->filenumber > 0)
            init_file=servertreenode->browse->filelist->next;
        int ret;
        while(init_folder != NULL  && !exit_loop)
        {
            char *createpath;
            createpath = serverpath_to_localpath(init_folder->href,index);
            if(NULL == opendir(createpath))
            {

                if(wait_handle_socket(index))
                {
                    return HAVE_LOCAL_SOCKET;
                }
                if(-1 == mkdir(createpath,0777))
                {
                    wd_DEBUG("mkdir %s fail",createpath);
                    return -1;
                }
                else
                {
                    add_action_item("createfolder",createpath,g_pSyncList[index]->server_action_list);
                }
            }
            free(createpath);
            init_folder = init_folder->next;
        }
        while(init_file != NULL && !exit_loop)
        {
            if(is_local_space_enough(init_file,index))
            {
                char *createpath;
                createpath = serverpath_to_localpath(init_file->href,index);
                add_action_item("createfile",createpath,g_pSyncList[index]->server_action_list);
                ret=api_download(createpath,init_file->href,index);
                if(ret == 0)
                {
                    ChangeFile_modtime(createpath,init_file->mtime);
                }
                else
                    return ret;
                free(createpath);
            }
            else
            {
                write_log(S_ERROR,"local space is not enough!","",index);
                add_action_item("download",init_file->href,g_pSyncList[index]->unfinished_list);
            }
            init_file = init_file->next;
        }
    }
    if(servertreenode->Child != NULL && !exit_loop)
    {
        res = initMyLocalFolder(servertreenode->Child,index);
        if(res != 0)
        {
            return res;
        }
    }

    if(servertreenode->NextBrother != NULL && !exit_loop)
    {
        res = initMyLocalFolder(servertreenode->NextBrother,index);
        if(res != 0)
        {
            return res;
        }
    }

    return res;

}