hydrus/hydrus/ClientConstants.py

559 lines
24 KiB
Python
Raw Normal View History

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'