コード例 #1
0
ファイル: scan.py プロジェクト: h4ck3rm1k3/openmedialibrary
def run_scan():
    remove_missing()
    prefs = settings.preferences
    prefix = os.path.join(os.path.expanduser(prefs['libraryPath']),
                          'Books' + os.sep)
    if not prefix[-1] == os.sep:
        prefix += os.sep
    assert isinstance(prefix, str)
    books = []
    for root, folders, files in os.walk(prefix):
        for f in files:
            if not state.tasks.connected:
                return
            #if f.startswith('._') or f == '.DS_Store':
            if f.startswith('.'):
                continue
            f = os.path.join(root, f)
            ext = f.split('.')[-1]
            if ext in extensions:
                books.append(f)

    position = 0
    added = 0
    for f in ox.sorted_strings(books):
        if not state.tasks.connected:
            return
        position += 1
        with db.session():
            id = media.get_id(f)
            file = File.get(id)
            if not file:
                file = add_file(id, f, prefix, f)
                added += 1
                trigger_event('change', {})
コード例 #2
0
ファイル: scan.py プロジェクト: h4ck3rm1k3/openmedialibrary
def run_scan():
    remove_missing()
    prefs = settings.preferences
    prefix = os.path.join(os.path.expanduser(prefs["libraryPath"]), "Books" + os.sep)
    if not prefix[-1] == os.sep:
        prefix += os.sep
    assert isinstance(prefix, str)
    books = []
    for root, folders, files in os.walk(prefix):
        for f in files:
            if not state.tasks.connected:
                return
            # if f.startswith('._') or f == '.DS_Store':
            if f.startswith("."):
                continue
            f = os.path.join(root, f)
            ext = f.split(".")[-1]
            if ext in extensions:
                books.append(f)

    position = 0
    added = 0
    for f in ox.sorted_strings(books):
        if not state.tasks.connected:
            return
        position += 1
        with db.session():
            id = media.get_id(f)
            file = File.get(id)
            if not file:
                file = add_file(id, f, prefix, f)
                added += 1
                trigger_event("change", {})
コード例 #3
0
ファイル: api.py プロジェクト: h4ck3rm1k3/openmedialibrary
def autocompleteFolder(data):
    '''
        takes {
            path
        }
        returns {
            items
        }
    '''
    path = data['path']
    path = os.path.expanduser(path)
    if os.path.isdir(path):
        if path.endswith('/') and path != '/':
            path = path[:-1]
        folder = path
        name = ''
    else:
        folder, name = os.path.split(path)
    if os.path.exists(folder):
        prefix, folders, files = next(os.walk(folder))
        folders = [
            os.path.join(prefix, f) for f in folders
            if (not name or f.startswith(name)) and not f.startswith('.')
        ]
        if prefix == path:
            folders = [path] + folders
    else:
        folders = []
    return {'items': ox.sorted_strings(folders)}
コード例 #4
0
ファイル: api.py プロジェクト: h4ck3rm1k3/openmedialibrary
def autocompleteFolder(data):
    '''
        takes {
            path
        }
        returns {
            items
        }
    '''
    path = data['path']
    path = os.path.expanduser(path)
    if os.path.isdir(path):
        if path.endswith('/') and path != '/':
            path = path[:-1]
        folder = path
        name = ''
    else:
        folder, name = os.path.split(path)
    if os.path.exists(folder):
        prefix, folders, files = next(os.walk(folder))
        folders = [os.path.join(prefix, f) for f in folders if (not name or f.startswith(name)) and not f.startswith('.')]
        if prefix == path:
            folders = [path] + folders
    else:
        folders = []
    return {
        'items': ox.sorted_strings(folders)
    }
