aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2019-07-30 15:33:29 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-07-30 15:33:29 +0200
commit4666e85de5c40e4cd7fa952a1d1c873a43dc60fb (patch)
treec53dad1ac7eea1641b79825d0d171bb027603b60
parentfix(Notifications): Fix issue that blocked notifications from e.g. Slack (diff)
downloadferdium-app-4666e85de5c40e4cd7fa952a1d1c873a43dc60fb.tar.gz
ferdium-app-4666e85de5c40e4cd7fa952a1d1c873a43dc60fb.tar.zst
ferdium-app-4666e85de5c40e4cd7fa952a1d1c873a43dc60fb.zip
feat(App): Add option to copy debug information via the help menu
-rw-r--r--src/i18n/locales/defaultMessages.json139
-rw-r--r--src/i18n/locales/en-US.json5
-rw-r--r--src/i18n/messages/src/lib/Menu.json139
-rw-r--r--src/lib/Menu.js40
-rw-r--r--src/stores/AppStore.js25
5 files changed, 245 insertions, 103 deletions
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index d517b456b..eca3062c2 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -4291,328 +4291,367 @@
4291 } 4291 }
4292 }, 4292 },
4293 { 4293 {
4294 "defaultMessage": "!!!Terms of Service", 4294 "defaultMessage": "!!!Copy Debug Information",
4295 "end": { 4295 "end": {
4296 "column": 3, 4296 "column": 3,
4297 "line": 134 4297 "line": 134
4298 }, 4298 },
4299 "file": "src/lib/Menu.js", 4299 "file": "src/lib/Menu.js",
4300 "id": "menu.help.debugInfo",
4301 "start": {
4302 "column": 13,
4303 "line": 131
4304 }
4305 },
4306 {
4307 "defaultMessage": "!!!Franz Debug Information",
4308 "end": {
4309 "column": 3,
4310 "line": 138
4311 },
4312 "file": "src/lib/Menu.js",
4313 "id": "menu.help.debugInfoCopiedHeadline",
4314 "start": {
4315 "column": 27,
4316 "line": 135
4317 }
4318 },
4319 {
4320 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.",
4321 "end": {
4322 "column": 3,
4323 "line": 142
4324 },
4325 "file": "src/lib/Menu.js",
4326 "id": "menu.help.debugInfoCopiedBody",
4327 "start": {
4328 "column": 23,
4329 "line": 139
4330 }
4331 },
4332 {
4333 "defaultMessage": "!!!Terms of Service",
4334 "end": {
4335 "column": 3,
4336 "line": 146
4337 },
4338 "file": "src/lib/Menu.js",
4300 "id": "menu.help.tos", 4339 "id": "menu.help.tos",
4301 "start": { 4340 "start": {
4302 "column": 7, 4341 "column": 7,
4303 "line": 131 4342 "line": 143
4304 } 4343 }
4305 }, 4344 },
4306 { 4345 {
4307 "defaultMessage": "!!!Privacy Statement", 4346 "defaultMessage": "!!!Privacy Statement",
4308 "end": { 4347 "end": {
4309 "column": 3, 4348 "column": 3,
4310 "line": 138 4349 "line": 150
4311 }, 4350 },
4312 "file": "src/lib/Menu.js", 4351 "file": "src/lib/Menu.js",
4313 "id": "menu.help.privacy", 4352 "id": "menu.help.privacy",
4314 "start": { 4353 "start": {
4315 "column": 11, 4354 "column": 11,
4316 "line": 135 4355 "line": 147
4317 } 4356 }
4318 }, 4357 },
4319 { 4358 {
4320 "defaultMessage": "!!!File", 4359 "defaultMessage": "!!!File",
4321 "end": { 4360 "end": {
4322 "column": 3, 4361 "column": 3,
4323 "line": 142 4362 "line": 154
4324 }, 4363 },
4325 "file": "src/lib/Menu.js", 4364 "file": "src/lib/Menu.js",
4326 "id": "menu.file", 4365 "id": "menu.file",
4327 "start": { 4366 "start": {
4328 "column": 8, 4367 "column": 8,
4329 "line": 139 4368 "line": 151
4330 } 4369 }
4331 }, 4370 },
4332 { 4371 {
4333 "defaultMessage": "!!!View", 4372 "defaultMessage": "!!!View",
4334 "end": { 4373 "end": {
4335 "column": 3, 4374 "column": 3,
4336 "line": 146 4375 "line": 158
4337 }, 4376 },
4338 "file": "src/lib/Menu.js", 4377 "file": "src/lib/Menu.js",
4339 "id": "menu.view", 4378 "id": "menu.view",
4340 "start": { 4379 "start": {
4341 "column": 8, 4380 "column": 8,
4342 "line": 143 4381 "line": 155
4343 } 4382 }
4344 }, 4383 },
4345 { 4384 {
4346 "defaultMessage": "!!!Services", 4385 "defaultMessage": "!!!Services",
4347 "end": { 4386 "end": {
4348 "column": 3, 4387 "column": 3,
4349 "line": 150 4388 "line": 162
4350 }, 4389 },
4351 "file": "src/lib/Menu.js", 4390 "file": "src/lib/Menu.js",
4352 "id": "menu.services", 4391 "id": "menu.services",
4353 "start": { 4392 "start": {
4354 "column": 12, 4393 "column": 12,
4355 "line": 147 4394 "line": 159
4356 } 4395 }
4357 }, 4396 },
4358 { 4397 {
4359 "defaultMessage": "!!!Window", 4398 "defaultMessage": "!!!Window",
4360 "end": { 4399 "end": {
4361 "column": 3, 4400 "column": 3,
4362 "line": 154 4401 "line": 166
4363 }, 4402 },
4364 "file": "src/lib/Menu.js", 4403 "file": "src/lib/Menu.js",
4365 "id": "menu.window", 4404 "id": "menu.window",
4366 "start": { 4405 "start": {
4367 "column": 10, 4406 "column": 10,
4368 "line": 151 4407 "line": 163
4369 } 4408 }
4370 }, 4409 },
4371 { 4410 {
4372 "defaultMessage": "!!!Help", 4411 "defaultMessage": "!!!Help",
4373 "end": { 4412 "end": {
4374 "column": 3, 4413 "column": 3,
4375 "line": 158 4414 "line": 170
4376 }, 4415 },
4377 "file": "src/lib/Menu.js", 4416 "file": "src/lib/Menu.js",
4378 "id": "menu.help", 4417 "id": "menu.help",
4379 "start": { 4418 "start": {
4380 "column": 8, 4419 "column": 8,
4381 "line": 155 4420 "line": 167
4382 } 4421 }
4383 }, 4422 },
4384 { 4423 {
4385 "defaultMessage": "!!!About Franz", 4424 "defaultMessage": "!!!About Franz",
4386 "end": { 4425 "end": {
4387 "column": 3, 4426 "column": 3,
4388 "line": 162 4427 "line": 174
4389 }, 4428 },
4390 "file": "src/lib/Menu.js", 4429 "file": "src/lib/Menu.js",
4391 "id": "menu.app.about", 4430 "id": "menu.app.about",
4392 "start": { 4431 "start": {
4393 "column": 9, 4432 "column": 9,
4394 "line": 159 4433 "line": 171
4395 } 4434 }
4396 }, 4435 },
4397 { 4436 {
4398 "defaultMessage": "!!!What's new?", 4437 "defaultMessage": "!!!What's new?",
4399 "end": { 4438 "end": {
4400 "column": 3, 4439 "column": 3,
4401 "line": 166 4440 "line": 178
4402 }, 4441 },
4403 "file": "src/lib/Menu.js", 4442 "file": "src/lib/Menu.js",
4404 "id": "menu.app.announcement", 4443 "id": "menu.app.announcement",
4405 "start": { 4444 "start": {
4406 "column": 16, 4445 "column": 16,
4407 "line": 163 4446 "line": 175
4408 } 4447 }
4409 }, 4448 },
4410 { 4449 {
4411 "defaultMessage": "!!!Settings", 4450 "defaultMessage": "!!!Settings",
4412 "end": { 4451 "end": {
4413 "column": 3, 4452 "column": 3,
4414 "line": 170 4453 "line": 182
4415 }, 4454 },
4416 "file": "src/lib/Menu.js", 4455 "file": "src/lib/Menu.js",
4417 "id": "menu.app.settings", 4456 "id": "menu.app.settings",
4418 "start": { 4457 "start": {
4419 "column": 12, 4458 "column": 12,
4420 "line": 167 4459 "line": 179
4421 } 4460 }
4422 }, 4461 },
4423 { 4462 {
4424 "defaultMessage": "!!!Check for updates", 4463 "defaultMessage": "!!!Check for updates",
4425 "end": { 4464 "end": {
4426 "column": 3, 4465 "column": 3,
4427 "line": 174 4466 "line": 186
4428 }, 4467 },
4429 "file": "src/lib/Menu.js", 4468 "file": "src/lib/Menu.js",
4430 "id": "menu.app.checkForUpdates", 4469 "id": "menu.app.checkForUpdates",
4431 "start": { 4470 "start": {
4432 "column": 19, 4471 "column": 19,
4433 "line": 171 4472 "line": 183
4434 } 4473 }
4435 }, 4474 },
4436 { 4475 {
4437 "defaultMessage": "!!!Hide", 4476 "defaultMessage": "!!!Hide",
4438 "end": { 4477 "end": {
4439 "column": 3, 4478 "column": 3,
4440 "line": 178 4479 "line": 190
4441 }, 4480 },
4442 "file": "src/lib/Menu.js", 4481 "file": "src/lib/Menu.js",
4443 "id": "menu.app.hide", 4482 "id": "menu.app.hide",
4444 "start": { 4483 "start": {
4445 "column": 8, 4484 "column": 8,
4446 "line": 175 4485 "line": 187
4447 } 4486 }
4448 }, 4487 },
4449 { 4488 {
4450 "defaultMessage": "!!!Hide Others", 4489 "defaultMessage": "!!!Hide Others",
4451 "end": { 4490 "end": {
4452 "column": 3, 4491 "column": 3,
4453 "line": 182 4492 "line": 194
4454 }, 4493 },
4455 "file": "src/lib/Menu.js", 4494 "file": "src/lib/Menu.js",
4456 "id": "menu.app.hideOthers", 4495 "id": "menu.app.hideOthers",
4457 "start": { 4496 "start": {
4458 "column": 14, 4497 "column": 14,
4459 "line": 179 4498 "line": 191
4460 } 4499 }
4461 }, 4500 },
4462 { 4501 {
4463 "defaultMessage": "!!!Unhide", 4502 "defaultMessage": "!!!Unhide",
4464 "end": { 4503 "end": {
4465 "column": 3, 4504 "column": 3,
4466 "line": 186 4505 "line": 198
4467 }, 4506 },
4468 "file": "src/lib/Menu.js", 4507 "file": "src/lib/Menu.js",
4469 "id": "menu.app.unhide", 4508 "id": "menu.app.unhide",
4470 "start": { 4509 "start": {
4471 "column": 10, 4510 "column": 10,
4472 "line": 183 4511 "line": 195
4473 } 4512 }
4474 }, 4513 },
4475 { 4514 {
4476 "defaultMessage": "!!!Quit", 4515 "defaultMessage": "!!!Quit",
4477 "end": { 4516 "end": {
4478 "column": 3, 4517 "column": 3,
4479 "line": 190 4518 "line": 202
4480 }, 4519 },
4481 "file": "src/lib/Menu.js", 4520 "file": "src/lib/Menu.js",
4482 "id": "menu.app.quit", 4521 "id": "menu.app.quit",
4483 "start": { 4522 "start": {
4484 "column": 8, 4523 "column": 8,
4485 "line": 187 4524 "line": 199
4486 } 4525 }
4487 }, 4526 },
4488 { 4527 {
4489 "defaultMessage": "!!!Add New Service...", 4528 "defaultMessage": "!!!Add New Service...",
4490 "end": { 4529 "end": {
4491 "column": 3, 4530 "column": 3,
4492 "line": 194 4531 "line": 206
4493 }, 4532 },
4494 "file": "src/lib/Menu.js", 4533 "file": "src/lib/Menu.js",
4495 "id": "menu.services.addNewService", 4534 "id": "menu.services.addNewService",
4496 "start": { 4535 "start": {
4497 "column": 17, 4536 "column": 17,
4498 "line": 191 4537 "line": 203
4499 } 4538 }
4500 }, 4539 },
4501 { 4540 {
4502 "defaultMessage": "!!!Add New Workspace...", 4541 "defaultMessage": "!!!Add New Workspace...",
4503 "end": { 4542 "end": {
4504 "column": 3, 4543 "column": 3,
4505 "line": 198 4544 "line": 210
4506 }, 4545 },
4507 "file": "src/lib/Menu.js", 4546 "file": "src/lib/Menu.js",
4508 "id": "menu.workspaces.addNewWorkspace", 4547 "id": "menu.workspaces.addNewWorkspace",
4509 "start": { 4548 "start": {
4510 "column": 19, 4549 "column": 19,
4511 "line": 195 4550 "line": 207
4512 } 4551 }
4513 }, 4552 },
4514 { 4553 {
4515 "defaultMessage": "!!!Open workspace drawer", 4554 "defaultMessage": "!!!Open workspace drawer",
4516 "end": { 4555 "end": {
4517 "column": 3, 4556 "column": 3,
4518 "line": 202 4557 "line": 214
4519 }, 4558 },
4520 "file": "src/lib/Menu.js", 4559 "file": "src/lib/Menu.js",
4521 "id": "menu.workspaces.openWorkspaceDrawer", 4560 "id": "menu.workspaces.openWorkspaceDrawer",
4522 "start": { 4561 "start": {
4523 "column": 23, 4562 "column": 23,
4524 "line": 199 4563 "line": 211
4525 } 4564 }
4526 }, 4565 },
4527 { 4566 {
4528 "defaultMessage": "!!!Close workspace drawer", 4567 "defaultMessage": "!!!Close workspace drawer",
4529 "end": { 4568 "end": {
4530 "column": 3, 4569 "column": 3,
4531 "line": 206 4570 "line": 218
4532 }, 4571 },
4533 "file": "src/lib/Menu.js", 4572 "file": "src/lib/Menu.js",
4534 "id": "menu.workspaces.closeWorkspaceDrawer", 4573 "id": "menu.workspaces.closeWorkspaceDrawer",
4535 "start": { 4574 "start": {
4536 "column": 24, 4575 "column": 24,
4537 "line": 203 4576 "line": 215
4538 } 4577 }
4539 }, 4578 },
4540 { 4579 {
4541 "defaultMessage": "!!!Activate next service...", 4580 "defaultMessage": "!!!Activate next service...",
4542 "end": { 4581 "end": {
4543 "column": 3, 4582 "column": 3,
4544 "line": 210 4583 "line": 222
4545 }, 4584 },
4546 "file": "src/lib/Menu.js", 4585 "file": "src/lib/Menu.js",
4547 "id": "menu.services.setNextServiceActive", 4586 "id": "menu.services.setNextServiceActive",
4548 "start": { 4587 "start": {
4549 "column": 23, 4588 "column": 23,
4550 "line": 207 4589 "line": 219
4551 } 4590 }
4552 }, 4591 },
4553 { 4592 {
4554 "defaultMessage": "!!!Activate previous service...", 4593 "defaultMessage": "!!!Activate previous service...",
4555 "end": { 4594 "end": {
4556 "column": 3, 4595 "column": 3,
4557 "line": 214 4596 "line": 226
4558 }, 4597 },
4559 "file": "src/lib/Menu.js", 4598 "file": "src/lib/Menu.js",
4560 "id": "menu.services.activatePreviousService", 4599 "id": "menu.services.activatePreviousService",
4561 "start": { 4600 "start": {
4562 "column": 27, 4601 "column": 27,
4563 "line": 211 4602 "line": 223
4564 } 4603 }
4565 }, 4604 },
4566 { 4605 {
4567 "defaultMessage": "!!!Disable notifications & audio", 4606 "defaultMessage": "!!!Disable notifications & audio",
4568 "end": { 4607 "end": {
4569 "column": 3, 4608 "column": 3,
4570 "line": 218 4609 "line": 230
4571 }, 4610 },
4572 "file": "src/lib/Menu.js", 4611 "file": "src/lib/Menu.js",
4573 "id": "sidebar.muteApp", 4612 "id": "sidebar.muteApp",
4574 "start": { 4613 "start": {
4575 "column": 11, 4614 "column": 11,
4576 "line": 215 4615 "line": 227
4577 } 4616 }
4578 }, 4617 },
4579 { 4618 {
4580 "defaultMessage": "!!!Enable notifications & audio", 4619 "defaultMessage": "!!!Enable notifications & audio",
4581 "end": { 4620 "end": {
4582 "column": 3, 4621 "column": 3,
4583 "line": 222 4622 "line": 234
4584 }, 4623 },
4585 "file": "src/lib/Menu.js", 4624 "file": "src/lib/Menu.js",
4586 "id": "sidebar.unmuteApp", 4625 "id": "sidebar.unmuteApp",
4587 "start": { 4626 "start": {
4588 "column": 13, 4627 "column": 13,
4589 "line": 219 4628 "line": 231
4590 } 4629 }
4591 }, 4630 },
4592 { 4631 {
4593 "defaultMessage": "!!!Workspaces", 4632 "defaultMessage": "!!!Workspaces",
4594 "end": { 4633 "end": {
4595 "column": 3, 4634 "column": 3,
4596 "line": 226 4635 "line": 238
4597 }, 4636 },
4598 "file": "src/lib/Menu.js", 4637 "file": "src/lib/Menu.js",
4599 "id": "menu.workspaces", 4638 "id": "menu.workspaces",
4600 "start": { 4639 "start": {
4601 "column": 14, 4640 "column": 14,
4602 "line": 223 4641 "line": 235
4603 } 4642 }
4604 }, 4643 },
4605 { 4644 {
4606 "defaultMessage": "!!!Default", 4645 "defaultMessage": "!!!Default",
4607 "end": { 4646 "end": {
4608 "column": 3, 4647 "column": 3,
4609 "line": 230 4648 "line": 242
4610 }, 4649 },
4611 "file": "src/lib/Menu.js", 4650 "file": "src/lib/Menu.js",
4612 "id": "menu.workspaces.defaultWorkspace", 4651 "id": "menu.workspaces.defaultWorkspace",
4613 "start": { 4652 "start": {
4614 "column": 20, 4653 "column": 20,
4615 "line": 227 4654 "line": 239
4616 } 4655 }
4617 } 4656 }
4618 ], 4657 ],
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index e2edbd596..27987e5b7 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -68,6 +68,9 @@
68 "menu.file": "File", 68 "menu.file": "File",
69 "menu.help": "Help", 69 "menu.help": "Help",
70 "menu.help.changelog": "Changelog", 70 "menu.help.changelog": "Changelog",
71 "menu.help.debugInfo": "Copy Debug Information",
72 "menu.help.debugInfoCopiedBody": "Your Debug Information has been copied to your clipboard.",
73 "menu.help.debugInfoCopiedHeadline": "Franz Debug Information",
71 "menu.help.learnMore": "Learn More", 74 "menu.help.learnMore": "Learn More",
72 "menu.help.privacy": "Privacy Statement", 75 "menu.help.privacy": "Privacy Statement",
73 "menu.help.support": "Support", 76 "menu.help.support": "Support",
@@ -329,4 +332,4 @@
329 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>", 332 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>",
330 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", 333 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings",
331 "workspaces.switchingIndicator.switchingTo": "Switching to" 334 "workspaces.switchingIndicator.switchingTo": "Switching to"
332} \ No newline at end of file 335}
diff --git a/src/i18n/messages/src/lib/Menu.json b/src/i18n/messages/src/lib/Menu.json
index daafb0900..6f878cbd1 100644
--- a/src/i18n/messages/src/lib/Menu.json
+++ b/src/i18n/messages/src/lib/Menu.json
@@ -377,15 +377,54 @@
377 } 377 }
378 }, 378 },
379 { 379 {
380 "id": "menu.help.debugInfo",
381 "defaultMessage": "!!!Copy Debug Information",
382 "file": "src/lib/Menu.js",
383 "start": {
384 "line": 131,
385 "column": 13
386 },
387 "end": {
388 "line": 134,
389 "column": 3
390 }
391 },
392 {
393 "id": "menu.help.debugInfoCopiedHeadline",
394 "defaultMessage": "!!!Franz Debug Information",
395 "file": "src/lib/Menu.js",
396 "start": {
397 "line": 135,
398 "column": 27
399 },
400 "end": {
401 "line": 138,
402 "column": 3
403 }
404 },
405 {
406 "id": "menu.help.debugInfoCopiedBody",
407 "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.",
408 "file": "src/lib/Menu.js",
409 "start": {
410 "line": 139,
411 "column": 23
412 },
413 "end": {
414 "line": 142,
415 "column": 3
416 }
417 },
418 {
380 "id": "menu.help.tos", 419 "id": "menu.help.tos",
381 "defaultMessage": "!!!Terms of Service", 420 "defaultMessage": "!!!Terms of Service",
382 "file": "src/lib/Menu.js", 421 "file": "src/lib/Menu.js",
383 "start": { 422 "start": {
384 "line": 131, 423 "line": 143,
385 "column": 7 424 "column": 7
386 }, 425 },
387 "end": { 426 "end": {
388 "line": 134, 427 "line": 146,
389 "column": 3 428 "column": 3
390 } 429 }
391 }, 430 },
@@ -394,11 +433,11 @@
394 "defaultMessage": "!!!Privacy Statement", 433 "defaultMessage": "!!!Privacy Statement",
395 "file": "src/lib/Menu.js", 434 "file": "src/lib/Menu.js",
396 "start": { 435 "start": {
397 "line": 135, 436 "line": 147,
398 "column": 11 437 "column": 11
399 }, 438 },
400 "end": { 439 "end": {
401 "line": 138, 440 "line": 150,
402 "column": 3 441 "column": 3
403 } 442 }
404 }, 443 },
@@ -407,11 +446,11 @@
407 "defaultMessage": "!!!File", 446 "defaultMessage": "!!!File",
408 "file": "src/lib/Menu.js", 447 "file": "src/lib/Menu.js",
409 "start": { 448 "start": {
410 "line": 139, 449 "line": 151,
411 "column": 8 450 "column": 8
412 }, 451 },
413 "end": { 452 "end": {
414 "line": 142, 453 "line": 154,
415 "column": 3 454 "column": 3
416 } 455 }
417 }, 456 },
@@ -420,11 +459,11 @@
420 "defaultMessage": "!!!View", 459 "defaultMessage": "!!!View",
421 "file": "src/lib/Menu.js", 460 "file": "src/lib/Menu.js",
422 "start": { 461 "start": {
423 "line": 143, 462 "line": 155,
424 "column": 8 463 "column": 8
425 }, 464 },
426 "end": { 465 "end": {
427 "line": 146, 466 "line": 158,
428 "column": 3 467 "column": 3
429 } 468 }
430 }, 469 },
@@ -433,11 +472,11 @@
433 "defaultMessage": "!!!Services", 472 "defaultMessage": "!!!Services",
434 "file": "src/lib/Menu.js", 473 "file": "src/lib/Menu.js",
435 "start": { 474 "start": {
436 "line": 147, 475 "line": 159,
437 "column": 12 476 "column": 12
438 }, 477 },
439 "end": { 478 "end": {
440 "line": 150, 479 "line": 162,
441 "column": 3 480 "column": 3
442 } 481 }
443 }, 482 },
@@ -446,11 +485,11 @@
446 "defaultMessage": "!!!Window", 485 "defaultMessage": "!!!Window",
447 "file": "src/lib/Menu.js", 486 "file": "src/lib/Menu.js",
448 "start": { 487 "start": {
449 "line": 151, 488 "line": 163,
450 "column": 10 489 "column": 10
451 }, 490 },
452 "end": { 491 "end": {
453 "line": 154, 492 "line": 166,
454 "column": 3 493 "column": 3
455 } 494 }
456 }, 495 },
@@ -459,11 +498,11 @@
459 "defaultMessage": "!!!Help", 498 "defaultMessage": "!!!Help",
460 "file": "src/lib/Menu.js", 499 "file": "src/lib/Menu.js",
461 "start": { 500 "start": {
462 "line": 155, 501 "line": 167,
463 "column": 8 502 "column": 8
464 }, 503 },
465 "end": { 504 "end": {
466 "line": 158, 505 "line": 170,
467 "column": 3 506 "column": 3
468 } 507 }
469 }, 508 },
@@ -472,11 +511,11 @@
472 "defaultMessage": "!!!About Franz", 511 "defaultMessage": "!!!About Franz",
473 "file": "src/lib/Menu.js", 512 "file": "src/lib/Menu.js",
474 "start": { 513 "start": {
475 "line": 159, 514 "line": 171,
476 "column": 9 515 "column": 9
477 }, 516 },
478 "end": { 517 "end": {
479 "line": 162, 518 "line": 174,
480 "column": 3 519 "column": 3
481 } 520 }
482 }, 521 },
@@ -485,11 +524,11 @@
485 "defaultMessage": "!!!What's new?", 524 "defaultMessage": "!!!What's new?",
486 "file": "src/lib/Menu.js", 525 "file": "src/lib/Menu.js",
487 "start": { 526 "start": {
488 "line": 163, 527 "line": 175,
489 "column": 16 528 "column": 16
490 }, 529 },
491 "end": { 530 "end": {
492 "line": 166, 531 "line": 178,
493 "column": 3 532 "column": 3
494 } 533 }
495 }, 534 },
@@ -498,11 +537,11 @@
498 "defaultMessage": "!!!Settings", 537 "defaultMessage": "!!!Settings",
499 "file": "src/lib/Menu.js", 538 "file": "src/lib/Menu.js",
500 "start": { 539 "start": {
501 "line": 167, 540 "line": 179,
502 "column": 12 541 "column": 12
503 }, 542 },
504 "end": { 543 "end": {
505 "line": 170, 544 "line": 182,
506 "column": 3 545 "column": 3
507 } 546 }
508 }, 547 },
@@ -511,11 +550,11 @@
511 "defaultMessage": "!!!Check for updates", 550 "defaultMessage": "!!!Check for updates",
512 "file": "src/lib/Menu.js", 551 "file": "src/lib/Menu.js",
513 "start": { 552 "start": {
514 "line": 171, 553 "line": 183,
515 "column": 19 554 "column": 19
516 }, 555 },
517 "end": { 556 "end": {
518 "line": 174, 557 "line": 186,
519 "column": 3 558 "column": 3
520 } 559 }
521 }, 560 },
@@ -524,11 +563,11 @@
524 "defaultMessage": "!!!Hide", 563 "defaultMessage": "!!!Hide",
525 "file": "src/lib/Menu.js", 564 "file": "src/lib/Menu.js",
526 "start": { 565 "start": {
527 "line": 175, 566 "line": 187,
528 "column": 8 567 "column": 8
529 }, 568 },
530 "end": { 569 "end": {
531 "line": 178, 570 "line": 190,
532 "column": 3 571 "column": 3
533 } 572 }
534 }, 573 },
@@ -537,11 +576,11 @@
537 "defaultMessage": "!!!Hide Others", 576 "defaultMessage": "!!!Hide Others",
538 "file": "src/lib/Menu.js", 577 "file": "src/lib/Menu.js",
539 "start": { 578 "start": {
540 "line": 179, 579 "line": 191,
541 "column": 14 580 "column": 14
542 }, 581 },
543 "end": { 582 "end": {
544 "line": 182, 583 "line": 194,
545 "column": 3 584 "column": 3
546 } 585 }
547 }, 586 },
@@ -550,11 +589,11 @@
550 "defaultMessage": "!!!Unhide", 589 "defaultMessage": "!!!Unhide",
551 "file": "src/lib/Menu.js", 590 "file": "src/lib/Menu.js",
552 "start": { 591 "start": {
553 "line": 183, 592 "line": 195,
554 "column": 10 593 "column": 10
555 }, 594 },
556 "end": { 595 "end": {
557 "line": 186, 596 "line": 198,
558 "column": 3 597 "column": 3
559 } 598 }
560 }, 599 },
@@ -563,11 +602,11 @@
563 "defaultMessage": "!!!Quit", 602 "defaultMessage": "!!!Quit",
564 "file": "src/lib/Menu.js", 603 "file": "src/lib/Menu.js",
565 "start": { 604 "start": {
566 "line": 187, 605 "line": 199,
567 "column": 8 606 "column": 8
568 }, 607 },
569 "end": { 608 "end": {
570 "line": 190, 609 "line": 202,
571 "column": 3 610 "column": 3
572 } 611 }
573 }, 612 },
@@ -576,11 +615,11 @@
576 "defaultMessage": "!!!Add New Service...", 615 "defaultMessage": "!!!Add New Service...",
577 "file": "src/lib/Menu.js", 616 "file": "src/lib/Menu.js",
578 "start": { 617 "start": {
579 "line": 191, 618 "line": 203,
580 "column": 17 619 "column": 17
581 }, 620 },
582 "end": { 621 "end": {
583 "line": 194, 622 "line": 206,
584 "column": 3 623 "column": 3
585 } 624 }
586 }, 625 },
@@ -589,11 +628,11 @@
589 "defaultMessage": "!!!Add New Workspace...", 628 "defaultMessage": "!!!Add New Workspace...",
590 "file": "src/lib/Menu.js", 629 "file": "src/lib/Menu.js",
591 "start": { 630 "start": {
592 "line": 195, 631 "line": 207,
593 "column": 19 632 "column": 19
594 }, 633 },
595 "end": { 634 "end": {
596 "line": 198, 635 "line": 210,
597 "column": 3 636 "column": 3
598 } 637 }
599 }, 638 },
@@ -602,11 +641,11 @@
602 "defaultMessage": "!!!Open workspace drawer", 641 "defaultMessage": "!!!Open workspace drawer",
603 "file": "src/lib/Menu.js", 642 "file": "src/lib/Menu.js",
604 "start": { 643 "start": {
605 "line": 199, 644 "line": 211,
606 "column": 23 645 "column": 23
607 }, 646 },
608 "end": { 647 "end": {
609 "line": 202, 648 "line": 214,
610 "column": 3 649 "column": 3
611 } 650 }
612 }, 651 },
@@ -615,11 +654,11 @@
615 "defaultMessage": "!!!Close workspace drawer", 654 "defaultMessage": "!!!Close workspace drawer",
616 "file": "src/lib/Menu.js", 655 "file": "src/lib/Menu.js",
617 "start": { 656 "start": {
618 "line": 203, 657 "line": 215,
619 "column": 24 658 "column": 24
620 }, 659 },
621 "end": { 660 "end": {
622 "line": 206, 661 "line": 218,
623 "column": 3 662 "column": 3
624 } 663 }
625 }, 664 },
@@ -628,11 +667,11 @@
628 "defaultMessage": "!!!Activate next service...", 667 "defaultMessage": "!!!Activate next service...",
629 "file": "src/lib/Menu.js", 668 "file": "src/lib/Menu.js",
630 "start": { 669 "start": {
631 "line": 207, 670 "line": 219,
632 "column": 23 671 "column": 23
633 }, 672 },
634 "end": { 673 "end": {
635 "line": 210, 674 "line": 222,
636 "column": 3 675 "column": 3
637 } 676 }
638 }, 677 },
@@ -641,11 +680,11 @@
641 "defaultMessage": "!!!Activate previous service...", 680 "defaultMessage": "!!!Activate previous service...",
642 "file": "src/lib/Menu.js", 681 "file": "src/lib/Menu.js",
643 "start": { 682 "start": {
644 "line": 211, 683 "line": 223,
645 "column": 27 684 "column": 27
646 }, 685 },
647 "end": { 686 "end": {
648 "line": 214, 687 "line": 226,
649 "column": 3 688 "column": 3
650 } 689 }
651 }, 690 },
@@ -654,11 +693,11 @@
654 "defaultMessage": "!!!Disable notifications & audio", 693 "defaultMessage": "!!!Disable notifications & audio",
655 "file": "src/lib/Menu.js", 694 "file": "src/lib/Menu.js",
656 "start": { 695 "start": {
657 "line": 215, 696 "line": 227,
658 "column": 11 697 "column": 11
659 }, 698 },
660 "end": { 699 "end": {
661 "line": 218, 700 "line": 230,
662 "column": 3 701 "column": 3
663 } 702 }
664 }, 703 },
@@ -667,11 +706,11 @@
667 "defaultMessage": "!!!Enable notifications & audio", 706 "defaultMessage": "!!!Enable notifications & audio",
668 "file": "src/lib/Menu.js", 707 "file": "src/lib/Menu.js",
669 "start": { 708 "start": {
670 "line": 219, 709 "line": 231,
671 "column": 13 710 "column": 13
672 }, 711 },
673 "end": { 712 "end": {
674 "line": 222, 713 "line": 234,
675 "column": 3 714 "column": 3
676 } 715 }
677 }, 716 },
@@ -680,11 +719,11 @@
680 "defaultMessage": "!!!Workspaces", 719 "defaultMessage": "!!!Workspaces",
681 "file": "src/lib/Menu.js", 720 "file": "src/lib/Menu.js",
682 "start": { 721 "start": {
683 "line": 223, 722 "line": 235,
684 "column": 14 723 "column": 14
685 }, 724 },
686 "end": { 725 "end": {
687 "line": 226, 726 "line": 238,
688 "column": 3 727 "column": 3
689 } 728 }
690 }, 729 },
@@ -693,11 +732,11 @@
693 "defaultMessage": "!!!Default", 732 "defaultMessage": "!!!Default",
694 "file": "src/lib/Menu.js", 733 "file": "src/lib/Menu.js",
695 "start": { 734 "start": {
696 "line": 227, 735 "line": 239,
697 "column": 20 736 "column": 20
698 }, 737 },
699 "end": { 738 "end": {
700 "line": 230, 739 "line": 242,
701 "column": 3 740 "column": 3
702 } 741 }
703 } 742 }
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index e0dfd736e..22d788918 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -1,4 +1,4 @@
1import { remote, shell } from 'electron'; 1import { remote, shell, clipboard } from 'electron';
2import { observable, autorun } from 'mobx'; 2import { observable, autorun } from 'mobx';
3import { defineMessages } from 'react-intl'; 3import { defineMessages } from 'react-intl';
4 4
@@ -128,6 +128,18 @@ const menuItems = defineMessages({
128 id: 'menu.help.support', 128 id: 'menu.help.support',
129 defaultMessage: '!!!Support', 129 defaultMessage: '!!!Support',
130 }, 130 },
131 debugInfo: {
132 id: 'menu.help.debugInfo',
133 defaultMessage: '!!!Copy Debug Information',
134 },
135 debugInfoCopiedHeadline: {
136 id: 'menu.help.debugInfoCopiedHeadline',
137 defaultMessage: '!!!Franz Debug Information',
138 },
139 debugInfoCopiedBody: {
140 id: 'menu.help.debugInfoCopiedBody',
141 defaultMessage: '!!!Your Debug Information has been copied to your clipboard.',
142 },
131 tos: { 143 tos: {
132 id: 'menu.help.tos', 144 id: 'menu.help.tos',
133 defaultMessage: '!!!Terms of Service', 145 defaultMessage: '!!!Terms of Service',
@@ -760,6 +772,10 @@ export default class FranzMenu {
760 tpl[4].submenu = this.workspacesMenu(); 772 tpl[4].submenu = this.workspacesMenu();
761 } 773 }
762 774
775 tpl[tpl.length - 1].submenu.push({
776 type: 'separator',
777 }, this.debugMenu());
778
763 this.currentTemplate = tpl; 779 this.currentTemplate = tpl;
764 const menu = Menu.buildFromTemplate(tpl); 780 const menu = Menu.buildFromTemplate(tpl);
765 Menu.setApplicationMenu(menu); 781 Menu.setApplicationMenu(menu);
@@ -870,6 +886,28 @@ export default class FranzMenu {
870 return menu; 886 return menu;
871 } 887 }
872 888
889 debugMenu() {
890 const { intl } = window.franz;
891
892 return {
893 label: intl.formatMessage(menuItems.debugInfo),
894 click: () => {
895 const { debugInfo } = this.stores.app;
896
897 clipboard.write({
898 text: JSON.stringify(debugInfo),
899 });
900
901 this.actions.app.notify({
902 title: intl.formatMessage(menuItems.debugInfoCopiedHeadline),
903 options: {
904 body: intl.formatMessage(menuItems.debugInfoCopiedBody),
905 },
906 });
907 },
908 };
909 }
910
873 _getServiceName(service) { 911 _getServiceName(service) {
874 if (service.name) { 912 if (service.name) {
875 return service.name; 913 return service.name;
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index bca20a581..2ac306a2a 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -8,6 +8,9 @@ import AutoLaunch from 'auto-launch';
8import prettyBytes from 'pretty-bytes'; 8import prettyBytes from 'pretty-bytes';
9import ms from 'ms'; 9import ms from 'ms';
10import { URL } from 'url'; 10import { URL } from 'url';
11import os from 'os';
12import path from 'path';
13import { readJsonSync } from 'fs-extra';
11 14
12import Store from './lib/Store'; 15import Store from './lib/Store';
13import Request from './lib/Request'; 16import Request from './lib/Request';
@@ -23,7 +26,7 @@ import { isValidExternalURL } from '../helpers/url-helpers';
23 26
24const debug = require('debug')('Franz:AppStore'); 27const debug = require('debug')('Franz:AppStore');
25 28
26const { app, systemPreferences } = remote; 29const { app, systemPreferences, screen } = remote;
27 30
28const mainWindow = remote.getCurrentWindow(); 31const mainWindow = remote.getCurrentWindow();
29 32
@@ -182,6 +185,26 @@ export default class AppStore extends Store {
182 return prettyBytes(this.getAppCacheSizeRequest.execute().result || 0); 185 return prettyBytes(this.getAppCacheSizeRequest.execute().result || 0);
183 } 186 }
184 187
188 @computed get debugInfo() {
189 return {
190 host: {
191 platform: process.platform,
192 release: os.release(),
193 screens: screen.getAllDisplays(),
194 },
195 franz: {
196 version: app.getVersion(),
197 electron: process.versions.electron,
198 installedRecipes: this.stores.recipes.all.map(recipe => ({ id: recipe.id, version: recipe.version })),
199 devRecipes: this.stores.recipePreviews.dev.map(recipe => ({ id: recipe.id, version: recipe.version })),
200 services: this.stores.services.all.map(service => ({ id: service.id, recipe: service.recipe.id })),
201 workspaces: this.stores.workspaces.workspaces.map(workspace => ({ id: workspace.id, services: workspace.services })),
202 windowSettings: readJsonSync(path.join(app.getPath('userData'), 'window-state.json')),
203 user: this.stores.user.data.id,
204 },
205 };
206 }
207
185 // Actions 208 // Actions
186 @action _notify({ 209 @action _notify({
187 title, options, notificationId, serviceId = null, 210 title, options, notificationId, serviceId = null,