Skip to content

Implement persistent store for documents #75

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 44 commits into from
May 24, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
8364a43
doc: Remove tokio dep
jsparber May 5, 2025
3d06eef
chore: Bump p2panda dep to latest commit
jsparber May 5, 2025
d3b7d8a
node: Block document operation till node is running
jsparber Apr 1, 2025
784fe69
node: Move document_tx hashmap from DocumentStore to Network
jsparber Apr 6, 2025
f40589a
node: Improve how the DocumentStore stores documents
jsparber Apr 17, 2025
0ccf693
node: Add unsubscribe for documents
jsparber Apr 15, 2025
9646128
doc: Add glib boxed types for identity
jsparber Apr 17, 2025
a1145b5
app: Load and store identity
jsparber Apr 17, 2025
3995a21
node: Add chrono dep
jsparber May 6, 2025
ea36fb1
node: Add sqlx crate
jsparber May 6, 2025
38d2f5c
node: Enable sqlite feature for p2panda_store
jsparber May 6, 2025
fd7eb7d
node: Use persistent p2panda's OperationStore
jsparber May 6, 2025
5492561
node: Remove default features for p2panda store
jsparber May 6, 2025
68cde68
node: Add struct that merges multiple DB migrations
jsparber May 6, 2025
93503a6
node: Make node shutdown async
jsparber May 6, 2025
3a7ef4e
node: Serialize and deserialize documents for sqlx
jsparber May 6, 2025
f73ec2e
node: Implement sqlite DB for DocumentStore
jsparber May 6, 2025
2dc758d
doc: Add name property for document
jsparber May 7, 2025
ac34dba
doc: Add last-accessed property for a Document
jsparber May 7, 2025
5a27f16
doc: Add subscribed property to Document
jsparber May 7, 2025
b271ef4
doc: Subscribe to documents in tests
jsparber May 8, 2025
176cbef
app: Unsubscribe from document when window is closed or document changes
jsparber May 7, 2025
565767e
doc: Add document list holding all documents known
jsparber Apr 15, 2025
935d11d
doc: Enable persistent database by setting a data dir
jsparber Apr 17, 2025
ff2bd3a
doc: Set temp data dir for tests
jsparber May 8, 2025
39a64db
doc: Add methods to construct an Authors object from state
jsparber May 7, 2025
7650c52
doc: Make document authors settable
jsparber May 7, 2025
609c05f
doc: Allow loading the state of a document from DB
jsparber May 7, 2025
23dd51d
doc: Load documents from local DB on service startup
jsparber May 7, 2025
80038a4
app: Add document list popover
jsparber May 7, 2025
795e3e0
app: Use clone! macro for closures for AardvarkWindow
jsparber May 7, 2025
90ef375
node: Workaround for duplicated snapshots
jsparber May 9, 2025
16975ea
node: Don't use ingest method provided by p2panda for new operations
jsparber May 15, 2025
38df0d7
node: Ensure that only one operation is created at a time
jsparber May 15, 2025
f042f0a
document: Create snapshot only when idle and every 5s
jsparber May 15, 2025
6a75d0d
document: Bump loro dep to 1.5
jsparber May 15, 2025
4cab2cc
app: Fix crash when last seen of author is unknown
jsparber May 15, 2025
af41edb
doc: Consume remote messages from the main context
jsparber May 18, 2025
51aeee9
doc: Ensure all changes to document are made in the main context
jsparber May 18, 2025
1e2f70b
doc: Propagate error on document insert_text/delete_range
jsparber May 18, 2025
e03442d
app: Write text changes immediately to the gtk::TextBuffer
jsparber May 18, 2025
61f2237
node: Don't use idle spawn for changes to authors
jsparber May 22, 2025
b90edfb
doc: Ensure authors are added when we receive an operation
jsparber May 22, 2025
fd13adb
node: Log when a snapshot or delta is created
jsparber May 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
919 changes: 741 additions & 178 deletions Cargo.lock

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion aardvark-app/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@ sourceview = { package = "sourceview5", version = "0.9" }
tracing = "0.1"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
ashpd = { version = "0.9", default-features = false, features = ["tracing", "async-std"] }
thiserror = { version = "2.0" }
futures-util = "0.3"
oo7 = { version = "0.4", default-features = false, features = [
"openssl_crypto",
"async-std",
"tracing",
] }

[dependencies.adw]
package = "libadwaita"
version = "0.7"
features = ["v1_6"]
features = ["v1_6"]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions aardvark-app/data/resources/resources.gresource.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/p2panda/aardvark">
<file preprocess="xml-stripblanks">icons/scalable/actions/down-smaller-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/join-document-symbolic.svg</file>
</gresource>
</gresources>
30 changes: 26 additions & 4 deletions aardvark-app/src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@ use adw::prelude::*;
use adw::subclass::prelude::*;
use gettextrs::gettext;
use gtk::{gio, glib, glib::Properties};
use std::{cell::OnceCell, fs};
use tracing::error;

use crate::AardvarkWindow;
use crate::config;
use crate::secret;
use crate::system_settings::SystemSettings;

mod imp {
Expand All @@ -35,7 +38,7 @@ mod imp {
#[properties(wrapper_type = super::AardvarkApplication)]
pub struct AardvarkApplication {
#[property(get)]
pub service: Service,
pub service: OnceCell<Service>,
#[property(get)]
pub system_settings: SystemSettings,
}
Expand All @@ -55,17 +58,36 @@ mod imp {
obj.setup_gactions();
obj.set_accels_for_action("app.quit", &["<primary>q"]);
obj.set_accels_for_action("app.new-window", &["<control>n"]);

// FIXME: Don't block on loading the identity
glib::MainContext::new().block_on(async move {
let private_key = secret::get_or_create_identity()
.await
.expect("Unable to get or create identity");

let mut data_path = glib::user_data_dir();
data_path.push("Aardvark");
data_path.push(private_key.public_key().to_string());
if let Err(error) = fs::create_dir_all(&data_path) {
error!("Failed to create data directory: {error}");
}
let data_dir = gio::File::for_path(data_path);

self.service
.set(Service::new(&private_key, &data_dir))
.unwrap();
});
}
}

impl ApplicationImpl for AardvarkApplication {
fn startup(&self) {
self.service.startup();
self.obj().service().startup();
self.parent_startup();
}

fn shutdown(&self) {
self.service.shutdown();
self.obj().service().shutdown();
self.parent_shutdown();
}

Expand Down Expand Up @@ -116,7 +138,7 @@ impl AardvarkApplication {
}

fn new_window(&self) {
let window = AardvarkWindow::new(self, &self.imp().service);
let window = AardvarkWindow::new(self, &self.service());
window.present();
}

Expand Down
5 changes: 3 additions & 2 deletions aardvark-app/src/connection_popover/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,10 @@ mod imp {
let author: Author = binding.source().unwrap().downcast().unwrap();
if is_online {
Some("Online".to_string())
//Some(format_last_seen(&glib::DateTime::now_local().unwrap()))
} else if let Some(last_seen) = author.last_seen() {
Some(format_last_seen(&last_seen))
} else {
Some(format_last_seen(&author.last_seen().unwrap()))
Some("Never seen".to_string())
}
})
.build();
Expand Down
5 changes: 5 additions & 0 deletions aardvark-app/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ mod components;
mod config;
mod connection_popover;
mod open_dialog;
mod open_popover;
mod secret;
mod system_settings;
mod textbuffer;
mod window;
Expand All @@ -37,9 +39,12 @@ use tracing_subscriber::prelude::*;
use self::application::AardvarkApplication;
use self::config::*;
use self::connection_popover::ConnectionPopover;
use self::open_popover::OpenPopover;
use self::textbuffer::AardvarkTextBuffer;
use self::window::AardvarkWindow;

pub use self::config::APP_ID;

fn main() -> glib::ExitCode {
setup_logging();

Expand Down
Loading