Example #1
0
def possible_new_dirs(file_path, memory):
    """
    @type file_path: str, unicode
    @type memory: Memory
    """
    if file_path is None:
        raise Exception("file_path is None")

    possible_new_dir_list = []
    file_dir = os.path.dirname(file_path)
    rel_unix_path = path_to_relative_path_unix_style(memory, file_dir)
    unix_paths = rel_unix_path.split("/")
    tmp_dir = ""

    for up in unix_paths:
        if len(up.strip()) > 0:
            tmp_dir += "/" + up
            possible_new_dir_list.append(tmp_dir)

    return tuple(set(possible_new_dir_list))
Example #2
0
def upload_files(memory, options, serverindex, file_uploads):
    """
    upload_files
    @type memory: Memory
    @type options: optparse.Values, instance
    @type serverindex: dict
    @type file_uploads: tuple
    """
    path_guid_cache = {}
    cnt = 0

    for uf in file_uploads:
        try:
            parent_path = uf["local_path"].replace(options.dir, "")
            parent_path = os.path.dirname(parent_path)
            uf["parent_path"] = parent_path

            if parent_path in path_guid_cache:
                uf["parent_short_id"] = path_guid_cache[parent_path]
            else:
                uf["parent_short_id"], memory = path_to_server_guid(memory, options, serverindex, parent_path)
                path_guid_cache[parent_path] = uf["parent_short_id"]
                update_progress(cnt, len(file_uploads), "checking path " + parent_path)

            cnt += 1
        except NoParentFound:
            uf["parent_short_id"] = uf["parent_path"] = ""

    files_uploaded = []
    file_uploads = sorted(file_uploads, key=lambda k: k["size"])

    for uf in file_uploads:
        update_progress(len(files_uploaded) + 1, len(file_uploads), "uploading " + os.path.basename(uf["local_path"]))
        if os.path.exists(uf["local_path"]):
            file_path = upload_file(memory.get("session"), options.server, options.cryptobox, uf["local_path"], path_to_relative_path_unix_style(memory, uf["local_path"]), uf["parent_short_id"])
            files_uploaded.append(file_path)
            output_json({"item_progress": 0})

    return memory, tuple(files_uploaded)
Example #3
0
def dirs_on_local(memory, options, localindex, dirname_hashes_server, serverindex):
    """
    @type memory: Memory
    @param dirname_hashes_server: folders on server
    @type dirname_hashes_server: dict
    @type serverindex: dict
    @param options: options
    @type options: optparse.Values, instance
    @type localindex: dict
    @return: list of dirs on server or to remove locally
    @rtype: tuple
    """
    if "tree_timestamp" not in serverindex:
        raise Exception("dirs_on_local needs a tree timestamp")

    tree_timestamp = int(serverindex["tree_timestamp"])
    local_dirs_not_on_server = []

    for dirhashlocal in localindex["dirnames"]:
        found = False

        for dirhashserver in dirname_hashes_server:
            if strcmp(dirhashserver, localindex["dirnames"][dirhashlocal]["dirnamehash"]):
                found = True

        if not found:
            if localindex["dirnames"][dirhashlocal]["dirname"] != options.dir:
                local_dirs_not_on_server.append(localindex["dirnames"][dirhashlocal])

    dirs_make_server = []
    dirs_del_local = []
    server_dir_history = []

    if memory.has("serverpath_history"):
        server_dir_history = [path_to_relative_path_unix_style(memory, x[0]) for x in memory.get("serverpath_history")]
    for node in local_dirs_not_on_server:
        if os.path.exists(node["dirname"]):
            rel_dirname = path_to_relative_path_unix_style(memory, node["dirname"])
            node["relname"] = rel_dirname

            if rel_dirname not in serverindex["dirlist"]:
                folder_timestamp = os.stat(node["dirname"]).st_mtime
                if int(folder_timestamp) >= int(tree_timestamp):
                    dirs_make_server.append(node)
                else:
                    if node["dirname"].replace(options.dir, "") not in server_dir_history:
                        dirs_make_server.append(node)
                    else:
                        dirs_del_local.append(node)

            else:
                dirs_del_local.append(node)

    dirs_make_server_unique = []
    key_set = set([k["dirnamehash"] for k in dirs_make_server])
    for k in key_set:
        for i in dirs_make_server:
            if strcmp(i["dirnamehash"], k):
                dirs_make_server_unique.append(i)
                break

    return dirs_make_server_unique, dirs_del_local