Fix email sorting

* Simplify pSubject copying else ifs
* Formatting
This commit is contained in:
Asdow
2026-01-03 17:27:43 +02:00
parent fe69dba958
commit 5ed79c3edb
+178 -187
View File
@@ -1370,217 +1370,208 @@ void AddMessageToPages(INT32 iMessageId)
return; return;
} }
void SortMessages(INT32 iCriteria) static void SortMessages(INT32 iCriteria)
{ {
EmailPtr pA=pEmailList; EmailPtr pA = pEmailList;
EmailPtr pB=pEmailList; EmailPtr pB = pEmailList;
CHAR16 pSubjectA[256]; CHAR16 pSubjectA[256];
CHAR16 pSubjectB[256]; CHAR16 pSubjectB[256];
// no messages to sort? // no messages to sort?
if( ( pA == NULL) ||( pB == NULL ) ) if ( (pA == NULL) || (pB == NULL) )
{ {
return; return;
} }
// nothing here either? // nothing here either?
if(!pA->Next) if ( !pA->Next )
return; return;
pB=pA->Next; pB = pA->Next;
switch(iCriteria) switch ( iCriteria )
{ {
case RECEIVED: case RECEIVED:
while(pA) while ( pA )
{ {
// set B to next in A
pB = pA->Next;
while ( pB )
{
// set B to next in A if ( fSortDateUpwards )
pB=pA->Next; {
while(pB) // if date is lesser, swap
{ if ( pA->iDate > pB->iDate )
SwapMessages(pA->iId, pB->iId);
if( fSortDateUpwards ) }
{ else
// if date is lesser, swap {
if(pA->iDate > pB->iDate) // if date is lesser, swap
SwapMessages(pA->iId, pB->iId); if ( pA->iDate < pB->iDate )
} SwapMessages(pA->iId, pB->iId);
else }
{
// if date is lesser, swap
if(pA->iDate < pB->iDate)
SwapMessages(pA->iId, pB->iId);
}
// next in B's list // next in B's list
pB=pB->Next; pB = pB->Next;
} }
// next in A's List // next in A's List
pA=pA->Next; pA = pA->Next;
} }
break; break;
case SENDER: case SENDER:
while(pA) while ( pA )
{ {
pB = pA->Next;
while ( pB )
{
// lesser string?...need sorting
if ( fSortSenderUpwards )
{
if ( (wcscmp(pSenderNameList[pA->ubSender], pSenderNameList[pB->ubSender])) < 0 )
SwapMessages(pA->iId, pB->iId);
}
else
{
if ( (wcscmp(pSenderNameList[pA->ubSender], pSenderNameList[pB->ubSender])) > 0 )
SwapMessages(pA->iId, pB->iId);
}
// next in B's list
pB = pB->Next;
}
// next in A's List
pA = pA->Next;
}
break;
case SUBJECT:
while ( pA )
{
pB = pA->Next;
while ( pB )
{
// clear out control codes
CleanOutControlCodesFromString(pA->pSubject, pSubjectA);
CleanOutControlCodesFromString(pB->pSubject, pSubjectB);
pB = pA->Next; // lesser string?...need sorting
while(pB) if ( fSortSubjectUpwards )
{ {
// lesser string?...need sorting if ( (wcscmp(pA->pSubject, pB->pSubject)) < 0 )
if( fSortSenderUpwards ) SwapMessages(pA->iId, pB->iId);
{ }
if(( wcscmp( pSenderNameList[pA->ubSender] , pSenderNameList[pB->ubSender] ) ) < 0 ) else
SwapMessages(pA->iId, pB->iId); {
} if ( (wcscmp(pA->pSubject, pB->pSubject)) > 0 )
else SwapMessages(pA->iId, pB->iId);
{ }
if(( wcscmp( pSenderNameList[pA->ubSender] , pSenderNameList[pB->ubSender] ) ) > 0 ) // next in B's list
SwapMessages(pA->iId, pB->iId); pB = pB->Next;
} }
// next in B's list // next in A's List
pB=pB->Next; pA = pA->Next;
} }
// next in A's List break;
pA=pA->Next;
}
break;
case SUBJECT:
while(pA)
{
pB = pA->Next; case READ:
while(pB) while ( pA )
{ {
// clear out control codes pB = pA->Next;
CleanOutControlCodesFromString( pA->pSubject, pSubjectA ); while ( pB )
CleanOutControlCodesFromString( pB->pSubject, pSubjectB ); {
// one read and another not?...need sorting
if ( (pA->fRead) && (!(pB->fRead)) )
SwapMessages(pA->iId, pB->iId);
// lesser string?...need sorting // next in B's list
if( fSortSubjectUpwards ) pB = pB->Next;
{ }
if( ( wcscmp( pA->pSubject ,pB->pSubject ) ) < 0) // next in A's List
SwapMessages(pA->iId, pB->iId); pA = pA->Next;
} }
else break;
{ }
if( ( wcscmp( pA->pSubject ,pB->pSubject ) ) > 0)
SwapMessages(pA->iId, pB->iId);
}
// next in B's list
pB=pB->Next;
}
// next in A's List
pA=pA->Next;
}
break;
case READ: // place new list into pages of email
while(pA) //PlaceMessagesinPages();
{
pB = pA->Next; // redraw the screen
while(pB) fReDrawScreenFlag = TRUE;
{
// one read and another not?...need sorting
if( ( pA->fRead ) && ( ! ( pB->fRead ) ) )
SwapMessages(pA->iId, pB->iId);
// next in B's list
pB=pB->Next;
}
// next in A's List
pA=pA->Next;
}
break;
}
// place new list into pages of email
//PlaceMessagesinPages();
// redraw the screen
fReDrawScreenFlag=TRUE;
} }
void SwapMessages(INT32 iIdA, INT32 iIdB) void SwapMessages(INT32 iIdA, INT32 iIdB)
{ {
// swaps locations of messages in the linked list // swaps locations of messages in the linked list
EmailPtr pA=pEmailList; EmailPtr pA = pEmailList;
EmailPtr pB=pEmailList; EmailPtr pB = pEmailList;
EmailPtr pTemp= (EmailPtr) MemAlloc(sizeof(Email) ); EmailPtr pTemp = (EmailPtr)MemAlloc(sizeof(Email));
pTemp->pSubject = (STR16) MemAlloc( 128 * sizeof(CHAR16) ); pTemp->pSubject = (STR16)MemAlloc(128 * sizeof(CHAR16));
memset( pTemp->pSubject, 0, sizeof( CHAR16 ) * 128 ); memset(pTemp->pSubject, 0, sizeof(CHAR16) * 128);
if(!pA->Next) if ( !pA->Next )
return; return;
//find pA //find pA
while(pA->iId!=iIdA) while ( pA->iId != iIdA )
pA=pA->Next; pA = pA->Next;
// find pB // find pB
while(pB->iId!=iIdB) while ( pB->iId != iIdB )
pB=pB->Next; pB = pB->Next;
// swap // swap
// pTemp becomes pA // pTemp becomes pA
pTemp->iId=pA->iId; pTemp->iId = pA->iId;
pTemp->fRead=pA->fRead; pTemp->fRead = pA->fRead;
pTemp->fNew=pA->fNew; pTemp->fNew = pA->fNew;
pTemp->usOffset=pA->usOffset; pTemp->usOffset = pA->usOffset;
pTemp->EmailVersion=pA->EmailVersion; pTemp->EmailVersion = pA->EmailVersion;
pTemp->usLength=pA->usLength; pTemp->usLength = pA->usLength;
pTemp->iDate=pA->iDate; pTemp->iDate = pA->iDate;
pTemp->ubSender=pA->ubSender; pTemp->ubSender = pA->ubSender;
if ( pA->EmailVersion == TYPE_EMAIL_AIM_AVAILABLE )
wcscpy(pTemp->pSubject,EmailMercAvailableText[pA->ubSender].szSubject);
else if ( pA->EmailVersion == TYPE_EMAIL_MERC_LEVEL_UP )
wcscpy(pTemp->pSubject,EmailMercLevelUpText[pA->ubSender].szSubject);
else if ( pA->EmailVersion == TYPE_EMAIL_OTHER )
wcscpy(pTemp->pSubject,EmailOtherText[pA->usLength].szSubject);
else if ( pA->EmailVersion == TYPE_EMAIL_BOBBY_R || pA->EmailVersion == TYPE_EMAIL_BOBBY_R_EMAIL_JA2_EDT )
wcscpy(pTemp->pSubject,pA->pSubject);
else if ( pA->EmailVersion == TYPE_EMAIL_EMAIL_EDT || pA->EmailVersion == TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT || pA->EmailVersion == TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT )
wcscpy(pTemp->pSubject,pA->pSubject);
// pA becomes pB if ( pA->EmailVersion == TYPE_EMAIL_AIM_AVAILABLE )
pA->iId=pB->iId; wcscpy(pTemp->pSubject, EmailMercAvailableText[pA->ubSender].szSubject);
pA->fRead=pB->fRead; else if ( pA->EmailVersion == TYPE_EMAIL_MERC_LEVEL_UP )
pA->fNew=pB->fNew; wcscpy(pTemp->pSubject, EmailMercLevelUpText[pA->ubSender].szSubject);
pA->usOffset=pB->usOffset; else if ( pA->EmailVersion == TYPE_EMAIL_OTHER )
pA->EmailVersion=pB->EmailVersion; wcscpy(pTemp->pSubject, EmailOtherText[pA->usLength].szSubject);
pA->usLength=pB->usLength; else
pA->iDate=pB->iDate; wcscpy(pTemp->pSubject, pA->pSubject);
pA->ubSender=pB->ubSender;
wcscpy(pA->pSubject, pB->pSubject);
// pB becomes pTemp // pA becomes pB
pB->iId=pTemp->iId; pA->iId = pB->iId;
pB->fRead=pTemp->fRead; pA->fRead = pB->fRead;
pB->fNew=pTemp->fNew; pA->fNew = pB->fNew;
pB->usOffset=pTemp->usOffset; pA->usOffset = pB->usOffset;
pB->EmailVersion=pTemp->EmailVersion; pA->EmailVersion = pB->EmailVersion;
pB->usLength=pTemp->usLength; pA->usLength = pB->usLength;
pB->iDate=pTemp->iDate; pA->iDate = pB->iDate;
pB->ubSender=pTemp->ubSender; pA->ubSender = pB->ubSender;
wcscpy(pA->pSubject, pB->pSubject);
if ( pB->EmailVersion == TYPE_EMAIL_AIM_AVAILABLE )
wcscpy(pB->pSubject,EmailMercAvailableText[pTemp->ubSender].szSubject);
else if ( pB->EmailVersion == TYPE_EMAIL_MERC_LEVEL_UP )
wcscpy(pB->pSubject,EmailMercLevelUpText[pTemp->ubSender].szSubject);
else if ( pB->EmailVersion == TYPE_EMAIL_OTHER )
wcscpy(pB->pSubject,EmailOtherText[pTemp->usLength].szSubject);
else if ( pB->EmailVersion == TYPE_EMAIL_BOBBY_R || pB->EmailVersion == TYPE_EMAIL_BOBBY_R_EMAIL_JA2_EDT )
wcscpy(pB->pSubject, pTemp->pSubject);
else if ( pB->EmailVersion == TYPE_EMAIL_EMAIL_EDT || pB->EmailVersion == TYPE_EMAIL_INSURANCE_COMPANY_EMAIL_JA2_EDT || pB->EmailVersion == TYPE_EMAIL_DEAD_MERC_AIM_SITE_EMAIL_JA2_EDT )
wcscpy(pB->pSubject, pTemp->pSubject);
// free up memory // pB becomes pTemp
MemFree(pTemp->pSubject); pB->iId = pTemp->iId;
MemFree( pTemp ); pB->fRead = pTemp->fRead;
pB->fNew = pTemp->fNew;
pB->usOffset = pTemp->usOffset;
pB->EmailVersion = pTemp->EmailVersion;
pB->usLength = pTemp->usLength;
pB->iDate = pTemp->iDate;
pB->ubSender = pTemp->ubSender;
if ( pB->EmailVersion == TYPE_EMAIL_AIM_AVAILABLE )
wcscpy(pB->pSubject, EmailMercAvailableText[pTemp->ubSender].szSubject);
else if ( pB->EmailVersion == TYPE_EMAIL_MERC_LEVEL_UP )
wcscpy(pB->pSubject, EmailMercLevelUpText[pTemp->ubSender].szSubject);
else if ( pB->EmailVersion == TYPE_EMAIL_OTHER )
wcscpy(pB->pSubject, EmailOtherText[pTemp->usLength].szSubject);
else
wcscpy(pB->pSubject, pTemp->pSubject);
// free up memory
MemFree(pTemp->pSubject);
MemFree(pTemp);
} }
void ClearPages() void ClearPages()