@fdm-monster/client-next 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/RELEASE_NOTES.MD +28 -1
  3. package/dist/assets/MaterialIcons-Regular-BjXOXp5c.eot +0 -0
  4. package/dist/assets/MaterialIcons-Regular-DEUTIz1o.ttf +0 -0
  5. package/dist/assets/MaterialIcons-Regular-DOtZ65Va.woff2 +0 -0
  6. package/dist/assets/MaterialIcons-Regular-FsbMSDLx.woff +0 -0
  7. package/dist/assets/index-CHzfWKPO.css +5 -0
  8. package/dist/assets/index-WVqTlgq7.js +90 -0
  9. package/dist/assets/index-WVqTlgq7.js.map +1 -0
  10. package/dist/favicon.ico +0 -0
  11. package/dist/img/DavidZwart.jpg +0 -0
  12. package/dist/img/OIG.JYDC2RaWdz7g9.jpg +0 -0
  13. package/dist/img/OIG.jpg +0 -0
  14. package/dist/img/icons/android-chrome-256x256.png +0 -0
  15. package/dist/img/icons/android-chrome-384x384.png +0 -0
  16. package/dist/img/icons/android-chrome-512x512.png +0 -0
  17. package/dist/img/icons/favicon.svg +1 -0
  18. package/dist/img/logo.png +0 -0
  19. package/dist/img/logo.svg +1 -0
  20. package/dist/img/manifest.webmanifest +33 -0
  21. package/dist/img/octoprint-tentacle.svg +144 -0
  22. package/dist/img/thumbail_unknown.jpg +0 -0
  23. package/dist/img/vbanner.jpg +0 -0
  24. package/dist/index.html +24 -0
  25. package/dist/robots.txt +2 -0
  26. package/package.json +1 -1
  27. package/.all-contributorsrc +0 -57
  28. package/.editorconfig +0 -5
  29. package/.eslintrc.js +0 -126
  30. package/.github/FUNDING.yml +0 -3
  31. package/.github/workflows/release-client.yml +0 -94
  32. package/.github/workflows/vue-publish.yml +0 -26
  33. package/.prettierignore +0 -15
  34. package/.whitesource +0 -12
  35. package/renovate.json +0 -30
  36. package/src/App.vue +0 -60
  37. package/src/AppLoader.vue +0 -383
  38. package/src/assets/adjectives.json +0 -1468
  39. package/src/assets/logo.svg +0 -6
  40. package/src/assets/nouns.json +0 -4309
  41. package/src/auto-imports.d.ts +0 -139
  42. package/src/backend/app.service.ts +0 -39
  43. package/src/backend/auth.service.ts +0 -56
  44. package/src/backend/base.service.ts +0 -57
  45. package/src/backend/batch.service.ts +0 -37
  46. package/src/backend/camera-stream.service.ts +0 -33
  47. package/src/backend/custom-gcode.service.ts +0 -11
  48. package/src/backend/dto/octoprint-settings.dto.ts +0 -168
  49. package/src/backend/first-time-setup.service.ts +0 -17
  50. package/src/backend/floor.service.ts +0 -84
  51. package/src/backend/index.ts +0 -4
  52. package/src/backend/print-completions.service.ts +0 -11
  53. package/src/backend/printer-file.service.ts +0 -91
  54. package/src/backend/printer-group.service.ts +0 -62
  55. package/src/backend/printer-job.service.ts +0 -20
  56. package/src/backend/printer-settings.service.ts +0 -28
  57. package/src/backend/printers.service.ts +0 -136
  58. package/src/backend/server-private.service.ts +0 -55
  59. package/src/backend/server.api.ts +0 -132
  60. package/src/backend/settings.service.ts +0 -85
  61. package/src/backend/user.service.ts +0 -51
  62. package/src/components/AboutHelp/AboutView.vue +0 -164
  63. package/src/components/CameraGrid/CameraGridView.vue +0 -111
  64. package/src/components/FirstTimeSetup/FirstTimeSetupView.vue +0 -354
  65. package/src/components/Generic/Actions/PrinterConnectionAction.vue +0 -56
  66. package/src/components/Generic/Actions/PrinterCreateAction.vue +0 -22
  67. package/src/components/Generic/Actions/PrinterDeleteAction.vue +0 -29
  68. package/src/components/Generic/Actions/PrinterQuickStopAction.vue +0 -35
  69. package/src/components/Generic/Actions/PrinterSettingsAction.vue +0 -35
  70. package/src/components/Generic/Actions/PrinterUrlAction.vue +0 -24
  71. package/src/components/Generic/Actions/RefreshFilesAction.vue +0 -50
  72. package/src/components/Generic/Actions/SyncPrinterNameAction.vue +0 -36
  73. package/src/components/Generic/Dialogs/AddOrUpdateCameraStreamDialog.vue +0 -131
  74. package/src/components/Generic/Dialogs/AddOrUpdateFloorDialog.vue +0 -141
  75. package/src/components/Generic/Dialogs/AddOrUpdatePrinterDialog.vue +0 -303
  76. package/src/components/Generic/Dialogs/BaseDialog.vue +0 -81
  77. package/src/components/Generic/Dialogs/BatchJsonCreateDialog.vue +0 -109
  78. package/src/components/Generic/Dialogs/BatchReprintDialog.vue +0 -190
  79. package/src/components/Generic/Dialogs/PrinterChecksPanel.vue +0 -37
  80. package/src/components/Generic/Dialogs/PrinterControlDialog.vue +0 -202
  81. package/src/components/Generic/Dialogs/PrinterMaintenanceDialog.vue +0 -130
  82. package/src/components/Generic/Dialogs/YamlImportExportDialog.vue +0 -186
  83. package/src/components/Generic/Dialogs/dialog.constants.ts +0 -19
  84. package/src/components/Generic/FileExplorerSideNav.vue +0 -734
  85. package/src/components/Generic/Loaders/GridLoader.vue +0 -68
  86. package/src/components/Generic/NavigationDrawer.vue +0 -69
  87. package/src/components/Generic/PrintJobsMenu.vue +0 -148
  88. package/src/components/Generic/Snackbars/AppErrorSnackbar.vue +0 -64
  89. package/src/components/Generic/Snackbars/AppInfoSnackbar.vue +0 -63
  90. package/src/components/Generic/Snackbars/AppProgressSnackbar.vue +0 -158
  91. package/src/components/Generic/Vuetify/TooltipButton.vue +0 -47
  92. package/src/components/HelpOverlay/HelpOverlay.vue +0 -57
  93. package/src/components/Login/LoginForm.vue +0 -206
  94. package/src/components/Login/LoginView.spec.ts +0 -64
  95. package/src/components/Login/LoginView.vue +0 -65
  96. package/src/components/Login/Logo.vue +0 -13
  97. package/src/components/Login/PermissionDenied.vue +0 -109
  98. package/src/components/Login/RegistrationForm.vue +0 -207
  99. package/src/components/Login/RegistrationView.vue +0 -17
  100. package/src/components/Login/__snapshots__/LoginView.spec.ts.snap +0 -1051
  101. package/src/components/NotFound/NotFoundView.vue +0 -39
  102. package/src/components/PrintStatistics/PrintStatistics.vue +0 -168
  103. package/src/components/PrintStatistics/PrintStatisticsView.vue +0 -15
  104. package/src/components/PrinterGrid/HomeToolbar.vue +0 -90
  105. package/src/components/PrinterGrid/PrinterGrid.vue +0 -164
  106. package/src/components/PrinterGrid/PrinterGridTile.vue +0 -438
  107. package/src/components/PrinterGrid/PrinterGridView.vue +0 -210
  108. package/src/components/PrinterList/FileControlList.vue +0 -40
  109. package/src/components/PrinterList/PrinterDetails.vue +0 -91
  110. package/src/components/PrinterList/PrintersView.vue +0 -492
  111. package/src/components/Settings/AccountSettings.vue +0 -163
  112. package/src/components/Settings/DiagnosticsSettings.vue +0 -137
  113. package/src/components/Settings/EmergencyCommands.vue +0 -265
  114. package/src/components/Settings/FloorSettings.vue +0 -276
  115. package/src/components/Settings/GridSettings.vue +0 -127
  116. package/src/components/Settings/OctoPrintSettings.vue +0 -188
  117. package/src/components/Settings/ServerProtectionSettings.vue +0 -370
  118. package/src/components/Settings/SettingsView.vue +0 -73
  119. package/src/components/Settings/SoftwareUpgradeSettings.vue +0 -297
  120. package/src/components/Settings/UserManagementSettings.vue +0 -257
  121. package/src/components/TopBar.vue +0 -147
  122. package/src/components.d.ts +0 -70
  123. package/src/directives/file-upload.directive.ts +0 -117
  124. package/src/directives/printer-drop-position.directive.ts +0 -92
  125. package/src/env.d.ts +0 -6
  126. package/src/main.ts +0 -76
  127. package/src/models/batch/reprint.dto.ts +0 -79
  128. package/src/models/batch.model.ts +0 -11
  129. package/src/models/camera-streams/camera-stream.ts +0 -19
  130. package/src/models/floors/floor.model.ts +0 -30
  131. package/src/models/octoprint/connection-options.model.ts +0 -8
  132. package/src/models/plugins/firmware-updates/prusa-firmware-release.model.ts +0 -57
  133. package/src/models/print-completions/print-completions.model.ts +0 -49
  134. package/src/models/printers/crud/create-printer.model.ts +0 -26
  135. package/src/models/printers/file-upload-commands.model.ts +0 -4
  136. package/src/models/printers/gcode/gcode-analysis.model.ts +0 -30
  137. package/src/models/printers/printer-current-job.model.ts +0 -90
  138. package/src/models/printers/printer-file.model.ts +0 -48
  139. package/src/models/printers/printer.model.ts +0 -18
  140. package/src/models/server/client-releases.model.ts +0 -27
  141. package/src/models/server/export-yaml.model.ts +0 -11
  142. package/src/models/server/features.model.ts +0 -37
  143. package/src/models/server/github-rate-limit.model.ts +0 -21
  144. package/src/models/server/version.model.ts +0 -14
  145. package/src/models/settings/printer-file-clean-settings.model.ts +0 -5
  146. package/src/models/settings/server-settings.dto.ts +0 -19
  147. package/src/models/settings/settings.model.ts +0 -57
  148. package/src/models/socketio-messages/socketio-message.model.ts +0 -53
  149. package/src/models/uploads/queued-upload.model.ts +0 -12
  150. package/src/models/user.model.ts +0 -15
  151. package/src/plugins/README.md +0 -3
  152. package/src/plugins/index.ts +0 -17
  153. package/src/plugins/vuetify.ts +0 -53
  154. package/src/router/index.ts +0 -192
  155. package/src/router/route-names.ts +0 -14
  156. package/src/router/utils.ts +0 -23
  157. package/src/shared/alert.events.ts +0 -14
  158. package/src/shared/app.constants.ts +0 -23
  159. package/src/shared/auth.constants.ts +0 -34
  160. package/src/shared/dialog.composable.ts +0 -41
  161. package/src/shared/drag.constants.ts +0 -19
  162. package/src/shared/experimental.constants.ts +0 -1
  163. package/src/shared/http-client.ts +0 -162
  164. package/src/shared/noun-adjectives.data.ts +0 -24
  165. package/src/shared/printer-grid.constants.ts +0 -5
  166. package/src/shared/printer-state.constants.ts +0 -194
  167. package/src/shared/snackbar.composable.ts +0 -66
  168. package/src/shared/socketio.service.ts +0 -104
  169. package/src/store/auth.store.ts +0 -255
  170. package/src/store/connection.store.ts +0 -66
  171. package/src/store/dialog.store.ts +0 -114
  172. package/src/store/features.store.ts +0 -57
  173. package/src/store/floor.store.ts +0 -173
  174. package/src/store/grid.store.ts +0 -10
  175. package/src/store/index.ts +0 -4
  176. package/src/store/printer-state.store.ts +0 -246
  177. package/src/store/printer.store.ts +0 -236
  178. package/src/store/profile.store.ts +0 -25
  179. package/src/store/settings.store.ts +0 -64
  180. package/src/store/test-printer.store.ts +0 -70
  181. package/src/store/uploads.store.ts +0 -75
  182. package/src/styles/README.md +0 -3
  183. package/src/styles/settings.scss +0 -10
  184. package/src/types/global.d.ts +0 -15
  185. package/src/utils/array.utils.ts +0 -15
  186. package/src/utils/date.utils.ts +0 -5
  187. package/src/utils/download-file.util.ts +0 -25
  188. package/src/utils/error.utils.ts +0 -3
  189. package/src/utils/file-size.util.ts +0 -11
  190. package/src/utils/id.type.ts +0 -1
  191. package/src/utils/sentry.util.ts +0 -8
  192. package/src/utils/test.util.ts +0 -30
  193. package/src/utils/time.utils.ts +0 -2
  194. package/src/utils/uploads-state.utils.ts +0 -58
  195. package/src/utils/validation.utils.ts +0 -14
  196. package/src/vite-env.d.ts +0 -7
  197. package/test/setup-axios-mock.ts +0 -15
  198. /package/{src/assets/logo.png → dist/assets/logo-CJVdjy51.png} +0 -0
  199. /package/{src/assets → dist/img/icons}/android-chrome-192x192.png +0 -0
