コード例 #1
0
ファイル: app.py プロジェクト: gamecip/citetool-editor
def add_rl_save_state_data(uuid):
    rl_starts_b64 = request.form.get('rl_starts')
    rl_lengths_b64 = request.form.get('rl_lengths')
    rl_total_length = int(request.form.get('rl_total_length'))
    rl_lengths_length = int(request.form.get('rl_lengths_length'))
    rl_starts_length = int(request.form.get('rl_starts_length'))

    rl_starts_b_array = bytearray(base64.b64decode(rl_starts_b64))
    rl_lengths_b_array = bytearray(base64.b64decode(rl_lengths_b64))

    if len(rl_starts_b_array) != rl_starts_length:
        rl_starts_b_array.extend([0 for _ in range(len(rl_starts_b_array), rl_starts_length)])

    if len(rl_lengths_b_array) != rl_lengths_length:
        rl_lengths_b_array.extend([0 for _ in range(len(rl_lengths_b_array), rl_lengths_length)])

    rl_start_hash, file_name = save_byte_array_to_store(rl_starts_b_array, file_name=uuid)
    rl_lengths_hash, file_name = save_byte_array_to_store(rl_lengths_b_array, file_name=uuid)

    dbm.update_table(dbm.GAME_SAVE_TABLE,
                     ['rl_starts_data','rl_lengths_data','rl_total_length','compressed'],
                     [rl_start_hash, rl_lengths_hash, rl_total_length, True],
                     ['uuid'], [uuid])

    return jsonify({'record': dbm.retrieve_save_state(uuid=uuid)[0]})
コード例 #2
0
ファイル: app.py プロジェクト: gamecip/citetool-editor
def add_save_state_data(uuid):
    save_state_data = request.form.get('buffer')
    compressed = True if request.form.get('compressed') == u'true' else False
    data_length = int(request.form.get('data_length'))

    save_state_b_array = bytearray(base64.b64decode(save_state_data))

    #   The base64 library will interpret trailing zeros as padding and remove them, this adds them back in
    if len(save_state_b_array) != data_length:
        save_state_b_array.extend([0 for _ in range(len(save_state_b_array), data_length)])

    source_data_hash, file_name = save_byte_array_to_store(save_state_b_array, file_name=uuid)
    dbm.update_table(dbm.GAME_SAVE_TABLE,
                     ['save_state_source_data', 'compressed'],
                     [source_data_hash, compressed],
                     ['uuid'], [uuid])
    return jsonify({'record': dbm.retrieve_save_state(uuid=uuid)[0]})
コード例 #3
0
ファイル: app.py プロジェクト: gamecip/citetool-editor
def add_extra_file(uuid):
    extra_file_b64 = request.form.get('extra_file_data')
    sha1_hash = request.form.get('sha1_hash')
    data_length = int(request.form.get('data_length'))
    file_name = request.form.get('file_name')
    rel_file_path = request.form.get('rel_file_path')
    is_executable = request.form.get('is_executable')
    main_executable = request.form.get('main_executable')
    decoded_b64 = base64.b64decode(extra_file_b64)
    extra_b_array = bytearray(decoded_b64)

    main_executable = True if main_executable == 'true' else False
    is_executable = True if is_executable == 'true' else False

    if len(extra_b_array) != data_length:
        extra_b_array.extend([0 for _ in range(len(extra_b_array), data_length)])

    hash_check = get_byte_array_hash(extra_b_array)
    if hash_check != sha1_hash:
        print "{} hash: {} not equal to client hash: {}".format(file_name, hash_check, sha1_hash)

    #   If file with current hash and path already exists, add a new record for save state but
    #   do not create a duplicate file
    file_id = dbm.check_for_existing_file(rel_file_path, hash_check)
    if file_id:
        dbm.link_existing_file_to_save_state(uuid, file_id)
        print "File {}:{} found.".format(file_name, rel_file_path)
    else:
        print "File {}:{} created.".format(file_name, rel_file_path)
        source_data_hash, file_name = save_byte_array_to_store(extra_b_array,
                                                               file_name=file_name,
                                                               store_path=LOCAL_GAME_DATA_STORE)
        fields = OrderedDict(
            game_uuid=None,
            save_state_uuid=uuid,
            is_executable=is_executable,
            main_executable=main_executable,
            file_path=rel_file_path,
            source_data=source_data_hash
        )
        state_ref = dbm.retrieve_save_state(uuid=uuid)[0]
        fields['game_uuid'] = state_ref['game_uuid']
        dbm.add_to_file_path_table(**fields)

    file_path = dbm.retrieve_file_path(save_state_uuid=uuid, file_path=rel_file_path)[0]
    return jsonify(file_path)