int CUploadListCtrl::SortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { const CUpDownClient *item1 = (CUpDownClient *)lParam1; const CUpDownClient *item2 = (CUpDownClient *)lParam2; int iColumn = (lParamSort >= 100) ? lParamSort - 100 : lParamSort; int iResult = 0; switch (iColumn) { case 0: if (item1->GetUserName() && item2->GetUserName()) iResult = CompareLocaleStringNoCase(item1->GetUserName(), item2->GetUserName()); else if (item1->GetUserName() == NULL) iResult = 1; // place clients with no usernames at bottom else if (item2->GetUserName() == NULL) iResult = -1; // place clients with no usernames at bottom break; case 1: { // ==> requpfile optimization [SiRoB] - Stulle /* const CKnownFile *file1 = theApp.sharedfiles->GetFileByID(item1->GetUploadFileID()); const CKnownFile *file2 = theApp.sharedfiles->GetFileByID(item2->GetUploadFileID()); */ const CKnownFile *file1 = item1->CheckAndGetReqUpFile(); const CKnownFile *file2 = item2->CheckAndGetReqUpFile(); // <== requpfile optimization [SiRoB] - Stulle if (file1 != NULL && file2 != NULL) iResult = CompareLocaleStringNoCase(file1->GetFileName(), file2->GetFileName()); else if (file1 == NULL) iResult = 1; else iResult = -1; break; } // Maella -Accurate measure of bandwidth: eDonkey data + control, network adapter- /* case 2: iResult = CompareUnsigned(item1->GetDatarate(), item2->GetDatarate()); break; */ case 2: iResult = item1->GetUploadDatarate() - item2->GetUploadDatarate(); break; // Maella end case 3: iResult = CompareUnsigned(item1->GetSessionUp(), item2->GetSessionUp()); //Xman don't show too many values /* if (iResult == 0 && thePrefs.m_bExtControls) iResult = CompareUnsigned(item1->GetQueueSessionPayloadUp(), item2->GetQueueSessionPayloadUp()); */ //Xman end break; case 4: iResult = CompareUnsigned(item1->GetWaitTime(), item2->GetWaitTime()); break; case 5: iResult = CompareUnsigned(item1->GetUpStartTimeDelay() ,item2->GetUpStartTimeDelay()); break; case 6: iResult = item1->GetUploadState() - item2->GetUploadState(); break; case 7: // ==> Sort progress bars by percentage [Fafner/Xman] - Stulle /* iResult = CompareUnsigned(item1->GetUpPartCount(), item2->GetUpPartCount()); */ if (item1->GetHisCompletedPartsPercent_UP() == item2->GetHisCompletedPartsPercent_UP()) iResult=0; else iResult=item1->GetHisCompletedPartsPercent_UP() > item2->GetHisCompletedPartsPercent_UP()?1:-1; // <== Sort progress bars by percentage [Fafner/Xman] - Stulle break; //Xman version see clientversion in every window case 8: // Maella -Support for tag ET_MOD_VERSION 0x55- if(item1->GetClientSoft() == item2->GetClientSoft()) if(item1->GetVersion() == item2->GetVersion() && (item1->GetClientSoft() == SO_EMULE || item1->GetClientSoft() == SO_AMULE)) { iResult = item2->DbgGetFullClientSoftVer().CompareNoCase( item1->DbgGetFullClientSoftVer()); } else { iResult = item1->GetVersion() - item2->GetVersion(); } else iResult = -(item1->GetClientSoft() - item2->GetClientSoft()); // invert result to place eMule's at top break; //Xman end //Xman show complete up/down in uploadlist case 9: if(item1->Credits() && item2->Credits()) { iResult=CompareUnsigned64(item1->credits->GetUploadedTotal(), item2->credits->GetUploadedTotal()); } else iResult=0; break; //Xman end // ==> Uploading Chunk Detail Display [SiRoB/Fafner] - Stulle case 10: if (item1->GetUpChunkProgressPercent() == item2->GetUpChunkProgressPercent()) iResult=0; else iResult=item1->GetUpChunkProgressPercent() > item2->GetUpChunkProgressPercent()?1:-1; break; // <== Uploading Chunk Detail Display [SiRoB/Fafner] - Stulle } if (lParamSort >= 100) iResult = -iResult; // SLUGFILLER: multiSort remove - handled in parent class /* //call secondary sortorder, if this one results in equal int dwNextSort; if (iResult == 0 && (dwNextSort = theApp.emuledlg->transferwnd->m_pwndTransfer->uploadlistctrl.GetNextSortOrder(lParamSort)) != -1) iResult = SortProc(lParam1, lParam2, dwNextSort); */ // SLUGFILLER End return iResult; }
int CQueueListCtrl::SortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { const CUpDownClient *item1 = (CUpDownClient *)lParam1; const CUpDownClient *item2 = (CUpDownClient *)lParam2; int iColumn = (lParamSort >= 100) ? lParamSort - 100 : lParamSort; int iResult = 0; switch (iColumn) { case 0: if (item1->GetUserName() && item2->GetUserName()) iResult = CompareLocaleStringNoCase(item1->GetUserName(), item2->GetUserName()); else if (item1->GetUserName() == NULL) iResult = 1; // place clients with no usernames at bottom else if (item2->GetUserName() == NULL) iResult = -1; // place clients with no usernames at bottom break; case 1: { const CKnownFile *file1 = theApp.sharedfiles->GetFileByID(item1->GetUploadFileID()); const CKnownFile *file2 = theApp.sharedfiles->GetFileByID(item2->GetUploadFileID()); if (file1 != NULL && file2 != NULL) iResult = CompareLocaleStringNoCase(file1->GetFileName(), file2->GetFileName()); else if (file1 == NULL) iResult = 1; else iResult = -1; break; } case 2: { const CKnownFile *file1 = theApp.sharedfiles->GetFileByID(item1->GetUploadFileID()); const CKnownFile *file2 = theApp.sharedfiles->GetFileByID(item2->GetUploadFileID()); if (file1 != NULL && file2 != NULL) // ==> PowerShare [ZZ/MorphXT] - Stulle // ==> Fair Play [AndCycle/Stulle] - Stulle { if (!file1->GetPowerShared() && !file1->statistic.GetFairPlay() && (file2->GetPowerShared() || file2->statistic.GetFairPlay())) iResult=-1; else if ((file1->GetPowerShared() || file1->statistic.GetFairPlay()) && !file2->GetPowerShared() && !file2->statistic.GetFairPlay()) iResult=1; else // <== Fair Play [AndCycle/Stulle] - Stulle // <== PowerShare [ZZ/MorphXT] - Stulle iResult = (file1->GetUpPriority() == PR_VERYLOW ? -1 : file1->GetUpPriority()) - (file2->GetUpPriority() == PR_VERYLOW ? -1 : file2->GetUpPriority()); } // PowerShare [ZZ/MorphXT] - Stulle else if (file1 == NULL) iResult = 1; else iResult = -1; break; } case 3: iResult = CompareUnsigned(item1->GetScore(false, false, true), item2->GetScore(false, false, true)); break; case 4: // ==> Superior Client Handling [Stulle] - Stulle if(!item1->IsSuperiorClient() && item2->IsSuperiorClient()) iResult=-1; else if(item1->IsSuperiorClient() && !item2->IsSuperiorClient()) iResult=1; else // <== Superior Client Handling [Stulle] - Stulle iResult = CompareUnsigned(item1->GetScore(false), item2->GetScore(false)); break; case 5: iResult = CompareUnsigned(item1->GetAskedCount(), item2->GetAskedCount()); break; case 6: iResult = CompareUnsigned(item1->GetLastUpRequest(), item2->GetLastUpRequest()); break; case 7: // ==> SUQWT [Moonlight/EastShare/ MorphXT] - Stulle /* iResult = CompareUnsigned(item1->GetWaitStartTime(), item2->GetWaitStartTime()); */ { sint64 time1 = item1->GetWaitStartTime(); sint64 time2 = item2->GetWaitStartTime(); if ( time1 == time2 ) { iResult = 0; } else if ( time1 > time2 ) { iResult = 1; } else { iResult = -1; } break; } // <== SUQWT [Moonlight/EastShare/ MorphXT] - Stulle break; case 8: iResult = item1->IsBanned() - item2->IsBanned(); break; case 9: // ==> Sort progress bars by percentage [Fafner/Xman] - Stulle /* iResult = CompareUnsigned(item1->GetUpPartCount(), item2->GetUpPartCount()); */ if (item1->GetHisCompletedPartsPercent_UP() == item2->GetHisCompletedPartsPercent_UP()) iResult=0; else iResult=item1->GetHisCompletedPartsPercent_UP() > item2->GetHisCompletedPartsPercent_UP()?1:-1; // <== Sort progress bars by percentage [Fafner/Xman] - Stulle break; //Xman version see clientversion in every window case 10: // Maella -Support for tag ET_MOD_VERSION 0x55- if(item1->GetClientSoft() == item2->GetClientSoft()) if(item1->GetVersion() == item2->GetVersion() && (item1->GetClientSoft() == SO_EMULE || item1->GetClientSoft() == SO_AMULE)){ iResult = item2->DbgGetFullClientSoftVer().CompareNoCase( item1->DbgGetFullClientSoftVer()); } else { iResult = item1->GetVersion() - item2->GetVersion(); } else iResult = -(item1->GetClientSoft() - item2->GetClientSoft()); // invert result to place eMule's at top break; //Xman show complete up/down in queuelist case 11: if(item1->Credits() && item2->Credits()) iResult=CompareUnsigned64(item1->credits->GetUploadedTotal(), item2->credits->GetUploadedTotal()); else iResult=0; break; //Xman end // ==> push small files [sivka] - Stulle case 12: iResult=item1->GetSmallFilePush() - item2->GetSmallFilePush(); break; // <== push small files [sivka] - Stulle // ==> push rare file - Stulle case 13: iResult=CompareFloat(item1->GetRareFilePushRatio(),item2->GetRareFilePushRatio()); break; // <== push rare file - Stulle } if (lParamSort >= 100) iResult = -iResult; // SLUGFILLER: multiSort remove - handled in parent class /* //call secondary sortorder, if this one results in equal int dwNextSort; if (iResult == 0 && (dwNextSort = theApp.emuledlg->transferwnd->GetQueueList()->GetNextSortOrder(lParamSort)) != -1) iResult = SortProc(lParam1, lParam2, dwNextSort); */ // SLUGFILLER: multiSort remove - handled in parent class return iResult; }
int CClientListCtrl::SortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { const CUpDownClient* item1 = (CUpDownClient*)lParam1; const CUpDownClient* item2 = (CUpDownClient*)lParam2; int iResult=0; switch (lParamSort) { case 0: if (item1->GetUserName() && item2->GetUserName()) iResult=CompareLocaleStringNoCase(item1->GetUserName(), item2->GetUserName()); else if (!item1->GetUserName() && !item2->GetUserName()) iResult=0; else { // place clients with no usernames at bottom if (!item1->GetUserName()) iResult=1; else iResult=-1; } break; case 100: if (item1->GetUserName() && item2->GetUserName()) iResult=CompareLocaleStringNoCase(item2->GetUserName(), item1->GetUserName()); else if (!item1->GetUserName() && !item2->GetUserName()) iResult=0; else { // place clients with no usernames at bottom if (!item1->GetUserName()) iResult=1; else iResult=-1; } break; case 1: iResult=item1->GetUploadState() - item2->GetUploadState(); break; case 101: iResult=item2->GetUploadState() - item1->GetUploadState(); break; case 2: if (item1->credits && item2->credits) iResult=CompareUnsigned64(item1->credits->GetUploadedTotal(), item2->credits->GetUploadedTotal()); else if (!item1->credits) iResult=1; else iResult=-1; break; case 102: if (item1->credits && item2->credits) iResult=CompareUnsigned64(item2->credits->GetUploadedTotal(), item1->credits->GetUploadedTotal()); else if (!item1->credits) iResult=1; else iResult=-1; break; case 3: if (item1->GetDownloadState() == item2->GetDownloadState()) { if (item1->IsRemoteQueueFull() && item2->IsRemoteQueueFull()) iResult=0; else if (item1->IsRemoteQueueFull()) iResult=1; else if (item2->IsRemoteQueueFull()) iResult=-1; else iResult=0; } else iResult=item1->GetDownloadState() - item2->GetDownloadState(); break; case 103: if (item2->GetDownloadState() == item1->GetDownloadState()) { if (item2->IsRemoteQueueFull() && item1->IsRemoteQueueFull()) iResult=0; else if (item2->IsRemoteQueueFull()) iResult=1; else if (item1->IsRemoteQueueFull()) iResult=-1; else iResult=0; } else iResult=item2->GetDownloadState() - item1->GetDownloadState(); break; case 4: if (item1->credits && item2->credits) iResult=CompareUnsigned64(item1->credits->GetDownloadedTotal(), item2->credits->GetDownloadedTotal()); else if (!item1->credits) iResult=1; else iResult=-1; break; case 104: if (item1->credits && item2->credits) iResult=CompareUnsigned64(item2->credits->GetDownloadedTotal(), item1->credits->GetDownloadedTotal()); else if (!item1->credits) iResult=1; else iResult=-1; break; case 5: if (item1->GetClientSoft() == item2->GetClientSoft()) iResult=item2->GetVersion() - item1->GetVersion(); else iResult=item1->GetClientSoft() - item2->GetClientSoft(); break; case 105: if (item1->GetClientSoft() == item2->GetClientSoft()) iResult=item1->GetVersion() - item2->GetVersion(); else iResult=item2->GetClientSoft() - item1->GetClientSoft(); break; case 6: if (item1->socket && item2->socket) iResult=item1->socket->IsConnected() - item2->socket->IsConnected(); else if (!item1->socket) iResult=-1; else iResult=1; break; case 106: if (item1->socket && item2->socket) iResult=item2->socket->IsConnected() - item1->socket->IsConnected(); else if (!item2->socket) iResult=-1; else iResult=1; break; case 7: iResult=memcmp(item1->GetUserHash(), item2->GetUserHash(), 16); break; case 107: iResult=memcmp(item2->GetUserHash(), item1->GetUserHash(), 16); break; default: iResult=0; } int dwNextSort; //call secondary sortorder, if this one results in equal //(Note: yes I know this call is evil OO wise, but better than changing a lot more code, while we have only one instance anyway - might be fixed later) if (iResult == 0 && (dwNextSort = theApp.emuledlg->transferwnd->clientlistctrl.GetNextSortOrder(lParamSort)) != (-1)){ iResult= SortProc(lParam1, lParam2, dwNextSort); } return iResult; }