/*************************************************************************** quantanetaccess.h - description ------------------- begin : Jun 21 2004 copyright : (C) 2004 by Jens Herden ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; version 2 of the License. * * * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include "qextfileinfo.h" #include "quantanetaccess.h" #include "project.h" bool QuantaNetAccess::upload(const TQString& src, const KURL& target, TQWidget* window, bool confirm) { bool ok = KIO::NetAccess::upload(src, target, window); if (ok) { checkProjectInsert(target, window, confirm); } else { if (confirm) errorMsg(window); } return ok; } bool QuantaNetAccess::file_copy( const KURL& src, const KURL& target, int permissions, bool overwrite, bool resume, TQWidget* window, bool confirm) { bool ok = KIO::NetAccess::file_copy( src, target, permissions, overwrite, resume, window ); if (ok) { checkProjectInsert(target, window, confirm); } else { if (confirm) errorMsg(window); } return ok; } bool QuantaNetAccess::file_move( const KURL& src, const KURL& target, int permissions, bool overwrite, bool resume, TQWidget* window, bool confirm) { // don't ask if move is inside of the project bool oldConfirm = confirm; if ( Project::ref()->projectBaseURL().isParentOf(src) && Project::ref()->projectBaseURL().isParentOf(target) ) { confirm = false; } if ( !checkProjectRemove(src, window, confirm)) { return false; } bool ok = KIO::NetAccess::file_move( src, target, permissions, overwrite, resume, window ); if (ok) { checkProjectInsert(target, window, confirm); } else { if (oldConfirm) errorMsg(window); } return ok; } bool QuantaNetAccess::dircopy( const KURL::List & srcList, const KURL & target, TQWidget* window, bool confirm ) { bool ok = KIO::NetAccess::dircopy( srcList, target, window ); if (ok) { KURL url; for ( KURL::List::ConstIterator it = srcList.begin(); it != srcList.end(); ++it ) { url = target; url.adjustPath(+1); url.setFileName((*it).fileName()); checkProjectInsert(url, window, confirm); } } else { if (confirm) errorMsg(window); } return ok; } bool QuantaNetAccess::move( const KURL::List& srcList, const KURL& target, TQWidget* window, bool confirm ) { KURL targetURL = adjustURL(target); bool oldConfirm = confirm; bool moveInsideProject = false; bool targetInProject = Project::ref()->projectBaseURL().isParentOf(targetURL); KURL url; // first we ask about the URLs in the list without actually removing them from the project for ( KURL::List::ConstIterator it = srcList.begin(); it != srcList.end(); ++it ) { //don't ask if move is inside of the project url = adjustURL(*it); if (targetInProject && Project::ref()->projectBaseURL().isParentOf(url) ) { confirm = false; moveInsideProject = true; } if ( !checkProjectRemove(*it, window, confirm, false)) { return false; confirm = oldConfirm; } } // all URLs are confirmed, we remove them from the project for ( KURL::List::ConstIterator it = srcList.begin(); it != srcList.end(); ++it ) { if ( Project::ref()->projectBaseURL().isParentOf(*it) ) Project::ref()->slotRemove(*it); } bool ok = KIO::NetAccess::move( srcList, targetURL, window ); if (ok) { KURL url; for ( KURL::List::ConstIterator it = srcList.begin(); it != srcList.end(); ++it ) { url = target; url.adjustPath(+1); url.setFileName((*it).fileName()); checkProjectInsert(url, window, confirm); Project::ref()->urlMoved(*it, url); } } else { if (confirm) errorMsg(window); } return ok; } bool QuantaNetAccess::del( const KURL & url, TQWidget* window, bool confirm ) { if ( !checkProjectDel(url, window, confirm)) { return false; } bool ok = KIO::NetAccess::del( url, window ); if (!ok && confirm) { errorMsg(window); } return ok; } bool QuantaNetAccess::mkdir( const KURL & url, TQWidget* window, int permissions, bool confirm ) { KURL u = url; u.adjustPath(-1); //some servers refuse to create directories ending with a slash bool ok = KIO::NetAccess::mkdir( u, window, permissions ); if (ok) { checkProjectInsert(url, window, confirm); } else { if (confirm) errorMsg(window); } return ok; } void QuantaNetAccess::checkProjectInsert(const KURL& target, TQWidget* window, bool confirm) { if ( !Project::ref()->hasProject()) return; KURL saveUrl = adjustURL(target); KURL baseURL = Project::ref()->projectBaseURL(); if ( baseURL.isParentOf(saveUrl) && !Project::ref()->tqcontains(saveUrl) ) { if (confirm) { TQString nice = TQExtFileInfo::toRelative(saveUrl, baseURL).path(); nice = KStringHandler::lsqueeze(nice, 60); if ( KMessageBox::Yes != KMessageBox::questionYesNo(window, i18n("Do you want to add
%1
to the project?
").tqarg(nice), i18n("Add to Project"), KStdGuiItem::add(), i18n("Do Not Add"), "AddToProject") ) { return; } } KFileItem fileItem(KFileItem::Unknown, KFileItem::Unknown, saveUrl); if ( fileItem.isDir() ) Project::ref()->slotAddDirectory(saveUrl, false); else Project::ref()->slotInsertFile(saveUrl); } } bool QuantaNetAccess::checkProjectRemove(const KURL& src, TQWidget* window, bool confirm, bool remove) { if ( !Project::ref()->hasProject() ) return true; KURL url = adjustURL(src); KURL baseURL = Project::ref()->projectBaseURL(); if ( baseURL.isParentOf(url) && Project::ref()->tqcontains(url) ) { if (confirm) { TQString nice = TQExtFileInfo::toRelative(url, baseURL).path(); nice = KStringHandler::lsqueeze(nice, 60); if ( KMessageBox::Continue != KMessageBox::warningContinueCancel(window, i18n("Do you really want to remove
%1
from the project?
").tqarg(nice), i18n("Remove From Project"), KStdGuiItem::remove(), "RemoveFromProject") ) { return false; } } if (remove) Project::ref()->slotRemove(url); } return true; } bool QuantaNetAccess::checkProjectDel(const KURL& src, TQWidget* window, bool confirm) { KURL url = adjustURL(src); if ( Project::ref()->hasProject() ) { if ( Project::ref()->projectBaseURL().isParentOf(url) && Project::ref()->tqcontains(url) ) { if (confirm) { TQString nice = url.prettyURL(0, KURL::StripFileProtocol); nice = KStringHandler::csqueeze(nice, 60); if ( KMessageBox::Continue != KMessageBox::warningContinueCancel(window, i18n("Do you really want to delete
%1
and remove it from the project?
").tqarg(nice), i18n("Delete & Remove From Project"), KStdGuiItem::del(), "DeleteAndRemoveFromProject") ) { return false; } } Project::ref()->slotRemove(url); return true; } } // confirm normal delete if wanted if (confirm) { TQString nice = url.prettyURL(0, KURL::StripFileProtocol); nice = KStringHandler::csqueeze(nice, 60); return (KMessageBox::Continue == KMessageBox::warningContinueCancel(window, i18n("Do you really want to delete
%1?
").tqarg(nice), i18n("Delete File or Folder"), KStdGuiItem::del(), "DeleteFileOrFolder") ); } return true; } KURL QuantaNetAccess::adjustURL(const KURL &url) { KURL u = url; if ( u.isLocalFile() ) { TQDir dir(u.path()); u.setPath(dir.canonicalPath()); } return u; } void QuantaNetAccess::errorMsg(TQWidget* window) { TQString msg = KIO::NetAccess::lastErrorString(); if ( !msg.isEmpty()) KMessageBox::sorry(window, msg); }