40 lines
1.0 KiB
Python
Executable File
40 lines
1.0 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
|
|
from cursor import Cursor
|
|
|
|
|
|
class File(object):
|
|
def __init__(self, path, base, index, size, fmap, piece_size, client):
|
|
self._client = client
|
|
self.path = path
|
|
self.base = base
|
|
self.index = index
|
|
self.size = size
|
|
|
|
self.piece_size = piece_size
|
|
|
|
self.full_path = os.path.join(base, path)
|
|
self.first_piece = fmap.piece
|
|
self.offset = fmap.start
|
|
self.last_piece = self.first_piece + max((size - 1 + fmap.start), 0) // piece_size
|
|
|
|
self.cursor = None
|
|
|
|
def create_cursor(self, offset=None):
|
|
self.cursor = Cursor(self)
|
|
if offset:
|
|
self.cursor.seek(offset)
|
|
return self.cursor
|
|
|
|
def map_piece(self, ofs):
|
|
return self.first_piece + (ofs + self.offset) // self.piece_size, (ofs + self.offset) % self.piece_size
|
|
|
|
def update_piece(self, n, data):
|
|
if self.cursor:
|
|
self.cursor.update_piece(n, data)
|
|
|
|
def __str__(self):
|
|
return self.path
|