@@ -1,163 +0,0 @@
1
- <template>
2
- <v-card>
3
- <v-toolbar color="primary">
4
- <v-avatar>
5
- <v-icon>account_circle</v-icon>
6
- </v-avatar>
7
- <v-toolbar-title> Account Settings </v-toolbar-title>
8
- </v-toolbar>
9
- <v-list
10
- subheader
11
- lines="three"
12
- >
13
- <v-list-item>
14
- <v-list-item-content v-if="!loginEnabled">
15
- <v-alert color="primary">
16
- Login is currently disabled. To adjust your username and password,
17
- please enable that setting at the Server Protection settings page.
18
- Then log in and visit this page.
19
- </v-alert>
20
- </v-list-item-content>
21
- </v-list-item>
22
- </v-list>
23
- <v-list
24
- subheader
25
- lines="three"
26
- >
27
- <v-list-item>
28
- <v-list-item-title> Username </v-list-item-title>
29
- <v-list-item-action-text>
30
- <v-text-field
31
- v-model="formData.username"
32
- :disabled="!loginEnabled"
33
- label="Fill in your username"
34
- />
35
- </v-list-item-action-text>
36
- </v-list-item>
37
- <div class="ml-4 mb-4">
38
- <v-btn
39
- :disabled="!loginEnabled"
40
- color="primary"
41
- @click="changeUsername()"
42
- >
43
- Change username
44
- </v-btn>
45
- </div>
46
- <v-divider />
47
- <br />
48
-
49
- <v-list-item>
50
- <v-list-item-title> Old Password </v-list-item-title>
51
- <v-list-item-action-text>
52
- <v-text-field
53
- v-model="formData.oldPassword"
54
- :disabled="!loginEnabled"
55
- placeholder="Old password"
56
- type="password"
57
- />
58
- </v-list-item-action-text>
59
- </v-list-item>
60
- <v-list-item>
61
- <v-list-item-title> New Password </v-list-item-title>
62
- <v-list-item-action-text>
63
- <v-text-field
64
- v-model="formData.newPassword"
65
- :disabled="!loginEnabled"
66
- placeholder="New password"
67
- type="password"
68
- />
69
- </v-list-item-action-text>
70
- </v-list-item>
71
- <v-list-item>
72
- <v-list-item-title> Repeat New Password </v-list-item-title>
73
- <v-list-item-action-text>
74
- <v-text-field
75
- v-model="formData.repeatPassword"
76
- :disabled="!loginEnabled"
77
- placeholder="Repeat new password"
78
- type="password"
79
- />
80
- </v-list-item-action-text>
81
- </v-list-item>
82
- </v-list>
83
- <div class="ml-4 mb-4">
84
- <v-btn
85
- :disabled="!loginEnabled"
86
- color="primary"
87
- @click="changePassword()"
88
- >
89
- Change password
90
- </v-btn>
91
- </div>
92
- <v-divider />
93
- </v-card>
94
- </template>
95
-
96
- <script lang="ts" setup>
97
- import { useProfileStore } from '@/store/profile.store'
98
- import { onMounted, ref } from 'vue'
99
- import { useRouter } from 'vue-router'
100
- import { UserService } from '@/backend/user.service'
101
- import { useSnackbar } from '@/shared/snackbar.composable'
102
- import { useAuthStore } from '@/store/auth.store'
103
- import { routeToLogin } from '@/router/utils'
104
- import { useSettingsStore } from '@/store/settings.store'
105
-
106
- const settingsStore = useSettingsStore()
107
- const profileStore = useProfileStore()
108
- const authStore = useAuthStore()
109
- const router = useRouter()
110
- const snackbar = useSnackbar()
111
- const loginEnabled = ref<boolean>()
112
- const userId = ref<string>('')
113
- const formData = ref<{
114
- username: string
115
- oldPassword: string
116
- newPassword: string
117
- repeatPassword: string
118
- }>({ username: '', newPassword: '', oldPassword: '', repeatPassword: '' })
119
-
120
- onMounted(async () => {
121
- await settingsStore.loadSettings()
122
- if (!settingsStore.settings?.server.loginRequired) {
123
- loginEnabled.value = settingsStore.settings?.server.loginRequired
124
- }
125
- await profileStore.getProfile()
126
- formData.value.username = profileStore.username as string
127
- userId.value = profileStore.userId as string
128
- })
129
-
130
- async function changeUsername() {
131
- if (!userId.value?.length) {
132
- snackbar.openErrorMessage({ title: 'User not loaded' })
133
- return
134
- }
135
- await UserService.changeUsername(userId.value, formData.value.username)
136
-
137
- await profileStore.getProfile()
138
- formData.value.username = profileStore.username as string
139
- snackbar.openInfoMessage({ title: 'Username changed' })
140
- }
141
-
142
- async function changePassword() {
143
- if (!userId.value?.length) {
144
- snackbar.openErrorMessage({ title: 'User not loaded' })
145
- return
146
- }
147
- if (formData.value.newPassword !== formData.value.repeatPassword) {
148
- snackbar.openErrorMessage({ title: 'Passwords do not match' })
149
- return
150
- }
151
- await UserService.changePassword(
152
- userId.value,
153
- formData.value.oldPassword,
154
- formData.value.newPassword
155
- )
156
- formData.value.oldPassword = ''
157
- formData.value.newPassword = ''
158
- formData.value.repeatPassword = ''
159
- snackbar.openInfoMessage({ title: 'Password changed' })
160
- await authStore.logout(true)
161
- await routeToLogin(router)
162
- }
163
- </script>
@@ -1,137 +0,0 @@
1
- <template>
2
- <v-card>
3
- <v-toolbar color="primary">
4
- <v-avatar>
5
- <v-icon>bug_report</v-icon>
6
- </v-avatar>
7
- <v-toolbar-title> Diagnostics </v-toolbar-title>
8
- </v-toolbar>
9
- <v-list
10
- subheader
11
- lines="three"
12
- >
13
- <v-list-subheader>
14
- Diagnostics to provide bug reports to the developers of this software
15
- </v-list-subheader>
16
-
17
- <v-list-item v-if="hasAnonymousDiagnosticsToggleFeature">
18
- <v-list-item-title>
19
- Remote Sentry diagnostic reports:
20
- </v-list-item-title>
21
- <v-list-item-subtitle>
22
- <v-checkbox
23
- v-model="sentryDiagnosticsEnabled"
24
- label="Enable remote Sentry diagnostic reports"
25
- />
26
- </v-list-item-subtitle>
27
- <v-list-item-subtitle>
28
- <v-btn
29
- color="primary"
30
- @click="saveSentryDiagnosticsSettings()"
31
- >
32
- <v-icon class="pr-2">save</v-icon>
33
- Save
34
- </v-btn>
35
- <v-btn
36
- color="secondary"
37
- @click="sendTestSentryException()"
38
- >
39
- <v-icon class="pr-2">bug_report</v-icon>
40
- Test Error
41
- </v-btn>
42
- </v-list-item-subtitle>
43
- </v-list-item>
44
- <v-divider />
45
- <v-list-item v-if="hasLogDumpFeature">
46
- <v-list-item-title> Logs Dump </v-list-item-title>
47
- <v-list-item-subtitle>
48
- Download a .zip file containing all logs from the server
49
- </v-list-item-subtitle>
50
- <v-list-item-subtitle>
51
- <br />
52
- <v-btn
53
- color="primary"
54
- @click="downloadLogDump()"
55
- >
56
- <v-icon>download</v-icon>
57
- Download Log Files (.zip)
58
- </v-btn>
59
- </v-list-item-subtitle>
60
- </v-list-item>
61
- <v-list-item v-if="hasLogDumpFeature">
62
- <v-list-item-title> Clear log files </v-list-item-title>
63
- <v-list-item-subtitle>
64
- <br />
65
- <v-btn
66
- color="default"
67
- @click="clearOldLogFiles()"
68
- >
69
- <v-icon>download</v-icon>
70
- Clear log files older than a week
71
- </v-btn>
72
- </v-list-item-subtitle>
73
- </v-list-item>
74
- </v-list>
75
- </v-card>
76
- </template>
77
-
78
- <script lang="ts" setup>
79
- import { onMounted, ref } from 'vue'
80
- import { AppService } from '@/backend/app.service'
81
- import { useSettingsStore } from '@/store/settings.store'
82
- import { SettingsService } from '@/backend'
83
- import { setSentryEnabled } from '@/utils/sentry.util'
84
- import { ServerPrivateService } from '@/backend/server-private.service'
85
- import { useSnackbar } from '@/shared/snackbar.composable'
86
- import { captureException } from '@sentry/vue'
87
-
88
- const snackBar = useSnackbar()
89
- const settingsStore = useSettingsStore()
90
- const hasAnonymousDiagnosticsToggleFeature = ref(false)
91
- const hasLogDumpFeature = ref(false)
92
- const hasLogClearFeature = ref(false)
93
- const sentryDiagnosticsEnabled = ref(false)
94
- onMounted(async () => {
95
- const features = await AppService.getFeatures()
96
- hasAnonymousDiagnosticsToggleFeature.value =
97
- features.anonymousDiagnosticsToggle?.available || false
98
- hasLogDumpFeature.value = features.logDumpZip?.available || false
99
- hasLogClearFeature.value = features.clearLogFiles?.available || false
100
-
101
- await settingsStore.loadSettings()
102
- sentryDiagnosticsEnabled.value =
103
- settingsStore.serverSettings?.sentryDiagnosticsEnabled || false
104
- })
105
-
106
- async function saveSentryDiagnosticsSettings() {
107
- await SettingsService.setSentryDiagnosticsSettings(
108
- sentryDiagnosticsEnabled.value
109
- )
110
- setSentryEnabled(sentryDiagnosticsEnabled.value)
111
- }
112
-
113
- async function sendTestSentryException() {
114
- const text = `Test Error ${Date.now()} Sentry enabled: ${sentryDiagnosticsEnabled.value}`
115
- try {
116
- throw new Error(text)
117
- } catch (e) {
118
- captureException(e)
119
- snackBar.openInfoMessage({
120
- title: 'Test report was sent',
121
- subtitle: `Content: ${text}`
122
- })
123
- }
124
- }
125
-
126
- async function downloadLogDump() {
127
- await ServerPrivateService.downloadLogDump()
128
- }
129
-
130
- async function clearOldLogFiles() {
131
- await ServerPrivateService.clearLogFilesOlderThanWeek()
132
- snackBar.openInfoMessage({
133
- title: 'Action success',
134
- subtitle: 'Log files older than a week have been deleted'
135
- })
136
- }
137
- </script>
@@ -1,265 +0,0 @@
1
- <template>
2
- <v-card>
3
- <v-toolbar color="primary">
4
- <v-avatar>
5
- <v-icon>settings</v-icon>
6
- </v-avatar>
7
- <v-toolbar-title> Emergency Commands </v-toolbar-title>
8
- </v-toolbar>
9
- <v-list
10
- subheader
11
- lines="three"
12
- >
13
- <v-list-subheader>
14
- Emergency Commands to rectify problematic situations
15
- </v-list-subheader>
16
-
17
- <v-list-item>
18
- <v-list-item-title> Server commands </v-list-item-title>
19
- <v-list-item-subtitle>
20
- Restart the server
21
- <br />
22
- <v-btn
23
- color="primary"
24
- disabled
25
- @click="restartServer()"
26
- >
27
- Restart server (does not work yet)
28
- </v-btn>
29
- </v-list-item-subtitle>
30
- </v-list-item>
31
-
32
- <v-list-item>
33
- <v-list-item-title> Batch disabling </v-list-item-title>
34
- <v-list-item-subtitle>
35
- Disable all printers in batch (will not affect print)
36
- <br />
37
- <v-btn
38
- color="primary"
39
- @click="batchToggleEnabled(false)"
40
- >
41
- Batch disable
42
- </v-btn>
43
- </v-list-item-subtitle>
44
- </v-list-item>
45
-
46
- <v-list-item>
47
- <v-list-item-title> Batch enabling </v-list-item-title>
48
- <v-list-item-subtitle>
49
- Enabling all printers in batch (will not affect print and it will skip
50
- printers in maintenance mode)
51
- <br />
52
- <v-btn
53
- color="primary"
54
- @click="batchToggleEnabled(true)"
55
- >
56
- Batch enable
57
- </v-btn>
58
- </v-list-item-subtitle>
59
- </v-list-item>
60
-
61
- <v-list-item>
62
- <v-list-item-title> Batch USB connect </v-list-item-title>
63
- <v-list-item-subtitle>
64
- Connect all USB devices
65
- <br />
66
- <v-btn
67
- :disabled="!hasConnectUsbFeature"
68
- color="primary"
69
- @click="connectUSBs()"
70
- >
71
- <v-icon class="mr-2">usb</v-icon>
72
- Connect USBs
73
- </v-btn>
74
- <v-alert v-if="!hasConnectUsbFeature">
75
- <v-icon class="mr-2">warning</v-icon>
76
- This feature is not available, please update the FDM Monster server
77
- </v-alert>
78
- </v-list-item-subtitle>
79
- <v-list-item-subtitle class="mt-2">
80
- Connect all Sockets
81
- <br />
82
- <v-btn
83
- :disabled="!hasConnectSocketFeature"
84
- color="primary"
85
- @click="connectSockets()"
86
- >
87
- <v-icon class="mr-2">hub</v-icon>
88
- Connect Sockets
89
- </v-btn>
90
- </v-list-item-subtitle>
91
- <v-alert v-if="!hasConnectSocketFeature">
92
- <v-icon class="mr-2">warning</v-icon>
93
- This feature is not available, please update the FDM Monster server
94
- </v-alert>
95
- </v-list-item>
96
- </v-list>
97
-
98
- <div class="ma-3">
99
- <v-alert> Test all OctoPrint response times </v-alert>
100
- <div class="ml-6">
101
- <v-btn
102
- color="primary"
103
- @click="clickFetchNameState()"
104
- >
105
- Measure response times
106
- </v-btn>
107
- </div>
108
- <div class="ml-7 mt-3">
109
- <span v-if="namesFetched"> Response times: </span>
110
- <Bar
111
- v-if="namesFetched"
112
- :data="chartConfig"
113
- :options="chartOptions"
114
- height="40"
115
- />
116
- <span v-else>
117
- A graph will be shown, presenting the times in milliseconds (ms)
118
- </span>
119
- </div>
120
- </div>
121
- </v-card>
122
- </template>
123
-
124
- <script lang="ts" setup>
125
- import { computed, ref } from 'vue'
126
- import { ServerPrivateService } from '@/backend/server-private.service'
127
- import { BatchService } from '@/backend/batch.service'
128
- import { usePrinterStore } from '@/store/printer.store'
129
- import { useFeatureStore } from '@/store/features.store'
130
- import {
131
- BarElement,
132
- CategoryScale,
133
- Chart as ChartJS,
134
- type ChartData,
135
- ChartOptions,
136
- Legend,
137
- LinearScale,
138
- Title,
139
- Tooltip
140
- } from 'chart.js'
141
- import { Bar } from 'vue-chartjs'
142
- import { IdType } from '@/utils/id.type'
143
- import { OctoPrintSettingsDto } from '@/backend/dto/octoprint-settings.dto'
144
- import { sleep } from '@/utils/time.utils'
145
-
146
- ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend)
147
-
148
- export type BatchOctoPrintSettingsDto = {
149
- success: boolean
150
- printerId: IdType
151
- time: number
152
- value?: OctoPrintSettingsDto
153
- error?: string
154
- }
155
-
156
- const printerStore = usePrinterStore()
157
- const featureStore = useFeatureStore()
158
-
159
- const namesFetched = ref(false)
160
- const fetchedNames = ref<string[]>([])
161
-
162
- const failedPrinters = ref<any[]>([])
163
- const responseTimesAvg = ref(NaN)
164
- const responseTimesMax = ref(NaN)
165
- const responseTimesMin = ref(NaN)
166
- const chartConfig = ref<ChartData<'bar', number[], string>>({
167
- labels: [] as string[],
168
- datasets: [
169
- {
170
- label: 'OctoPrint Settings response times (ms)',
171
- data: [] as number[],
172
- borderColor: '#FF6384',
173
- backgroundColor: '#ffffff'
174
- }
175
- ]
176
- })
177
-
178
- const chartOptions: ChartOptions<'bar'> = {
179
- color: 'white',
180
- plugins: {
181
- title: {
182
- color: 'red',
183
- text: 'Response times (ms)',
184
- display: true
185
- }
186
- },
187
- responsive: true
188
- }
189
-
190
- const hasConnectUsbFeature = computed(() => {
191
- return featureStore.hasFeature('batchConnectUsbCalls')
192
- })
193
- const hasConnectSocketFeature = computed(() => {
194
- return featureStore.hasFeature('batchConnectSocketCalls')
195
- })
196
-
197
- async function clickFetchNameState() {
198
- const printerIds = printerStore.printers.map((p) => p.id)
199
- const printerSettingsBatch = (await BatchService.batchSettingsGet(
200
- printerIds
201
- )) as BatchOctoPrintSettingsDto[]
202
- const names = printerSettingsBatch.map(
203
- (s) => s.value?.appearance?.name || 'ERROR'
204
- )
205
- failedPrinters.value = printerSettingsBatch
206
- .filter((nb) => !nb.success)
207
- .map((e) => ({
208
- message: e.error
209
- }))
210
-
211
- const times = printerSettingsBatch.map((n) => n.time)
212
- const labels = printerSettingsBatch.map(
213
- (n) => n.value?.appearance?.name ?? ''
214
- )
215
- responseTimesAvg.value =
216
- times.reduce((a: number, b: number) => a + b, 0) / times.length
217
- responseTimesMin.value = Math.min(...times)
218
- responseTimesMax.value = Math.max(...times)
219
- chartConfig.value = {
220
- labels,
221
- datasets: [
222
- {
223
- label: 'OctoPrint Settings response times (ms)',
224
- data: times,
225
- borderColor: '#FF6384',
226
- backgroundColor: '#ffffff'
227
- }
228
- ]
229
- }
230
-
231
- await sleep(500)
232
-
233
- namesFetched.value = true
234
- fetchedNames.value = names
235
- }
236
-
237
- async function restartServer() {
238
- await ServerPrivateService.restartServer()
239
- }
240
-
241
- async function batchToggleEnabled(enabled: boolean) {
242
- if (!confirm('Are you sure you want to toggle all printers?')) {
243
- return
244
- }
245
-
246
- const printerIds = printerStore.printers.map((p) => p.id)
247
- await BatchService.batchToggleEnabled(printerIds, enabled)
248
- }
249
-
250
- async function connectUSBs() {
251
- if (!confirm('Are you sure you want to connect all USBs?')) {
252
- return
253
- }
254
- const printerIds = printerStore.printers.map((p) => p.id)
255
- await BatchService.batchConnectUsb(printerIds)
256
- }
257
-
258
- async function connectSockets() {
259
- if (!confirm('Are you sure you want to connect all sockets?')) {
260
- return
261
- }
262
- const printerIds = printerStore.printers.map((p) => p.id)
263
- await BatchService.batchConnectSocket(printerIds)
264
- }
265
- </script>