feat: add native filaman widget - #1852
Conversation
- Renamed variables and methods to reflect the new FilaMan support in FileSystem, MmuEditGateMapDialog, PrinterStatusCard, and SpoolSelectionDialog components. - Updated localization files to include FilaMan titles and messages in both English and German. - Enhanced the SpoolSelectionDialog to manage spools from both spoolman and FilaMan, including new computed properties for dynamic titles and labels. - Modified actions in the Vuex store to handle FilaMan spools, including new interfaces for FilaMan responses and normalization logic. - Adjusted the Dashboard and Settings views to conditionally render components based on the availability of spoolman or FilaMan. - Updated mixins to check for FilaMan support alongside spoolman.
…ight percentage calculation
…ion and update fetchAllFilamanSpools action
…oved user experience
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR adds FilaMan (“filaman” component) support by treating it as an alternative spool-tracking backend alongside Spoolman, updating UI visibility rules, and introducing Filaman-specific UI elements and API calls.
Changes:
- Add Filaman component support checks and update settings/dashboard visibility logic to prefer Filaman where applicable.
- Extend spoolman store/actions and socket actions to fetch/normalize Filaman spool data and set active spool via new Moonraker methods.
- Add Filaman UI (card + assets) and new i18n strings (EN/DE), plus adjustments to existing spool selection/QR behavior.
Reviewed changes
Copilot reviewed 17 out of 20 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/views/Settings.vue | Show spool tracking settings when either Spoolman or Filaman is supported. |
| src/views/Dashboard.vue | Swap Spoolman card for Filaman card when Filaman is supported; update filtering logic. |
| src/typings/moonraker.spoolman.d.ts | Add Filaman response interfaces for typed normalization. |
| src/store/spoolman/actions.ts | Add Filaman init + pagination fetch, and normalize Filaman spools into Spoolman-shaped spools. |
| src/mixins/afc.ts | Treat Filaman as valid spool tracking support for AFC UI. |
| src/locales/en.yaml | Add Filaman translations. |
| src/locales/de.yaml | Add Filaman translations. |
| src/globals.ts | Register “filaman” component to dispatch spoolman/init. |
| src/components/widgets/status/PrinterStatusCard.vue | Rename variables to “spool tracking” wording for broader backend support. |
| src/components/widgets/spoolman/SpoolSelectionDialog.vue | Add Filaman-aware labeling and disable QR scanning for Filaman. |
| src/components/widgets/mmu/MmuEditGateMapDialog.vue | Rename handlers/watchers to “spool tracking” terminology. |
| src/components/widgets/filesystem/FileSystem.vue | Rename variables to “spool tracking” wording for broader backend support. |
| src/components/widgets/filaman/SpoolSelectionDialog.vue | Add a Filaman-specific spool selection dialog component. |
| src/components/widgets/filaman/FilamanCard.vue | Add a Filaman dashboard card using the existing spoolman store/dialog state. |
| src/components/widgets/afc/AfcCardUnitLaneBody.vue | Rename state flags/watchers to “spool tracking” wording and accept Filaman support. |
| src/components/settings/SpoolmanSettings.vue | Make settings header Filaman-aware, and hide QR settings when Filaman is active. |
| src/components/layout/AppSettingsNav.vue | Make settings nav entry Filaman-aware and visible for either backend. |
| src/api/socketActions.ts | Add Filaman Moonraker methods for get/post spool id and proxy spool listing. |
| public/img/icons/filaman-spool.svg | Add Filaman spool icon asset. |
…alization support
|
FilaMan? Never heard of it? Maybe a link would be useful? |
|
Ah, sorry i forgot :) |
| get supportsSpoolTracking (): boolean { | ||
| return ( | ||
| this.$typedGetters['server/componentSupport']('spoolman') || | ||
| this.$typedGetters['server/componentSupport']('filaman') |
There was a problem hiding this comment.
Does this module actually exist? From what I can see in your code and your website, you are using the [spoolman] module and then have a Spoolman compatible API in Filaman, is that correct?
There was a problem hiding this comment.
Hey there, FilaMan is used by a lot of people and they wish a native implementation, because it can have more features than Spoolman.
Yes, i build a spoolman api plugin to make the switch für the user easier. But, it can do all the things that FilaMan can do and I won't be bind FilaMan to a other system, because of complexity.
So it would be nice, if I can implement FilaMan natively and get the development forward.
Co-authored-by: Pedro Lamas <pedrolamas@gmail.com> Signed-off-by: ManuelW <manuel.weiser@me.com>
Co-authored-by: Pedro Lamas <pedrolamas@gmail.com> Signed-off-by: ManuelW <manuel.weiser@me.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Manuel Weiser <manuel.weiser@me.com>
…n Filaman components
…lection and update dialog title accordingly
…extruder icon display
|
Hi @ManuelW77 thank you for sending this Pull Request. I've done a quick review of these changes, and the bit I am not clear is on the changes from "Spoolman" to something generic - if the user configured with If the user is using a |
|
Hi @pedrolamas, I’ve also implemented additional features. For example, Spoolman only supports a single toolhead in Fluidd, whereas Filaman supports multiple toolheads. I think this is especially important for newer printers like the Snapmaker U1 or Prusa models with multiple toolheads. |
I assume that requires the |
|
Yes, that's right. |
Merges 51 upstream commits into the FilaMan fork. Conflict resolutions: - AfcCardUnitLaneBody.vue: upstream refactored AFC lane data into AfcMixin.getAfcLaneInfo(); laneInfo.remainingWeight already covers the Spoolman weight fallback added in 3988f39, so the local getters were dropped in favour of upstream's. - spoolman/actions.ts: kept the defensive FilaMan onActiveSpool handling (spool_id may arrive as string/null) and added payload types to match upstream's typing pass (fluidd-core#1877). - socket/actions.ts: kept the FilaMan notify* actions alongside upstream's typed notifySpoolmanStatusChanged, typing them likewise. FilamanCard.vue picked up formatting warnings from the updated ESLint config; applied via eslint --fix. Signed-off-by: Manuel Weiser <manuel.weiser@me.com> Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Manuel Weiser <manuel.weiser@me.com>
Shrinks the FilaMan fork delta so it can be re-applied to a fresh Fluidd checkout as a file overlay plus a small patch set. Removed: - widgets/filaman/SpoolSelectionDialog.vue (877 lines, no importer — the app-wide dialog in App.vue is widgets/spoolman/SpoolSelectionDialog.vue) - unused serverFilamanProxyGetInfo and setExtruderSpool mutation - cosmetic spoolman -> spoolTracking renames in FileSystem.vue, PrinterStatusCard.vue, MmuEditGateMapDialog.vue and AfcCardUnitLaneBody.vue (no behaviour change, pure merge friction) - the serverSpoolmanPostSpoolId params tweak, a no-op since JSON.stringify drops undefined values Extracted into overlay-owned modules: - api/filamanActions.ts, util/filaman-spool-mapper.ts, store/spoolman/filamanActions.ts, typings/moonraker.filaman.d.ts - store/spoolman/proxyResponse.ts holds the shared proxy helper so actions.ts and filamanActions.ts do not form an import cycle FilaMan now registers its own MOONRAKER_COMPONENTS dispatch ahead of spoolman and commits a backend flag, so store/server/actions.ts stays upstream instead of forwarding the server info payload. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Manuel Weiser <manuel.weiser@me.com>
Removes the change-spool button/menu from the FilamanCard header: assigning a spool to an extruder is FilaMan's own job (an NFC tap), not something this card should offer. Replaces it with a repush button that resends every assigned spool to the printer, the same thing that already happens once at boot, for when a channel still shows as unknown and restarting Moonraker is overkill. Needs the filaman Moonraker component's new POST .../repush endpoint (filaman.py 0.2.0+); on an older filaman the button's socket call fails and the flash message says so. The per-row pencil edit buttons (select a spool for one extruder) and the macro-list variant are unchanged, only the header button is replaced. Signed-off-by: ManuelW77 <manuel.weiser@me.com>
I implemented a Widget for my FilaMan (Filamentmanagement Tool)
You can contact me:
Manuel Weiser
manuelw@filaman.app
https://www.filaman.app