Solving bug #282 : already existing file may be overwritted in a rename process (directory tab)
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user