View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000175 | FreeCAD | Feature | public | 2010-10-14 06:04 | 2015-09-19 11:15 |
Reporter | wmayer | Assigned To | wmayer | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Fixed in Version | 0.16 | ||||
Summary | 0000175: Auto save function | ||||
Description | Auto-save feature which saves a document every X minutes | ||||
Tags | No tags attached. | ||||
FreeCAD Information | |||||
has duplicate | 0001897 | closed | Add a crash recovery file |
|
Reminder sent to: yorik According to your request at http://forum.freecadweb.org/viewtopic.php?f=3&t=587 |
|
Great! I think the best way would be to save to a temp file, so you don't risk overwriting your main file with some changes that you are just experimenting. Some applications just save a temp file in the same folder as the main file but with another name, other save it in the system temp folder, which is probably better, so it can be cleaned automatically by the system. |
|
Actually (again) I had a plan for that. Its partially implemented already in the FreeCAD document. Its called "Transaction". Its basically like UNDO but the other way around. It works as follwed: Every change you make on the document triggers a transaction (for e.g. Undo). This transaction is written do the temp space in a low prio thread. If FreeCAD fails, you load the last (user) save and all the saved transactions and your document is at the same version. Transactions have several advantages: You write only small pieces to disk (only actual changes) and not the whole document (blocks the application for a long time). And its completely in the background (user don't see it). Small disk footprint. But again - had no time to finish the implementation. |
|
Very cleaver! This would be an incredible, never-seen-before real-time backup!!! |
|
In order to make this working it needs to be checked when running a new FreeCAD instance if a previous instance crashed or not. Therefore a lock file of the form "FreeCAD_<process id>.lock" gets created in the TEMP folder. This file is locked by the FreeCAD instance that created it. With a normal close the file gets unlocked and deleted. In case of a crash the file gets only unlocked but not deleted. Now when running a new FreeCAD instance it searches for all lock files in the TEMP folder and checks if the file is locked or not. In case it's locked we know this file is occupied by another (or this) FreeCAD instance. If the file is not locked we know it's the leftover from a previous crash. From the lock file name we now extract the PID and search for directories of the form FreeCAD_Doc_*_<PID>. If the directory is empty we can delete it because a restoration is impossible. If it contains any data we have to check if the document can be restored. This step needs to be implemented. git show 37d1696 |
|
With the number of crashes in FreeCAD I have had in the last 2 hours, I would consider this a much higher priority than "Minor". |
|
I had a quick look again at this, it looks like the /tmp/FreeCAD_Doc_*_PID folder is always empty for me (on creating a new file, opening an existing one, doing a couple of operations, etc...). What is it supposed to contain? |
|
> What is it supposed to contain? The svg files of a drawing, the wrl file of a VRML object, ... |
|
I am also looking forward to this feature! However, the /tmp directory on Linux is cleared at boot time, therefore if you restart after the crash or FreeCAD "crashed" because of power loss, you loose the ability to restore your work. Maybe the stream could be saved in the same directory as the file on which the user works, I have seen some other applications do that. The configuration directory of FreeCAD could then hold a list of files that were open before the crash. |
|
Related forum thread: http://forum.freecadweb.org/viewtopic.php?t=12312 |
|
> However, the /tmp directory on Linux is cleared at boot time... This feature is requested in 0001238. So, as far as I can see this feature is now fully implemented. |
FreeCAD: master 9253572a 2015-09-04 00:48:26 Details Diff |
+ implement GUI to enable/disable auto-save and its timeout |
Affected Issues 0000175 |
|
mod - src/Gui/Application.cpp | Diff File | ||
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Gui/AutoSaver.h | Diff File | ||
mod - src/Gui/DlgSettingsDocument.ui | Diff File | ||
mod - src/Gui/DlgSettingsDocumentImp.cpp | Diff File | ||
FreeCAD: master 9cb63295 2015-09-04 15:08:12 Details Diff |
+ issue 0000175: Auto save function |
Affected Issues 0000175 |
|
mod - src/Gui/Application.cpp | Diff File | ||
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Gui/AutoSaver.h | Diff File | ||
mod - src/Gui/CMakeLists.txt | Diff File | ||
add - src/Gui/DocumentRecovery.cpp | Diff File | ||
add - src/Gui/DocumentRecovery.h | Diff File | ||
add - src/Gui/DocumentRecovery.ui | Diff File | ||
mod - src/Gui/MainWindow.cpp | Diff File | ||
FreeCAD: master 16f81328 2015-09-04 17:53:22 Details Diff |
+ issue 0000175: Auto save function |
Affected Issues 0000175 |
|
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Gui/DlgSettingsDocument.ui | Diff File | ||
mod - src/Gui/DlgSettingsDocumentImp.cpp | Diff File | ||
mod - src/Gui/DocumentRecovery.cpp | Diff File | ||
FreeCAD: master 32367b17 2015-09-16 22:58:47 Details Diff |
+ save Brep in binary format for recovery files |
Affected Issues 0000175 |
|
mod - src/Base/Reader.cpp | Diff File | ||
mod - src/Base/Reader.h | Diff File | ||
mod - src/Base/Writer.cpp | Diff File | ||
mod - src/Base/Writer.h | Diff File | ||
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Mod/Part/App/PropertyTopoShape.cpp | Diff File | ||
mod - src/Mod/Sandbox/Gui/AppSandboxGui.cpp | Diff File | ||
FreeCAD: master bb05d175 2015-09-17 21:37:47 Details Diff |
+ implement FileWriter class based on files and a specialized sub-class for recovery purposes |
Affected Issues 0000175 |
|
mod - src/Base/Writer.cpp | Diff File | ||
mod - src/Base/Writer.h | Diff File | ||
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Gui/AutoSaver.h | Diff File | ||
FreeCAD: master 8db1280a 2015-09-18 15:32:33 Details Diff |
+ make RecoveryWriter more robust |
Affected Issues 0000175 |
|
mod - src/Base/Writer.cpp | Diff File | ||
mod - src/Base/Writer.h | Diff File | ||
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Gui/AutoSaver.h | Diff File | ||
FreeCAD: master 848f9c4d 2015-09-19 01:13:33 Details Diff |
+ implement file based auto-save & recovery mechanism |
Affected Issues 0000175 |
|
mod - src/Gui/Application.cpp | Diff File | ||
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Gui/AutoSaver.h | Diff File | ||
mod - src/Gui/DlgProjectUtility.cpp | Diff File | ||
mod - src/Gui/DlgProjectUtility.h | Diff File | ||
mod - src/Gui/DocumentRecovery.cpp | Diff File | ||
mod - src/Gui/DocumentRecovery.h | Diff File | ||
FreeCAD: master e5c3a095 2015-09-19 13:12:59 Details Diff |
+ for file-based recovery write the data files in worker threads |
Affected Issues 0000175 |
|
mod - src/Base/Writer.cpp | Diff File | ||
mod - src/Base/Writer.h | Diff File | ||
mod - src/Gui/AutoSaver.cpp | Diff File | ||
mod - src/Gui/AutoSaver.h | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
2010-10-14 06:04 | wmayer | New Issue | |
2010-10-14 06:05 | wmayer | Category | Bug => Feature |
2010-10-14 06:07 | wmayer | Note Added: 0000376 | |
2010-10-15 11:23 | yorik | Note Added: 0000380 | |
2011-02-01 12:47 |
|
Note Added: 0000567 | |
2011-02-01 12:48 |
|
Status | new => assigned |
2011-02-01 12:48 |
|
Assigned To | => Jriegel |
2011-02-01 13:12 | yorik | Note Added: 0000568 | |
2013-05-17 09:29 | wmayer | Note Added: 0003168 | |
2015-01-05 22:17 | wmayer | Relationship added | has duplicate 0001897 |
2015-04-10 02:44 | fhteagle | Note Added: 0005987 | |
2015-04-10 14:15 | yorik | Note Added: 0005990 | |
2015-04-10 21:57 | wmayer | Note Added: 0005997 | |
2015-06-20 19:31 | mghansen256 | Note Added: 0006214 | |
2015-09-04 13:09 | wmayer | Changeset attached | => FreeCAD Master master 9cb63295 |
2015-09-04 13:16 | wmayer | Changeset attached | => FreeCAD Master master 9253572a |
2015-09-04 15:55 | wmayer | Changeset attached | => FreeCAD Master master 16f81328 |
2015-09-17 12:48 | wmayer | Changeset attached | => FreeCAD Master master 32367b17 |
2015-09-17 19:38 | wmayer | Changeset attached | => FreeCAD Master master bb05d175 |
2015-09-18 13:33 | wmayer | Changeset attached | => FreeCAD Master master 8db1280a |
2015-09-18 13:35 | wmayer | Note Added: 0006429 | |
2015-09-18 23:15 | wmayer | Changeset attached | => FreeCAD Master master 848f9c4d |
2015-09-19 08:35 | wmayer | Note Added: 0006434 | |
2015-09-19 08:35 | wmayer | Assigned To | Jriegel => wmayer |
2015-09-19 08:52 | wmayer | Status | assigned => closed |
2015-09-19 08:52 | wmayer | Resolution | open => fixed |
2015-09-19 08:52 | wmayer | Fixed in Version | => 0.16 |
2015-09-19 11:15 | wmayer | Changeset attached | => FreeCAD Master master e5c3a095 |