|
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.
|