2019-01-09 22:59:03 +00:00
from . import HydrusConstants as HC
2013-02-19 00:11:43 +00:00
import os
2019-11-14 03:56:30 +00:00
from qtpy import QtCore as QC
from qtpy import QtWidgets as QW
from qtpy import QtGui as QG
2016-07-13 17:37:44 +00:00
#
2017-04-12 21:46:46 +00:00
APPLICATION_COMMAND_TYPE_SIMPLE = 0
APPLICATION_COMMAND_TYPE_CONTENT = 1
2019-01-09 22:59:03 +00:00
BLANK_PHASH = b ' \x80 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' # first bit 1 but everything else 0 means only significant part of dct was [0,0], which represents flat colour
2017-01-18 22:52:39 +00:00
2013-11-06 18:22:07 +00:00
CAN_HIDE_MOUSE = True
2018-04-25 22:07:52 +00:00
FILTER_WHITELIST = 0
FILTER_BLACKLIST = 1
2017-05-24 20:28:24 +00:00
2013-02-19 00:11:43 +00:00
# Hue is generally 200, Sat and Lum changes based on need
2019-11-14 03:56:30 +00:00
COLOUR_LIGHT_SELECTED = QG . QColor ( 235 , 248 , 255 )
COLOUR_SELECTED = QG . QColor ( 217 , 242 , 255 )
COLOUR_SELECTED_DARK = QG . QColor ( 1 , 17 , 26 )
COLOUR_UNSELECTED = QG . QColor ( 223 , 227 , 230 )
2013-02-19 00:11:43 +00:00
2019-11-14 03:56:30 +00:00
COLOUR_MESSAGE = QG . QColor ( 230 , 246 , 255 )
2013-02-19 00:11:43 +00:00
2017-09-13 20:50:41 +00:00
COLOUR_THUMB_BACKGROUND = 0
COLOUR_THUMB_BACKGROUND_SELECTED = 1
COLOUR_THUMB_BACKGROUND_REMOTE = 2
COLOUR_THUMB_BACKGROUND_REMOTE_SELECTED = 3
COLOUR_THUMB_BORDER = 4
COLOUR_THUMB_BORDER_SELECTED = 5
COLOUR_THUMB_BORDER_REMOTE = 6
COLOUR_THUMB_BORDER_REMOTE_SELECTED = 7
COLOUR_THUMBGRID_BACKGROUND = 8
COLOUR_AUTOCOMPLETE_BACKGROUND = 9
COLOUR_MEDIA_BACKGROUND = 10
COLOUR_MEDIA_TEXT = 11
COLOUR_TAGS_BOX = 12
2013-02-19 00:11:43 +00:00
DISCRIMINANT_INBOX = 0
DISCRIMINANT_LOCAL = 1
DISCRIMINANT_NOT_LOCAL = 2
2013-03-15 02:38:12 +00:00
DISCRIMINANT_ARCHIVE = 3
2016-12-28 22:24:52 +00:00
DISCRIMINANT_DOWNLOADING = 4
DISCRIMINANT_LOCAL_BUT_NOT_IN_TRASH = 5
2013-02-19 00:11:43 +00:00
DUMPER_NOT_DUMPED = 0
DUMPER_DUMPED_OK = 1
DUMPER_RECOVERABLE_ERROR = 2
DUMPER_UNRECOVERABLE_ERROR = 3
FIELD_VERIFICATION_RECAPTCHA = 0
FIELD_COMMENT = 1
FIELD_TEXT = 2
FIELD_CHECKBOX = 3
FIELD_FILE = 4
FIELD_THREAD_ID = 5
FIELD_PASSWORD = 6
FIELDS = [ FIELD_VERIFICATION_RECAPTCHA , FIELD_COMMENT , FIELD_TEXT , FIELD_CHECKBOX , FIELD_FILE , FIELD_THREAD_ID , FIELD_PASSWORD ]
field_enum_lookup = { }
field_enum_lookup [ ' recaptcha ' ] = FIELD_VERIFICATION_RECAPTCHA
field_enum_lookup [ ' comment ' ] = FIELD_COMMENT
field_enum_lookup [ ' text ' ] = FIELD_TEXT
field_enum_lookup [ ' checkbox ' ] = FIELD_CHECKBOX
field_enum_lookup [ ' file ' ] = FIELD_FILE
field_enum_lookup [ ' thread id ' ] = FIELD_THREAD_ID
field_enum_lookup [ ' password ' ] = FIELD_PASSWORD
field_string_lookup = { }
field_string_lookup [ FIELD_VERIFICATION_RECAPTCHA ] = ' recaptcha '
field_string_lookup [ FIELD_COMMENT ] = ' comment '
field_string_lookup [ FIELD_TEXT ] = ' text '
field_string_lookup [ FIELD_CHECKBOX ] = ' checkbox '
field_string_lookup [ FIELD_FILE ] = ' file '
field_string_lookup [ FIELD_THREAD_ID ] = ' thread id '
field_string_lookup [ FIELD_PASSWORD ] = ' password '
2018-12-05 22:35:30 +00:00
FILE_VIEWING_STATS_MENU_DISPLAY_NONE = 0
FILE_VIEWING_STATS_MENU_DISPLAY_MEDIA_ONLY = 1
FILE_VIEWING_STATS_MENU_DISPLAY_MEDIA_AND_PREVIEW_IN_SUBMENU = 2
FILE_VIEWING_STATS_MENU_DISPLAY_MEDIA_AND_PREVIEW_STACKED = 3
FILE_VIEWING_STATS_MENU_DISPLAY_MEDIA_AND_PREVIEW_SUMMED = 4
2019-11-14 03:56:30 +00:00
FLAGS_NONE = 0
2015-03-18 21:46:29 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_SMALL_INDENT = 1
FLAGS_BIG_INDENT = 2
2015-03-18 21:46:29 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_CENTER = 3
2015-04-01 20:44:54 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_EXPAND_PERPENDICULAR = 4
FLAGS_EXPAND_BOTH_WAYS = 5
FLAGS_EXPAND_DEPTH_ONLY = 6
2015-03-18 21:46:29 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_EXPAND_BOTH_WAYS_POLITE = 7
FLAGS_EXPAND_BOTH_WAYS_SHY = 8
2018-05-23 21:05:06 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_SIZER_CENTER = 9
2015-04-01 20:44:54 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_EXPAND_SIZER_PERPENDICULAR = 10
FLAGS_EXPAND_SIZER_BOTH_WAYS = 11
FLAGS_EXPAND_SIZER_DEPTH_ONLY = 12
2015-03-18 21:46:29 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_BUTTON_SIZER = 13
2015-03-18 21:46:29 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_LONE_BUTTON = 14
2015-03-18 21:46:29 +00:00
2019-11-14 03:56:30 +00:00
FLAGS_VCENTER = 15
FLAGS_SIZER_VCENTER = 16
FLAGS_VCENTER_EXPAND_DEPTH_ONLY = 17
2015-03-18 21:46:29 +00:00
2015-05-13 20:22:39 +00:00
DAY = 0
WEEK = 1
MONTH = 2
2013-02-19 00:11:43 +00:00
RESTRICTION_MIN_RESOLUTION = 0
RESTRICTION_MAX_RESOLUTION = 1
RESTRICTION_MAX_FILE_SIZE = 2
RESTRICTION_ALLOWED_MIMES = 3
2015-08-26 21:18:39 +00:00
IDLE_NOT_ON_SHUTDOWN = 0
IDLE_ON_SHUTDOWN = 1
IDLE_ON_SHUTDOWN_ASK_FIRST = 2
idle_string_lookup = { }
idle_string_lookup [ IDLE_NOT_ON_SHUTDOWN ] = ' do not run jobs on shutdown '
idle_string_lookup [ IDLE_ON_SHUTDOWN ] = ' run jobs on shutdown if needed '
idle_string_lookup [ IDLE_ON_SHUTDOWN_ASK_FIRST ] = ' run jobs on shutdown if needed, but ask first '
2015-09-09 22:04:39 +00:00
IMPORT_FOLDER_DELETE = 0
IMPORT_FOLDER_IGNORE = 1
IMPORT_FOLDER_MOVE = 2
import_folder_string_lookup = { }
import_folder_string_lookup [ IMPORT_FOLDER_DELETE ] = ' delete the file '
import_folder_string_lookup [ IMPORT_FOLDER_IGNORE ] = ' leave the file alone, do not reattempt it '
import_folder_string_lookup [ IMPORT_FOLDER_MOVE ] = ' move the file '
2020-01-16 02:08:23 +00:00
MEDIA_VIEWER_ACTION_SHOW_WITH_NATIVE = 0
MEDIA_VIEWER_ACTION_SHOW_WITH_NATIVE_PAUSED = 1
2016-08-31 19:55:14 +00:00
MEDIA_VIEWER_ACTION_SHOW_BEHIND_EMBED = 2
MEDIA_VIEWER_ACTION_SHOW_BEHIND_EMBED_PAUSED = 3
MEDIA_VIEWER_ACTION_SHOW_OPEN_EXTERNALLY_BUTTON = 4
2017-03-08 23:23:12 +00:00
MEDIA_VIEWER_ACTION_DO_NOT_SHOW_ON_ACTIVATION_OPEN_EXTERNALLY = 5
MEDIA_VIEWER_ACTION_DO_NOT_SHOW = 6
2020-01-16 02:08:23 +00:00
MEDIA_VIEWER_ACTION_SHOW_WITH_MPV = 7
2015-08-19 21:48:21 +00:00
media_viewer_action_string_lookup = { }
2020-01-16 02:08:23 +00:00
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_SHOW_WITH_NATIVE ] = ' show with native hydrus viewer '
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_SHOW_WITH_NATIVE_PAUSED ] = ' show as normal, but start paused -- obselete '
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_SHOW_BEHIND_EMBED ] = ' show, but initially behind an embed button -- obselete '
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_SHOW_BEHIND_EMBED_PAUSED ] = ' show, but initially behind an embed button, and start paused -- obselete '
2016-08-31 19:55:14 +00:00
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_SHOW_OPEN_EXTERNALLY_BUTTON ] = ' show an \' open externally \' button '
2017-03-08 23:23:12 +00:00
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_DO_NOT_SHOW_ON_ACTIVATION_OPEN_EXTERNALLY ] = ' do not show in the media viewer. on thumbnail activation, open externally '
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_DO_NOT_SHOW ] = ' do not show at all '
2020-01-16 02:08:23 +00:00
media_viewer_action_string_lookup [ MEDIA_VIEWER_ACTION_SHOW_WITH_MPV ] = ' show using mpv '
2015-08-19 21:48:21 +00:00
2020-01-16 02:08:23 +00:00
unsupported_media_actions = [ MEDIA_VIEWER_ACTION_SHOW_OPEN_EXTERNALLY_BUTTON , MEDIA_VIEWER_ACTION_DO_NOT_SHOW_ON_ACTIVATION_OPEN_EXTERNALLY , MEDIA_VIEWER_ACTION_DO_NOT_SHOW ]
static_media_actions = [ MEDIA_VIEWER_ACTION_SHOW_WITH_NATIVE ] + unsupported_media_actions
animated_media_actions = [ MEDIA_VIEWER_ACTION_SHOW_WITH_MPV ] + static_media_actions
audio_media_actions = [ MEDIA_VIEWER_ACTION_SHOW_WITH_MPV ] + unsupported_media_actions
# actions, can_start_paused, can_start_with_embed
static_full_support = ( static_media_actions , False , True )
animated_full_support = ( animated_media_actions , True , True )
audio_full_support = ( audio_media_actions , True , True )
no_support = ( unsupported_media_actions , False , False )
2015-08-19 21:48:21 +00:00
media_viewer_capabilities = { }
2020-01-22 21:04:43 +00:00
media_viewer_capabilities [ HC . GENERAL_ANIMATION ] = animated_full_support
media_viewer_capabilities [ HC . GENERAL_IMAGE ] = static_full_support
media_viewer_capabilities [ HC . GENERAL_VIDEO ] = animated_full_support
media_viewer_capabilities [ HC . GENERAL_AUDIO ] = audio_full_support
media_viewer_capabilities [ HC . GENERAL_APPLICATION ] = no_support
2020-01-16 02:08:23 +00:00
for mime in HC . SEARCHABLE_MIMES :
2020-01-22 21:04:43 +00:00
if mime in HC . ANIMATIONS :
2020-01-16 02:08:23 +00:00
media_viewer_capabilities [ mime ] = animated_full_support
elif mime in HC . IMAGES :
media_viewer_capabilities [ mime ] = static_full_support
elif mime in HC . VIDEO :
media_viewer_capabilities [ mime ] = animated_full_support
elif mime in HC . AUDIO :
media_viewer_capabilities [ mime ] = audio_full_support
else :
media_viewer_capabilities [ mime ] = no_support
2015-08-19 21:48:21 +00:00
2017-03-08 23:23:12 +00:00
media_viewer_capabilities [ HC . APPLICATION_HYDRUS_UPDATE_CONTENT ] = no_support
media_viewer_capabilities [ HC . APPLICATION_HYDRUS_UPDATE_DEFINITIONS ] = no_support
2015-08-19 21:48:21 +00:00
2016-08-31 19:55:14 +00:00
MEDIA_VIEWER_SCALE_100 = 0
MEDIA_VIEWER_SCALE_MAX_REGULAR = 1
MEDIA_VIEWER_SCALE_TO_CANVAS = 2
media_viewer_scale_string_lookup = { }
media_viewer_scale_string_lookup [ MEDIA_VIEWER_SCALE_100 ] = ' show at 100 % '
media_viewer_scale_string_lookup [ MEDIA_VIEWER_SCALE_MAX_REGULAR ] = ' scale to the largest regular zoom that fits '
media_viewer_scale_string_lookup [ MEDIA_VIEWER_SCALE_TO_CANVAS ] = ' scale to the canvas size '
2017-06-21 21:15:59 +00:00
NEW_PAGE_GOES_FAR_LEFT = 0
NEW_PAGE_GOES_LEFT_OF_CURRENT = 1
NEW_PAGE_GOES_RIGHT_OF_CURRENT = 2
NEW_PAGE_GOES_FAR_RIGHT = 3
new_page_goes_string_lookup = { }
2018-12-12 22:15:46 +00:00
new_page_goes_string_lookup [ NEW_PAGE_GOES_FAR_LEFT ] = ' the far left '
new_page_goes_string_lookup [ NEW_PAGE_GOES_LEFT_OF_CURRENT ] = ' left of current page tab '
new_page_goes_string_lookup [ NEW_PAGE_GOES_RIGHT_OF_CURRENT ] = ' right of current page tab '
new_page_goes_string_lookup [ NEW_PAGE_GOES_FAR_RIGHT ] = ' the far right '
2017-06-21 21:15:59 +00:00
2017-06-28 20:23:21 +00:00
NETWORK_CONTEXT_GLOBAL = 0
NETWORK_CONTEXT_HYDRUS = 1
2017-07-05 21:09:28 +00:00
NETWORK_CONTEXT_DOMAIN = 2
NETWORK_CONTEXT_DOWNLOADER = 3
2018-04-18 22:10:15 +00:00
NETWORK_CONTEXT_DOWNLOADER_PAGE = 4
2017-07-05 21:09:28 +00:00
NETWORK_CONTEXT_SUBSCRIPTION = 5
2018-05-23 21:05:06 +00:00
NETWORK_CONTEXT_WATCHER_PAGE = 6
2017-06-28 20:23:21 +00:00
2017-07-12 20:03:45 +00:00
network_context_type_string_lookup = { }
network_context_type_string_lookup [ NETWORK_CONTEXT_GLOBAL ] = ' global '
network_context_type_string_lookup [ NETWORK_CONTEXT_HYDRUS ] = ' hydrus service '
network_context_type_string_lookup [ NETWORK_CONTEXT_DOMAIN ] = ' web domain '
network_context_type_string_lookup [ NETWORK_CONTEXT_DOWNLOADER ] = ' downloader '
2018-04-18 22:10:15 +00:00
network_context_type_string_lookup [ NETWORK_CONTEXT_DOWNLOADER_PAGE ] = ' downloader page '
2017-07-12 20:03:45 +00:00
network_context_type_string_lookup [ NETWORK_CONTEXT_SUBSCRIPTION ] = ' subscription '
2018-05-23 21:05:06 +00:00
network_context_type_string_lookup [ NETWORK_CONTEXT_WATCHER_PAGE ] = ' watcher page '
2017-07-12 20:03:45 +00:00
network_context_type_description_lookup = { }
network_context_type_description_lookup [ NETWORK_CONTEXT_GLOBAL ] = ' All network traffic, no matter the source or destination. '
2018-04-18 22:10:15 +00:00
network_context_type_description_lookup [ NETWORK_CONTEXT_HYDRUS ] = ' Network traffic going to or from a hydrus service. '
network_context_type_description_lookup [ NETWORK_CONTEXT_DOMAIN ] = ' Network traffic going to or from a web domain (or a subdomain). '
network_context_type_description_lookup [ NETWORK_CONTEXT_DOWNLOADER ] = ' Network traffic going through a downloader. This is no longer used. '
network_context_type_description_lookup [ NETWORK_CONTEXT_DOWNLOADER_PAGE ] = ' Network traffic going through a single downloader page. This is an ephemeral context--it will not be saved through a client restart. It is useful to throttle individual downloader pages so they give the db and other import pages time to do work. '
network_context_type_description_lookup [ NETWORK_CONTEXT_SUBSCRIPTION ] = ' Network traffic going through a subscription query. Each query gets its own network context, named \' [subscription name]: [query text] \' . '
2018-05-23 21:05:06 +00:00
network_context_type_description_lookup [ NETWORK_CONTEXT_WATCHER_PAGE ] = ' Network traffic going through a single watcher page. This is an ephemeral context--it will not be saved through a client restart. It is useful to throttle individual watcher pages so they give the db and other import pages time to do work. '
2017-07-12 20:03:45 +00:00
2017-08-02 21:32:54 +00:00
PAGE_FILE_COUNT_DISPLAY_ALL = 0
PAGE_FILE_COUNT_DISPLAY_NONE = 1
PAGE_FILE_COUNT_DISPLAY_ONLY_IMPORTERS = 2
page_file_count_display_string_lookup = { }
page_file_count_display_string_lookup [ PAGE_FILE_COUNT_DISPLAY_ALL ] = ' for all pages '
page_file_count_display_string_lookup [ PAGE_FILE_COUNT_DISPLAY_ONLY_IMPORTERS ] = ' for import pages '
page_file_count_display_string_lookup [ PAGE_FILE_COUNT_DISPLAY_NONE ] = ' for no pages '
2013-02-19 00:11:43 +00:00
SHUTDOWN_TIMESTAMP_VACUUM = 0
SHUTDOWN_TIMESTAMP_FATTEN_AC_CACHE = 1
SHUTDOWN_TIMESTAMP_DELETE_ORPHANS = 2
SORT_BY_LEXICOGRAPHIC_ASC = 8
SORT_BY_LEXICOGRAPHIC_DESC = 9
SORT_BY_INCIDENCE_ASC = 10
SORT_BY_INCIDENCE_DESC = 11
2016-04-27 19:20:37 +00:00
SORT_BY_LEXICOGRAPHIC_NAMESPACE_ASC = 12
SORT_BY_LEXICOGRAPHIC_NAMESPACE_DESC = 13
2016-09-28 18:48:01 +00:00
SORT_BY_INCIDENCE_NAMESPACE_ASC = 14
SORT_BY_INCIDENCE_NAMESPACE_DESC = 15
2019-09-25 21:34:18 +00:00
SORT_BY_LEXICOGRAPHIC_IGNORE_NAMESPACE_ASC = 16
SORT_BY_LEXICOGRAPHIC_IGNORE_NAMESPACE_DESC = 17
2017-08-09 21:33:51 +00:00
SORT_FILES_BY_FILESIZE = 0
SORT_FILES_BY_DURATION = 1
SORT_FILES_BY_IMPORT_TIME = 2
SORT_FILES_BY_MIME = 3
SORT_FILES_BY_RANDOM = 4
SORT_FILES_BY_WIDTH = 5
SORT_FILES_BY_HEIGHT = 6
SORT_FILES_BY_RATIO = 7
SORT_FILES_BY_NUM_PIXELS = 8
SORT_FILES_BY_NUM_TAGS = 9
2018-12-05 22:35:30 +00:00
SORT_FILES_BY_MEDIA_VIEWS = 10
SORT_FILES_BY_MEDIA_VIEWTIME = 11
2019-01-30 22:14:54 +00:00
SORT_FILES_BY_APPROX_BITRATE = 12
2019-09-11 21:51:09 +00:00
SORT_FILES_BY_HAS_AUDIO = 13
2019-09-25 21:34:18 +00:00
SORT_FILES_BY_FILE_MODIFIED_TIMESTAMP = 14
2020-03-04 22:12:53 +00:00
SORT_FILES_BY_FRAMERATE = 15
SYSTEM_SORT_TYPES = [ ]
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_DURATION )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_FRAMERATE )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_HEIGHT )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_WIDTH )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_RATIO )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_NUM_PIXELS )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_FILESIZE )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_IMPORT_TIME )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_APPROX_BITRATE )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_HAS_AUDIO )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_MIME )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_FILE_MODIFIED_TIMESTAMP )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_RANDOM )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_NUM_TAGS )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_MEDIA_VIEWS )
SYSTEM_SORT_TYPES . append ( SORT_FILES_BY_MEDIA_VIEWTIME )
system_sort_type_submetatype_string_lookup = { }
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_DURATION ] = ' dimensions '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_FRAMERATE ] = ' dimensions '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_HEIGHT ] = ' dimensions '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_NUM_PIXELS ] = ' dimensions '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_RATIO ] = ' dimensions '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_WIDTH ] = ' dimensions '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_APPROX_BITRATE ] = ' file '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_FILESIZE ] = ' file '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_MIME ] = ' file '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_HAS_AUDIO ] = ' file '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_IMPORT_TIME ] = ' file '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_FILE_MODIFIED_TIMESTAMP ] = ' file '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_RANDOM ] = None
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_NUM_TAGS ] = ' tags '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_MEDIA_VIEWS ] = ' views '
system_sort_type_submetatype_string_lookup [ SORT_FILES_BY_MEDIA_VIEWTIME ] = ' views '
sort_type_basic_string_lookup = { }
sort_type_basic_string_lookup [ SORT_FILES_BY_DURATION ] = ' duration '
sort_type_basic_string_lookup [ SORT_FILES_BY_FRAMERATE ] = ' framerate '
sort_type_basic_string_lookup [ SORT_FILES_BY_HEIGHT ] = ' height '
sort_type_basic_string_lookup [ SORT_FILES_BY_NUM_PIXELS ] = ' number of pixels '
sort_type_basic_string_lookup [ SORT_FILES_BY_RATIO ] = ' resolution ratio '
sort_type_basic_string_lookup [ SORT_FILES_BY_WIDTH ] = ' width '
sort_type_basic_string_lookup [ SORT_FILES_BY_APPROX_BITRATE ] = ' approximate bitrate '
sort_type_basic_string_lookup [ SORT_FILES_BY_FILESIZE ] = ' filesize '
sort_type_basic_string_lookup [ SORT_FILES_BY_MIME ] = ' filetype '
sort_type_basic_string_lookup [ SORT_FILES_BY_HAS_AUDIO ] = ' has audio '
sort_type_basic_string_lookup [ SORT_FILES_BY_IMPORT_TIME ] = ' time imported '
sort_type_basic_string_lookup [ SORT_FILES_BY_FILE_MODIFIED_TIMESTAMP ] = ' modified time '
sort_type_basic_string_lookup [ SORT_FILES_BY_RANDOM ] = ' random '
sort_type_basic_string_lookup [ SORT_FILES_BY_NUM_TAGS ] = ' number of tags '
sort_type_basic_string_lookup [ SORT_FILES_BY_MEDIA_VIEWS ] = ' media views '
sort_type_basic_string_lookup [ SORT_FILES_BY_MEDIA_VIEWTIME ] = ' media viewtime '
sort_type_string_lookup = { }
for sort_type in SYSTEM_SORT_TYPES :
ms = system_sort_type_submetatype_string_lookup [ sort_type ]
s = sort_type_basic_string_lookup [ sort_type ]
if ms is not None :
s = ' {} : {} ' . format ( ms , s )
sort_type_string_lookup [ sort_type ] = s
2017-08-09 21:33:51 +00:00
SORT_ASC = 0
SORT_DESC = 1
2013-02-19 00:11:43 +00:00
2015-06-03 21:05:13 +00:00
STATUS_UNKNOWN = 0
2018-04-25 22:07:52 +00:00
STATUS_SUCCESSFUL_AND_NEW = 1
STATUS_SUCCESSFUL_BUT_REDUNDANT = 2
2015-06-03 21:05:13 +00:00
STATUS_DELETED = 3
2018-04-25 22:07:52 +00:00
STATUS_ERROR = 4
STATUS_NEW = 5 # no longer used
STATUS_PAUSED = 6 # not used
STATUS_VETOED = 7
2015-09-09 22:04:39 +00:00
STATUS_SKIPPED = 8
2015-06-03 21:05:13 +00:00
status_string_lookup = { }
status_string_lookup [ STATUS_UNKNOWN ] = ' '
2018-04-25 22:07:52 +00:00
status_string_lookup [ STATUS_SUCCESSFUL_AND_NEW ] = ' successful '
status_string_lookup [ STATUS_SUCCESSFUL_BUT_REDUNDANT ] = ' already in db '
2015-06-03 21:05:13 +00:00
status_string_lookup [ STATUS_DELETED ] = ' deleted '
2018-04-25 22:07:52 +00:00
status_string_lookup [ STATUS_ERROR ] = ' error '
2015-06-03 21:05:13 +00:00
status_string_lookup [ STATUS_NEW ] = ' new '
2015-07-29 19:11:35 +00:00
status_string_lookup [ STATUS_PAUSED ] = ' paused '
2018-05-09 20:23:00 +00:00
status_string_lookup [ STATUS_VETOED ] = ' ignored '
2015-09-09 22:04:39 +00:00
status_string_lookup [ STATUS_SKIPPED ] = ' skipped '
2015-06-03 21:05:13 +00:00
2018-04-25 22:07:52 +00:00
SUCCESSFUL_IMPORT_STATES = { STATUS_SUCCESSFUL_AND_NEW , STATUS_SUCCESSFUL_BUT_REDUNDANT }
UNSUCCESSFUL_IMPORT_STATES = { STATUS_DELETED , STATUS_ERROR , STATUS_VETOED }
FAILED_IMPORT_STATES = { STATUS_ERROR , STATUS_VETOED }
2016-09-21 19:54:04 +00:00
ZOOM_NEAREST = 0 # pixelly garbage
ZOOM_LINEAR = 1 # simple and quick
2016-08-17 20:07:22 +00:00
ZOOM_AREA = 2 # for shrinking without moire
ZOOM_CUBIC = 3 # for interpolating, pretty good
ZOOM_LANCZOS4 = 4 # for interpolating, noice
zoom_string_lookup = { }
zoom_string_lookup [ ZOOM_NEAREST ] = ' nearest neighbour '
zoom_string_lookup [ ZOOM_LINEAR ] = ' bilinear interpolation '
zoom_string_lookup [ ZOOM_AREA ] = ' pixel area resampling '
zoom_string_lookup [ ZOOM_CUBIC ] = ' 4x4 bilinear interpolation '
zoom_string_lookup [ ZOOM_LANCZOS4 ] = ' 8x8 Lanczos interpolation '
2015-08-26 21:18:39 +00:00
2019-11-14 03:56:30 +00:00
class GlobalPixmaps ( object ) :
2013-02-19 00:11:43 +00:00
2020-03-11 21:52:11 +00:00
my_instance = None
def __init__ ( self ) :
self . _Initialise ( )
GlobalPixmaps . my_instance = self
2015-03-18 21:46:29 +00:00
@staticmethod
2020-03-11 21:52:11 +00:00
def instance ( ) - > ' GlobalPixmaps ' :
if GlobalPixmaps . my_instance is None :
raise Exception ( ' GlobalPixmaps is not yet initialised! ' )
else :
return GlobalPixmaps . my_instance
def _Initialise ( self ) :
2013-02-19 00:11:43 +00:00
2019-11-14 03:56:30 +00:00
# These probably *could* be created even before QApplication is constructed, but it can't hurt to wait until that's done.
2013-02-19 00:11:43 +00:00
2020-03-11 21:52:11 +00:00
self . bold = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_bold.png ' ) )
self . italic = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_italic.png ' ) )
self . underline = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_underline.png ' ) )
self . align_left = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_align_left.png ' ) )
self . align_center = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_align_center.png ' ) )
self . align_right = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_align_right.png ' ) )
self . align_justify = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_align_justify.png ' ) )
self . indent_less = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_indent_remove.png ' ) )
self . indent_more = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' text_indent.png ' ) )
self . font = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' font.png ' ) )
self . colour = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' color_swatch.png ' ) )
self . link = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' link.png ' ) )
self . link_break = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' link_break.png ' ) )
self . drag = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' drag.png ' ) )
self . transparent = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' transparent.png ' ) )
self . downloading = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' downloading.png ' ) )
self . file_repository = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' file_repository_small.png ' ) )
self . file_repository_pending = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' file_repository_pending_small.png ' ) )
self . file_repository_petitioned = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' file_repository_petitioned_small.png ' ) )
self . ipfs = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' ipfs_small.png ' ) )
self . ipfs_pending = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' ipfs_pending_small.png ' ) )
self . ipfs_petitioned = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' ipfs_petitioned_small.png ' ) )
2014-07-09 22:15:14 +00:00
2020-03-11 21:52:11 +00:00
self . collection = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' collection.png ' ) )
self . inbox = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' inbox.png ' ) )
self . trash = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' trash.png ' ) )
self . refresh = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' refresh.png ' ) )
self . archive = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' archive.png ' ) )
self . to_inbox = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' to_inbox.png ' ) )
self . delete = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' trash.png ' ) )
self . trash_delete = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' delete.png ' ) )
self . undelete = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' undelete.png ' ) )
self . zoom_in = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' zoom_in.png ' ) )
self . zoom_out = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' zoom_out.png ' ) )
self . zoom_switch = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' zoom_switch.png ' ) )
self . fullscreen_switch = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' fullscreen_switch.png ' ) )
self . open_externally = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' open_externally.png ' ) )
self . dump_ok = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' dump_ok.png ' ) )
self . dump_recoverable = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' dump_recoverable.png ' ) )
self . dump_fail = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' dump_fail.png ' ) )
self . cog = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' cog.png ' ) )
self . family = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' family.png ' ) )
self . keyboard = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' keyboard.png ' ) )
self . help = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' help.png ' ) )
self . check = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' check.png ' ) )
self . pause = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' pause.png ' ) )
self . play = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' play.png ' ) )
self . stop = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' stop.png ' ) )
self . sound = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' sound.png ' ) )
self . mute = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' mute.png ' ) )
self . file_pause = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' file_pause.png ' ) )
self . file_play = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' file_play.png ' ) )
self . gallery_pause = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' gallery_pause.png ' ) )
self . gallery_play = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' gallery_play.png ' ) )
self . highlight = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' highlight.png ' ) )
self . clear_highlight = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' clear_highlight.png ' ) )
self . star = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' star.png ' ) )
self . listctrl = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' listctrl.png ' ) )
self . copy = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' copy.png ' ) )
self . paste = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' paste.png ' ) )
self . eight_kun = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' 8kun.png ' ) )
self . twitter = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' twitter.png ' ) )
self . tumblr = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' tumblr.png ' ) )
self . discord = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' discord.png ' ) )
self . patreon = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' patreon.png ' ) )
self . first = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' first.png ' ) )
self . previous = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' previous.png ' ) )
self . next_bmp = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' next.png ' ) )
self . last = QG . QPixmap ( os . path . join ( HC . STATIC_DIR , ' last.png ' ) )
global_pixmaps = GlobalPixmaps . instance
2015-03-25 22:04:19 +00:00
2019-09-18 22:40:39 +00:00
DEFAULT_LOCAL_TAG_SERVICE_KEY = b ' local tags '
2015-03-25 22:04:19 +00:00
2019-01-09 22:59:03 +00:00
LOCAL_FILE_SERVICE_KEY = b ' local files '
2015-03-25 22:04:19 +00:00
2019-01-09 22:59:03 +00:00
LOCAL_UPDATE_SERVICE_KEY = b ' repository updates '
2017-03-02 02:14:56 +00:00
2019-01-09 22:59:03 +00:00
LOCAL_BOORU_SERVICE_KEY = b ' local booru '
2015-03-25 22:04:19 +00:00
2019-01-09 22:59:03 +00:00
LOCAL_NOTES_SERVICE_KEY = b ' local notes '
2018-03-07 22:48:29 +00:00
2019-01-30 22:14:54 +00:00
CLIENT_API_SERVICE_KEY = b ' client api '
2019-01-09 22:59:03 +00:00
TRASH_SERVICE_KEY = b ' trash '
2015-07-08 21:45:38 +00:00
2019-01-09 22:59:03 +00:00
COMBINED_LOCAL_FILE_SERVICE_KEY = b ' all local files '
2016-12-14 21:19:07 +00:00
2019-01-09 22:59:03 +00:00
COMBINED_FILE_SERVICE_KEY = b ' all known files '
2015-03-25 22:04:19 +00:00
2019-01-09 22:59:03 +00:00
COMBINED_TAG_SERVICE_KEY = b ' all known tags '
2017-10-25 21:45:15 +00:00
2019-01-09 22:59:03 +00:00
TEST_SERVICE_KEY = b ' test service '