Solving bug #282 : already existing file may be overwritted in a rename process (directory tab)

This commit is contained in:
natureh
2011-04-10 23:45:43 +02:00
parent 8e36891073
commit c5c2258f6f

View File

@@ -676,31 +676,48 @@ void FileCatalog::developRequested (std::vector<FileBrowserEntry*> tbe) {
void FileCatalog::renameRequested (std::vector<FileBrowserEntry*> tbe) { void FileCatalog::renameRequested (std::vector<FileBrowserEntry*> tbe) {
bool success;
RenameDialog* renameDlg = new RenameDialog ((Gtk::Window*)get_toplevel()); RenameDialog* renameDlg = new RenameDialog ((Gtk::Window*)get_toplevel());
for (size_t i=0; i<tbe.size(); i++) { for (size_t i=0; i<tbe.size(); i++) {
renameDlg->initName (Glib::path_get_basename (tbe[i]->filename), tbe[i]->thumbnail->getCacheImageData()); renameDlg->initName (Glib::path_get_basename (tbe[i]->filename), tbe[i]->thumbnail->getCacheImageData());
Glib::ustring ofname = tbe[i]->filename; Glib::ustring ofname = tbe[i]->filename;
Glib::ustring dirName = Glib::path_get_dirname (tbe[i]->filename); Glib::ustring dirName = Glib::path_get_dirname (tbe[i]->filename);
Glib::ustring baseName = Glib::path_get_basename (tbe[i]->filename); Glib::ustring baseName = Glib::path_get_basename (tbe[i]->filename);
if (renameDlg->run ()== Gtk::RESPONSE_OK) { success = false;
Glib::ustring nBaseName = renameDlg->getNewName (); do {
// if path has directory components, exit if (renameDlg->run ()== Gtk::RESPONSE_OK) {
if (Glib::path_get_dirname (nBaseName) != ".") Glib::ustring nBaseName = renameDlg->getNewName ();
continue; // if path has directory components, exit
// if no extension is given, concatenate the extension of the original file if (Glib::path_get_dirname (nBaseName) != ".")
Glib::ustring ext = getExtension (nBaseName); continue;
if (ext=="") // if no extension is given, concatenate the extension of the original file
nBaseName += "." + getExtension (baseName); Glib::ustring ext = getExtension (nBaseName);
Glib::ustring nfname = Glib::build_filename (dirName, nBaseName); if (ext=="")
nBaseName += "." + getExtension (baseName);
Glib::ustring nfname = Glib::build_filename (dirName, nBaseName);
/* check if filename already exists*/
if (safe_file_test (nfname, Glib::FILE_TEST_EXISTS)) {
Glib::ustring msg_ = Glib::ustring("<b>") + nfname + ": " + M("MAIN_MSG_ALREADYEXISTS") + "</b>";
Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
msgd.run ();
}
else {
success = true;
if (!safe_g_rename (ofname, nfname)) { if (!safe_g_rename (ofname, nfname)) {
cacheMgr->renameEntry (ofname, tbe[i]->thumbnail->getMD5(), nfname); cacheMgr->renameEntry (ofname, tbe[i]->thumbnail->getMD5(), nfname);
reparseDirectory (); reparseDirectory ();
} }
renameDlg->hide (); }
} }
else
success = true;
} while (!success);
renameDlg->hide ();
} }
delete renameDlg; delete renameDlg;
/* // ask for new file name /* // ask for new file name