aboutsummaryrefslogtreecommitdiff
path: root/src/book_detail.py
blob: 9c36d9b1d5e382321c3096a58e2092338847e5f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
import os
import subprocess
import shutil
import os.path
import pathlib

import src.utils as utils
import src.book_files as book_files
import src.str_format as str_format
from src.book_transfer import BookTransfer

class BookDetail(Gtk.Window):

    def __init__(self, parent_window, library, ereader, book_id, data):
        Gtk.Window.__init__(self)

        utils.configure_dialog(self, parent_window, data['title'], height=800)

        self._library = library
        self._ereader = ereader

        scrolled_window = Gtk.ScrolledWindow()
        self.set_child(scrolled_window)

        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=20)
        scrolled_window.set_child(box)
        utils.set_margin(box, 20)

        if has_info(data, 'subtitle'):
            box.append(utils.label(data['subtitle']))

        if has_info(data, 'year'):
            box.append(utils.label(str(data['year'])))

        if len(data['authors']):
            box.append(utils.label(', '.join(data['authors'])))

        if len(data['genres']):
            box.append(utils.label(', '.join(data['genres'])))

        picture = Gtk.Picture.new_for_filename(f'{library}/{book_id}/cover.png')
        picture.set_can_shrink(False)
        box.append(picture)

        box.append(utils.label(data['summary']))

        for path in book_files.get(library, book_id):
            box.append(self._book_line(book_id, data, path))

    def _book_line(self, book_id, data, path):
        box = Gtk.Box(spacing=20)
        box.append(utils.label(os.path.basename(path)))

        open_button = Gtk.Button(label='Ouvrir')
        open_button.connect('clicked', lambda _: open_book(path))
        box.append(open_button)

        download_button = Gtk.Button(label='Télécharger')
        download_button.connect('clicked', lambda _: download_book(book_id, data, path))
        box.append(download_button)

        if self._ereader and os.path.exists(self._ereader):
            transfer_button = Gtk.Button(label='Transférer')
            transfer_button.connect('clicked', lambda _: self._transfer_book(book_id, data, path))
            box.append(transfer_button)

        return box

    def _transfer_book(self, book_id, data, path):
        BookTransfer(self, self._ereader, book_id, data, path).present()

def has_info(data, key):
    return key in data and data[key]

def open_book(path):
    subprocess.run(['xdg-open', path])

def download_book(book_id, data, path):
    home = pathlib.Path.home()
    safe_author = str_format.safe_path(data['authors'][0]) if len(data['authors']) > 0 else book_id
    safe_title = str_format.safe_path(data['title'])
    basename, ext = os.path.splitext(os.path.basename(path))
    safe_basename = str_format.safe_path(basename)
    dest = f'{home}/downloads/{safe_author}-{safe_title}-{safe_basename}{ext}'
    shutil.copyfile(path, dest)