mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
move media folder/db paths into collection
this breaks background media syncing for now
This commit is contained in:
parent
649b40371b
commit
94e4c40ebf
3 changed files with 43 additions and 41 deletions
|
@ -23,7 +23,6 @@ use crate::{backend_proto as pb, log};
|
|||
use fluent::FluentValue;
|
||||
use prost::Message;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use tokio::runtime::Runtime;
|
||||
|
||||
|
@ -33,8 +32,6 @@ pub type ProtoProgressCallback = Box<dyn Fn(Vec<u8>) -> bool + Send>;
|
|||
|
||||
pub struct Backend {
|
||||
col: Arc<Mutex<Option<Collection>>>,
|
||||
media_folder: PathBuf,
|
||||
media_db: String,
|
||||
progress_callback: Option<ProtoProgressCallback>,
|
||||
i18n: I18n,
|
||||
log: Logger,
|
||||
|
@ -125,37 +122,25 @@ pub fn init_backend(init_msg: &[u8]) -> std::result::Result<Backend, String> {
|
|||
);
|
||||
|
||||
let col = open_collection(
|
||||
&input.collection_path,
|
||||
input.collection_path,
|
||||
input.media_folder_path,
|
||||
input.media_db_path,
|
||||
input.server,
|
||||
i18n.clone(),
|
||||
logger.clone(),
|
||||
)
|
||||
.map_err(|e| format!("Unable to open collection: {:?}", e))?;
|
||||
|
||||
match Backend::new(
|
||||
col,
|
||||
&input.media_folder_path,
|
||||
&input.media_db_path,
|
||||
i18n,
|
||||
logger,
|
||||
) {
|
||||
match Backend::new(col, i18n, logger) {
|
||||
Ok(backend) => Ok(backend),
|
||||
Err(e) => Err(format!("{:?}", e)),
|
||||
}
|
||||
}
|
||||
|
||||
impl Backend {
|
||||
pub fn new(
|
||||
col: Collection,
|
||||
media_folder: &str,
|
||||
media_db: &str,
|
||||
i18n: I18n,
|
||||
log: Logger,
|
||||
) -> Result<Backend> {
|
||||
pub fn new(col: Collection, i18n: I18n, log: Logger) -> Result<Backend> {
|
||||
Ok(Backend {
|
||||
col: Arc::new(Mutex::new(Some(col))),
|
||||
media_folder: media_folder.into(),
|
||||
media_db: media_db.into(),
|
||||
progress_callback: None,
|
||||
i18n,
|
||||
log,
|
||||
|
@ -422,31 +407,35 @@ impl Backend {
|
|||
}
|
||||
|
||||
fn add_media_file(&mut self, input: pb::AddMediaFileIn) -> Result<String> {
|
||||
let mgr = MediaManager::new(&self.media_folder, &self.media_db)?;
|
||||
let mut ctx = mgr.dbctx();
|
||||
Ok(mgr
|
||||
.add_file(&mut ctx, &input.desired_name, &input.data)?
|
||||
.into())
|
||||
self.with_col(|col| {
|
||||
let mgr = MediaManager::new(&col.media_folder, &col.media_db)?;
|
||||
let mut ctx = mgr.dbctx();
|
||||
Ok(mgr
|
||||
.add_file(&mut ctx, &input.desired_name, &input.data)?
|
||||
.into())
|
||||
})
|
||||
}
|
||||
|
||||
fn sync_media(&self, input: SyncMediaIn) -> Result<()> {
|
||||
let mgr = MediaManager::new(&self.media_folder, &self.media_db)?;
|
||||
// fixme: will block other db access
|
||||
|
||||
fn sync_media(&self, input: SyncMediaIn) -> Result<()> {
|
||||
let callback = |progress: &MediaSyncProgress| {
|
||||
self.fire_progress_callback(Progress::MediaSync(progress))
|
||||
};
|
||||
|
||||
let mut rt = Runtime::new().unwrap();
|
||||
rt.block_on(mgr.sync_media(callback, &input.endpoint, &input.hkey, self.log.clone()))
|
||||
self.with_col(|col| {
|
||||
let mgr = MediaManager::new(&col.media_folder, &col.media_db)?;
|
||||
let mut rt = Runtime::new().unwrap();
|
||||
rt.block_on(mgr.sync_media(callback, &input.endpoint, &input.hkey, self.log.clone()))
|
||||
})
|
||||
}
|
||||
|
||||
fn check_media(&self) -> Result<pb::MediaCheckOut> {
|
||||
let callback =
|
||||
|progress: usize| self.fire_progress_callback(Progress::MediaCheck(progress as u32));
|
||||
|
||||
let mgr = MediaManager::new(&self.media_folder, &self.media_db)?;
|
||||
|
||||
self.with_col(|col| {
|
||||
let mgr = MediaManager::new(&col.media_folder, &col.media_db)?;
|
||||
col.transact(None, |ctx| {
|
||||
let mut checker = MediaChecker::new(ctx, &mgr, callback);
|
||||
let mut output = checker.check()?;
|
||||
|
@ -464,9 +453,11 @@ impl Backend {
|
|||
}
|
||||
|
||||
fn remove_media_files(&self, fnames: &[String]) -> Result<()> {
|
||||
let mgr = MediaManager::new(&self.media_folder, &self.media_db)?;
|
||||
let mut ctx = mgr.dbctx();
|
||||
mgr.remove_files(&mut ctx, fnames)
|
||||
self.with_col(|col| {
|
||||
let mgr = MediaManager::new(&col.media_folder, &col.media_db)?;
|
||||
let mut ctx = mgr.dbctx();
|
||||
mgr.remove_files(&mut ctx, fnames)
|
||||
})
|
||||
}
|
||||
|
||||
fn translate_string(&self, input: pb::TranslateStringIn) -> String {
|
||||
|
@ -504,8 +495,8 @@ impl Backend {
|
|||
let callback =
|
||||
|progress: usize| self.fire_progress_callback(Progress::MediaCheck(progress as u32));
|
||||
|
||||
let mgr = MediaManager::new(&self.media_folder, &self.media_db)?;
|
||||
self.with_col(|col| {
|
||||
let mgr = MediaManager::new(&col.media_folder, &col.media_db)?;
|
||||
col.transact(None, |ctx| {
|
||||
let mut checker = MediaChecker::new(ctx, &mgr, callback);
|
||||
|
||||
|
@ -518,8 +509,9 @@ impl Backend {
|
|||
let callback =
|
||||
|progress: usize| self.fire_progress_callback(Progress::MediaCheck(progress as u32));
|
||||
|
||||
let mgr = MediaManager::new(&self.media_folder, &self.media_db)?;
|
||||
self.with_col(|col| {
|
||||
let mgr = MediaManager::new(&col.media_folder, &col.media_db)?;
|
||||
|
||||
col.transact(None, |ctx| {
|
||||
let mut checker = MediaChecker::new(ctx, &mgr, callback);
|
||||
|
||||
|
|
|
@ -5,18 +5,24 @@ use crate::err::Result;
|
|||
use crate::i18n::I18n;
|
||||
use crate::log::Logger;
|
||||
use crate::storage::{SqliteStorage, StorageContext};
|
||||
use std::path::Path;
|
||||
use std::path::PathBuf;
|
||||
|
||||
pub fn open_collection<P: AsRef<Path>>(
|
||||
pub fn open_collection<P: Into<PathBuf>>(
|
||||
path: P,
|
||||
media_folder: P,
|
||||
media_db: P,
|
||||
server: bool,
|
||||
i18n: I18n,
|
||||
log: Logger,
|
||||
) -> Result<Collection> {
|
||||
let storage = SqliteStorage::open_or_create(path.as_ref())?;
|
||||
let col_path = path.into();
|
||||
let storage = SqliteStorage::open_or_create(&col_path)?;
|
||||
|
||||
let col = Collection {
|
||||
storage,
|
||||
col_path,
|
||||
media_folder: media_folder.into(),
|
||||
media_db: media_db.into(),
|
||||
server,
|
||||
i18n,
|
||||
log,
|
||||
|
@ -27,6 +33,10 @@ pub fn open_collection<P: AsRef<Path>>(
|
|||
|
||||
pub struct Collection {
|
||||
pub(crate) storage: SqliteStorage,
|
||||
#[allow(dead_code)]
|
||||
pub(crate) col_path: PathBuf,
|
||||
pub(crate) media_folder: PathBuf,
|
||||
pub(crate) media_db: PathBuf,
|
||||
pub(crate) server: bool,
|
||||
pub(crate) i18n: I18n,
|
||||
pub(crate) log: Logger,
|
||||
|
|
|
@ -521,12 +521,12 @@ mod test {
|
|||
&include_bytes!("../../tests/support/mediacheck.anki2")[..],
|
||||
)?;
|
||||
|
||||
let mgr = MediaManager::new(&media_dir, media_db)?;
|
||||
let mgr = MediaManager::new(&media_dir, media_db.clone())?;
|
||||
|
||||
let log = log::terminal();
|
||||
let i18n = I18n::new(&["zz"], "dummy", log.clone());
|
||||
|
||||
let col = open_collection(col_path, false, i18n, log)?;
|
||||
let col = open_collection(col_path, media_dir, media_db, false, i18n, log)?;
|
||||
|
||||
Ok((dir, mgr, col))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue