mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-15 14:18:04 +08:00
More consistent document crate names (#4323)
* More consistent document crate names * Fix fmt * Fix ASCII art diagrams * rename document-graph to document-graph-storage
This commit is contained in:
@@ -19,8 +19,8 @@ gpu = ["interpreted-executor/gpu", "dep:wgpu-executor"]
|
||||
# Local dependencies
|
||||
graphite-proc-macros = { workspace = true }
|
||||
graph-craft = { workspace = true }
|
||||
graph-storage = { workspace = true, features = ["conversion"] }
|
||||
document-format = { workspace = true }
|
||||
document-graph-storage = { workspace = true, features = ["conversion"] }
|
||||
document-container = { workspace = true }
|
||||
graphene-hash = { workspace = true }
|
||||
interpreted-executor = { workspace = true }
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
use std::fmt::Write;
|
||||
|
||||
pub(crate) fn diff_registries(stored: &graph_storage::Registry, target: &graph_storage::Registry) -> String {
|
||||
pub(crate) fn diff_registries(stored: &document_graph_storage::Registry, target: &document_graph_storage::Registry) -> String {
|
||||
let mut out = String::new();
|
||||
|
||||
let stored_node_ids: std::collections::BTreeSet<_> = stored.node_instances.keys().copied().collect();
|
||||
@@ -91,7 +91,7 @@ pub(crate) fn diff_registries(stored: &graph_storage::Registry, target: &graph_s
|
||||
out
|
||||
}
|
||||
|
||||
fn diff_node(out: &mut String, stored: &graph_storage::Node, target: &graph_storage::Node) {
|
||||
fn diff_node(out: &mut String, stored: &document_graph_storage::Node, target: &document_graph_storage::Node) {
|
||||
if stored.implementation() != target.implementation() {
|
||||
let _ = writeln!(out, " implementation: stored={:?} target={:?}", stored.implementation(), target.implementation());
|
||||
}
|
||||
@@ -123,7 +123,7 @@ fn diff_node(out: &mut String, stored: &graph_storage::Node, target: &graph_stor
|
||||
}
|
||||
}
|
||||
|
||||
fn diff_network(out: &mut String, stored: &graph_storage::Network, target: &graph_storage::Network) {
|
||||
fn diff_network(out: &mut String, stored: &document_graph_storage::Network, target: &document_graph_storage::Network) {
|
||||
if stored.exports.len() != target.exports.len() {
|
||||
let _ = writeln!(out, " exports.len: stored={} target={}", stored.exports.len(), target.exports.len());
|
||||
}
|
||||
@@ -144,13 +144,13 @@ fn diff_network(out: &mut String, stored: &graph_storage::Network, target: &grap
|
||||
}
|
||||
|
||||
/// Value-level resource comparison (same resolved hash, same source bodies keyed by `SourceKey`),
|
||||
/// ignoring LWW timestamps. Mirrors `graph_storage`'s internal `resources_value_equal` for a single
|
||||
/// ignoring LWW timestamps. Mirrors `document_graph_storage`'s internal `resources_value_equal` for a single
|
||||
/// entry, since that helper is crate-private and only operates over a whole store.
|
||||
fn resource_value_equal(stored: &graph_storage::ResourceEntry, target: &graph_storage::ResourceEntry) -> bool {
|
||||
fn resource_value_equal(stored: &document_graph_storage::ResourceEntry, target: &document_graph_storage::ResourceEntry) -> bool {
|
||||
stored.hash == target.hash && stored.sources.len() == target.sources.len() && stored.sources.iter().all(|(key, value)| target.source(key).is_some_and(|other| value.source == other.source))
|
||||
}
|
||||
|
||||
fn diff_resource(out: &mut String, stored: &graph_storage::ResourceEntry, target: &graph_storage::ResourceEntry) {
|
||||
fn diff_resource(out: &mut String, stored: &document_graph_storage::ResourceEntry, target: &document_graph_storage::ResourceEntry) {
|
||||
if stored.hash != target.hash {
|
||||
let _ = writeln!(out, " hash: stored={:?} target={:?}", stored.hash, target.hash);
|
||||
}
|
||||
@@ -177,7 +177,7 @@ fn diff_resource(out: &mut String, stored: &graph_storage::ResourceEntry, target
|
||||
}
|
||||
}
|
||||
|
||||
fn diff_attributes(out: &mut String, label: &str, stored: &graph_storage::Attributes, target: &graph_storage::Attributes) {
|
||||
fn diff_attributes(out: &mut String, label: &str, stored: &document_graph_storage::Attributes, target: &document_graph_storage::Attributes) {
|
||||
let stored_keys: std::collections::BTreeSet<_> = stored.keys().collect();
|
||||
let target_keys: std::collections::BTreeSet<_> = target.keys().collect();
|
||||
let missing: Vec<_> = target_keys.difference(&stored_keys).collect();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use std::collections::VecDeque;
|
||||
use std::collections::{BTreeMap, HashSet};
|
||||
|
||||
use document_graph_storage::Registry;
|
||||
use graph_craft::application_io::resource::{ResourceId, ResourceRegistry, ResourceStorage};
|
||||
use graph_storage::Registry;
|
||||
|
||||
use super::utility_types::network_interface::NodeNetworkInterface;
|
||||
use super::utility_types::network_interface::storage_metadata::{StorageMetadataView, collect_network_view_settings};
|
||||
|
||||
@@ -2049,7 +2049,7 @@ impl DocumentMessageHandler {
|
||||
|
||||
/// Restore `view_settings` map into the document.
|
||||
pub fn apply_stored_document_settings(&mut self, view_settings: &std::collections::BTreeMap<String, serde_json::Value>) {
|
||||
use graph_storage::attr::session::doc;
|
||||
use document_graph_storage::attr::session::doc;
|
||||
|
||||
fn decode<T: serde::de::DeserializeOwned>(view_settings: &std::collections::BTreeMap<String, serde_json::Value>, key: &str) -> Option<T> {
|
||||
view_settings.get(key).and_then(|value| serde_json::from_value(value.clone()).ok())
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
use graph_storage::{NodeMetadataSource, PeerId, Registry};
|
||||
use document_graph_storage::{NodeMetadataSource, PeerId, Registry};
|
||||
|
||||
use super::test_support::{load_demo, node_paths};
|
||||
use crate::messages::portfolio::document::document_message_handler::DocumentMessageHandler;
|
||||
@@ -34,7 +34,7 @@ fn editor_metadata_round_trip_against_demo() {
|
||||
let (_converted_network, entries) = registry.to_runtime_with_metadata(&declarations).expect("to_runtime_with_metadata failed");
|
||||
|
||||
// Index emitted entries by their (network_path, local_id) address.
|
||||
let entries_by_address: HashMap<(Vec<NodeId>, NodeId), &graph_storage::NodeMetadataEntry> = entries.iter().map(|e| ((e.network_path.clone(), e.local_id), e)).collect();
|
||||
let entries_by_address: HashMap<(Vec<NodeId>, NodeId), &document_graph_storage::NodeMetadataEntry> = entries.iter().map(|e| ((e.network_path.clone(), e.local_id), e)).collect();
|
||||
|
||||
let mut checked_any_position = false;
|
||||
let mut checked_any_layer = false;
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
use document_container::AnyContainer;
|
||||
use document_container::backends::memory::MemoryBackend;
|
||||
use document_format::{GddV1, GddV1Layout};
|
||||
use document_graph_storage::{NodeMetadataSource, PeerId};
|
||||
use graph_craft::application_io::resource::HashMapResourceStorage;
|
||||
use graph_storage::{NodeMetadataSource, PeerId};
|
||||
|
||||
use super::test_support::{RoundTrip, node_paths, round_trip_through_gdd};
|
||||
use crate::messages::portfolio::document::document_message_handler::DocumentMessageHandler;
|
||||
@@ -125,7 +125,7 @@ async fn recommit_after_open_is_stable() {
|
||||
// that same peer for deterministic node-ID derivation.
|
||||
let rebuilt_network = round_trip.rebuilt.document_network().clone();
|
||||
let view = StorageMetadataView::new(&round_trip.rebuilt);
|
||||
let reconverted = graph_storage::Registry::convert_from_runtime(&rebuilt_network, &view, &Default::default(), PeerId(1)).expect("re-convert from_runtime");
|
||||
let reconverted = document_graph_storage::Registry::convert_from_runtime(&rebuilt_network, &view, &Default::default(), PeerId(1)).expect("re-convert from_runtime");
|
||||
|
||||
assert!(
|
||||
round_trip.registry.value_equal(&reconverted.registry),
|
||||
@@ -351,7 +351,7 @@ async fn live_undo_shadows_storage_cursor() {
|
||||
|
||||
#[tokio::test]
|
||||
async fn round_trip_document_settings() {
|
||||
use graph_storage::attr::session::doc;
|
||||
use document_graph_storage::attr::session::doc;
|
||||
|
||||
let mut editor = EditorTestUtils::create();
|
||||
editor.new_document().await;
|
||||
@@ -382,7 +382,7 @@ async fn round_trip_document_settings() {
|
||||
/// and reopens via `open_from_archive`, asserting the PTZ round-trips.
|
||||
#[tokio::test]
|
||||
async fn gdd_archive_round_trips_view_settings() {
|
||||
use graph_storage::attr::session::doc;
|
||||
use document_graph_storage::attr::session::doc;
|
||||
|
||||
let byte_store = HashMapResourceStorage::new();
|
||||
let mut gdd = GddV1::create_in(AnyContainer::Memory(MemoryBackend::new()), GddV1Layout, PeerId(1), 0xABCD, "test".into(), "test".into())
|
||||
@@ -420,7 +420,7 @@ async fn gdd_archive_round_trips_view_settings() {
|
||||
#[tokio::test]
|
||||
async fn per_network_navigation_round_trips_via_session_not_registry() {
|
||||
use crate::messages::portfolio::document::utility_types::network_interface::storage_metadata::{apply_network_view_settings, collect_network_view_settings, network_ids_from_entries};
|
||||
use graph_storage::attr::session::network;
|
||||
use document_graph_storage::attr::session::network;
|
||||
|
||||
let byte_store = HashMapResourceStorage::new();
|
||||
|
||||
@@ -449,7 +449,7 @@ async fn per_network_navigation_round_trips_via_session_not_registry() {
|
||||
gdd.set_network_view_settings(network_view_settings).expect("set_network_view_settings");
|
||||
|
||||
// The registry must NOT carry the node-graph nav (it's per-peer, not document content).
|
||||
let root_network = gdd.registry().networks.get(&graph_storage::ROOT_NETWORK).expect("root network in registry");
|
||||
let root_network = gdd.registry().networks.get(&document_graph_storage::ROOT_NETWORK).expect("root network in registry");
|
||||
assert!(!root_network.attributes.contains_key(network::NAV_PTZ), "node-graph nav must not be stored in the registry attributes");
|
||||
|
||||
// Reopen, rebuild the interface, and apply the persisted per-network view state.
|
||||
@@ -632,7 +632,7 @@ fn assert_cursor_matches_runtime(document: &DocumentMessageHandler, at: &str) {
|
||||
|
||||
let network = document.network_interface.document_network().clone();
|
||||
let view = StorageMetadataView::new(&document.network_interface);
|
||||
let target = graph_storage::Registry::convert_from_runtime(&network, &view, &document.resources.registry, peer).expect("from_runtime");
|
||||
let target = document_graph_storage::Registry::convert_from_runtime(&network, &view, &document.resources.registry, peer).expect("from_runtime");
|
||||
|
||||
let stored = storage.registry();
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
use document_container::AnyContainer;
|
||||
use document_container::backends::memory::MemoryBackend;
|
||||
use document_format::{GddV1, GddV1Layout};
|
||||
use document_graph_storage::PeerId;
|
||||
use graph_craft::application_io::resource::HashMapResourceStorage;
|
||||
use graph_craft::document::{DocumentNodeImplementation, NodeId};
|
||||
use graph_storage::PeerId;
|
||||
|
||||
use crate::messages::portfolio::document::document_message_handler::DocumentMessageHandler;
|
||||
use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface;
|
||||
@@ -45,7 +45,7 @@ pub fn node_paths(interface: &NodeNetworkInterface) -> Vec<(Vec<NodeId>, NodeId)
|
||||
/// storage, the reopened registry, and the reopened per-peer view settings (`ui::doc::*`).
|
||||
pub struct RoundTrip {
|
||||
pub rebuilt: NodeNetworkInterface,
|
||||
pub registry: graph_storage::Registry,
|
||||
pub registry: document_graph_storage::Registry,
|
||||
pub view_settings: std::collections::BTreeMap<String, serde_json::Value>,
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//! Bridge between `NodeNetworkInterface` and `graph-storage`'s `NodeMetadataSource` trait.
|
||||
//! Bridge between `NodeNetworkInterface` and `document-graph-storage`'s `NodeMetadataSource` trait.
|
||||
//! Conversion round-trip tests live in `storage_metadata_tests`.
|
||||
//!
|
||||
//! The trait impl lives on the [`StorageMetadataView`] wrapper (not on `NodeNetworkInterface`
|
||||
@@ -7,10 +7,10 @@
|
||||
|
||||
use std::collections::{BTreeMap, HashMap};
|
||||
|
||||
use document_graph_storage::attr::session;
|
||||
use document_graph_storage::{InputMetadataEntry, NetworkMetadataEntry, NodeMetadataEntry, NodeMetadataSource, Position};
|
||||
use glam::IVec2;
|
||||
use graph_craft::document::{DocumentNodeImplementation, NodeId, NodeNetwork};
|
||||
use graph_storage::attr::session;
|
||||
use graph_storage::{InputMetadataEntry, NetworkMetadataEntry, NodeMetadataEntry, NodeMetadataSource, Position};
|
||||
use graphene_std::vector::style::RenderMode;
|
||||
|
||||
use super::memo_network::MemoNetwork;
|
||||
@@ -41,7 +41,7 @@ pub struct DocumentSettings<'a> {
|
||||
pub collapsed: &'a CollapsedLayers,
|
||||
}
|
||||
|
||||
/// Adapts a `&NodeNetworkInterface` to `graph-storage`'s `NodeMetadataSource` (node/network metadata
|
||||
/// Adapts a `&NodeNetworkInterface` to `document-graph-storage`'s `NodeMetadataSource` (node/network metadata
|
||||
/// only; document-level view settings live in `session.json`, not the registry).
|
||||
pub struct StorageMetadataView<'a> {
|
||||
interface: &'a NodeNetworkInterface,
|
||||
@@ -183,18 +183,18 @@ pub fn build_interface_from_storage(network: NodeNetwork, node_entries: Vec<Node
|
||||
|
||||
/// Build the runtime-`network_path` -> stable-`NetworkId` map from the `NetworkMetadataEntry`s that
|
||||
/// `to_runtime_with_full_metadata` emits, so the open path can apply per-network view settings.
|
||||
pub fn network_ids_from_entries(network_entries: &[NetworkMetadataEntry]) -> HashMap<Vec<NodeId>, graph_storage::NetworkId> {
|
||||
pub fn network_ids_from_entries(network_entries: &[NetworkMetadataEntry]) -> HashMap<Vec<NodeId>, document_graph_storage::NetworkId> {
|
||||
network_entries.iter().map(|entry| (entry.network_path.clone(), entry.network_id)).collect()
|
||||
}
|
||||
|
||||
/// Collect the per-network, per-peer view state (node-graph nav + previewing) from `interface` into a
|
||||
/// `session.json` map keyed by the stable storage [`NetworkId`](graph_storage::NetworkId), which
|
||||
/// `session.json` map keyed by the stable storage [`NetworkId`](document_graph_storage::NetworkId), which
|
||||
/// `network_ids` resolves from each runtime `network_path`. Networks at their default nav with no preview
|
||||
/// produce no entry.
|
||||
pub fn collect_network_view_settings(
|
||||
interface: &NodeNetworkInterface,
|
||||
network_ids: &HashMap<Vec<NodeId>, graph_storage::NetworkId>,
|
||||
) -> BTreeMap<graph_storage::NetworkId, BTreeMap<String, serde_json::Value>> {
|
||||
network_ids: &HashMap<Vec<NodeId>, document_graph_storage::NetworkId>,
|
||||
) -> BTreeMap<document_graph_storage::NetworkId, BTreeMap<String, serde_json::Value>> {
|
||||
let mut out = BTreeMap::new();
|
||||
|
||||
for (network_path, &network_id) in network_ids {
|
||||
@@ -240,12 +240,12 @@ pub fn collect_network_view_settings(
|
||||
|
||||
/// Apply persisted per-network view state (node-graph nav + previewing) from `session.json` onto
|
||||
/// `interface`. Inverse of [`collect_network_view_settings`]: `network_ids` resolves each runtime
|
||||
/// `network_path` to its [`NetworkId`](graph_storage::NetworkId), and the matching inner map is decoded
|
||||
/// `network_path` to its [`NetworkId`](document_graph_storage::NetworkId), and the matching inner map is decoded
|
||||
/// back onto the network's navigation/previewing metadata.
|
||||
pub fn apply_network_view_settings(
|
||||
interface: &mut NodeNetworkInterface,
|
||||
network_ids: &HashMap<Vec<NodeId>, graph_storage::NetworkId>,
|
||||
network_view_settings: &BTreeMap<graph_storage::NetworkId, BTreeMap<String, serde_json::Value>>,
|
||||
network_ids: &HashMap<Vec<NodeId>, document_graph_storage::NetworkId>,
|
||||
network_view_settings: &BTreeMap<document_graph_storage::NetworkId, BTreeMap<String, serde_json::Value>>,
|
||||
) {
|
||||
for (network_path, network_id) in network_ids {
|
||||
let Some(settings) = network_view_settings.get(network_id) else { continue };
|
||||
|
||||
@@ -48,7 +48,12 @@ async fn build_per_document_container(path: Option<&std::path::Path>) -> Result<
|
||||
/// Open the existing working copy at `path`, or create a fresh one bound to `peer` (in-memory when
|
||||
/// `path` is `None`). Returns the working copy plus whether it was reopened (vs freshly created); only a
|
||||
/// reopen has independently-stored state worth comparing against the legacy load.
|
||||
pub(super) async fn build_or_open_working_copy(path: Option<&std::path::Path>, peer: graph_storage::PeerId, document_uuid: u64, version: String) -> Result<(GddV1, bool), DocumentFormatError> {
|
||||
pub(super) async fn build_or_open_working_copy(
|
||||
path: Option<&std::path::Path>,
|
||||
peer: document_graph_storage::PeerId,
|
||||
document_uuid: u64,
|
||||
version: String,
|
||||
) -> Result<(GddV1, bool), DocumentFormatError> {
|
||||
let (container, exists) = build_per_document_container(path).await?;
|
||||
|
||||
let gdd = if exists {
|
||||
|
||||
@@ -1896,7 +1896,7 @@ impl PortfolioMessageHandler {
|
||||
) -> Message {
|
||||
let path = working_copy_root.map(|root| root.join(format!("{:016x}", document_id.0)));
|
||||
let editor_version = crate::application::GRAPHITE_GIT_COMMIT_HASH.to_string();
|
||||
let peer = graph_storage::PeerId(generate_uuid());
|
||||
let peer = document_graph_storage::PeerId(generate_uuid());
|
||||
|
||||
let future = async move {
|
||||
let (gdd, reopened) = match build_or_open_working_copy(path.as_deref(), peer, document_id.0, editor_version).await {
|
||||
|
||||
Reference in New Issue
Block a user