4.6 KiB
4.6 KiB
Print Queue & History
Summary
MatterControl maintains print job history for tracking completed prints, managing queued items, and enabling print recovery after failures. The system stores print metadata, tracks progress, and provides analytics on print success rates.
Technical Description
Architecture
Print Management
├── Print Queue (FileSystemContainer)
│ └── Queued items for printing
├── Print History (PlatingHistoryContainer)
│ └── Completed/cancelled prints
└── PrintTask (database records)
└── Print job metadata
PrintTask Entity
Database model for print jobs:
public class PrintTask : Entity
{
public string PrintName { get; set; }
public DateTime PrintStart { get; set; }
public DateTime PrintEnd { get; set; }
public int PrintTimeSeconds { get; set; }
public double PercentDone { get; set; }
public bool PrintComplete { get; set; }
public string PrinterName { get; set; }
public string RecoveryJson { get; set; }
public int QualityWasSetByUser { get; set; }
}
Print Queue
Legacy queue system using file system container:
| Class | Purpose |
|---|---|
LegacyQueueFiles |
Queue directory management |
FileSystemContainer |
Queue item storage |
Queue directory: {ApplicationData}/Queue/
History Container
PlatingHistoryContainer provides access to print history:
| Feature | Description |
|---|---|
NewBedPlate() |
Create new print session |
| Content storage | Save print bed state |
| History browsing | Access past prints |
Print Tracking Flow
-
Print Start:
- Create
PrintTaskrecord - Set
PrintStarttimestamp - Initialize progress to 0%
- Create
-
During Print:
- Update
PercentDone - Save recovery data (
RecoveryJson)
- Update
-
Print Complete:
- Set
PrintEndtimestamp - Calculate
PrintTimeSeconds - Set
PrintCompleteflag
- Set
-
On Cancel:
- Record partial completion
- Preserve recovery data
Print Recovery
Recovery enables resuming failed prints:
// PrintRecoveryStream handles recovery
public class PrintRecoveryStream : GCodeStream
{
// Track position and extrusion
// Resume from last known good position
}
Recovery Data:
- Last printed layer
- Current position (X, Y, Z)
- Extruded amount
- Temperature states
History Display
RootHistoryContainer shows print history:
History
├── Printing History (PrintTask records)
│ ├── Print date/time
│ ├── Print duration
│ ├── Printer used
│ └── Completion status
└── Plating History
└── Saved bed configurations
Statistics Tracking
| Metric | Storage |
|---|---|
| Total print count | ApplicationSession.PrintCount |
| Print duration | PrintTask.PrintTimeSeconds |
| Success rate | Calculated from PrintComplete |
Events
| Event | Source | Description |
|---|---|---|
PrintStarted |
PrinterConnection |
Print begins |
PrintFinished |
PrinterConnection |
Print completes |
AnyPrintStarted |
ApplicationController |
Global start event |
AnyPrintComplete |
ApplicationController |
Global complete event |
Design Rationale
Database Storage: Using SQLite for print tasks enables:
- Persistent history across sessions
- Query capabilities (by date, printer, etc.)
- Recovery data preservation
File-Based Queue: The queue uses file system for:
- Simple item management
- Visual thumbnails
- Easy user access to files
Recovery System: Saving print state allows:
- Resume after power failure
- Continue after software crash
- Re-slice and continue
Reference
Core Classes
| Class | Location | Description |
|---|---|---|
PrintTask |
DataStorage/Models.cs | Print job record |
PrintHistory |
PrintHistory/ | History UI |
LegacyQueueFiles |
PrintQueue/LegacyQueueFiles.cs | Queue management |
Library Containers
| Class | Location | Description |
|---|---|---|
PlatingHistoryContainer |
Library/Providers/MatterControl/ | Print history |
RootHistoryContainer |
Library/Providers/MatterControl/ | History root |
Recovery
| Class | Location | Description |
|---|---|---|
PrintRecoveryStream |
PrinterCommunication/Io/ | Recovery stream |