Skip to content

Commit 608a08e

Browse files
committed
refactor: md5 of revision
1 parent cd8e4dd commit 608a08e

File tree

34 files changed

+297
-232
lines changed

34 files changed

+297
-232
lines changed

frontend/rust-lib/flowy-document/src/editor/document.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ impl Document {
2828
}
2929
}
3030

31-
pub fn md5(&self) -> String {
32-
// format!("{:x}", md5::compute(bytes))
33-
"".to_owned()
31+
pub fn document_md5(&self) -> String {
32+
let bytes = self.tree.to_bytes();
33+
format!("{:x}", md5::compute(&bytes))
3434
}
3535

3636
pub fn get_tree(&self) -> &NodeTree {

frontend/rust-lib/flowy-document/src/editor/queue.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ impl DocumentQueue {
6363
Command::ComposeTransaction { transaction, ret } => {
6464
self.document.write().await.apply_transaction(transaction.clone())?;
6565
let _ = self
66-
.save_local_operations(transaction, self.document.read().await.md5())
66+
.save_local_operations(transaction, self.document.read().await.document_md5())
6767
.await?;
6868
let _ = ret.send(Ok(()));
6969
}

frontend/rust-lib/flowy-document/src/manager.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,8 @@ use flowy_revision::{
1212
RevisionCloudService, RevisionManager, RevisionPersistence, RevisionWebSocket, SQLiteRevisionSnapshotPersistence,
1313
};
1414
use flowy_sync::client_document::initial_delta_document_content;
15-
use flowy_sync::entities::{
16-
document::DocumentIdPB,
17-
revision::{md5, RepeatedRevision, Revision},
18-
ws_data::ServerRevisionWSData,
19-
};
15+
use flowy_sync::entities::{document::DocumentIdPB, revision::Revision, ws_data::ServerRevisionWSData};
16+
use flowy_sync::util::md5;
2017
use lib_infra::future::FutureResult;
2118
use lib_ws::WSConnectState;
2219
use std::any::Any;
@@ -139,7 +136,7 @@ impl DocumentManager {
139136
Ok(())
140137
}
141138

142-
pub async fn create_document<T: AsRef<str>>(&self, doc_id: T, revisions: RepeatedRevision) -> FlowyResult<()> {
139+
pub async fn create_document<T: AsRef<str>>(&self, doc_id: T, revisions: Vec<Revision>) -> FlowyResult<()> {
143140
let doc_id = doc_id.as_ref().to_owned();
144141
let db_pool = self.persistence.database.db_pool()?;
145142
// Maybe we could save the document to disk without creating the RevisionManager

frontend/rust-lib/flowy-document/src/old_editor/queue.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::DocumentUser;
33
use async_stream::stream;
44
use flowy_database::ConnectionPool;
55
use flowy_error::FlowyError;
6-
use flowy_revision::{OperationsMD5, RevisionManager, TransformOperations};
6+
use flowy_revision::{RevisionMD5, RevisionManager, TransformOperations};
77
use flowy_sync::{
88
client_document::{history::UndoResult, ClientDocument},
99
entities::revision::{RevId, Revision},
@@ -70,24 +70,24 @@ impl EditDocumentQueue {
7070
EditorCommand::ComposeLocalOperations { operations, ret } => {
7171
let mut document = self.document.write().await;
7272
let _ = document.compose_operations(operations.clone())?;
73-
let md5 = document.md5();
73+
let md5 = document.document_md5();
7474
drop(document);
7575
let _ = self.save_local_operations(operations, md5).await?;
7676
let _ = ret.send(Ok(()));
7777
}
7878
EditorCommand::ComposeRemoteOperation { client_operations, ret } => {
7979
let mut document = self.document.write().await;
8080
let _ = document.compose_operations(client_operations.clone())?;
81-
let md5 = document.md5();
81+
let md5 = document.document_md5();
8282
drop(document);
83-
let _ = ret.send(Ok(md5));
83+
let _ = ret.send(Ok(md5.into()));
8484
}
8585
EditorCommand::ResetOperations { operations, ret } => {
8686
let mut document = self.document.write().await;
8787
let _ = document.set_operations(operations);
88-
let md5 = document.md5();
88+
let md5 = document.document_md5();
8989
drop(document);
90-
let _ = ret.send(Ok(md5));
90+
let _ = ret.send(Ok(md5.into()));
9191
}
9292
EditorCommand::TransformOperations { operations, ret } => {
9393
let f = || async {
@@ -114,14 +114,14 @@ impl EditDocumentQueue {
114114
EditorCommand::Insert { index, data, ret } => {
115115
let mut write_guard = self.document.write().await;
116116
let operations = write_guard.insert(index, data)?;
117-
let md5 = write_guard.md5();
117+
let md5 = write_guard.document_md5();
118118
let _ = self.save_local_operations(operations, md5).await?;
119119
let _ = ret.send(Ok(()));
120120
}
121121
EditorCommand::Delete { interval, ret } => {
122122
let mut write_guard = self.document.write().await;
123123
let operations = write_guard.delete(interval)?;
124-
let md5 = write_guard.md5();
124+
let md5 = write_guard.document_md5();
125125
let _ = self.save_local_operations(operations, md5).await?;
126126
let _ = ret.send(Ok(()));
127127
}
@@ -132,14 +132,14 @@ impl EditDocumentQueue {
132132
} => {
133133
let mut write_guard = self.document.write().await;
134134
let operations = write_guard.format(interval, attribute)?;
135-
let md5 = write_guard.md5();
135+
let md5 = write_guard.document_md5();
136136
let _ = self.save_local_operations(operations, md5).await?;
137137
let _ = ret.send(Ok(()));
138138
}
139139
EditorCommand::Replace { interval, data, ret } => {
140140
let mut write_guard = self.document.write().await;
141141
let operations = write_guard.replace(interval, data)?;
142-
let md5 = write_guard.md5();
142+
let md5 = write_guard.document_md5();
143143
let _ = self.save_local_operations(operations, md5).await?;
144144
let _ = ret.send(Ok(()));
145145
}
@@ -152,14 +152,14 @@ impl EditDocumentQueue {
152152
EditorCommand::Undo { ret } => {
153153
let mut write_guard = self.document.write().await;
154154
let UndoResult { operations } = write_guard.undo()?;
155-
let md5 = write_guard.md5();
155+
let md5 = write_guard.document_md5();
156156
let _ = self.save_local_operations(operations, md5).await?;
157157
let _ = ret.send(Ok(()));
158158
}
159159
EditorCommand::Redo { ret } => {
160160
let mut write_guard = self.document.write().await;
161161
let UndoResult { operations } = write_guard.redo()?;
162-
let md5 = write_guard.md5();
162+
let md5 = write_guard.document_md5();
163163
let _ = self.save_local_operations(operations, md5).await?;
164164
let _ = ret.send(Ok(()));
165165
}
@@ -197,11 +197,11 @@ pub(crate) enum EditorCommand {
197197
},
198198
ComposeRemoteOperation {
199199
client_operations: DeltaTextOperations,
200-
ret: Ret<OperationsMD5>,
200+
ret: Ret<RevisionMD5>,
201201
},
202202
ResetOperations {
203203
operations: DeltaTextOperations,
204-
ret: Ret<OperationsMD5>,
204+
ret: Ret<RevisionMD5>,
205205
},
206206
TransformOperations {
207207
operations: DeltaTextOperations,

frontend/rust-lib/flowy-document/src/old_editor/web_socket.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ impl ConflictResolver<DeltaDocumentResolveOperations> for DocumentConflictResolv
136136
fn compose_operations(
137137
&self,
138138
operations: DeltaDocumentResolveOperations,
139-
) -> BoxResultFuture<OperationsMD5, FlowyError> {
139+
) -> BoxResultFuture<RevisionMD5, FlowyError> {
140140
let tx = self.edit_cmd_tx.clone();
141141
let operations = operations.into_inner();
142142
Box::pin(async move {
@@ -172,10 +172,7 @@ impl ConflictResolver<DeltaDocumentResolveOperations> for DocumentConflictResolv
172172
})
173173
}
174174

175-
fn reset_operations(
176-
&self,
177-
operations: DeltaDocumentResolveOperations,
178-
) -> BoxResultFuture<OperationsMD5, FlowyError> {
175+
fn reset_operations(&self, operations: DeltaDocumentResolveOperations) -> BoxResultFuture<RevisionMD5, FlowyError> {
179176
let tx = self.edit_cmd_tx.clone();
180177
let operations = operations.into_inner();
181178
Box::pin(async move {

frontend/rust-lib/flowy-document/src/services/migration.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ use crate::DocumentDatabase;
44
use bytes::Bytes;
55
use flowy_database::kv::KV;
66
use flowy_error::FlowyResult;
7-
use flowy_revision::disk::{RevisionDiskCache, RevisionRecord};
8-
use flowy_sync::entities::revision::{md5, Revision};
9-
use flowy_sync::util::make_operations_from_revisions;
7+
use flowy_revision::disk::{RevisionDiskCache, SyncRecord};
8+
use flowy_sync::entities::revision::Revision;
9+
use flowy_sync::util::{make_operations_from_revisions, md5};
1010
use std::sync::Arc;
1111

1212
const V1_MIGRATION: &str = "DOCUMENT_V1_MIGRATION";
@@ -44,7 +44,7 @@ impl DocumentMigration {
4444
let bytes = Bytes::from(transaction.to_bytes()?);
4545
let md5 = format!("{:x}", md5::compute(&bytes));
4646
let revision = Revision::new(&document_id, 0, 1, bytes, &self.user_id, md5);
47-
let record = RevisionRecord::new(revision);
47+
let record = SyncRecord::new(revision);
4848
match disk_cache.create_revision_records(vec![record]) {
4949
Ok(_) => {}
5050
Err(err) => {

frontend/rust-lib/flowy-document/src/services/persistence/rev_sqlite/document_rev_sqlite_v0.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use flowy_database::{
77
ConnectionPool,
88
};
99
use flowy_error::{internal_error, FlowyError, FlowyResult};
10-
use flowy_revision::disk::{RevisionChangeset, RevisionDiskCache, RevisionRecord, RevisionState};
10+
use flowy_revision::disk::{RevisionChangeset, RevisionDiskCache, RevisionState, SyncRecord};
1111
use flowy_sync::{
1212
entities::revision::{RevType, Revision, RevisionRange},
1313
util::md5,
@@ -23,7 +23,7 @@ pub struct SQLiteDeltaDocumentRevisionPersistence {
2323
impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDeltaDocumentRevisionPersistence {
2424
type Error = FlowyError;
2525

26-
fn create_revision_records(&self, revision_records: Vec<RevisionRecord>) -> Result<(), Self::Error> {
26+
fn create_revision_records(&self, revision_records: Vec<SyncRecord>) -> Result<(), Self::Error> {
2727
let conn = self.pool.get().map_err(internal_error)?;
2828
let _ = DeltaRevisionSql::create(revision_records, &*conn)?;
2929
Ok(())
@@ -37,7 +37,7 @@ impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDeltaDocumentRevisionPersi
3737
&self,
3838
object_id: &str,
3939
rev_ids: Option<Vec<i64>>,
40-
) -> Result<Vec<RevisionRecord>, Self::Error> {
40+
) -> Result<Vec<SyncRecord>, Self::Error> {
4141
let conn = self.pool.get().map_err(internal_error)?;
4242
let records = DeltaRevisionSql::read(&self.user_id, object_id, rev_ids, &*conn)?;
4343
Ok(records)
@@ -47,7 +47,7 @@ impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDeltaDocumentRevisionPersi
4747
&self,
4848
object_id: &str,
4949
range: &RevisionRange,
50-
) -> Result<Vec<RevisionRecord>, Self::Error> {
50+
) -> Result<Vec<SyncRecord>, Self::Error> {
5151
let conn = &*self.pool.get().map_err(internal_error)?;
5252
let revisions = DeltaRevisionSql::read_with_range(&self.user_id, object_id, range.clone(), conn)?;
5353
Ok(revisions)
@@ -74,7 +74,7 @@ impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDeltaDocumentRevisionPersi
7474
&self,
7575
object_id: &str,
7676
deleted_rev_ids: Option<Vec<i64>>,
77-
inserted_records: Vec<RevisionRecord>,
77+
inserted_records: Vec<SyncRecord>,
7878
) -> Result<(), Self::Error> {
7979
let conn = self.pool.get().map_err(internal_error)?;
8080
conn.immediate_transaction::<_, FlowyError, _>(|| {
@@ -97,7 +97,7 @@ impl SQLiteDeltaDocumentRevisionPersistence {
9797
pub struct DeltaRevisionSql {}
9898

9999
impl DeltaRevisionSql {
100-
fn create(revision_records: Vec<RevisionRecord>, conn: &SqliteConnection) -> Result<(), FlowyError> {
100+
fn create(revision_records: Vec<SyncRecord>, conn: &SqliteConnection) -> Result<(), FlowyError> {
101101
// Batch insert: https://diesel.rs/guides/all-about-inserts.html
102102

103103
let records = revision_records
@@ -143,7 +143,7 @@ impl DeltaRevisionSql {
143143
object_id: &str,
144144
rev_ids: Option<Vec<i64>>,
145145
conn: &SqliteConnection,
146-
) -> Result<Vec<RevisionRecord>, FlowyError> {
146+
) -> Result<Vec<SyncRecord>, FlowyError> {
147147
let mut sql = dsl::rev_table.filter(dsl::doc_id.eq(object_id)).into_boxed();
148148
if let Some(rev_ids) = rev_ids {
149149
sql = sql.filter(dsl::rev_id.eq_any(rev_ids));
@@ -162,7 +162,7 @@ impl DeltaRevisionSql {
162162
object_id: &str,
163163
range: RevisionRange,
164164
conn: &SqliteConnection,
165-
) -> Result<Vec<RevisionRecord>, FlowyError> {
165+
) -> Result<Vec<SyncRecord>, FlowyError> {
166166
let rev_tables = dsl::rev_table
167167
.filter(dsl::rev_id.ge(range.start))
168168
.filter(dsl::rev_id.le(range.end))
@@ -244,7 +244,7 @@ impl std::default::Default for TextRevisionState {
244244
}
245245
}
246246

247-
fn mk_revision_record_from_table(user_id: &str, table: RevisionTable) -> RevisionRecord {
247+
fn mk_revision_record_from_table(user_id: &str, table: RevisionTable) -> SyncRecord {
248248
let md5 = md5(&table.data);
249249
let revision = Revision::new(
250250
&table.doc_id,
@@ -254,7 +254,7 @@ fn mk_revision_record_from_table(user_id: &str, table: RevisionTable) -> Revisio
254254
user_id,
255255
md5,
256256
);
257-
RevisionRecord {
257+
SyncRecord {
258258
revision,
259259
state: table.state.into(),
260260
write_to_disk: false,

frontend/rust-lib/flowy-document/src/services/persistence/rev_sqlite/document_rev_sqlite_v1.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use flowy_database::{
77
ConnectionPool,
88
};
99
use flowy_error::{internal_error, FlowyError, FlowyResult};
10-
use flowy_revision::disk::{RevisionChangeset, RevisionDiskCache, RevisionRecord, RevisionState};
10+
use flowy_revision::disk::{RevisionChangeset, RevisionDiskCache, RevisionState, SyncRecord};
1111
use flowy_sync::{
1212
entities::revision::{Revision, RevisionRange},
1313
util::md5,
@@ -22,7 +22,7 @@ pub struct SQLiteDocumentRevisionPersistence {
2222
impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDocumentRevisionPersistence {
2323
type Error = FlowyError;
2424

25-
fn create_revision_records(&self, revision_records: Vec<RevisionRecord>) -> Result<(), Self::Error> {
25+
fn create_revision_records(&self, revision_records: Vec<SyncRecord>) -> Result<(), Self::Error> {
2626
let conn = self.pool.get().map_err(internal_error)?;
2727
let _ = DocumentRevisionSql::create(revision_records, &*conn)?;
2828
Ok(())
@@ -36,7 +36,7 @@ impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDocumentRevisionPersistenc
3636
&self,
3737
object_id: &str,
3838
rev_ids: Option<Vec<i64>>,
39-
) -> Result<Vec<RevisionRecord>, Self::Error> {
39+
) -> Result<Vec<SyncRecord>, Self::Error> {
4040
let conn = self.pool.get().map_err(internal_error)?;
4141
let records = DocumentRevisionSql::read(&self.user_id, object_id, rev_ids, &*conn)?;
4242
Ok(records)
@@ -46,7 +46,7 @@ impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDocumentRevisionPersistenc
4646
&self,
4747
object_id: &str,
4848
range: &RevisionRange,
49-
) -> Result<Vec<RevisionRecord>, Self::Error> {
49+
) -> Result<Vec<SyncRecord>, Self::Error> {
5050
let conn = &*self.pool.get().map_err(internal_error)?;
5151
let revisions = DocumentRevisionSql::read_with_range(&self.user_id, object_id, range.clone(), conn)?;
5252
Ok(revisions)
@@ -73,7 +73,7 @@ impl RevisionDiskCache<Arc<ConnectionPool>> for SQLiteDocumentRevisionPersistenc
7373
&self,
7474
object_id: &str,
7575
deleted_rev_ids: Option<Vec<i64>>,
76-
inserted_records: Vec<RevisionRecord>,
76+
inserted_records: Vec<SyncRecord>,
7777
) -> Result<(), Self::Error> {
7878
let conn = self.pool.get().map_err(internal_error)?;
7979
conn.immediate_transaction::<_, FlowyError, _>(|| {
@@ -96,7 +96,7 @@ impl SQLiteDocumentRevisionPersistence {
9696
struct DocumentRevisionSql {}
9797

9898
impl DocumentRevisionSql {
99-
fn create(revision_records: Vec<RevisionRecord>, conn: &SqliteConnection) -> Result<(), FlowyError> {
99+
fn create(revision_records: Vec<SyncRecord>, conn: &SqliteConnection) -> Result<(), FlowyError> {
100100
// Batch insert: https://diesel.rs/guides/all-about-inserts.html
101101
let records = revision_records
102102
.into_iter()
@@ -142,7 +142,7 @@ impl DocumentRevisionSql {
142142
object_id: &str,
143143
rev_ids: Option<Vec<i64>>,
144144
conn: &SqliteConnection,
145-
) -> Result<Vec<RevisionRecord>, FlowyError> {
145+
) -> Result<Vec<SyncRecord>, FlowyError> {
146146
let mut sql = dsl::document_rev_table
147147
.filter(dsl::document_id.eq(object_id))
148148
.into_boxed();
@@ -163,7 +163,7 @@ impl DocumentRevisionSql {
163163
object_id: &str,
164164
range: RevisionRange,
165165
conn: &SqliteConnection,
166-
) -> Result<Vec<RevisionRecord>, FlowyError> {
166+
) -> Result<Vec<SyncRecord>, FlowyError> {
167167
let rev_tables = dsl::document_rev_table
168168
.filter(dsl::rev_id.ge(range.start))
169169
.filter(dsl::rev_id.le(range.end))
@@ -220,7 +220,7 @@ impl std::default::Default for DocumentRevisionState {
220220
}
221221
}
222222

223-
fn mk_revision_record_from_table(user_id: &str, table: DocumentRevisionTable) -> RevisionRecord {
223+
fn mk_revision_record_from_table(user_id: &str, table: DocumentRevisionTable) -> SyncRecord {
224224
let md5 = md5(&table.data);
225225
let revision = Revision::new(
226226
&table.document_id,
@@ -230,7 +230,7 @@ fn mk_revision_record_from_table(user_id: &str, table: DocumentRevisionTable) ->
230230
user_id,
231231
md5,
232232
);
233-
RevisionRecord {
233+
SyncRecord {
234234
revision,
235235
state: table.state.into(),
236236
write_to_disk: false,

frontend/rust-lib/flowy-folder/src/services/persistence/migration.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ use flowy_error::{FlowyError, FlowyResult};
99
use flowy_folder_data_model::revision::{AppRevision, FolderRevision, ViewRevision, WorkspaceRevision};
1010
use flowy_revision::reset::{RevisionResettable, RevisionStructReset};
1111
use flowy_sync::client_folder::make_folder_rev_json_str;
12+
use flowy_sync::client_folder::FolderPad;
1213
use flowy_sync::entities::revision::Revision;
1314
use flowy_sync::server_folder::FolderOperationsBuilder;
14-
use flowy_sync::{client_folder::FolderPad, entities::revision::md5};
1515

1616
use crate::services::persistence::rev_sqlite::SQLiteFolderRevisionPersistence;
17+
use flowy_sync::util::md5;
1718
use std::sync::Arc;
1819

1920
const V1_MIGRATION: &str = "FOLDER_V1_MIGRATION";

0 commit comments

Comments
 (0)