11import ctypes
2- import c as c
2+ import objectbox . c as c
33from objectbox import Store
4- from objectbox .c import c_array_pointer
5-
4+ from enum import Enum , auto
65
76class SyncCredentials :
87
9- def __init__ (self , credential_type : c .OBXSyncCredentialsType ):
8+ def __init__ (self , credential_type : c .SyncCredentialsType ):
109 self .type = credential_type
1110
1211 @staticmethod
@@ -15,60 +14,60 @@ def none() -> 'SyncCredentials':
1514
1615 @staticmethod
1716 def shared_secret_string (secret : str ) -> 'SyncCredentials' :
18- return SyncCredentialsSecret (c .OBXSyncCredentialsType .SHARED_SECRET_SIPPED , secret .encode ('utf-8' ))
17+ return SyncCredentialsSecret (c .SyncCredentialsType .SHARED_SECRET_SIPPED , secret .encode ('utf-8' ))
1918
2019 @staticmethod
2120 def google_auth (secret : str ) -> 'SyncCredentials' :
22- return SyncCredentialsSecret (c .OBXSyncCredentialsType .GOOGLE_AUTH , secret .encode ('utf-8' ))
21+ return SyncCredentialsSecret (c .SyncCredentialsType .GOOGLE_AUTH , secret .encode ('utf-8' ))
2322
2423 @staticmethod
2524 def user_and_password (username : str , password : str ) -> 'SyncCredentials' :
26- return SyncCredentialsUserPassword (c .OBXSyncCredentialsType .USER_PASSWORD , username , password )
25+ return SyncCredentialsUserPassword (c .SyncCredentialsType .USER_PASSWORD , username , password )
2726
2827 @staticmethod
2928 def jwt_id_token (jwt_id_token : str ) -> 'SyncCredentials' :
30- return SyncCredentialsSecret (c .OBXSyncCredentialsType .JWT_ID , jwt_id_token .encode ('utf-8' ))
29+ return SyncCredentialsSecret (c .SyncCredentialsType .JWT_ID , jwt_id_token .encode ('utf-8' ))
3130
3231 @staticmethod
3332 def jwt_access_token (jwt_access_token : str ) -> 'SyncCredentials' :
34- return SyncCredentialsSecret (c .OBXSyncCredentialsType .JWT_ACCESS , jwt_access_token .encode ('utf-8' ))
33+ return SyncCredentialsSecret (c .SyncCredentialsType .JWT_ACCESS , jwt_access_token .encode ('utf-8' ))
3534
3635 @staticmethod
3736 def jwt_refresh_token (jwt_refresh_token : str ) -> 'SyncCredentials' :
38- return SyncCredentialsSecret (c .OBXSyncCredentialsType .JWT_REFRESH , jwt_refresh_token .encode ('utf-8' ))
37+ return SyncCredentialsSecret (c .SyncCredentialsType .JWT_REFRESH , jwt_refresh_token .encode ('utf-8' ))
3938
4039 @staticmethod
4140 def jwt_custom_token (jwt_custom_token : str ) -> 'SyncCredentials' :
42- return SyncCredentialsSecret (c .OBXSyncCredentialsType .JWT_CUSTOM , jwt_custom_token .encode ('utf-8' ))
41+ return SyncCredentialsSecret (c .SyncCredentialsType .JWT_CUSTOM , jwt_custom_token .encode ('utf-8' ))
4342
4443
4544class SyncCredentialsNone (SyncCredentials ):
4645 def __init__ (self ):
47- super ().__init__ (c .OBXSyncCredentialsType .NONE )
46+ super ().__init__ (c .SyncCredentialsType .NONE )
4847
4948
5049class SyncCredentialsSecret (SyncCredentials ):
51- def __init__ (self , credential_type : c .OBXSyncCredentialsType , secret : bytes ):
50+ def __init__ (self , credential_type : c .SyncCredentialsType , secret : bytes ):
5251 super ().__init__ (credential_type )
5352 self .secret = secret
5453
5554
5655class SyncCredentialsUserPassword (SyncCredentials ):
57- def __init__ (self , credential_type : c .OBXSyncCredentialsType , username : str , password : str ):
56+ def __init__ (self , credential_type : c .SyncCredentialsType , username : str , password : str ):
5857 super ().__init__ (credential_type )
5958 self .username = username
6059 self .password = password
6160
6261
63- class SyncState :
64- UNKNOWN = 'unknown'
65- CREATED = 'created'
66- STARTED = 'started'
67- CONNECTED = 'connected'
68- LOGGED_IN = 'logged_in'
69- DISCONNECTED = 'disconnected'
70- STOPPED = 'stopped'
71- DEAD = 'dead'
62+ class SyncState ( Enum ) :
63+ UNKNOWN = auto ()
64+ CREATED = auto ()
65+ STARTED = auto ()
66+ CONNECTED = auto ()
67+ LOGGED_IN = auto ()
68+ DISCONNECTED = auto ()
69+ STOPPED = auto ()
70+ DEAD = auto ()
7271
7372
7473class SyncRequestUpdatesMode :
@@ -103,16 +102,18 @@ def __init__(self, store: Store, server_urls: list[str], credentials: list[SyncC
103102 if not server_urls :
104103 raise ValueError ("Provide at least one server URL" )
105104
106- if not Sync .is_available ():
107- raise RuntimeError (
108- 'Sync is not available in the loaded ObjectBox runtime library. '
109- 'Please visit https://objectbox.io/sync/ for options.' )
105+ # TODO: Implement sync availability check
106+ # if not c.Sync.is_available():
107+ # raise RuntimeError(
108+ # 'Sync is not available in the loaded ObjectBox runtime library. '
109+ # 'Please visit https://objectbox.io/sync/ for options.')
110110
111111 self .__store = store
112112 self .__server_urls = server_urls
113113 self .__credentials = credentials
114114
115- self .__c_sync_client_ptr = c .obx_sync_urls (store .c_store (), c_array_pointer (server_urls , ctypes .c_char_p ),
115+ server_urls = [url .encode ('utf-8' ) for url in server_urls ]
116+ self .__c_sync_client_ptr = c .obx_sync_urls (store .c_store (), c .c_array_pointer (server_urls , ctypes .c_char_p ),
116117 len (server_urls ))
117118
118119 def set_credentials (self , credentials : SyncCredentials ):
@@ -130,15 +131,34 @@ def set_credentials(self, credentials: SyncCredentials):
130131
131132 def set_request_updates_mode (self , mode : SyncRequestUpdatesMode ):
132133 if mode == SyncRequestUpdatesMode .MANUAL :
133- c_mode = c .OBXRequestUpdatesMode .MANUAL
134+ c_mode = c .RequestUpdatesMode .MANUAL
134135 elif mode == SyncRequestUpdatesMode .AUTO :
135- c_mode = c .OBXRequestUpdatesMode .AUTO
136+ c_mode = c .RequestUpdatesMode .AUTO
136137 elif mode == SyncRequestUpdatesMode .AUTO_NO_PUSHES :
137- c_mode = c .OBXRequestUpdatesMode .AUTO_NO_PUSHES
138+ c_mode = c .RequestUpdatesMode .AUTO_NO_PUSHES
138139 else :
139140 raise ValueError (f"Invalid mode: { mode } " )
140141 c .obx_sync_request_updates_mode (self .__c_sync_client_ptr , c_mode )
141142
143+ def get_sync_state (self ) -> SyncState :
144+ c_state = c .obx_sync_state (self .__c_sync_client_ptr )
145+ if c_state == c .SyncState .CREATED :
146+ return SyncState .CREATED
147+ elif c_state == c .SyncState .STARTED :
148+ return SyncState .STARTED
149+ elif c_state == c .SyncState .CONNECTED :
150+ return SyncState .CONNECTED
151+ elif c_state == c .SyncState .LOGGED_IN :
152+ return SyncState .LOGGED_IN
153+ elif c_state == c .SyncState .DISCONNECTED :
154+ return SyncState .DISCONNECTED
155+ elif c_state == c .SyncState .STOPPED :
156+ return SyncState .STOPPED
157+ elif c_state == c .SyncState .DEAD :
158+ return SyncState .DEAD
159+ else :
160+ return SyncState .UNKNOWN
161+
142162 def start (self ):
143163 c .obx_sync_start (self .__c_sync_client_ptr )
144164
0 commit comments