-namespace fs = boost::filesystem;
-
-namespace {
-
-bool readFile(Buffer * const b, FileName const & s)
-{
- BOOST_ASSERT(b);
-
- // File information about normal file
- if (!fs::exists(s.toFilesystemEncoding())) {
- docstring const file = makeDisplayPath(s.absFilename(), 50);
- docstring text = bformat(_("The specified document\n%1$s"
- "\ncould not be read."), file);
- Alert::error(_("Could not read document"), text);
- return false;
- }
-
- // Check if emergency save file exists and is newer.
- FileName const e(s.absFilename() + ".emergency");
-
- if (fs::exists(e.toFilesystemEncoding()) &&
- fs::exists(s.toFilesystemEncoding()) &&
- fs::last_write_time(e.toFilesystemEncoding()) > fs::last_write_time(s.toFilesystemEncoding()))
- {
- docstring const file = makeDisplayPath(s.absFilename(), 20);
- docstring const text =
- bformat(_("An emergency save of the document "
- "%1$s exists.\n\n"
- "Recover emergency save?"), file);
- switch (Alert::prompt(_("Load emergency save?"), text, 0, 2,
- _("&Recover"), _("&Load Original"),
- _("&Cancel")))
- {
- case 0:
- // the file is not saved if we load the emergency file.
- b->markDirty();
- return b->readFile(e);
- case 1:
- break;
- default:
- return false;
- }
- }
-
- // Now check if autosave file is newer.
- FileName const a(onlyPath(s.absFilename()) + '#' + onlyFilename(s.absFilename()) + '#');
-
- if (fs::exists(a.toFilesystemEncoding()) &&
- fs::exists(s.toFilesystemEncoding()) &&
- fs::last_write_time(a.toFilesystemEncoding()) > fs::last_write_time(s.toFilesystemEncoding()))
- {
- docstring const file = makeDisplayPath(s.absFilename(), 20);
- docstring const text =
- bformat(_("The backup of the document "
- "%1$s is newer.\n\nLoad the "
- "backup instead?"), file);
- switch (Alert::prompt(_("Load backup?"), text, 0, 2,
- _("&Load backup"), _("Load &original"),
- _("&Cancel") ))
- {
- case 0:
- // the file is not saved if we load the autosave file.
- b->markDirty();
- return b->readFile(a);
- case 1:
- // Here we delete the autosave
- unlink(a);
- break;
- default:
- return false;
- }
- }
- return b->readFile(s);
-}
-
-
-} // namespace anon
-
-
-
-bool loadLyXFile(Buffer * b, FileName const & s)
-{
- BOOST_ASSERT(b);
-
- if (fs::is_readable(s.toFilesystemEncoding())) {
- if (readFile(b, s)) {
- b->lyxvc().file_found_hook(s);
- if (!fs::is_writable(s.toFilesystemEncoding()))
- b->setReadonly(true);
- return true;
- }
- } else {
- docstring const file = makeDisplayPath(s.absFilename(), 20);
- // Here we probably should run
- if (LyXVC::file_not_found_hook(s)) {
- docstring const text =
- bformat(_("Do you want to retrieve the document"
- " %1$s from version control?"), file);
- int const ret = Alert::prompt(_("Retrieve from version control?"),
- text, 0, 1, _("&Retrieve"), _("&Cancel"));
-
- if (ret == 0) {
- // How can we know _how_ to do the checkout?
- // With the current VC support it has to be,
- // a RCS file since CVS do not have special ,v files.
- RCS::retrieve(s);
- return loadLyXFile(b, s);
- }
- }
- }
- return false;
-}
-
-
-bool checkIfLoaded(FileName const & fn)
-{
- return theBufferList().getBuffer(fn.absFilename());
-}