mirror of
https://github.com/atuinsh/atuin.git
synced 2025-08-16 10:08:08 +02:00
sync looks like it's working
This commit is contained in:
@ -242,20 +242,11 @@ impl<'a> Client<'a> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let url = format!(
|
let url = format!(
|
||||||
"{}/record/next?host={}&tag={}&count={}",
|
"{}/record/next?host={}&tag={}&count={}&start={}",
|
||||||
self.sync_addr, host.0, tag, count
|
self.sync_addr, host.0, tag, count, start
|
||||||
);
|
);
|
||||||
let mut url = Url::parse(url.as_str())?;
|
|
||||||
|
|
||||||
if let Some(start) = start {
|
let url = Url::parse(url.as_str())?;
|
||||||
url.set_query(Some(
|
|
||||||
format!(
|
|
||||||
"host={}&tag={}&count={}&start={}",
|
|
||||||
host.0, tag, count, start.0
|
|
||||||
)
|
|
||||||
.as_str(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
let resp = self.client.get(url).send().await?;
|
let resp = self.client.get(url).send().await?;
|
||||||
|
|
||||||
|
@ -154,7 +154,8 @@ async fn sync_upload(
|
|||||||
local: RecordIdx,
|
local: RecordIdx,
|
||||||
remote: Option<RecordIdx>,
|
remote: Option<RecordIdx>,
|
||||||
) -> Result<i64, SyncError> {
|
) -> Result<i64, SyncError> {
|
||||||
let expected = local - remote.unwrap_or(0);
|
let remote = remote.unwrap_or(0);
|
||||||
|
let expected = local - remote;
|
||||||
let upload_page_size = 100;
|
let upload_page_size = 100;
|
||||||
let mut progress = 0;
|
let mut progress = 0;
|
||||||
|
|
||||||
@ -168,12 +169,7 @@ async fn sync_upload(
|
|||||||
// preload with the first entry if remote does not know of this store
|
// preload with the first entry if remote does not know of this store
|
||||||
while progress < expected {
|
while progress < expected {
|
||||||
let page = store
|
let page = store
|
||||||
.next(
|
.next(host, tag.as_str(), remote + progress, upload_page_size)
|
||||||
host,
|
|
||||||
tag.as_str(),
|
|
||||||
remote.unwrap_or(0) + progress,
|
|
||||||
upload_page_size,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.map_err(|_| SyncError::LocalStoreError)?;
|
.map_err(|_| SyncError::LocalStoreError)?;
|
||||||
|
|
||||||
@ -203,7 +199,7 @@ async fn sync_download(
|
|||||||
remote: RecordIdx,
|
remote: RecordIdx,
|
||||||
) -> Result<i64, SyncError> {
|
) -> Result<i64, SyncError> {
|
||||||
let local = local.unwrap_or(0);
|
let local = local.unwrap_or(0);
|
||||||
let expected = remote - local.unwrap_or(0);
|
let expected = remote - local;
|
||||||
let download_page_size = 100;
|
let download_page_size = 100;
|
||||||
let mut progress = 0;
|
let mut progress = 0;
|
||||||
|
|
||||||
@ -216,25 +212,27 @@ async fn sync_download(
|
|||||||
|
|
||||||
// preload with the first entry if remote does not know of this store
|
// preload with the first entry if remote does not know of this store
|
||||||
while progress < expected {
|
while progress < expected {
|
||||||
let page = client.next_records(host, tag, Some(local + progress), download_page_size);
|
let page = client
|
||||||
|
.next_records(host, tag.clone(), local + progress, download_page_size)
|
||||||
let _ = client
|
|
||||||
.post_records(&page)
|
|
||||||
.await
|
.await
|
||||||
.map_err(|_| SyncError::RemoteRequestError)?;
|
.map_err(|_| SyncError::RemoteRequestError)?;
|
||||||
|
|
||||||
|
store
|
||||||
|
.push_batch(page.iter())
|
||||||
|
.await
|
||||||
|
.map_err(|_| SyncError::LocalStoreError)?;
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"uploaded {} to remote, progress {}/{}",
|
"downloaded {} records from remote, progress {}/{}",
|
||||||
page.len(),
|
page.len(),
|
||||||
progress,
|
progress,
|
||||||
expected
|
expected
|
||||||
);
|
);
|
||||||
|
|
||||||
progress += page.len() as u64;
|
progress += page.len() as u64;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(progress as i64)
|
Ok(progress as i64)
|
||||||
|
|
||||||
Ok(0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn sync_remote(
|
pub async fn sync_remote(
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
-- Add migration script here
|
||||||
|
create unique index record_uniq ON store(user_id, host, tag, idx);
|
Reference in New Issue
Block a user