コード例 #5
0
def average_color(prefix, start=0, end=0, mode='antialias'):
    height = 64
    frames = 0
    pixels = []
    color = np.asarray([0, 0, 0], dtype=np.float32)

    if end:
        start = int(start * 25)
        end = int(end * 25)
    mode = 'timeline' + mode
    timelines = ox.sorted_strings(
        filter(lambda t: t != '%s%s%sp.jpg' % (prefix, mode, height),
               glob("%s%s%sp*.jpg" % (prefix, mode, height))))
    for image in timelines:
        start_offset = 0
        if start and frames + 1500 <= start:
            frames += 1500
            continue
        timeline = Image.open(image)
        frames += timeline.size[0]
        if start and frames > start > frames - timeline.size[0]:
            start_offset = start - (frames - timeline.size[0])
            box = (start_offset, 0, timeline.size[0], height)
            timeline = timeline.crop(box)
        if end and frames > end:
            end_offset = timeline.size[0] - (frames - end)
            box = (0, 0, end_offset, height)
            timeline = timeline.crop(box)

        p = np.asarray(timeline.convert('RGB'), dtype=np.float32)
        p = np.sum(p, axis=0) / height  #average color per frame
        pixels.append(p)
        if end and frames >= end:
            break

    if end:
        frames = end - start
    if frames:
        for i in range(0, len(pixels)):
            p = np.sum(pixels[i], axis=0) / frames
            color += p
    color = list(map(float, color))
    return ox.image.getHSL(color)
コード例 #6
0
ファイル: extract.py プロジェクト: maysara/pandora_image
def average_color(prefix, start=0, end=0, mode='antialias'):
    height = 64
    frames = 0
    pixels = []
    color = np.asarray([0, 0, 0], dtype=np.float32)

    if end:
        start = int(start * 25)
        end = int(end * 25)
    mode = 'timeline' + mode
    timelines = ox.sorted_strings(filter(lambda t: t!= '%s%s%sp.jpg'%(prefix, mode, height),
                              glob("%s%s%sp*.jpg"%(prefix, mode, height))))
    for image in timelines:
        start_offset = 0
        if start and frames + 1500 <= start:
            frames += 1500
            continue
        timeline = Image.open(image)
        frames += timeline.size[0]
        if start and frames > start > frames-timeline.size[0]:
            start_offset = start - (frames-timeline.size[0])
            box = (start_offset, 0, timeline.size[0], height)
            timeline = timeline.crop(box)
        if end and frames > end:
            end_offset = timeline.size[0] - (frames - end)
            box = (0, 0, end_offset, height)
            timeline = timeline.crop(box)
        
        p = np.asarray(timeline.convert('RGB'), dtype=np.float32)
        p = np.sum(p, axis=0) / height               #average color per frame
        pixels.append(p)
        if end and frames >= end:
            break

    if end:
        frames = end - start
    if frames:
        for i in range(0, len(pixels)):
            p = np.sum(pixels[i], axis=0) / frames
            color += p
    color = list(map(float, color))
    return ox.image.getHSL(color)
コード例 #7
0
ファイル: scan.py プロジェクト: h4ck3rm1k3/openmedialibrary
def run_import(options=None):
    options = options or {}

    logger.debug('run_import')
    prefs = settings.preferences
    prefix = os.path.expanduser(options.get('path', prefs['importPath']))
    if os.path.islink(prefix):
        prefix = os.path.realpath(prefix)
    if not prefix[-1] == os.sep:
        prefix += os.sep
    prefix_books = os.path.join(os.path.expanduser(prefs['libraryPath']),
                                'Books' + os.sep)
    prefix_imported = os.path.join(prefix_books, 'Imported' + os.sep)
    if prefix_books.startswith(prefix) or prefix.startswith(prefix_books):
        error = 'invalid path'
    elif not os.path.exists(prefix):
        error = 'path not found'
    elif not os.path.isdir(prefix):
        error = 'path must be a folder'
    else:
        error = None
    if error:
        trigger_event(
            'activity', {
                'activity': 'import',
                'progress': [0, 0],
                'status': {
                    'code': 404,
                    'text': error
                }
            })
        state.activity = {}
        return
    listname = options.get('list')
    if listname:
        listitems = []
    assert isinstance(prefix, str)
    books = []
    count = 0
    for root, folders, files in os.walk(prefix):
        for f in files:
            if not state.tasks.connected:
                return
            #if f.startswith('._') or f == '.DS_Store':
            if f.startswith('.'):
                continue
            f = os.path.join(root, f)
            ext = f.split('.')[-1]
            if ext in extensions:
                books.append(f)
                count += 1
                if state.activity.get('cancel'):
                    state.activity = {}
                    return
                if count % 1000 == 0:
                    state.activity = {
                        'activity': 'import',
                        'path': prefix,
                        'progress': [0, count],
                    }
                    trigger_event('activity', state.activity)
    state.activity = {
        'activity': 'import',
        'path': prefix,
        'progress': [0, len(books)],
    }
    trigger_event('activity', state.activity)
    position = 0
    added = 0
    last = 0
    for f in ox.sorted_strings(books):
        position += 1
        if not os.path.exists(f):
            continue
        with db.session():
            id = media.get_id(f)
            file = File.get(id)
            if not file:
                f_import = f
                f = f.replace(prefix, prefix_imported)
                ox.makedirs(os.path.dirname(f))
                if options.get('mode') == 'move':
                    shutil.move(f_import, f)
                else:
                    shutil.copy(f_import, f)
                file = add_file(id, f, prefix_books, f_import)
                file.move()
                added += 1
        if listname:
            listitems.append(file.item.id)
        if time.time() - last > 5:
            last = time.time()
            state.activity = {
                'activity': 'import',
                'progress': [position, len(books)],
                'path': prefix,
                'added': added,
            }
            trigger_event('activity', state.activity)

        if state.activity.get('cancel'):
            state.activity = {}
            return
    with db.session():
        if listname and listitems:
            l = List.get(settings.USER_ID, listname)
            if l:
                l.add_items(listitems)
    trigger_event(
        'activity', {
            'activity': 'import',
            'progress': [position, len(books)],
            'path': prefix,
            'status': {
                'code': 200,
                'text': ''
            },
            'added': added,
        })
    state.activity = {}
    remove_empty_folders(prefix_books)
    if options.get('mode') == 'move':
        remove_empty_folders(prefix)
コード例 #8
0
ファイル: scan.py プロジェクト: h4ck3rm1k3/openmedialibrary
def run_import(options=None):
    options = options or {}

    logger.debug("run_import")
    prefs = settings.preferences
    prefix = os.path.expanduser(options.get("path", prefs["importPath"]))
    if os.path.islink(prefix):
        prefix = os.path.realpath(prefix)
    if not prefix[-1] == os.sep:
        prefix += os.sep
    prefix_books = os.path.join(os.path.expanduser(prefs["libraryPath"]), "Books" + os.sep)
    prefix_imported = os.path.join(prefix_books, "Imported" + os.sep)
    if prefix_books.startswith(prefix) or prefix.startswith(prefix_books):
        error = "invalid path"
    elif not os.path.exists(prefix):
        error = "path not found"
    elif not os.path.isdir(prefix):
        error = "path must be a folder"
    else:
        error = None
    if error:
        trigger_event("activity", {"activity": "import", "progress": [0, 0], "status": {"code": 404, "text": error}})
        state.activity = {}
        return
    listname = options.get("list")
    if listname:
        listitems = []
    assert isinstance(prefix, str)
    books = []
    count = 0
    for root, folders, files in os.walk(prefix):
        for f in files:
            if not state.tasks.connected:
                return
            # if f.startswith('._') or f == '.DS_Store':
            if f.startswith("."):
                continue
            f = os.path.join(root, f)
            ext = f.split(".")[-1]
            if ext in extensions:
                books.append(f)
                count += 1
                if state.activity.get("cancel"):
                    state.activity = {}
                    return
                if count % 1000 == 0:
                    state.activity = {"activity": "import", "path": prefix, "progress": [0, count]}
                    trigger_event("activity", state.activity)
    state.activity = {"activity": "import", "path": prefix, "progress": [0, len(books)]}
    trigger_event("activity", state.activity)
    position = 0
    added = 0
    last = 0
    for f in ox.sorted_strings(books):
        position += 1
        if not os.path.exists(f):
            continue
        with db.session():
            id = media.get_id(f)
            file = File.get(id)
            if not file:
                f_import = f
                f = f.replace(prefix, prefix_imported)
                ox.makedirs(os.path.dirname(f))
                if options.get("mode") == "move":
                    shutil.move(f_import, f)
                else:
                    shutil.copy(f_import, f)
                file = add_file(id, f, prefix_books, f_import)
                file.move()
                added += 1
        if listname:
            listitems.append(file.item.id)
        if time.time() - last > 5:
            last = time.time()
            state.activity = {"activity": "import", "progress": [position, len(books)], "path": prefix, "added": added}
            trigger_event("activity", state.activity)

        if state.activity.get("cancel"):
            state.activity = {}
            return
    with db.session():
        if listname and listitems:
            l = List.get(settings.USER_ID, listname)
            if l:
                l.add_items(listitems)
    trigger_event(
        "activity",
        {
            "activity": "import",
            "progress": [position, len(books)],
            "path": prefix,
            "status": {"code": 200, "text": ""},
            "added": added,
        },
    )
    state.activity = {}
    remove_empty_folders(prefix_books)
    if options.get("mode") == "move":
        remove_empty_folders(prefix)
