Commit Graph

125 Commits

Author SHA1 Message Date
bubnikv
33c8e02d5d Win32 specific: Using SHChangeNotifyRegister to get notifications
on removable media insert / eject events.
From now on we no more poll for removable media on Windows.

Thanks @mjgtp from prusaprinters.org
See the following discussion:
https://forum.prusaprinters.org/forum/prusaslicer/prusaslicer-trying-to-access-my-floppy-disk-a

The final working code sample was taken from Chromium source code,
volume_mount_watcher_win.cc
2020-03-27 08:10:00 +01:00
bubnikv
2109136985 Fix of PrusaSlicer trying to access my floppy disk (A:\)
Some customers seem to posses a floppy drive (sic!) and some floppy
drives start spinning if accessed just to check whether there is
a medium plugged in or not.

From now, the A: and B: drives are not checked anymore for removable
media. Now let's pray nobody maps an SD card or flash drive to A: or B:

Fixes
https://forum.prusaprinters.org/forum/prusaslicer/prusaslicer-trying-to-access-my-floppy-disk-a
2020-03-26 19:06:23 +01:00
bubnikv
507e1ae70a Windows do not send an update on insert / eject of an SD card into
an external SD card reader. Windows also do not send an update
on software eject of a FLASH drive. We can likely use the Windows
WMI API, but it will be quite time consuming to implement,
therefore we lower the polling interval back to two seconds.

https://www.codeproject.com/Articles/10539/Making-WMI-Queries-In-C
https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-start-page
https://docs.microsoft.com/en-us/windows/win32/wmisdk/com-api-for-wmi
https://docs.microsoft.com/en-us/windows/win32/wmisdk/example--receiving-event-notifications-through-wmi-
2020-03-13 19:30:41 +01:00
bubnikv
574ec9b7bf Fix of compilation on OSX and Linux, update of camera after 3D mouse
disconnect moved to the main thread.
2020-03-13 14:57:45 +01:00
bubnikv
4cd1243a79 Windows specific refactoring of Mouse3DController and RemovableDriveManager.
PrusaSlicer newly registers by Windows operating system for HID USB
plug / unplug notifications and for Volume attach / detach notifications,
and the background threads of the two respective services are waken up
on these Windows notifications.
The RemovableDriveManager also wakes up every 30 seconds to cope with
the drives ejected from Windows Explorer or from another application,
for example Cura, for which Windows OS does not send out notifications.
2020-03-13 14:19:14 +01:00
bubnikv
0c747450dd Follow-up on 550e5c2fbb3a5151e18b573f246fa78dcef8e964
Fixed some spurious moves of data that should have not been moved.
2020-03-12 12:57:52 +01:00
David Kocik
8219504137 info message - ejecting of sd/flash has failed 2020-03-12 12:57:52 +01:00
David Kocik
598b55ebe1 RemovableDriveManager: not calling update from status()
Update was called too often on main thread mostly from status() causing delays
2020-03-12 11:57:05 +01:00
bubnikv
37604c7144 Improvement in the RemovableDriveManager update function:
Don't call the update() if it is already running. Wait for the
other instance to finish instead.
2020-03-12 11:30:58 +01:00
David Kocik
d993392b33 ejecting sd card/flash drives with boost::process::child on mac/linux 2020-03-10 08:29:11 +01:00
David Kocik
539171c08e enumarating removable drives on mac - added Secure Digital option
hopefully a fix for issue #3793
2020-03-09 15:34:26 +01:00
bubnikv
ee7f4ebba8 Forced SD card / USB drive eject now sends out the event immediately
on Windows as well as on Unix platforms including OSX.
2020-03-09 11:47:20 +01:00
bubnikv
9552fc396e Reworked the eject on unix systems to wait for the return of the
system call to the command line utility and send out the unmount
wxWidgets event immediately.
Hopefully improves 2.2.0-RC Eject is very slow in Linux (#3795)
2020-03-09 10:56:51 +01:00
bubnikv
3105b131d6 Fixed crash on switching the application language.
This crash was caused by the RemovableDriveManager and 3DConnexion
detection services not being stopped correctly.
The fix executes all the tasks of the MainFrame at the language switch,
that are normally performed on application shut down.
2020-03-07 12:24:53 +01:00
bubnikv
a58a3d878c Fixed crash on removable device plug in event due to recent
RemovableDriveManager refactoring.
2020-03-07 10:17:58 +01:00
bubnikv
f2fce0f262 Refactoring of RemovableDriveManager:
1) On Windows and Linux, the device enumeration now runs at a background
   thread, while it ran on the UI thread on idle, which may have been
   blocking on some rare Windows setups, see GH #3515 #3733 #3746 #3766
2) On OSX, the device enumeration now relies on OS callback, no
   polling is required.
3) Refactored for cleaner interface.
2020-03-06 15:10:58 +01:00
Slic3rPE
25c964bb11 linux/osx bug fix checking file path 2020-02-06 09:31:25 +01:00
David Kocik
c6e5df06e3 adding constantness & removing unused code 2020-01-22 17:15:09 +01:00
David Kocik
3ad01c8ef5 removable drive manager bug fixes linux 2020-01-21 13:29:39 +01:00
David Kocik
3ed5d63842 removable drive manager bug fixes 2020-01-21 13:29:39 +01:00
David Kocik
d8bca5b2ac callback for showing action buttons when device is connected/disconnected 2020-01-21 13:29:39 +01:00
David Kocik
d35df019b2 button for exporting gcode to harddrive 2020-01-21 13:29:39 +01:00
bubnikv
9d1865753b Trying to fix Linux compilation 2020-01-06 11:59:24 +01:00
bubnikv
cbd19ad9c0 Replaced unix basename() with boost::filesystem::basename(),
as various unices define basename() differently.
2020-01-06 11:32:17 +01:00
bubnikv
8ebf970934 Const correctness improvements:
removed some unnecessary const_casts that remove const.
2020-01-03 16:33:04 +01:00
David Kocik
e1dddba660 boost::filesystem instead std:: 2019-12-19 17:05:23 +01:00
David Kocik
ff53bf62ae Merge branch 'dk_remote_devices' of https://github.com/prusa3d/PrusaSlicer into dk_remote_devices 2019-12-19 16:28:28 +01:00
David Kocik
f6727ac008 free space check linux + mac 2019-12-19 16:27:48 +01:00
David Kocik
52131413a5 changes in plater.cpp 2019-12-19 14:19:41 +01:00
David Kocik
6eea88423f ommit last filename when checking if path is on drive 2019-12-19 11:47:02 +01:00
David Kocik
f8e137d482 is path on removable drive 2019-12-19 11:13:27 +01:00
David Kocik
a5314501e1 set_did_eject method 2019-12-18 10:08:17 +01:00
David Kocik
638b66e357 bug fix - using two devices 2019-12-18 09:36:26 +01:00
Slic3rPE
24e849ee2f macos device detection 2019-12-17 13:08:17 +01:00
David Kocik
0ed4b6bfe1 verification of save path 2019-12-16 17:15:27 +01:00
David Kocik
218a9d4594 macos first update bug fix 2019-12-16 14:06:25 +01:00
David Kocik
9be525196b correct beahvior when disconnecting device other way than button in slicer 2019-12-16 13:53:12 +01:00
David Kocik
8f32b9ca51 message box about succesful removal 2019-12-13 18:02:25 +01:00
David Kocik
496b125ee1 merge 2019-12-13 15:26:42 +01:00
David Kocik
1a5b9d86fc prev commit linux part 2019-12-13 15:12:20 +01:00
David Kocik
04adeabea3 check if last path is on rem drive 2019-12-13 15:07:35 +01:00
David Kocik
34239be561 refactoring 2019-12-13 15:05:01 +01:00
David Kocik
84ad62d7ac removable drives manager linux part 2019-12-13 14:54:25 +01:00
David Kocik
43c545853f removable drive manager - Windows part 2019-12-13 14:54:25 +01:00
David Kocik
43a6b22ea0 comments 2019-12-13 13:51:46 +01:00
David Kocik
180a5c5325 button show after write 2019-12-13 13:51:46 +01:00
David Kocik
9861e38dea eject button after export 2019-12-13 13:51:46 +01:00
David Kocik
b238399d9f linux eject 2019-12-13 13:51:46 +01:00
Slic3rPE
e1b118d75e macos eject 2019-12-13 13:51:46 +01:00
Slic3rPE
3275870cae macos eject 2019-12-13 13:51:46 +01:00