Skip to content

Commit

Permalink
file_manager: Added per tool weights and total filament change count …
Browse files Browse the repository at this point in the history
…metadata

Signed-off-by: Tyler Wondrasek <[email protected]>
  • Loading branch information
Wondro authored and Arksine committed Feb 26, 2025
1 parent 9b4b3de commit 4889a2d
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
2 changes: 2 additions & 0 deletions docs/external_api/file_manager.md
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,9 @@ GET /server/files/metadata?filename=tools/drill.gcode
| `filament_temps` | [int] | List of base temperatures for filaments, in Celsius. |
| `filament_type` | string | The type(s) of filament used, ie: `PLA`. |
| `filament_total` | float | The total length filament used in mm. |
| `filament_change_count` | int | The number of filament changes in the print. |
| `filament_weight_total` | float | The total weight of filament used in grams. |
| `filament_weights` | [float] | List of weights in grams used by each tool in the print. |
| `mmu_print` | int | Identifies a multimaterial print with single extruder. |
| `referenced_tools` | [int] | List of tool numbers used in the print. |
| `thumbnails` | [object] | A list of `Thumbnail Info` objects. |
Expand Down
21 changes: 21 additions & 0 deletions moonraker/components/file_manager/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,9 @@ def parse_filament_total(self) -> Optional[float]:
def parse_filament_weight_total(self) -> Optional[float]:
return None

def parse_filament_weights(self) -> Optional[List[float]]:
return None

def parse_filament_name(self) -> Optional[str]:
return None

Expand Down Expand Up @@ -240,6 +243,9 @@ def parse_chamber_temp(self) -> Optional[float]:
def parse_first_layer_extr_temp(self) -> Optional[float]:
return None

def parse_filament_change_count(self) -> Optional[int]:
return None

def parse_thumbnails(self) -> Optional[List[Dict[str, Any]]]:
for data in [self.header_data, self.footer_data]:
thumb_matches: List[str] = re.findall(
Expand Down Expand Up @@ -404,6 +410,16 @@ def parse_filament_weight_total(self) -> Optional[float]:
self.footer_data
)

def parse_filament_weights(self) -> Optional[List[float]]:
line = regex_find_string(r'filament\sused\s\[g\]\s=\s(%S)\n', self.footer_data)
if line:
weights = regex_find_floats(
r"(%F)", line
)
if weights:
return weights
return None

def parse_filament_type(self) -> Optional[str]:
return regex_find_string(
r";\sfilament_type\s=\s(%S)", self.footer_data
Expand Down Expand Up @@ -488,6 +504,9 @@ def parse_nozzle_diameter(self) -> Optional[float]:
def parse_layer_count(self) -> Optional[int]:
return regex_find_int(r"; total layers count = (%D)", self.footer_data)

def parse_filament_change_count(self) -> Optional[int]:
return regex_find_int(r"; total filament change = (%D)", self.footer_data)

class Slic3rPE(PrusaSlicer):
def check_identity(self, data: str) -> bool:
match = re.search(r"Slic3r\sPrusa\sEdition\s(.*)\son", data)
Expand Down Expand Up @@ -999,12 +1018,14 @@ def parse_first_layer_bed_temp(self) -> Optional[float]:
'filament_name',
'filament_type',
'filament_colors',
'filament_change_count',
'extruder_colors',
'filament_temps',
'referenced_tools',
'mmu_print',
'filament_total',
'filament_weight_total',
'filament_weights',
'thumbnails'
]

Expand Down

0 comments on commit 4889a2d

Please sign in to comment.