@@ -33,6 +33,12 @@ pub enum Server {
3333 Supabase = 2 ,
3434}
3535
36+ impl Server {
37+ pub fn is_local ( & self ) -> bool {
38+ matches ! ( self , Server :: Local )
39+ }
40+ }
41+
3642impl Display for Server {
3743 fn fmt ( & self , f : & mut Formatter < ' _ > ) -> std:: fmt:: Result {
3844 match self {
@@ -49,15 +55,14 @@ impl Display for Server {
4955/// Each server implements the [AppFlowyServer] trait, which provides the [UserCloudService], etc.
5056pub struct ServerProvider {
5157 config : AppFlowyCoreConfig ,
52- server : RwLock < Server > ,
5358 providers : RwLock < HashMap < Server , Arc < dyn AppFlowyServer > > > ,
5459 pub ( crate ) encryption : RwLock < Arc < dyn AppFlowyEncryption > > ,
5560 #[ allow( dead_code) ]
5661 pub ( crate ) store_preferences : Weak < StorePreferences > ,
5762 pub ( crate ) user_enable_sync : RwLock < bool > ,
5863
5964 /// The authenticator type of the user.
60- pub ( crate ) user_authenticator : RwLock < Authenticator > ,
65+ authenticator : RwLock < Authenticator > ,
6166 pub ( crate ) uid : Arc < RwLock < Option < i64 > > > ,
6267}
6368
@@ -70,41 +75,42 @@ impl ServerProvider {
7075 let encryption = EncryptionImpl :: new ( None ) ;
7176 Self {
7277 config,
73- server : RwLock :: new ( server) ,
7478 providers : RwLock :: new ( HashMap :: new ( ) ) ,
7579 user_enable_sync : RwLock :: new ( true ) ,
76- user_authenticator : RwLock :: new ( Authenticator :: Local ) ,
80+ authenticator : RwLock :: new ( Authenticator :: from ( server ) ) ,
7781 encryption : RwLock :: new ( Arc :: new ( encryption) ) ,
7882 store_preferences,
7983 uid : Default :: default ( ) ,
8084 }
8185 }
8286
8387 pub fn get_server_type ( & self ) -> Server {
84- self . server . read ( ) . clone ( )
88+ match & * self . authenticator . read ( ) {
89+ Authenticator :: Local => Server :: Local ,
90+ Authenticator :: AppFlowyCloud => Server :: AppFlowyCloud ,
91+ Authenticator :: Supabase => Server :: Supabase ,
92+ }
8593 }
8694
87- pub fn set_server_type ( & self , server_type : Server ) {
88- let old_server_type = self . server . read ( ) . clone ( ) ;
89- if server_type != old_server_type {
95+ pub fn set_authenticator ( & self , authenticator : Authenticator ) {
96+ let old_server_type = self . get_server_type ( ) ;
97+ * self . authenticator . write ( ) = authenticator;
98+ let new_server_type = self . get_server_type ( ) ;
99+
100+ if old_server_type != new_server_type {
90101 self . providers . write ( ) . remove ( & old_server_type) ;
91102 }
92-
93- * self . server . write ( ) = server_type;
94- }
95-
96- pub fn get_user_authenticator ( & self ) -> Authenticator {
97- self . user_authenticator . read ( ) . clone ( )
98103 }
99104
100- pub fn get_appflowy_cloud_server ( & self ) -> FlowyResult < Arc < dyn AppFlowyServer > > {
101- let server = self . get_server ( & Server :: AppFlowyCloud ) ?;
102- Ok ( server)
105+ pub fn get_authenticator ( & self ) -> Authenticator {
106+ self . authenticator . read ( ) . clone ( )
103107 }
104108
105109 /// Returns a [AppFlowyServer] trait implementation base on the provider_type.
106- pub fn get_server ( & self , server_type : & Server ) -> FlowyResult < Arc < dyn AppFlowyServer > > {
107- if let Some ( provider) = self . providers . read ( ) . get ( server_type) {
110+ pub fn get_server ( & self ) -> FlowyResult < Arc < dyn AppFlowyServer > > {
111+ let server_type = self . get_server_type ( ) ;
112+
113+ if let Some ( provider) = self . providers . read ( ) . get ( & server_type) {
108114 return Ok ( provider. clone ( ) ) ;
109115 }
110116
0 commit comments