1# -*- coding: utf-8 -*-
2'''constants.py - Miscellaneous constants.'''
3
4import re
5import os
6import operator
7
8from mcomix import tools
9
10APPNAME = 'MComix'
11VERSION = '1.2.1g20210526'
12
13REQUIRED_PYTHON_VERSION = (3, 8, 0)
14REQUIRED_PIL_VERSION = '6.2.1'
15
16CPU_COUNT = os.cpu_count()
17STARTDIR = os.getcwd()
18PORTABLE_MODE = tools.is_portable_mode()
19
20HOME_DIR = tools.get_home_directory()
21CONFIG_DIR = tools.get_config_directory()
22DATA_DIR = tools.get_data_directory()
23
24BASE_PATH = tools.rootdir()
25THUMBNAIL_PATH = tools.get_thumbnails_directory()
26LIBRARY_DATABASE_PATH = os.path.join(DATA_DIR, 'library.db')
27LIBRARY_COVERS_PATH = os.path.join(DATA_DIR, 'library_covers')
28PREFERENCE_PATH = os.path.join(CONFIG_DIR, 'preferences.conf')
29KEYBINDINGS_CONF_PATH = os.path.join(CONFIG_DIR, 'keybindings.conf')
30
31BOOKMARK_JSON_PATH = os.path.join(DATA_DIR, 'bookmarks.json')
32FILEINFO_JSON_PATH = os.path.join(DATA_DIR, 'file.json')
33
34ZOOM_MODE_BEST, ZOOM_MODE_WIDTH, ZOOM_MODE_HEIGHT, ZOOM_MODE_MANUAL, ZOOM_MODE_SIZE = range(5)
35
36WIDTH_AXIS, HEIGHT_AXIS = range(2)
37DISTRIBUTION_AXIS, ALIGNMENT_AXIS = WIDTH_AXIS, HEIGHT_AXIS
38NORMAL_AXES = (0, 1)
39SWAPPED_AXES = (1, 0)
40WESTERN_ORIENTATION = (1, 1)
41MANGA_ORIENTATION = (-1, 1)
42SCROLL_TO_CENTER = -2
43SCROLL_TO_START = -3
44SCROLL_TO_END = -4
45FIRST_INDEX = 0
46LAST_INDEX = -1
47UNION_INDEX = -2
48ANIMATION_DISABLED = 0
49ANIMATION_NORMAL = 1 # loop as animation setting
50ANIMATION_ONCE = 1<<1 # loop only once
51ANIMATION_INF = 1<<2 # loop infinity
52
53ZIP, RAR, RAR5, TAR, GZIP, BZIP2, XZ, PDF, SEVENZIP, LHA, ZIP_EXTERNAL, SQUASHFS = range(12)
54NORMAL_CURSOR, GRAB_CURSOR, WAIT_CURSOR, NO_CURSOR = range(4)
55LIBRARY_DRAG_EXTERNAL_ID, LIBRARY_DRAG_BOOK_ID, LIBRARY_DRAG_COLLECTION_ID = range(3)
56AUTOROTATE_NEVER, AUTOROTATE_WIDTH_90, AUTOROTATE_WIDTH_270, \
57    AUTOROTATE_HEIGHT_90, AUTOROTATE_HEIGHT_270 = range(5)
58
59RESPONSE_REVERT_TO_DEFAULT = 3
60RESPONSE_REMOVE = 4
61RESPONSE_IMPORT = 5
62RESPONSE_SAVE_AS = 6
63RESPONSE_REPLACE = 7
64RESPONSE_NEW = 8
65
66# These are bit field values, so only use powers of two.
67STATUS_PAGE, STATUS_RESOLUTION, STATUS_PATH, STATUS_FILENAME, STATUS_FILENUMBER, STATUS_FILESIZE = \
68    1, 2, 4, 8, 16, 32
69SHOW_DOUBLE_AS_ONE_TITLE, SHOW_DOUBLE_AS_ONE_WIDE = 1, 2
70
71MAX_LIBRARY_COVER_SIZE = 500
72SORT_NAME, SORT_PATH, SORT_SIZE, SORT_LAST_MODIFIED, SORT_NAME_LITERAL, SORT_LOCALE = 1, 2, 3, 4, 5, 6
73SORT_DESCENDING, SORT_ASCENDING = 1, 2
74SIZE_HUGE, SIZE_LARGE, SIZE_NORMAL, SIZE_SMALL, SIZE_TINY = MAX_LIBRARY_COVER_SIZE, 300, 250, 125, 80
75
76ACCEPTED_COMMENT_EXTENSIONS = ['txt', 'nfo', 'xml']
77
78# see https://www.freedesktop.org/wiki/Software/shared-mime-info/
79# for mimetypes not registed to IANA
80
81ZIP_FORMATS = (
82    # https://www.iana.org/assignments/media-types/application/zip
83    ('.zip', 'application/zip'),
84    # https://www.iana.org/assignments/media-types/application/vnd.comicbook+zip
85    ('.cbz', 'application/vnd.comicbook+zip'),
86)
87
88RAR_FORMATS = (
89    # https://www.iana.org/assignments/media-types/application/vnd.rar
90    ('.rar', 'application/vnd.rar'),
91    # https://www.iana.org/assignments/media-types/application/vnd.comicbook-rar
92    ('.cbr', 'application/vnd.comicbook-rar'),
93)
94
95TAR_FORMATS = (
96    # not registed in IANA
97    ('.tar', 'application/x-tar'),
98    # not registed in IANA
99    ('.cbt', 'application/x-cbt'),
100
101    # see https://www.gnu.org/software/tar/manual/html_section/tar_68.html#auto_002dcompress
102    # and https://git.savannah.gnu.org/cgit/tar.git/commit/?id=2c06a80918019471876956eef4ef22f05c9e0571
103    # for compressed tar
104
105    # gzip
106    ('.tar.gz',   'application/x-compressed-tar'),
107    ('.tgz',      'application/x-compressed-tar'),
108    # bzip2
109    ('.tar.bz2',  'application/x-bzip-compressed-tar'),
110    ('.tar.bz',   'application/x-bzip-compressed-tar'),
111    ('.tbz2',     'application/x-bzip-compressed-tar'),
112    ('.tbz',      'application/x-bzip-compressed-tar'),
113    ('.tb2',      'application/x-bzip-compressed-tar'),
114    # lzma
115    ('.tar.lzma', 'application/x-lzma-compressed-tar'),
116    ('.tlz',      'application/x-lzma-compressed-tar'),
117    # xz
118    ('.tar.xz',   'application/x-xz-compressed-tar'),
119    ('.txz',      'application/x-xz-compressed-tar'),
120)
121
122SZIP_FORMATS = (
123    # not registed in IANA
124    ('.7z',  'application/x-7z-compressed'),
125    # not registed in IANA
126    ('.cb7', 'application/x-cb7'),
127)
128
129LHA_FORMATS = (
130    # not registed in IANA
131    ('.lha', 'application/x-lha'),
132    # not registed in IANA
133    ('.lzh', 'application/x-lha'),
134)
135
136PDF_FORMATS = (
137    # https://www.iana.org/assignments/media-types/application/pdf
138    ('.pdf','application/pdf'),
139)
140
141SQUASHFS_FORMATS = (
142    # not registed in IANA
143    ('.squashfs', 'application/vnd.squashfs'),
144    ('.sqsh', 'application/vnd.squashfs'),
145)
146
147ARCHIVE_FORMATS = ZIP_FORMATS + RAR_FORMATS + TAR_FORMATS + SQUASHFS_FORMATS
148ARCHIVE_FORMATS += SZIP_FORMATS + LHA_FORMATS + PDF_FORMATS
149
150# vim: expandtab:sw=4:ts=4
151