コード例 #9
0
ファイル: strings.py プロジェクト: shubham166/gnowsys-studio
                level = 0
            elif inside:
                if token['value'] == '(':
                    level +=1
                elif token['value'] == ')':
                    level -= 1
                    inside = level > 0
            if token['type'] == 'string' and len(token['value']) > 2:
                key = inside and 'inside Ox._()' or 'outside Ox._()'
                string = token['value'][1:-1].replace(
                        "\\'", "'"
                    ).replace(
                        '\\]"', '\\"'
                    )
                    #.replace(/\\'/g, '\'')
                    #.replace(/([^\\]")/, '\\"')
                if not string in strings[key]:
                    strings[key][string] = []
                strings[key][string].append(
                    f.replace(path, '') + ':%d' % token['line']
                )

for key in ox.sorted_strings(strings):
    lines.append(key)
    for string in ox.sorted_strings(strings[key]):
        lines.append((' ' * 4) + '"%s"' % string)
        for f in ox.sorted_strings(strings[key][string]):
            lines.append((' ' * 8) + f)

print (u'\n'.join(lines)).encode('utf-8')
コード例 #10
0
        for i, token in enumerate(tokens):
            if i >= 3 and tokens[i - 3]['value'] + tokens[i - 2]['value'] \
                    + tokens[i - 1]['value'] + tokens[i]['value'] == 'Ox._(':
                inside = True
                level = 1
            elif inside:
                if token['value'] == '(':
                    level += 1
                elif token['value'] == ')':
                    level -= 1
                    inside = level > 0
            if token['type'] == 'string' and len(token['value']) > 2:
                key = inside and 'inside Ox._()' or 'outside Ox._()'
                string = token['value'][1:-1].replace("\\'", "'").replace(
                    '\\]"', '\\"')
                #.replace(/\\'/g, '\'')
                #.replace(/([^\\]")/, '\\"')
                if not string in strings[key]:
                    strings[key][string] = []
                strings[key][string].append(
                    f.replace(path, '') + ':%d' % token['line'])

for key in ox.sorted_strings(strings):
    lines.append(key)
    for string in ox.sorted_strings(strings[key]):
        lines.append((' ' * 4) + '"%s"' % string)
        for f in ox.sorted_strings(strings[key][string]):
            lines.append((' ' * 8) + f)

print(u'\n'.join(lines)).encode('utf-8')