@@ -33,6 +33,12 @@ pub enum Server {
33
33
Supabase = 2 ,
34
34
}
35
35
36
+ impl Server {
37
+ pub fn is_local ( & self ) -> bool {
38
+ matches ! ( self , Server :: Local )
39
+ }
40
+ }
41
+
36
42
impl Display for Server {
37
43
fn fmt ( & self , f : & mut Formatter < ' _ > ) -> std:: fmt:: Result {
38
44
match self {
@@ -49,15 +55,14 @@ impl Display for Server {
49
55
/// Each server implements the [AppFlowyServer] trait, which provides the [UserCloudService], etc.
50
56
pub struct ServerProvider {
51
57
config : AppFlowyCoreConfig ,
52
- server : RwLock < Server > ,
53
58
providers : RwLock < HashMap < Server , Arc < dyn AppFlowyServer > > > ,
54
59
pub ( crate ) encryption : RwLock < Arc < dyn AppFlowyEncryption > > ,
55
60
#[ allow( dead_code) ]
56
61
pub ( crate ) store_preferences : Weak < StorePreferences > ,
57
62
pub ( crate ) user_enable_sync : RwLock < bool > ,
58
63
59
64
/// The authenticator type of the user.
60
- pub ( crate ) user_authenticator : RwLock < Authenticator > ,
65
+ authenticator : RwLock < Authenticator > ,
61
66
pub ( crate ) uid : Arc < RwLock < Option < i64 > > > ,
62
67
}
63
68
@@ -70,41 +75,42 @@ impl ServerProvider {
70
75
let encryption = EncryptionImpl :: new ( None ) ;
71
76
Self {
72
77
config,
73
- server : RwLock :: new ( server) ,
74
78
providers : RwLock :: new ( HashMap :: new ( ) ) ,
75
79
user_enable_sync : RwLock :: new ( true ) ,
76
- user_authenticator : RwLock :: new ( Authenticator :: Local ) ,
80
+ authenticator : RwLock :: new ( Authenticator :: from ( server ) ) ,
77
81
encryption : RwLock :: new ( Arc :: new ( encryption) ) ,
78
82
store_preferences,
79
83
uid : Default :: default ( ) ,
80
84
}
81
85
}
82
86
83
87
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
+ }
85
93
}
86
94
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 {
90
101
self . providers . write ( ) . remove ( & old_server_type) ;
91
102
}
92
-
93
- * self . server . write ( ) = server_type;
94
- }
95
-
96
- pub fn get_user_authenticator ( & self ) -> Authenticator {
97
- self . user_authenticator . read ( ) . clone ( )
98
103
}
99
104
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 ( )
103
107
}
104
108
105
109
/// 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) {
108
114
return Ok ( provider. clone ( ) ) ;
109
115
}
110
116
0 commit comments