@fdm-monster/client-next 0.0.1 → 0.0.2

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 (198) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/dist/assets/MaterialIcons-Regular-BjXOXp5c.eot +0 -0
  3. package/dist/assets/MaterialIcons-Regular-DEUTIz1o.ttf +0 -0
  4. package/dist/assets/MaterialIcons-Regular-DOtZ65Va.woff2 +0 -0
  5. package/dist/assets/MaterialIcons-Regular-FsbMSDLx.woff +0 -0
  6. package/dist/assets/index-CHzfWKPO.css +5 -0
  7. package/dist/assets/index-CnWtkGvw.js +90 -0
  8. package/dist/assets/index-CnWtkGvw.js.map +1 -0
  9. package/dist/favicon.ico +0 -0
  10. package/dist/img/DavidZwart.jpg +0 -0
  11. package/dist/img/OIG.JYDC2RaWdz7g9.jpg +0 -0
  12. package/dist/img/OIG.jpg +0 -0
  13. package/dist/img/icons/android-chrome-256x256.png +0 -0
  14. package/dist/img/icons/android-chrome-384x384.png +0 -0
  15. package/dist/img/icons/android-chrome-512x512.png +0 -0
  16. package/dist/img/icons/favicon.svg +1 -0
  17. package/dist/img/logo.png +0 -0
  18. package/dist/img/logo.svg +1 -0
  19. package/dist/img/manifest.webmanifest +33 -0
  20. package/dist/img/octoprint-tentacle.svg +144 -0
  21. package/dist/img/thumbail_unknown.jpg +0 -0
  22. package/dist/img/vbanner.jpg +0 -0
  23. package/dist/index.html +24 -0
  24. package/dist/robots.txt +2 -0
  25. package/package.json +1 -1
  26. package/.all-contributorsrc +0 -57
  27. package/.editorconfig +0 -5
  28. package/.eslintrc.js +0 -126
  29. package/.github/FUNDING.yml +0 -3
  30. package/.github/workflows/release-client.yml +0 -94
  31. package/.github/workflows/vue-publish.yml +0 -26
  32. package/.prettierignore +0 -15
  33. package/.whitesource +0 -12
  34. package/renovate.json +0 -30
  35. package/src/App.vue +0 -60
  36. package/src/AppLoader.vue +0 -383
  37. package/src/assets/adjectives.json +0 -1468
  38. package/src/assets/logo.svg +0 -6
  39. package/src/assets/nouns.json +0 -4309
  40. package/src/auto-imports.d.ts +0 -139
  41. package/src/backend/app.service.ts +0 -39
  42. package/src/backend/auth.service.ts +0 -56
  43. package/src/backend/base.service.ts +0 -57
  44. package/src/backend/batch.service.ts +0 -37
  45. package/src/backend/camera-stream.service.ts +0 -33
  46. package/src/backend/custom-gcode.service.ts +0 -11
  47. package/src/backend/dto/octoprint-settings.dto.ts +0 -168
  48. package/src/backend/first-time-setup.service.ts +0 -17
  49. package/src/backend/floor.service.ts +0 -84
  50. package/src/backend/index.ts +0 -4
  51. package/src/backend/print-completions.service.ts +0 -11
  52. package/src/backend/printer-file.service.ts +0 -91
  53. package/src/backend/printer-group.service.ts +0 -62
  54. package/src/backend/printer-job.service.ts +0 -20
  55. package/src/backend/printer-settings.service.ts +0 -28
  56. package/src/backend/printers.service.ts +0 -136
  57. package/src/backend/server-private.service.ts +0 -55
  58. package/src/backend/server.api.ts +0 -132
  59. package/src/backend/settings.service.ts +0 -85
  60. package/src/backend/user.service.ts +0 -51
  61. package/src/components/AboutHelp/AboutView.vue +0 -164
  62. package/src/components/CameraGrid/CameraGridView.vue +0 -111
  63. package/src/components/FirstTimeSetup/FirstTimeSetupView.vue +0 -354
  64. package/src/components/Generic/Actions/PrinterConnectionAction.vue +0 -56
  65. package/src/components/Generic/Actions/PrinterCreateAction.vue +0 -22
  66. package/src/components/Generic/Actions/PrinterDeleteAction.vue +0 -29
  67. package/src/components/Generic/Actions/PrinterQuickStopAction.vue +0 -35
  68. package/src/components/Generic/Actions/PrinterSettingsAction.vue +0 -35
  69. package/src/components/Generic/Actions/PrinterUrlAction.vue +0 -24
  70. package/src/components/Generic/Actions/RefreshFilesAction.vue +0 -50
  71. package/src/components/Generic/Actions/SyncPrinterNameAction.vue +0 -36
  72. package/src/components/Generic/Dialogs/AddOrUpdateCameraStreamDialog.vue +0 -131
  73. package/src/components/Generic/Dialogs/AddOrUpdateFloorDialog.vue +0 -141
  74. package/src/components/Generic/Dialogs/AddOrUpdatePrinterDialog.vue +0 -303
  75. package/src/components/Generic/Dialogs/BaseDialog.vue +0 -81
  76. package/src/components/Generic/Dialogs/BatchJsonCreateDialog.vue +0 -109
  77. package/src/components/Generic/Dialogs/BatchReprintDialog.vue +0 -190
  78. package/src/components/Generic/Dialogs/PrinterChecksPanel.vue +0 -37
  79. package/src/components/Generic/Dialogs/PrinterControlDialog.vue +0 -202
  80. package/src/components/Generic/Dialogs/PrinterMaintenanceDialog.vue +0 -130
  81. package/src/components/Generic/Dialogs/YamlImportExportDialog.vue +0 -186
  82. package/src/components/Generic/Dialogs/dialog.constants.ts +0 -19
  83. package/src/components/Generic/FileExplorerSideNav.vue +0 -734
  84. package/src/components/Generic/Loaders/GridLoader.vue +0 -68
  85. package/src/components/Generic/NavigationDrawer.vue +0 -69
  86. package/src/components/Generic/PrintJobsMenu.vue +0 -148
  87. package/src/components/Generic/Snackbars/AppErrorSnackbar.vue +0 -64
  88. package/src/components/Generic/Snackbars/AppInfoSnackbar.vue +0 -63
  89. package/src/components/Generic/Snackbars/AppProgressSnackbar.vue +0 -158
  90. package/src/components/Generic/Vuetify/TooltipButton.vue +0 -47
  91. package/src/components/HelpOverlay/HelpOverlay.vue +0 -57
  92. package/src/components/Login/LoginForm.vue +0 -206
  93. package/src/components/Login/LoginView.spec.ts +0 -64
  94. package/src/components/Login/LoginView.vue +0 -65
  95. package/src/components/Login/Logo.vue +0 -13
  96. package/src/components/Login/PermissionDenied.vue +0 -109
  97. package/src/components/Login/RegistrationForm.vue +0 -207
  98. package/src/components/Login/RegistrationView.vue +0 -17
  99. package/src/components/Login/__snapshots__/LoginView.spec.ts.snap +0 -1051
  100. package/src/components/NotFound/NotFoundView.vue +0 -39
  101. package/src/components/PrintStatistics/PrintStatistics.vue +0 -168
  102. package/src/components/PrintStatistics/PrintStatisticsView.vue +0 -15
  103. package/src/components/PrinterGrid/HomeToolbar.vue +0 -90
  104. package/src/components/PrinterGrid/PrinterGrid.vue +0 -164
  105. package/src/components/PrinterGrid/PrinterGridTile.vue +0 -438
  106. package/src/components/PrinterGrid/PrinterGridView.vue +0 -210
  107. package/src/components/PrinterList/FileControlList.vue +0 -40
  108. package/src/components/PrinterList/PrinterDetails.vue +0 -91
  109. package/src/components/PrinterList/PrintersView.vue +0 -492
  110. package/src/components/Settings/AccountSettings.vue +0 -163
  111. package/src/components/Settings/DiagnosticsSettings.vue +0 -137
  112. package/src/components/Settings/EmergencyCommands.vue +0 -265
  113. package/src/components/Settings/FloorSettings.vue +0 -276
  114. package/src/components/Settings/GridSettings.vue +0 -127
  115. package/src/components/Settings/OctoPrintSettings.vue +0 -188
  116. package/src/components/Settings/ServerProtectionSettings.vue +0 -370
  117. package/src/components/Settings/SettingsView.vue +0 -73
  118. package/src/components/Settings/SoftwareUpgradeSettings.vue +0 -297
  119. package/src/components/Settings/UserManagementSettings.vue +0 -257
  120. package/src/components/TopBar.vue +0 -147
  121. package/src/components.d.ts +0 -70
  122. package/src/directives/file-upload.directive.ts +0 -117
  123. package/src/directives/printer-drop-position.directive.ts +0 -92
  124. package/src/env.d.ts +0 -6
  125. package/src/main.ts +0 -76
  126. package/src/models/batch/reprint.dto.ts +0 -79
  127. package/src/models/batch.model.ts +0 -11
  128. package/src/models/camera-streams/camera-stream.ts +0 -19
  129. package/src/models/floors/floor.model.ts +0 -30
  130. package/src/models/octoprint/connection-options.model.ts +0 -8
  131. package/src/models/plugins/firmware-updates/prusa-firmware-release.model.ts +0 -57
  132. package/src/models/print-completions/print-completions.model.ts +0 -49
  133. package/src/models/printers/crud/create-printer.model.ts +0 -26
  134. package/src/models/printers/file-upload-commands.model.ts +0 -4
  135. package/src/models/printers/gcode/gcode-analysis.model.ts +0 -30
  136. package/src/models/printers/printer-current-job.model.ts +0 -90
  137. package/src/models/printers/printer-file.model.ts +0 -48
  138. package/src/models/printers/printer.model.ts +0 -18
  139. package/src/models/server/client-releases.model.ts +0 -27
  140. package/src/models/server/export-yaml.model.ts +0 -11
  141. package/src/models/server/features.model.ts +0 -37
  142. package/src/models/server/github-rate-limit.model.ts +0 -21
  143. package/src/models/server/version.model.ts +0 -14
  144. package/src/models/settings/printer-file-clean-settings.model.ts +0 -5
  145. package/src/models/settings/server-settings.dto.ts +0 -19
  146. package/src/models/settings/settings.model.ts +0 -57
  147. package/src/models/socketio-messages/socketio-message.model.ts +0 -53
  148. package/src/models/uploads/queued-upload.model.ts +0 -12
  149. package/src/models/user.model.ts +0 -15
  150. package/src/plugins/README.md +0 -3
  151. package/src/plugins/index.ts +0 -17
  152. package/src/plugins/vuetify.ts +0 -53
  153. package/src/router/index.ts +0 -192
  154. package/src/router/route-names.ts +0 -14
  155. package/src/router/utils.ts +0 -23
  156. package/src/shared/alert.events.ts +0 -14
  157. package/src/shared/app.constants.ts +0 -23
  158. package/src/shared/auth.constants.ts +0 -34
  159. package/src/shared/dialog.composable.ts +0 -41
  160. package/src/shared/drag.constants.ts +0 -19
  161. package/src/shared/experimental.constants.ts +0 -1
  162. package/src/shared/http-client.ts +0 -162
  163. package/src/shared/noun-adjectives.data.ts +0 -24
  164. package/src/shared/printer-grid.constants.ts +0 -5
  165. package/src/shared/printer-state.constants.ts +0 -194
  166. package/src/shared/snackbar.composable.ts +0 -66
  167. package/src/shared/socketio.service.ts +0 -104
  168. package/src/store/auth.store.ts +0 -255
  169. package/src/store/connection.store.ts +0 -66
  170. package/src/store/dialog.store.ts +0 -114
  171. package/src/store/features.store.ts +0 -57
  172. package/src/store/floor.store.ts +0 -173
  173. package/src/store/grid.store.ts +0 -10
  174. package/src/store/index.ts +0 -4
  175. package/src/store/printer-state.store.ts +0 -246
  176. package/src/store/printer.store.ts +0 -236
  177. package/src/store/profile.store.ts +0 -25
  178. package/src/store/settings.store.ts +0 -64
  179. package/src/store/test-printer.store.ts +0 -70
  180. package/src/store/uploads.store.ts +0 -75
  181. package/src/styles/README.md +0 -3
  182. package/src/styles/settings.scss +0 -10
  183. package/src/types/global.d.ts +0 -15
  184. package/src/utils/array.utils.ts +0 -15
  185. package/src/utils/date.utils.ts +0 -5
  186. package/src/utils/download-file.util.ts +0 -25
  187. package/src/utils/error.utils.ts +0 -3
  188. package/src/utils/file-size.util.ts +0 -11
  189. package/src/utils/id.type.ts +0 -1
  190. package/src/utils/sentry.util.ts +0 -8
  191. package/src/utils/test.util.ts +0 -30
  192. package/src/utils/time.utils.ts +0 -2
  193. package/src/utils/uploads-state.utils.ts +0 -58
  194. package/src/utils/validation.utils.ts +0 -14
  195. package/src/vite-env.d.ts +0 -7
  196. package/test/setup-axios-mock.ts +0 -15
  197. /package/{src/assets/logo.png → dist/assets/logo-CJVdjy51.png} +0 -0
  198. /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>