32
app/utils/gcode_parser.py
Normal file
32
app/utils/gcode_parser.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import os
|
||||
|
||||
def get_gcode_metadata(filepath):
|
||||
metadata = {
|
||||
'print_time': '-',
|
||||
'first_layer_time': '-',
|
||||
'filament_used': '-'
|
||||
}
|
||||
if not os.path.exists(filepath):
|
||||
return metadata
|
||||
|
||||
try:
|
||||
# Read the last few KB to find estimated time and filament used
|
||||
with open(filepath, 'rb') as f:
|
||||
f.seek(0, 2)
|
||||
file_size = f.tell()
|
||||
chunk_size = min(65536, file_size) # read last 64KB
|
||||
f.seek(file_size - chunk_size)
|
||||
chunk = f.read().decode('utf-8', errors='ignore')
|
||||
|
||||
lines = chunk.splitlines()
|
||||
for line in reversed(lines):
|
||||
if line.startswith('; estimated printing time (normal mode) ='):
|
||||
metadata['print_time'] = line.split('=')[1].strip()
|
||||
elif line.startswith('; estimated first layer printing time (normal mode) ='):
|
||||
metadata['first_layer_time'] = line.split('=')[1].strip()
|
||||
elif line.startswith('; filament used [mm] ='):
|
||||
metadata['filament_used'] = line.split('=')[1].strip()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return metadata
|
||||
Reference in New Issue
Block a user