pub struct Lb {
pub config: Config,
pub user_last_seen: Arc<RwLock<Instant>>,
pub user_wake: Arc<Notify>,
pub keychain: Keychain,
pub db: Arc<RwLock<CoreDb>>,
pub docs: AsyncDocs,
pub client: Network,
pub events: EventSubs,
pub status: StatusUpdater,
pub syncer: Syncer,
/* private fields */
}Fields§
§config: Config§user_last_seen: Arc<RwLock<Instant>>§user_wake: Arc<Notify>§keychain: Keychain§db: Arc<RwLock<CoreDb>>§docs: AsyncDocs§client: Network§events: EventSubs§status: StatusUpdater§syncer: SyncerImplementations§
Source§impl Lb
impl Lb
pub async fn ro_tx(&self) -> LbRO<'_>
Sourcepub async fn begin_tx(&self) -> LbTx<'_>
pub async fn begin_tx(&self) -> LbTx<'_>
note: you cannot call init for the same config, from the same tokio runtime, or you risk
deadlock. See the test contended_transactions_do_not_block_the_runtime for more info.
several workarounds exist for this situation that shouldn’t really be required:
Lb is cheap to clone within the same runtime
Different data directories are fine
If this situation actually becomes required:
a config could be added to turn off file locks which is what results in tokio deadlocks, but then what are you doing with multiple log writers writing to the same location?
we could incur a small perf penalty and put the begin_tx in a tokio::blocking wrapper. This is how tokio wants us to handle this, but I do not want the overhead.
Source§impl Lb
impl Lb
pub async fn path_searcher(&self) -> PathSearcher
Source§impl Lb
impl Lb
Sourcepub async fn create_account(
&self,
username: &str,
api_url: &str,
welcome_doc: bool,
) -> LbResult<Account>
pub async fn create_account( &self, username: &str, api_url: &str, welcome_doc: bool, ) -> LbResult<Account>
CoreError::AccountExists, CoreError::UsernameTaken, CoreError::UsernameInvalid, CoreError::ServerDisabled, CoreError::ServerUnreachable, CoreError::ClientUpdateRequired,
pub async fn import_account( &self, key: &str, api_url: Option<&str>, ) -> LbResult<Account>
pub async fn import_account_private_key_v1( &self, account: Account, ) -> LbResult<Account>
pub async fn import_account_private_key_v2( &self, private_key: SecretKey, api_url: &str, ) -> LbResult<Account>
pub async fn import_account_phrase( &self, phrase: [&str; 24], api_url: &str, ) -> LbResult<Account>
pub fn export_account_private_key(&self) -> LbResult<String>
pub fn export_account_phrase(&self) -> LbResult<String>
pub fn export_account_qr(&self) -> LbResult<Vec<u8>>
pub async fn delete_account(&self) -> LbResult<()>
Source§impl Lb
impl Lb
pub async fn suggested_docs( &self, settings: RankingWeights, ) -> LbResult<Vec<Uuid>>
pub async fn clear_suggested(&self) -> LbResult<()>
pub async fn clear_suggested_id(&self, id: Uuid) -> LbResult<()>
Sourcepub fn app_foregrounded(&self)
pub fn app_foregrounded(&self)
hint to background processing pipelines whether or not a user is around
Source§impl Lb
impl Lb
pub async fn disappear_account(&self, username: &str) -> LbResult<()>
pub async fn disappear_file(&self, id: Uuid) -> LbResult<()>
pub async fn list_users( &self, filter: Option<AccountFilter>, ) -> LbResult<Vec<Username>>
pub async fn get_account_info( &self, identifier: AccountIdentifier, ) -> LbResult<AccountInfo>
pub async fn validate_account( &self, username: &str, ) -> LbResult<AdminValidateAccount>
pub async fn validate_server(&self) -> LbResult<AdminValidateServer>
pub async fn file_info(&self, id: Uuid) -> LbResult<AdminFileInfoResponse>
pub async fn rebuild_index(&self, index: ServerIndex) -> LbResult<()>
pub async fn set_user_tier( &self, username: &str, info: AdminSetUserTierInfo, ) -> LbResult<()>
Source§impl Lb
impl Lb
pub async fn upgrade_account_stripe( &self, account_tier: StripeAccountTier, ) -> LbResult<()>
pub async fn upgrade_account_google_play( &self, purchase_token: &str, account_id: &str, ) -> LbResult<()>
pub async fn upgrade_account_app_store( &self, original_transaction_id: String, app_account_token: String, ) -> LbResult<()>
pub async fn cancel_subscription(&self) -> LbResult<()>
pub async fn get_subscription_info(&self) -> LbResult<Option<SubscriptionInfo>>
Source§impl Lb
impl Lb
Sourcepub async fn recent_panic(&self) -> LbResult<bool>
pub async fn recent_panic(&self) -> LbResult<bool>
returns true if we have crashed within the last 5 seconds
pub async fn write_panic_to_file( &self, error_header: String, bt: String, ) -> LbResult<String>
pub async fn debug_info( &self, os_info: String, check_docs: bool, ) -> LbResult<DebugInfo>
Source§impl Lb
impl Lb
pub async fn read_document( &self, id: Uuid, user_activity: bool, ) -> LbResult<DecryptedDocument>
pub async fn write_document(&self, id: Uuid, content: &[u8]) -> LbResult<()>
pub async fn read_document_with_hmac( &self, id: Uuid, user_activity: bool, ) -> LbResult<(Option<DocumentHmac>, DecryptedDocument)>
pub async fn safe_write( &self, id: Uuid, old_hmac: Option<DocumentHmac>, content: Vec<u8>, origin: Option<Uuid>, ) -> LbResult<DocumentHmac>
Source§impl Lb
impl Lb
pub async fn create_file( &self, name: &str, parent: &Uuid, file_type: FileType, ) -> LbResult<File>
pub async fn rename_file(&self, id: &Uuid, new_name: &str) -> LbResult<()>
pub async fn move_file(&self, id: &Uuid, new_parent: &Uuid) -> LbResult<()>
pub async fn duplicate_file(&self, id: &Uuid) -> LbResult<File>
pub async fn delete(&self, id: &Uuid) -> LbResult<()>
pub async fn root(&self) -> LbResult<File>
pub async fn list_metadatas(&self) -> LbResult<Vec<File>>
pub async fn get_children(&self, id: &Uuid) -> LbResult<Vec<File>>
pub async fn get_and_get_children_recursively( &self, id: &Uuid, ) -> LbResult<Vec<File>>
pub async fn get_file_by_id(&self, id: Uuid) -> LbResult<File>
pub async fn get_file_link_url(&self, id: Uuid) -> LbResult<String>
pub async fn local_changes(&self) -> Vec<Uuid>
Source§impl Lb
impl Lb
pub async fn import_files<F: Fn(ImportStatus)>( &self, sources: &[PathBuf], dest: Uuid, update_status: &F, ) -> LbResult<()>
pub async fn export_file<F: Fn(ExportFileInfo)>( &self, id: Uuid, dest: PathBuf, edit: bool, update_status: &Option<F>, ) -> LbResult<()>
pub async fn export_file_recursively<F: Fn(ExportFileInfo)>( &self, id: Uuid, disk_path: &Path, edit: bool, update_status: &Option<F>, ) -> LbResult<()>
Source§impl Lb
impl Lb
pub async fn create_link_at_path( &self, path: &str, target_id: Uuid, ) -> LbResult<File>
pub async fn create_at_path(&self, path: &str) -> LbResult<File>
pub async fn get_by_path(&self, path: &str) -> LbResult<File>
pub async fn get_path_by_id(&self, id: Uuid) -> LbResult<String>
pub async fn list_paths(&self, filter: Option<Filter>) -> LbResult<Vec<String>>
pub async fn list_paths_with_ids( &self, filter: Option<Filter>, ) -> LbResult<Vec<(Uuid, String)>>
Source§impl Lb
impl Lb
Sourcepub async fn get_sharing_contacts(&self) -> LbResult<Vec<SharingContact>>
pub async fn get_sharing_contacts(&self) -> LbResult<Vec<SharingContact>>
Ranked contacts for the signed-in account. This is a local, read-only query; callers should run it off their UI thread. Inheritance follows real metadata parents, never the local placement of a link.
returns pending shares – files shared with us that we haven’t accepted or rejected this function just returns the actual files that were shared – or the roots of shared trees. For the full set of shares see Self::get_pending_share_files
returns all the files associated with any pending shares (the share as well as it’s descendants).
pub async fn known_usernames(&self) -> LbResult<Vec<String>>
Sourcepub async fn username_exists(&self, username: &str) -> LbResult<bool>
pub async fn username_exists(&self, username: &str) -> LbResult<bool>
Whether username is a known Lockbook account (local cache, then server).
Server lookup uses GetPublicKeyRequest. Auth is only a signed envelope —
when signed out we probe with an ephemeral key so onboard can check
availability without an account. UserNotFound maps to false.
Source§impl Lb
impl Lb
Sourcepub async fn get_usage(&self) -> LbResult<UsageMetrics>
pub async fn get_usage(&self) -> LbResult<UsageMetrics>
fetches data footprint on server along with data cap information compares this to local changes to estimate net data increase
callers of this function should be prepared to handle:
Source§impl Lb
impl Lb
pub async fn status(&self) -> Status
pub async fn set_initial_state(&self) -> LbResult<()>
pub async fn setup_status(&self) -> LbResult<()>
pub async fn get_last_synced(&self) -> LbResult<i64>
pub async fn get_last_synced_human(&self) -> LbResult<String>
pub fn get_timestamp_human_string(&self, timestamp: i64) -> String
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Lb
impl !UnwindSafe for Lb
impl Freeze for Lb
impl Send for Lb
impl Sync for Lb
impl Unpin for Lb
impl UnsafeUnpin for Lb
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more