From: <arn...@us...> - 2006-12-27 22:46:00
|
Revision: 700 http://svn.sourceforge.net/dcplusplus/?rev=700&view=rev Author: arnetheduck Date: 2006-12-27 14:45:57 -0800 (Wed, 27 Dec 2006) Log Message: ----------- patches Modified Paths: -------------- dcplusplus/trunk/changelog.txt dcplusplus/trunk/client/DirectoryListing.cpp dcplusplus/trunk/client/DirectoryListing.h dcplusplus/trunk/client/QueueManager.cpp dcplusplus/trunk/client/QueueManager.h dcplusplus/trunk/client/QueueManagerListener.h dcplusplus/trunk/client/SearchManager.cpp dcplusplus/trunk/client/ShareManager.cpp dcplusplus/trunk/client/ShareManager.h dcplusplus/trunk/client/Socket.cpp dcplusplus/trunk/windows/DirectoryListingFrm.cpp dcplusplus/trunk/windows/DirectoryListingFrm.h dcplusplus/trunk/windows/MainFrm.cpp dcplusplus/trunk/windows/MainFrm.h dcplusplus/trunk/windows/QueueFrame.cpp dcplusplus/trunk/windows/SearchFrm.cpp dcplusplus/trunk/windows/WinUtil.cpp dcplusplus/trunk/windows/WinUtil.h Modified: dcplusplus/trunk/changelog.txt =================================================================== --- dcplusplus/trunk/changelog.txt 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/changelog.txt 2006-12-27 22:45:57 UTC (rev 700) @@ -1,4 +1,11 @@ --- 0.699 2006-12-18 -- +-- -- +* [bug 1102] Fixed move/rename queue folder (thanks mikael eman) +* [bug 1124] Fixed thread shutdown on *nix (thanks mikael eman) +* Fixed invalid share size +* [bug 1127] Fixed crash on invalid file list (thanks steven sheehy) +* [bug 1019] Reworked initial filelist dir (thanks mikael eman) + +-- 0.699 2006-12-18 -- * Switched to VC8/VS2005 * Removed some unused options * Antifrag is now default Modified: dcplusplus/trunk/client/DirectoryListing.cpp =================================================================== --- dcplusplus/trunk/client/DirectoryListing.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/DirectoryListing.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -75,7 +75,7 @@ return p; } -void DirectoryListing::loadFile(const string& name) throw(FileException, SimpleXMLException) { +void DirectoryListing::loadFile(const string& name) throw(Exception) { string txt; // For now, we detect type by ending... Modified: dcplusplus/trunk/client/DirectoryListing.h =================================================================== --- dcplusplus/trunk/client/DirectoryListing.h 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/DirectoryListing.h 2006-12-27 22:45:57 UTC (rev 700) @@ -133,7 +133,7 @@ delete root; } - void loadFile(const string& name) throw(FileException, SimpleXMLException); + void loadFile(const string& name) throw(Exception); string loadXML(const string& xml, bool updating); Modified: dcplusplus/trunk/client/QueueManager.cpp =================================================================== --- dcplusplus/trunk/client/QueueManager.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/QueueManager.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -404,10 +404,14 @@ } } -void QueueManager::addList(const User::Ptr& aUser, int aFlags) throw(QueueException, FileException) { +void QueueManager::addList(const User::Ptr& aUser, int aFlags, const string& aInitialDir /* = Util::emptyString */) throw(QueueException, FileException) { // complete target is checked later, just remove path separators from the nick here string target = Util::getListPath() + Util::cleanPathChars(aUser->getFirstNick()) + "." + aUser->getCID().toBase32(); + if (!aInitialDir.empty()) { + dirMap[aUser->getCID().toBase32()] = aInitialDir; + } + add(target, -1, TTHValue(), aUser, QueueItem::FLAG_USER_LIST | aFlags); } @@ -802,7 +806,14 @@ | (q->isSet(QueueItem::FLAG_MATCH_QUEUE) ? QueueItem::FLAG_MATCH_QUEUE : 0); } - fire(QueueManagerListener::Finished(), q, aDownload->getAverageSpeed()); + string dir; + StringMapIter i = dirMap.find(aDownload->getUser()->getCID().toBase32()); + if (i != dirMap.end()) { + dir = i->second; + dirMap.erase(i); + } + + fire(QueueManagerListener::Finished(), q, dir, aDownload->getAverageSpeed()); fire(QueueManagerListener::Removed(), q); userQueue.remove(q); @@ -913,6 +924,11 @@ File::deleteFile(q->getTempTarget()); } + StringMapIter i = dirMap.find(q->getCurrent()->getCID().toBase32()); + if (i != dirMap.end()) { + dirMap.erase(i); + } + fire(QueueManagerListener::Removed(), q); userQueue.remove(q); Modified: dcplusplus/trunk/client/QueueManager.h =================================================================== --- dcplusplus/trunk/client/QueueManager.h 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/QueueManager.h 2006-12-27 22:45:57 UTC (rev 700) @@ -78,7 +78,7 @@ void add(const string& aTarget, int64_t aSize, const TTHValue& root, User::Ptr aUser, int aFlags = QueueItem::FLAG_RESUME, bool addBad = true) throw(QueueException, FileException); /** Add a user's filelist to the queue. */ - void addList(const User::Ptr& aUser, int aFlags) throw(QueueException, FileException); + void addList(const User::Ptr& aUser, int aFlags, const string& aInitialDir = Util::emptyString) throw(QueueException, FileException); /** Queue a partial file list download */ void addPfs(const User::Ptr& aUser, const string& aDir) throw(QueueException); /** Readd a source that was removed */ @@ -201,7 +201,8 @@ bool dirty; /** Next search */ uint32_t nextSearch; - + /** map for storing initial dir for file lists */ + StringMap dirMap; /** Sanity check for the target filename */ static string checkTarget(const string& aTarget, int64_t aSize, int& flags) throw(QueueException, FileException); /** Add a source to an existing queue item */ Modified: dcplusplus/trunk/client/QueueManagerListener.h =================================================================== --- dcplusplus/trunk/client/QueueManagerListener.h 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/QueueManagerListener.h 2006-12-27 22:45:57 UTC (rev 700) @@ -40,7 +40,7 @@ typedef X<7> PartialList; virtual void on(Added, QueueItem*) throw() { } - virtual void on(Finished, QueueItem*, int64_t) throw() { } + virtual void on(Finished, QueueItem*, const string&, int64_t) throw() { } virtual void on(Removed, QueueItem*) throw() { } virtual void on(Moved, QueueItem*, const string&) throw() { } virtual void on(SourcesUpdated, QueueItem*) throw() { } Modified: dcplusplus/trunk/client/SearchManager.cpp =================================================================== --- dcplusplus/trunk/client/SearchManager.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/SearchManager.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -112,9 +112,9 @@ stop = true; socket->disconnect(); port = 0; -#ifdef _WIN32 + join(); -#endif + stop = false; } } Modified: dcplusplus/trunk/client/ShareManager.cpp =================================================================== --- dcplusplus/trunk/client/ShareManager.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/ShareManager.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -703,6 +703,8 @@ addTree(*i->second); } + dir.size = 0; + for(Directory::File::Iter i = dir.files.begin(); i != dir.files.end(); ) { addFile(dir, i++); } Modified: dcplusplus/trunk/client/ShareManager.h =================================================================== --- dcplusplus/trunk/client/ShareManager.h 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/ShareManager.h 2006-12-27 22:45:57 UTC (rev 700) @@ -157,7 +157,7 @@ File::Set files; Directory(const string& aName = Util::emptyString, Directory* aParent = NULL) : - size(0), name(aName), parent(aParent), fileTypes(0) { + name(aName), parent(aParent), fileTypes(0) { } ~Directory(); Modified: dcplusplus/trunk/client/Socket.cpp =================================================================== --- dcplusplus/trunk/client/Socket.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/client/Socket.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -568,7 +568,7 @@ void Socket::shutdown() throw() { if(sock != INVALID_SOCKET) - ::shutdown(sock, 1); + ::shutdown(sock, 2); } void Socket::close() throw() { Modified: dcplusplus/trunk/windows/DirectoryListingFrm.cpp =================================================================== --- dcplusplus/trunk/windows/DirectoryListingFrm.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/DirectoryListingFrm.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -41,7 +41,7 @@ DirectoryListingFrame::UserMap DirectoryListingFrame::lists; -void DirectoryListingFrame::openWindow(const tstring& aFile, const User::Ptr& aUser, int64_t aSpeed) { +void DirectoryListingFrame::openWindow(const tstring& aFile, const tstring& aDir, const User::Ptr& aUser, int64_t aSpeed) { UserIter i = lists.find(aUser); if(i != lists.end()) { if(!BOOLSETTING(POPUNDER_FILELIST)) { @@ -55,7 +55,7 @@ } else { frame->CreateEx(WinUtil::mdiClient); } - frame->loadFile(aFile); + frame->loadFile(aFile, aDir); frames.insert( FramePair( frame->m_hWnd, frame ) ); } } @@ -85,11 +85,11 @@ lists.insert(make_pair(aUser, this)); } -void DirectoryListingFrame::loadFile(const tstring& name) { +void DirectoryListingFrame::loadFile(const tstring& name, const tstring& dir) { try { dl->loadFile(Text::fromT(name)); ADLSearchManager::getInstance()->matchListing(*dl); - refreshTree(Text::toT(WinUtil::getInitialDir(dl->getUser()))); + refreshTree(dir); } catch(const Exception& e) { error = WinUtil::getNicks(dl->getUser()) + Text::toT(": " + e.getError()); } @@ -534,11 +534,15 @@ tstring file; if(WinUtil::browseFile(file, m_hWnd, false, Text::toT(Util::getListPath()), _T("File Lists\0*.xml.bz2\0All Files\0*.*\0"))) { DirectoryListing dirList(dl->getUser()); - dirList.loadFile(Text::fromT(file)); - dl->getRoot()->filterList(dirList); - refreshTree(Util::emptyStringT); - initStatus(); - updateStatus(); + try { + dirList.loadFile(Text::fromT(file)); + dl->getRoot()->filterList(dirList); + refreshTree(Util::emptyStringT); + initStatus(); + updateStatus(); + } catch(const Exception&) { + /// @todo report to user? + } } return 0; } Modified: dcplusplus/trunk/windows/DirectoryListingFrm.h =================================================================== --- dcplusplus/trunk/windows/DirectoryListingFrm.h 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/DirectoryListingFrm.h 2006-12-27 22:45:57 UTC (rev 700) @@ -42,7 +42,7 @@ { public: - static void openWindow(const tstring& aFile, const User::Ptr& aUser, int64_t aSpeed); + static void openWindow(const tstring& aFile, const tstring& aDir, const User::Ptr& aUser, int64_t aSpeed); static void openWindow(const User::Ptr& aUser, const string& txt, int64_t aSpeed); static void closeAll(); @@ -144,7 +144,7 @@ void UpdateLayout(BOOL bResizeBars = TRUE); void findFile(bool findNext); void runUserCommand(UserCommand& uc); - void loadFile(const tstring& name); + void loadFile(const tstring& name, const tstring& dir); void loadXML(const string& txt); void refreshTree(const tstring& root); Modified: dcplusplus/trunk/windows/MainFrm.cpp =================================================================== --- dcplusplus/trunk/windows/MainFrm.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/MainFrm.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -483,7 +483,7 @@ if(wParam == DOWNLOAD_LISTING) { auto_ptr<DirectoryListInfo> i(reinterpret_cast<DirectoryListInfo*>(lParam)); - DirectoryListingFrame::openWindow(i->file, i->user, i->speed); + DirectoryListingFrame::openWindow(i->file, i->dir, i->user, i->speed); } else if(wParam == BROWSE_LISTING) { auto_ptr<DirectoryBrowseInfo> i(reinterpret_cast<DirectoryBrowseInfo*>(lParam)); DirectoryListingFrame::openWindow(i->user, i->text, 0); @@ -971,7 +971,7 @@ if(WinUtil::browseFile(file, m_hWnd, false, Text::toT(Util::getListPath()), types)) { User::Ptr u = DirectoryListing::getUserFromFilename(Text::fromT(file)); if(u) { - DirectoryListingFrame::openWindow(file, u, 0); + DirectoryListingFrame::openWindow(file, Text::toT(Util::emptyString), u, 0); } else { MessageBox(CTSTRING(INVALID_LISTNAME), _T(APPNAME) _T(" ") _T(VERSIONSTRING)); } @@ -981,7 +981,7 @@ LRESULT MainFrame::onOpenOwnList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { if(!ShareManager::getInstance()->getOwnListFile().empty()){ - DirectoryListingFrame::openWindow(Text::toT(ShareManager::getInstance()->getOwnListFile()), ClientManager::getInstance()->getMe(), 0); + DirectoryListingFrame::openWindow(Text::toT(ShareManager::getInstance()->getOwnListFile()), Text::toT(Util::emptyString), ClientManager::getInstance()->getMe(), 0); } return 0; } @@ -1125,11 +1125,11 @@ PostMessage(WM_SPEAKER, BROWSE_LISTING, (LPARAM)new DirectoryBrowseInfo(aUser, text)); } -void MainFrame::on(QueueManagerListener::Finished, QueueItem* qi, int64_t speed) throw() { +void MainFrame::on(QueueManagerListener::Finished, QueueItem* qi, const string& dir, int64_t speed) throw() { if(qi->isSet(QueueItem::FLAG_CLIENT_VIEW)) { if(qi->isSet(QueueItem::FLAG_USER_LIST)) { // This is a file listing, show it... - DirectoryListInfo* i = new DirectoryListInfo(qi->getCurrent(), Text::toT(qi->getListName()), speed); + DirectoryListInfo* i = new DirectoryListInfo(qi->getCurrent(), Text::toT(qi->getListName()), Text::toT(dir), speed); PostMessage(WM_SPEAKER, DOWNLOAD_LISTING, (LPARAM)i); } else if(qi->isSet(QueueItem::FLAG_TEXT)) { Modified: dcplusplus/trunk/windows/MainFrm.h =================================================================== --- dcplusplus/trunk/windows/MainFrm.h 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/MainFrm.h 2006-12-27 22:45:57 UTC (rev 700) @@ -297,9 +297,10 @@ class DirectoryListInfo { public: - DirectoryListInfo(const User::Ptr& aUser, const tstring& aFile, int64_t aSpeed) : user(aUser), file(aFile), speed(aSpeed) { } + DirectoryListInfo(const User::Ptr& aUser, const tstring& aFile, const tstring& aDir, int64_t aSpeed) : user(aUser), file(aFile), dir(aDir), speed(aSpeed) { } User::Ptr user; tstring file; + tstring dir; int64_t speed; }; class DirectoryBrowseInfo { @@ -376,7 +377,7 @@ virtual void on(HttpConnectionListener::Data, HttpConnection* /*conn*/, const uint8_t* buf, size_t len) throw(); // QueueManagerListener - virtual void on(QueueManagerListener::Finished, QueueItem* qi, int64_t speed) throw(); + virtual void on(QueueManagerListener::Finished, QueueItem* qi, const string& dir, int64_t speed) throw(); virtual void on(PartialList, const User::Ptr&, const string& text) throw(); // UPnP connectors Modified: dcplusplus/trunk/windows/QueueFrame.cpp =================================================================== --- dcplusplus/trunk/windows/QueueFrame.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/QueueFrame.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -697,7 +697,8 @@ void QueueFrame::moveDir(HTREEITEM ht, const string& target) { HTREEITEM next = ctrlDirs.GetChildItem(ht); while(next != NULL) { - moveDir(next, target + Util::getLastDir(getDir(next))); + // must add path separator since getLastDir only give us the name + moveDir(next, target + Util::getLastDir(getDir(next)) + PATH_SEPARATOR); next = ctrlDirs.GetNextSiblingItem(next); } string* s = (string*)ctrlDirs.GetItemData(ht); Modified: dcplusplus/trunk/windows/SearchFrm.cpp =================================================================== --- dcplusplus/trunk/windows/SearchFrm.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/SearchFrm.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -471,8 +471,7 @@ void SearchFrame::SearchInfo::getList() { try { - WinUtil::addInitalDir(sr->getUser(), Text::fromT(columns[COLUMN_PATH])); - QueueManager::getInstance()->addList(sr->getUser(), QueueItem::FLAG_CLIENT_VIEW); + QueueManager::getInstance()->addList(sr->getUser(), QueueItem::FLAG_CLIENT_VIEW, Text::fromT(columns[COLUMN_PATH])); } catch(const Exception&) { // Ignore for now... } Modified: dcplusplus/trunk/windows/WinUtil.cpp =================================================================== --- dcplusplus/trunk/windows/WinUtil.cpp 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/WinUtil.cpp 2006-12-27 22:45:57 UTC (rev 700) @@ -65,7 +65,6 @@ FlatTabCtrl* WinUtil::tabCtrl = NULL; HHOOK WinUtil::hook = NULL; tstring WinUtil::tth; -StringPairList WinUtil::initialDirs; DWORD WinUtil::helpCookie = 0; bool WinUtil::urlDcADCRegistered = false; bool WinUtil::urlMagnetRegistered = false; Modified: dcplusplus/trunk/windows/WinUtil.h =================================================================== --- dcplusplus/trunk/windows/WinUtil.h 2006-12-18 21:32:33 UTC (rev 699) +++ dcplusplus/trunk/windows/WinUtil.h 2006-12-27 22:45:57 UTC (rev 700) @@ -189,7 +189,6 @@ static tstring commands; static HHOOK hook; static tstring tth; - static StringPairList initialDirs; static DWORD helpCookie; static void init(HWND hWnd); @@ -203,27 +202,6 @@ static void decodeFont(const tstring& setting, LOGFONT &dest); - static void addInitalDir(const User::Ptr& user, string dir) { - // Clear out previos initial dirs, just in case - /// @todo clean up - getInitialDir(user); - while(initialDirs.size() > 30) { - initialDirs.erase(initialDirs.begin()); - } - initialDirs.push_back(make_pair(user->getCID().toBase32(), dir)); - } - - static string getInitialDir(const User::Ptr& user) { - for(StringPairIter i = initialDirs.begin(); i != initialDirs.end(); ++i) { - if(i->first == user->getCID().toBase32()) { - string dir = i->second; - initialDirs.erase(i); - return dir; - } - } - return Util::emptyString; - } - static bool getVersionInfo(OSVERSIONINFOEX& ver); /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |