7.4 KiB
Library & Content Management
Summary
The Library system provides a hierarchical content browser for managing 3D models, designs, and print files. It uses a container-based architecture supporting multiple backends including file system, SQLite database, cloud storage, and bundled assets.
Technical Description
Architecture
LibraryConfig (ILibraryContext)
├── RootLibraryContainer
│ ├── Computer (FileSystemContainer)
│ ├── Local Library (SqliteLibraryContainer)
│ ├── Queue (FileSystemContainer)
│ ├── Bundled Parts (BundledPartsCollectionContainer)
│ ├── History (RootHistoryContainer)
│ └── Custom Library Folders...
├── ContentProviders (file type handlers)
└── MenuExtensions (context menu actions)
Core Interfaces
ILibraryContext:
public interface ILibraryContext
{
event EventHandler<ContainerChangedEventArgs> ContainerChanged;
event EventHandler<ContainerChangedEventArgs> ContentChanged;
ILibraryContainer ActiveContainer { get; set; }
}
ILibraryContainer:
| Property/Method | Description |
|---|---|
Items |
Child items (files) |
ChildContainers |
Sub-containers (folders) |
Parent |
Parent container |
Load() |
Load container contents |
Activate()/Deactivate() |
Lifecycle hooks |
GetThumbnail() |
Generate item thumbnail |
ILibraryItem:
| Property | Description |
|---|---|
ID |
Unique identifier |
Name |
Display name |
DateCreated |
Creation timestamp |
DateModified |
Last modified timestamp |
Container Types
| Container | Purpose | Location |
|---|---|---|
RootLibraryContainer |
Top-level root | Providers/ |
FileSystemContainer |
File/folder access | Providers/FileSystem/ |
SqliteLibraryContainer |
Database-backed library | Providers/Sqlite/ |
BundledPartsCollectionContainer |
Built-in parts | Providers/MatterControl/ |
PlatingHistoryContainer |
Print history | Providers/MatterControl/ |
PrinterContainer |
Printer-specific storage | Providers/Printer/ |
ZipContainer |
ZIP archive browsing | Providers/Zip/ |
GitHubContainer |
GitHub repo browsing | Providers/GitHub/ |
Content Providers
Content providers handle loading and saving specific file types:
| Provider | Extensions |
|---|---|
MeshContentProvider |
stl, obj, 3mf, amf, mcx |
GCodeContentProvider |
gcode |
ImageContentProvider |
png, gif, jpg, jpeg |
OpenScadContentProvider |
scad |
Registration:
Library.ContentProviders.Add("stl", new MeshContentProvider());
Library.ContentProviders.Add("gcode", new GCodeContentProvider());
Item Types
ILibraryAsset: File-based items with content
public interface ILibraryAsset : ILibraryItem
{
string FileName { get; }
string ContentType { get; }
long FileSize { get; }
}
ILibraryObject3D: 3D model items
public interface ILibraryObject3D : ILibraryItem
{
Task<IObject3D> GetObject3D(Action<double, string> progress);
}
ILibraryContainerLink: Lazy-loaded container reference
public interface ILibraryContainerLink : ILibraryItem
{
ILibraryContainer GetContainer();
bool IsReadOnly { get; }
}
Container Actions
| Action | Description |
|---|---|
AddItems |
Add new files |
AddContainers |
Create sub-folders |
RenameItems |
Rename items |
RemoveItems |
Delete items |
Writable Containers
ILibraryWritableContainer extends containers with write operations:
public interface ILibraryWritableContainer
{
void Add(IEnumerable<ILibraryItem> items);
void Remove(IEnumerable<ILibraryItem> items);
void Rename(ILibraryItem item, string revisedName);
void Move(IEnumerable<ILibraryItem> items, ILibraryWritableContainer dest);
void SetThumbnail(ILibraryItem item, int width, int height, ImageBuffer thumbnail);
}
Navigation
Container navigation uses parent references:
// Navigate up
ActiveContainer = ActiveContainer.Parent;
// Get breadcrumb path
var ancestors = activeContainer.Ancestors();
Thumbnails
ThumbnailsConfig manages thumbnail generation:
// Request thumbnail
var thumbnail = await Library.EnsureCorrectThumbnailSizing(
originalThumbnail,
thumbWidth,
thumbHeight,
resizedCallback);
Thumbnail sources:
- Cached thumbnail in database
- Generated from 3D model render
- Extracted from file (3MF, AMF)
- Default icon fallback
Library UI Widgets
| Widget | Location | Purpose |
|---|---|---|
LibraryListView |
Library/Widgets/ | List/grid item display |
LibraryBrowserPage |
PartPreviewWindow/ | Full library browser |
LibrarySelector |
CustomWidgets/LibrarySelector/ | Folder picker |
SaveAsPage |
PartPreviewWindow/ | Save dialog |
Design Rationale
Container Pattern: Using a container abstraction allows:
- Uniform navigation across different storage backends
- Easy addition of new storage types (cloud, network, etc.)
- Consistent UI regardless of data source
Lazy Loading: ILibraryContainerLink enables:
- Fast initial display
- Load content only when expanded
- Memory-efficient browsing
Content Providers: Separating file handling from containers:
- Same file types work in any container
- Easy to add new format support
- Clear responsibility separation
Reference
Core Classes
| Class | Location | Description |
|---|---|---|
LibraryConfig |
Library/Providers/LibraryConfig.cs | Library manager |
RootLibraryContainer |
Library/Providers/RootLibraryContainer.cs | Root container |
FileSystemContainer |
Library/Providers/FileSystem/ | File system access |
LibraryContainer |
Library/Providers/LibraryContainer.cs | Base container |
Interfaces
| Interface | Location | Description |
|---|---|---|
ILibraryContext |
Library/Providers/LibraryConfig.cs | Context interface |
ILibraryContainer |
Library/Interfaces/ILibraryContainer.cs | Container interface |
ILibraryItem |
Library/Interfaces/ILibraryItem.cs | Item interface |
ILibraryAsset |
Library/Interfaces/ILibraryAsset.cs | Asset interface |
IContentProvider |
Library/ContentProviders/ | Content provider |
Content Providers
| Class | Location | Extensions |
|---|---|---|
MeshContentProvider |
Library/ContentProviders/ | stl, obj, 3mf, amf |
GCodeContentProvider |
Library/ContentProviders/ | gcode |
ImageContentProvider |
Library/ContentProviders/ | png, jpg, gif |
Events
| Event | Source | Description |
|---|---|---|
ContainerChanged |
ILibraryContext |
Active container changed |
ContentChanged |
ILibraryContainer |
Container contents modified |