#[macro_use]
extern crate tracing;
pub mod blocking;
pub mod io;
pub mod macros;
pub mod model;
pub mod service;
pub mod subscribers;
#[derive(Clone)]
pub struct Lb {
pub config: Config,
pub user_last_seen: Arc<RwLock<Instant>>,
pub keychain: Keychain,
pub db: LbDb,
pub docs: AsyncDocs,
pub client: Network,
pub events: EventSubs,
pub status: StatusUpdater,
pub syncer: Syncer,
#[cfg(not(target_family = "wasm"))]
pub search: SearchIndex,
}
impl Lb {
#[cfg(target_family = "wasm")]
pub fn init_dummy(config: Config) -> LbResult<Self> {
let db = CoreDb::init(db_rs::Config {
path: Default::default(),
create_path: false,
create_db: false,
read_only: false,
no_io: true,
fs_locks: false,
fs_locks_block: false,
schema_name: Default::default(),
})
.map_err(|err| LbErrKind::Unexpected(format!("db rs creation failed: {:#?}", err)))?;
let user_last_seen = Arc::new(RwLock::new(Instant::now()));
Ok(Self {
user_last_seen,
config: config.clone(),
keychain: Default::default(),
db: Arc::new(RwLock::new(db)),
docs: AsyncDocs::from(&config),
client: Default::default(),
syncer: Default::default(),
events: Default::default(),
status: Default::default(),
})
}
}
impl Lb {
#[instrument(level = "info", skip_all, err(Debug))]
pub async fn init(config: Config) -> LbResult<Self> {
logging::init(&config)?;
let docs = AsyncDocs::from(&config);
let db_cfg = db_rs::Config::in_folder(&config.writeable_path);
let db = CoreDb::init(db_cfg).map_err(|err| LbErrKind::Unexpected(format!("{err:#?}")))?;
let keychain = Keychain::from(db.account.get());
let db = Arc::new(RwLock::new(db));
let client = Network::default();
#[cfg(not(target_family = "wasm"))]
let search = SearchIndex::default();
let status = StatusUpdater::default();
let syncer = Default::default();
let events = EventSubs::default();
let user_last_seen = Arc::new(RwLock::new(Instant::now()));
let result = Self {
config,
keychain,
db,
docs,
client,
syncer,
events,
status,
user_last_seen,
#[cfg(not(target_family = "wasm"))]
search,
};
#[cfg(not(target_family = "wasm"))]
{
result.setup_syncer();
result.setup_search();
result.setup_status().await?;
}
Ok(result)
}
}
pub fn get_code_version() -> &'static str {
env!("CARGO_PKG_VERSION")
}
pub static DEFAULT_API_LOCATION: &str = "https://app.lockbook.net";
pub static CORE_CODE_VERSION: &str = env!("CARGO_PKG_VERSION");
use crate::io::CoreDb;
use crate::subscribers::syncer::Syncer;
use db_rs::Db;
#[cfg(not(target_family = "wasm"))]
use subscribers::search::SearchIndex;
use crate::service::logging;
use io::LbDb;
use io::docs::AsyncDocs;
use io::network::Network;
use model::core_config::Config;
pub use model::errors::{LbErrKind, LbResult};
use service::events::EventSubs;
use service::keychain::Keychain;
use std::sync::Arc;
use subscribers::status::StatusUpdater;
use tokio::sync::RwLock;
pub use uuid::Uuid;
use web_time::Instant;