2020-05-20 21:36:02 +00:00
|
|
|
import os
|
|
|
|
|
2020-04-22 21:00:35 +00:00
|
|
|
from hydrus.client import ClientConstants as CC
|
|
|
|
from hydrus.core import HydrusGlobals as HG
|
|
|
|
from hydrus.core import HydrusSerialisable
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
class NetworkContext( HydrusSerialisable.SerialisableBase ):
|
|
|
|
|
|
|
|
SERIALISABLE_TYPE = HydrusSerialisable.SERIALISABLE_TYPE_NETWORK_CONTEXT
|
|
|
|
SERIALISABLE_NAME = 'Network Context'
|
|
|
|
SERIALISABLE_VERSION = 2
|
|
|
|
|
|
|
|
def __init__( self, context_type = None, context_data = None ):
|
|
|
|
|
|
|
|
HydrusSerialisable.SerialisableBase.__init__( self )
|
|
|
|
|
|
|
|
self.context_type = context_type
|
|
|
|
self.context_data = context_data
|
|
|
|
|
|
|
|
|
|
|
|
def __eq__( self, other ):
|
|
|
|
|
2020-01-22 21:04:43 +00:00
|
|
|
if isinstance( other, NetworkContext ):
|
|
|
|
|
|
|
|
return self.__hash__() == other.__hash__()
|
|
|
|
|
|
|
|
|
|
|
|
return NotImplemented
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
def __hash__( self ):
|
|
|
|
|
|
|
|
return ( self.context_type, self.context_data ).__hash__()
|
|
|
|
|
|
|
|
|
|
|
|
def __ne__( self, other ):
|
|
|
|
|
|
|
|
return self.__hash__() != other.__hash__()
|
|
|
|
|
|
|
|
|
|
|
|
def __repr__( self ):
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
return self.ToString()
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
def _GetSerialisableInfo( self ):
|
|
|
|
|
|
|
|
if self.context_data is None:
|
|
|
|
|
|
|
|
serialisable_context_data = self.context_data
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
if self.context_type in ( CC.NETWORK_CONTEXT_DOMAIN, CC.NETWORK_CONTEXT_SUBSCRIPTION ):
|
|
|
|
|
|
|
|
serialisable_context_data = self.context_data
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
serialisable_context_data = self.context_data.hex()
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ( self.context_type, serialisable_context_data )
|
|
|
|
|
|
|
|
|
|
|
|
def _InitialiseFromSerialisableInfo( self, serialisable_info ):
|
|
|
|
|
|
|
|
( self.context_type, serialisable_context_data ) = serialisable_info
|
|
|
|
|
|
|
|
if serialisable_context_data is None:
|
|
|
|
|
|
|
|
self.context_data = serialisable_context_data
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
if self.context_type in ( CC.NETWORK_CONTEXT_DOMAIN, CC.NETWORK_CONTEXT_SUBSCRIPTION ):
|
|
|
|
|
|
|
|
self.context_data = serialisable_context_data
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
self.context_data = bytes.fromhex( serialisable_context_data )
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _UpdateSerialisableInfo( self, version, old_serialisable_info ):
|
|
|
|
|
|
|
|
if version == 1:
|
|
|
|
|
|
|
|
( context_type, serialisable_context_data ) = old_serialisable_info
|
|
|
|
|
|
|
|
if serialisable_context_data is not None:
|
|
|
|
|
|
|
|
# unicode subscription names were erroring on the hex call
|
|
|
|
if context_type in ( CC.NETWORK_CONTEXT_DOMAIN, CC.NETWORK_CONTEXT_SUBSCRIPTION ):
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
context_data = bytes.fromhex( serialisable_context_data )
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
serialisable_context_data = context_data
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
new_serialisable_info = ( context_type, serialisable_context_data )
|
|
|
|
|
|
|
|
return ( 2, new_serialisable_info )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def IsDefault( self ):
|
|
|
|
|
|
|
|
return self.context_data is None and self.context_type != CC.NETWORK_CONTEXT_GLOBAL
|
|
|
|
|
|
|
|
|
|
|
|
def IsEphemeral( self ):
|
|
|
|
|
2018-05-23 21:05:06 +00:00
|
|
|
return self.context_type in ( CC.NETWORK_CONTEXT_DOWNLOADER_PAGE, CC.NETWORK_CONTEXT_WATCHER_PAGE )
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
|
2018-11-28 22:31:04 +00:00
|
|
|
def IsHydrus( self ):
|
|
|
|
|
|
|
|
return self.context_type == CC.NETWORK_CONTEXT_HYDRUS
|
|
|
|
|
|
|
|
|
2018-04-18 22:10:15 +00:00
|
|
|
def GetSummary( self ):
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
summary = self.ToString()
|
2018-04-18 22:10:15 +00:00
|
|
|
summary += os.linesep * 2
|
|
|
|
summary += CC.network_context_type_description_lookup[ self.context_type ]
|
|
|
|
|
|
|
|
return summary
|
|
|
|
|
|
|
|
|
2019-01-23 22:19:16 +00:00
|
|
|
def ToHumanString( self ):
|
|
|
|
|
|
|
|
if self.IsEphemeral():
|
|
|
|
|
|
|
|
return CC.network_context_type_string_lookup[ self.context_type ] + ' instance'
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
return self.ToString()
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
def ToString( self ):
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
if self.context_data is None:
|
|
|
|
|
|
|
|
if self.context_type == CC.NETWORK_CONTEXT_GLOBAL:
|
|
|
|
|
|
|
|
return 'global'
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
return CC.network_context_type_string_lookup[ self.context_type ] + ' default'
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
if self.context_type == CC.NETWORK_CONTEXT_HYDRUS:
|
|
|
|
|
|
|
|
service_key = self.context_data
|
|
|
|
|
|
|
|
services_manager = HG.client_controller.services_manager
|
|
|
|
|
|
|
|
if services_manager.ServiceExists( service_key ):
|
|
|
|
|
2018-10-31 21:41:14 +00:00
|
|
|
name = services_manager.GetName( service_key )
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
name = 'unknown service--probably deleted or an unusual test'
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
name = str( self.context_data )
|
2018-04-18 22:10:15 +00:00
|
|
|
|
|
|
|
|
|
|
|
return CC.network_context_type_string_lookup[ self.context_type ] + ': ' + name
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-31 21:41:14 +00:00
|
|
|
@staticmethod
|
|
|
|
def STATICGenerateForDomain( domain ):
|
|
|
|
|
|
|
|
return NetworkContext( context_type = CC.NETWORK_CONTEXT_DOMAIN, context_data = domain )
|
|
|
|
|
|
|
|
|
2018-04-18 22:10:15 +00:00
|
|
|
HydrusSerialisable.SERIALISABLE_TYPES_TO_OBJECT_TYPES[ HydrusSerialisable.SERIALISABLE_TYPE_NETWORK_CONTEXT ] = NetworkContext
|
|
|
|
|
|
|
|
GLOBAL_NETWORK_CONTEXT = NetworkContext( CC.NETWORK_CONTEXT_GLOBAL )
|