TribesReplay/base/scripts/webemail.cs
2017-07-17 22:55:25 -04:00

1285 lines
38 KiB
C#

//------------------------------------------
// Email code
//------------------------------------------
// email format is:
// id
// From
// read flag
// send date
// To
// CC
// Subject
// message body
//echo("Added email: " @ %tag SPC %text);
$EmailCachePath = "webcache/" @ getField(getRecord(wonGetAuthInfo(),0),3) @ "/";
$EmailColumnCount = 0;
$EmailColumnName[0] = "Status";
$EmailColumnRange[0] = "50 75";
$EmailColumnCount++;
$EmailColumnName[1] = "From";
$EmailColumnRange[1] = "50 300";
$EmailColumnCount++;
$EmailColumnName[2] = "Subject";
$EmailColumnRange[2] = "50 300";
$EmailColumnCount++;
$EmailColumnName[3] = "Received";
$EmailColumnRange[3] = "50 300";
$EmailColumnCount++;
//-----------------------------------------------------------------------------
if(!isObject(EmailMessageVector))
{
new MessageVector(EmailMessageVector);
$EmailNextSeq = 0;
}
//-----------------------------------------------------------------------------
function LaunchEmail()
{
LaunchTabView.viewTab( "EMAIL", EmailGui, 0 );
}
//-----------------------------------------------------------------------------
function EmailMessageNew()
{
$EmailToAddress = "";
$EmailCCAddress = "";
$EmailSubject = "";
EMailComposeDlg.state = "sendMail";
Canvas.pushDialog(EmailComposeDlg);
EmailBodyText.setValue("");
Email_ToEdit.makeFirstResponder(1);
}
//-----------------------------------------------------------------------------
function EmailMessageReply()
{
EMailComposeDlg.state = "replyMail";
%text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() );
$EmailToAddress = getField(getRecord(%text, 1), 0);
$EmailCCAddress = "";
$EmailSubject = "RE: " @ getRecord(%text, 6);
%date = getRecord(%text, 3);
Canvas.pushDialog(EmailComposeDlg);
EmailBodyText.setValue("\n\n----------------------------------\n On " @ %date SPC $EmailToAddress @ " wrote:\n\n" @ EmailGetBody(%text) );
EmailBodyText.SetCursorPosition(0);
EmailBodyText.makeFirstResponder(1);
}
//-----------------------------------------------------------------------------
function EmailMessageForward()
{
%text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() );
$EmailToAddress = "";
$EmailCCAddress = "";
$EmailSubject = "FW: " @ getRecord(%text, 6);
Canvas.pushDialog(EmailComposeDlg);
EmailBodyText.setValue("\n\n\n--- Begin Forwarded Message ---\n\n" @ EmailGetTextDisplay(%text));
Email_toEdit.makeFirstResponder(1);
EmailBodyText.SetCursorPosition(0);
EMailComposeDlg.state = "forwardMail";
}
//-----------------------------------------------------------------------------
function EmailMessageReplyAll()
{
EMailComposeDlg.state = "replyAll";
%text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() );
$EmailToAddress = getField(getRecord(%text, 1), 0);
$EmailCCAddress = getRecord(%text, 4) @ getRecord(%text,5);
$EmailSubject = "RE: " @ getRecord(%text, 6);
%date = getRecord(%text, 3);
Canvas.pushDialog(EmailComposeDlg);
EmailBodyText.setValue("\n\n===========================\n On " @ %date SPC $EmailToAddress @ " wrote:\n\n" @ EmailGetBody(%text) );
EmailBodyText.makeFirstResponder(1);
EmailBodyText.SetCursorPosition(0);
}
//-----------------------------------------------------------------------------
function EmailMessageDelete()
{
%id = EM_Browser.getSelectedId();
if ( %id == -1 )
return;
%row = EM_Browser.findById( %id );
EMailComposeDlg.key = LaunchGui.key++;
// Make these buttons inactive until another message is selected:
if(rbInbox.getValue())
{
%nx = 6;
EMailComposeDlg.state = "deleteMail";
DoEmailDelete(%nx,%id,EMailComposeDlg, EMailComposeDlg.key, %row);
}
else
{
%nx = 35;
EMailComposeDlg.state = "removeMail";
MessageBoxYesNo("CONFIRM","Permanently Remove Selected EMail?","DoEmailDelete(" @ %nx @ "," @ %id @ "," @ EmailComposeDlg @ "," @ EmailComposeDlg.key @ "," @ %row @ ");");
}
}
//-----------------------------------------------------------------------------
function DoEmailDelete(%qnx, %mid, %owner, %key, %row)
{
EM_ReplyBtn.setActive( false );
EM_ReplyToAllBtn.setActive( false );
EM_ForwardBtn.setActive( false );
EM_DeleteBtn.setActive( false );
EM_BlockBtn.setActive( false );
EM_Browser.removeRowByIndex( %row );
EmailMessageVector.deleteLine(EmailMessageVector.getLineIndexByTag(%mid));
if(%qnx==6)
EmailGui.dumpCache();
if ( EM_Browser.rowCount() == 0 )
EMailInboxBodyText.setText("");
else
EM_Browser.setSelectedRow(%row);
DatabaseQuery(%qnx, %mid, %owner, %key);
}
//-----------------------------------------------------------------------------
function EmailSend()
{
EMailComposeDlg.key = LaunchGui.key++;
CheckEmailNames();
EMailComposeDlg.state = "sendMail";
%text = $EMailToAddress TAB $EMailCCAddress TAB $EmailSubject TAB EMailBodyText.getValue();
DatabaseQuery(5,getsubstr(%text,0,3600),EMailComposeDlg,EMailComposeDlg.key);
Canvas.popDialog(EmailComposeDlg);
}
//-----------------------------------------------------------------------------
function EmailMessageAddRow(%text, %tag)
{
EM_Browser.addRow( %tag, getField( getRecord( %text, 1 ) ,0 ),
getRecord( %text, 6 ),
getRecord( %text, 3 ),
getRecord( %text, 2 ));
}
//-----------------------------------------------------------------------------
function EmailGetBody(%text)
{
%msgText = "";
%rc = getRecordCount(%text);
for(%i = 7; %i < %rc; %i++)
%msgText = %msgText @ getRecord(%text, %i) @ "\n";
return %msgText;
}
//-----------------------------------------------------------------------------
function getNameList(%line)
{
if(%line $= "")
return "";
%ret = getField(getTextName(%line, 0), 0);
%count = getFieldCount(%line) / 4;
for(%i = 1; %i < %count; %i++)
%ret = %ret @ ", " @ getField(getTextName(%line, %i * 4), 0);
}
//-----------------------------------------------------------------------------
function getLinkNameOnly(%line)
{
if(%line $= "" || %line $= " ")
return "";
%name = getField(%line,0);
%str = "<color:FFFFFF>" @ %name;
%ret = "<a:player" TAB %name @ "><spush>" @ %str @ "<spop></a>";
return %ret;
}
//-----------------------------------------------------------------------------
function getLinkNameList(%line)
{
if(%line $= "")
return "";
%ret = getLinkName(%line, 0);
%count = getFieldCount(%line) / 4;
for(%i = 1; %i < %count; %i++)
%ret = %ret @ ", " @ getLinkName(%line, %i * 4);
}
//-----------------------------------------------------------------------------
function CheckEmailNames()
{
$EmailTOAddress = strUpr(trim($EmailTOAddress));
$EmailCCAddress = strUpr(trim($EmailCCAddress));
%toLength = strLen($EmailTOAddress);
%ccLength = strLen($EmailCCAddress);
%checkList = "";
if(%toLength > 0)
{
if(trim(getSubStr($EmailTOAddress,%toLength-1,1)) !$= "," || trim(getSubStr($EmailTOAddress,%toLength,1)) !$= ",")
$EmailTOAddress = $EmailTOAddress @ ",";
}
else
$EmailTOAddress = ",";
if(%ccLength > 0)
{
if(trim(getSubStr($EmailCCAddress,%ccLength-1,1)) !$= "," || trim(getSubStr($EmailCCAddress,%ccLength,1)) !$= ",")
$EmailCCAddress = $EmailCCAddress @ ",";
}
else
%ccList = ",";
for(%x=0;%x<2;%x++)
{
%pos = 0;
%start = 0;
if(%x == 0)
%nList = $EmailTOAddress;
else if(%x == 1)
{
$EmailTOAddress = %nList;
%nList = $EmailCCAddress;
}
if(strLen(%nList)>1)
{
while((%pos = strPos(%nList,",",%start)) != -1 && %cx++ < 40)
{
%name = getSubStr(%nList,%start,%pos-%start);
%nameLength = strLen(%name);
%name = trim(%name);
if((%checkStr = strStr(%checkList,%name)) != -1)
{
if(%checkStr == 0)
%checkVal = ",";
else
%checkVal = getSubStr(%checkList,strStr(%checkList,%name)-1,1);
if(%checkVal $= "," || %checkVal $= " ")
{
if(%pos-%nameLength == %start && %start == 0)
{
%nList = trim(getSubStr(%nList,%pos+1,strLen(%nList)));
}
else
{
%nList = trim(getSubStr(%nList,0,(%pos-%nameLength))) @
trim(getSubStr(%nList,%pos+1,strLen(%nList)));
%start = %pos-%nameLength;
}
}
else
{
if(strLen(%checkList)==0)
%checkList = %name;
else
%checkList = %checkList @ "," @ %name;
%start = %pos+1;
}
}
else
{
if(strLen(%checkList)==0)
%checkList = %name;
else
%checkList = %checkList @ "," @ %name;
%start = %pos+1;
}
}
}
}
$EmailCCAddress = %nList;
}
//-----------------------------------------------------------------------------
function EmailGetTextDisplay(%text)
{
%pos = 0;
%strStart = 0;
%curList = strupr(getRecord(%text,4));
%to = "";
if(strLen(%curList) > 1)
{
if(trim(getSubStr(%curList,strLen(%curList)-1,1)) !$= ",")
%curList = %curList @ ",";
}
else
%curList = ",";
while((%pos = strpos(%curList, ",", %strStart)) != -1)
{
if(%strStart==0)
%to = trim(getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart)));
else
%to = %to @ "," @ trim(getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart)));
%strStart = %pos+1;
}
%pos = 0;
%strStart = 0;
%curList = strupr(getRecord(%text,5));
%ccLine = "";
if(strLen(%curList) > 1)
{
if(trim(getSubStr(%curList,strLen(%curList)-1,1)) !$= ",")
%curList = %curList @ ",";
}
else
%curList = ",";
while((%pos = strpos(%curList, ",", %strStart)) != -1)
{
if(%strStart==0)
%ccLine = getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart));
else
%ccLine = %ccLine @ "," @ getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart));
%strStart = %pos+1;
}
%from = getLinkName(getRecord(%text, 1), 0);
%msgtext = "From: " @ %from NL
"To: " @ %to NL
"CC: " @ %ccLine NL
"Subject: " @ getRecord(%text, 6) NL
"Date Sent: " @ getRecord(%text, 3) @ "\n\n" @
EmailGetBody(%text);
}
//-----------------------------------------------------------------------------
function EmailNewMessageArrived(%message, %seq)
{
$EmailNextSeq = %seq;
EmailMessageVector.pushBackLine(%message, %seq);
EmailMessageAddRow(%message, %seq);
}
//-----------------------------------------------------------------------------
function GetEMailBtnClick()
{
if(isEventPending(EMailGUI.eid))
cancel(EmailGui.eid);
EMailGui.btnClicked = true;
EMailGui.checkingEMail = false;
EMailGui.eid = schedule(1000 * 2 * 1, 0, CheckEmail, false);
canvas.SetCursor(ArrowWaitCursor);
}
//-----------------------------------------------------------------------------
function CheckEmail(%calledFromSched)
{
if(EmailGui.checkingEmail)
{
// echo("Check In Progress");
return;
}
if(EmailGui.checkSchedule && !%calledFromSched)
{
// echo("Email Schedule " @ EmailGui.checkSchedule @ "Cancelled");
cancel(EmailGui.checkSchedule); // cancel schedule
}
EmailGui.checkSchedule = "";
EMailGui.key = LaunchGui.key++;
EmailGui.state = "getMail";
DatabaseQueryArray(1,0,$EmailNextSeq, EMailGui, EMailGui.key);
EmailGui.checkingEmail = true;
}
//-----------------------------------------------------------------------------
function EmailEditBlocks()
{
Canvas.pushDialog(EmailBlockDlg);
EmailBlockList.clear();
EMailBlockDlg.key = LaunchGui.key++;
EmailBlockDlg.state = "getBlocklist";
DatabaseQueryArray(2,0,"",EMailBLockDlg,EMailBLockDlg.key);
}
//-----------------------------------------------------------------------------
function EmailBlockSender()
{
%id = EM_Browser.getSelectedId();
if ( %id == -1 )
{
MessageBoxOK("WARNING","You cannot block a non-existent sender.");
return;
}
else
{
%text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() );
%blockAddress = getField(getRecord(%text, 1), 0);
if(trim(%blockAddress) !$= "")
{
EMailBlockDlg.state = "setBlock";
EMailBlockDlg.key = LaunchGui.key++;
DatabaseQuery(9,%blockAddress,EmailBlockDlg,EMailBlockDlg.key);
}
}
}
//-----------------------------------------------------------------------------
function EmailBlockRemove()
{
%rowId = EmailBlockList.getSelectedId();
if(%rowId == -1)
{
MessageBoxOK("WARNING","You cannot remove a non-existent block.");
return;
}
else
{
%line = EmailBlockList.getRowTextById(%rowId);
%name = getField(%line, 2);
EMailBlockDlg.state = "removeBlock";
EMailBlockDlg.key = LaunchGui.key++;
DatabaseQuery(8,%name,EMailBLockDlg,EMailBLockDlg.key);
EmailBlockList.removeRowById(%rowId);
}
}
//-- EMailComposeDlg ----------------------------------------------------------------
function EMailComposeDlg::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key)
{
if(%this.key != %key)
return;
// echo("RECV: " @ %status TAB %RowCount_Result);
if(getField(%status,0)==0)
{
switch$(%this.state)
{
case "deleteMail":
%this.state = "done";
case "removeMail":
%this.state = "done";
case "sendMail":
%this.state = "done";
}
}
else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061")
{
%this.state = "error";
MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again.");
}
else
MessageBoxOK("ERROR",getField(%status,1));
}
//-----------------------------------------------------------------------------
function EmailComposeDlg::Cancel(%this)
{
Canvas.PopDialog(EmailComposeDlg);
}
//-----------------------------------------------------------------------------
function EmailComposeDlg::SendMail(%this)
{
$EmailToAddress = Email_ToEdit.getValue();
$EmailSubject = EMail_Subject.getValue();
// NEED TO CHECK FOR DUPLICATES
if(trim($EmailToAddress) $= "")
MessageBoxOK("No Address","TO Address may not be left blank. Please enter a player name to send this message to.");
else
{
if(trim($EmailSubject) $= "")
MessageBoxOK("No Subject","Please enter a Subject for your message.");
else
EMailSend();
}
}
//-- EMailBlockDlg -----------------------------------------------------------
function EMailBlockDlg::onDatabaseQueryResult(%this,%status,%ResultString,%key)
{
if(%this.key != %key)
return;
// echo("RECV: " @ %status TAB %ResultString);
if(getField(%status,0)==0)
{
switch$(%this.state)
{
case "getBlocklist":
%this.state = "names";
%this.blockCount = getField(%ResultString,0);
case "removeBlock":
MessageBoxOK("NOTICE",getField(%status,1));
case "setBlock":
MessageBoxOK("NOTICE",getField(%status,1));
}
}
else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061")
{
%this.state = "error";
MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again.");
}
else
{
%this.state = "error";
MessageBoxOK("ERROR",getField(%status,1));
}
}
//-----------------------------------------------------------------------------
function EMailBlockDlg::onDatabaseRow(%this,%row,%isLastRow,%key)
{
if(%this.key != %key)
return;
// echo("RECV: " @ %row TAB %isLastRow);
switch$(%this.state)
{
case "names":
%textName = getTextName(getFields(%row,0,4));
%id = getField(%row,3);
%blockedCount = getField(%row,4);
EmailBlockList.addRow(%id, getField(%textName,0) TAB %blockedCount TAB %row);
}
}
//-----------------------------------------------------------------------------
function CheckAllDuplicates(%player)
{
%lCount = LC_ToList.rowCount();
%cCount = LC_CCList.rowCount();
%vResult = 0;
if(%lCount>0)
{
for(%l=0;%l<%lCount;%l++)
{
%lstr = LC_ToList.getRowText(%l);
if(%lstr $= %player)
%vResult++;
}
}
if(%cCount>0)
{
for(%c=0;%c<%cCount;%c++)
{
%cstr = LC_CCList.getRowText(%c);
if(%cstr $= %player)
%vResult++;
}
}
return %vResult;
}
//-----------------------------------------------------------------------------
function LaunchAddressDlg()
{
Canvas.PushDialog("AddressDlg");
}
//-----------------------------------------------------------------------------
function ListToStr(%listName,%delim)
{
%str = "";
%rCount = %listName.rowCount();
if (%rCount > 0)
{
for(%r=0;%r<%rCount;%r++)
{
%str = %str @ %listName.getRowText(%r);
if(%r < %rCount-1)
{
%str = %str @ %delim;
}
}
return %str;
}
}
//-----------------------------------------------------------------------------
function StrToList(%listName, %str, %delim)
{
%listName.Clear();
%sCount = 0;
%sSize = strlen(%str);
if (%sSize > 0)
{
for(%l=0;%l<=%sSize;%l++)
{
%txt = getSubStr(%str,%l,1);
if( %txt $= %delim || %l == %sSize )
{
%listName.addRow(%sCount,trim(%sText));
%sText = "";
%sCount++;
}
else
{
%sText = %sText @ %txt;
}
}
}
}
//-----------------------------------------------------------------------------
function AddressDlg::onDatabaseQueryResult(%this,%status,%resultString,%key)
{
if(%this.key != %key)
return;
// echo("RECV: " @ %status TAB %resultString);
if(getField(%status,0)==0)
{
switch$(%this.state)
{
case "goSearch":
if(getField(%resultString,0)<=0)
{
%this.state = "done";
MessageBoxOK("NOTICE","No Match Found.");
}
else
{
%this.state = "memberList";
%this.linecount = -1;
LC_BigList.clear();
}
case "getBuddyList":
if(getField(%resultString,0)<=0)
{
%this.state = "done";
MessageBoxOK("NOTICE","You have no Buddies.");
}
else
{
%this.state = "buddyList";
%this.linecount = -1;
LC_BigList.clear();
}
case "getTribeMembers":
if(getField(%resultString,0)<=0)
{
%this.state = "done";
MessageBoxOK("NOTICE","Cloak Packs are engaged, Tribe Mates could not be detected.");
}
else
{
%this.state = "tribeMembers";
%this.linecount = -1;
LC_BigList.clear();
}
case "addBuddy":
MessageBoxOK("CONFIRMED",getField(%status,1));
case "dropBuddy":
MessageBoxOK("CONFIRMED",getField(%status,1));
}
}
else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061")
{
%this.state = "error";
MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again.");
}
else
{
switch$(%this.state)
{
case "goSearch":
%this.state = "error";
MessageBoxOk("ERROR",getField(%status,1));
}
}
}
//-----------------------------------------------------------------------------
function AddressDlg::onDatabaseRow(%this,%row,%isLastRow,%key)
{
if(%this.key != %key)
return;
// echo("RECV : " @ %row);
switch$(%this.state)
{
case "memberList":
LC_BigList.addRow(%this.linecount++,getField(%row,1));
case "buddyList":
LC_BigList.addRow(%this.linecount++,getField(%row,0));
case "tribeMembers":
LC_BigList.addRow(%this.linecount++,getField(%row,0));
}
}
//-----------------------------------------------------------------------------
function AddressDlg::AddBuddylist(%this)
{
%this.key = LaunchGui.key++;
%this.lbstate = "buddylist";
switch (%this.SrcList)
{
case 0:
%addremove = LC_BuddyListBtn.direction;
%player = LC_BigList.getValue();
%selRow = LC_BigList.getRownumByID(LC_BigList.GetSelectedID());
case 1:
%addremove = 0;
%player = LC_ToList.getValue();
case 2:
%addremove = 0;
%player = LC_CCList.getValue();
}
if (%addremove==0)
{
%this.doRefresh = 1;
%this.state = "addBuddy";
DatabaseQuery(10,%player,%this,%this.key);
}
else
{
%this.state = "dropBuddy";
DatabaseQuery(11,%player,%this,%this.key);
LC_BigList.removeRowbyId(LC_BigList.getSelectedID());
if(%selRow>=LC_BigList.RowCount())
%selRow = LC_BigList.RowCount()-1;
LC_BigList.setSelectedRow(%selRow);
}
}
//-----------------------------------------------------------------------------
function AddressDlg::AddCC(%this)
{
if(LC_CCListBtn.direction == 0)
{
%addName = LC_BigList.getRowText(LC_BigList.getSelectedID());
%hasDupes = CheckAllDuplicates(%addName);
if(%hasDupes == 0)
LC_CCList.addRow(LC_CCList.RowCount()+1, %addName);
}
else
{
%selRow = LC_CCList.getRownumByID(LC_CCList.GetSelectedID());
LC_CCList.removeRowbyID(LC_CCList.getSelectedID());
if(%selRow>=LC_CCList.RowCount())
%selRow = LC_CCList.RowCount()-1;
LC_CCList.setSelectedRow(%selRow);
}
%this.DestList = 1;
}
//-----------------------------------------------------------------------------
function AddressDlg::AddTo(%this)
{
if(LC_ToListBtn.direction == 0)
{
%addName = LC_BigList.getRowText(LC_BigList.getSelectedID());
%hasDupes = CheckAllDuplicates(%addName);
if(%hasDupes == 0 )
LC_ToList.addRow(LC_ToList.RowCount()+1, %addName);
}
else
{
%selRow = LC_ToList.getRownumByID(LC_ToList.GetSelectedID());
LC_ToList.removeRowbyID(LC_ToList.getSelectedID());
if(%selRow>=LC_ToList.RowCount())
%selRow = LC_ToList.RowCount()-1;
LC_ToList.SetSelectedRow(%selRow);
}
%this.DestList = 0;
}
//-----------------------------------------------------------------------------
function AddressDlg::Cancel(%this)
{
LC_BigList.Clear();
Canvas.PopDialog("AddressDlg");
}
//-----------------------------------------------------------------------------
function AddressDlg::GoSearch(%this)
{
if(trim(LC_Search.getValue()) !$="")
{
%this.key = LaunchGui.key++;
%this.state = "goSearch";
%this.lbstate = "errorcheck";
DatabaseQueryArray(3,100,trim(LC_Search.getValue()) TAB 0 TAB 100 TAB 1 ,%this, %this.key);
LC_BuddyListBtn.direction = 0;
LC_BuddyListBtn.text = "ADD TO BUDDYLIST";
LC_ListBox.setSelected(0);
}
else
MessageBoxOK("WARNING","Null searches (blank) are not allowed. Please enter letter(s) to search for.");
}
//-----------------------------------------------------------------------------
function AddressDlg::GoList(%this)
{
%this.key = LaunchGui.key++;
%this.lbstate = "errorcheck";
if(LC_ListBox.getValue() $="Select List")
{
LC_BigList.clear();
}
else if(LC_ListBox.getValue() $="Buddy List")
{
%this.state = "getBuddyList";
DatabaseQueryArray(5,0,"",%this,%this.key);
LC_BuddyListBtn.direction = 1;
LC_BuddyListBtn.text = "REMOVE FROM BUDDYLIST";
}
else
{
%this.state = "getTribeMembers";
DatabaseQueryArray(6,0,LC_ListBox.getValue(),%this,%this.key);
LC_BuddyListBtn.direction = 0;
LC_BuddyListBtn.text = "ADD TO BUDDYLIST";
}
}
//-----------------------------------------------------------------------------
function AddressDlg::OK(%this)
{
if (LC_ToList.rowCount() > 0)
EMail_ToEdit.setValue(ListToStr(LC_ToList,","));
if (LC_CCList.rowCount() > 0)
EMail_CCEdit.setValue(ListToStr(LC_CCList,","));
LC_BigList.Clear();
Canvas.PopDialog("AddressDlg");
}
//-----------------------------------------------------------------------------
function AddressDlg::onClick(%this, %sender)
{
switch$(%sender)
{
case "BIGLIST":
LC_ToListBtn.text = "ADD";
LC_CCListBtn.text = "ADD";
LC_ToListBtn.direction = 0;
LC_CCListBtn.direction = 0;
LC_ToList.setSelectedRow(-1);
LC_CCList.setSelectedRow(-1);
%this.SrcList = 0;
LC_BuddyListBtn.setVisible(1);
if(LC_ListBox.getValue() $="Buddy List")
{
LC_BuddyListBtn.direction = 1;
LC_BuddyListBtn.SetValue("REMOVE FROM BUDDYLIST");
}
else
{
LC_BuddyListBtn.direction = 0;
LC_BuddyListBtn.SetValue("ADD TO BUDDYLIST");
}
case "TOLIST":
LC_ToListBtn.text = "DEL";
LC_ToListBtn.direction = 1;
LC_BigList.setSelectedRow(-1);
LC_CCList.setSelectedRow(-1);
%this.DestList = 0;
%this.SrcList = 1;
LC_BuddyListBtn.direction = 0;
LC_BuddyListBtn.SetValue("ADD TO BUDDYLIST");
LC_BuddyListBtn.setVisible(1);
case "CCLIST":
LC_CCListBtn.text = "DEL";
LC_CCListBtn.direction = 1;
LC_ToList.setSelectedRow(-1);
LC_BigList.setSelectedRow(-1);
%this.DestList = 1;
%this.SrcList = 2;
LC_BuddyListBtn.direction = 0;
LC_BuddyListBtn.SetValue("ADD TO BUDDYLIST");
LC_BuddyListBtn.setVisible(1);
case "LISTBOX":
LC_ToList.setSelectedRow(-1);
LC_BigList.setSelectedRow(-1);
LC_CCList.setSelectedRow(-1);
%this.SrcList = 0;
LC_BuddyListBtn.setVisible(0);
%this.GoList();
case "SEARCHBOX":
LC_ToList.setSelectedRow(-1);
LC_BigList.setSelectedRow(-1);
LC_CCList.setSelectedRow(-1);
%this.SrcList = 0;
LC_BuddyListBtn.setVisible(0);
}
Canvas.repaint();
}
//-----------------------------------------------------------------------------
function AddressDlg::onDblClick(%this,%caller)
{
switch(%caller)
{
case 0:
if(%this.DestList==0)
%this.AddTo();
else
%this.AddCC();
case 1:
LC_ToList.removeRowbyID(LC_ToList.getSelectedID());
LC_ToList.SetSelectedRow(0);
case 2:
LC_CCList.removeRowbyID(LC_CCList.getSelectedID());
LC_CCList.SetSelectedRow(0);
}
}
//-----------------------------------------------------------------------------
function AddressDlg::onWake(%this)
{
%this.doRefresh = 0;
%this.key = LaunchGui.key++;
%this.state = "loadlistbox";
%this.lbstate = "errorcheck";
%this.DestList = 0;
%this.SrcList = 0;
LC_BuddyListBtn.setVisible(0);
LC_ListBox.Clear();
LC_ListBox.Add("Select List",0);
LC_ListBox.Add("Buddy List",1);
LC_ListBox.setSelected(0);
LC_Search.clear();
StrToList(LC_ToList,$EmailToAddress,",");
StrToList(LC_CCList,$EmailCCAddress,",");
%info = WONGetAuthInfo();
%tribeCount = getField( getRecord( %info, 1 ), 0 ); //%cert
for ( %i = 0; %i < %tribeCount; %i++ )
{
%tribe = getField( getRecord( %info, %i + 2 ), 0 ); //%cert
LC_ListBox.add(%tribe,%i);
}
}
//-- EMailGui ----------------------------------------------------------------
function EmailGui::onWake(%this)
{
// Make these buttons inactive until a message is selected:
EM_ReplyBtn.setActive( false );
EM_ReplyToAllBtn.setActive( false );
EM_ForwardBtn.setActive( false );
EM_DeleteBtn.setActive( false );
EM_BlockBtn.setActive( false );
%selId = EM_Browser.getSelectedId();
Canvas.pushDialog(LaunchToolbarDlg);
// Set the minimum extent of the frame panes:
%minExtent = EM_BrowserPane.getMinExtent();
EM_Frame.frameMinExtent( 0, firstWord( %minExtent ), restWords( %minExtent ) );
%minExtent = EM_MessagePane.getMinExtent();
EM_Frame.frameMinExtent( 1, firstWord( %minExtent ), restWords( %minExtent ) );
if(!%this.cacheFile)
{
%this.cacheFile = "email0";
EmailGui.getCache();
}
if ( !EmailGui.cacheLoaded || EM_Browser.rowCount() == 0 )
{
EmailGui.checkingEmail = false;
if(!rbInbox.getValue())
rbInbox.setValue(1);
else
{
EmailGui.GetCache();
EmailGui.OutputVector();
}
}
if ( EM_Browser.rowCount() > 0 )
{
%row = EM_Browser.findById( %selId );
if ( %row == -1 )
EM_Browser.setSelectedRow( 0 );
else
EM_Browser.setSelectedRow( %row );
}
}
//-----------------------------------------------------------------------------
function EmailGui::ButtonClick(%this,%ord)
{
switch(%ord)
{
case 0: em_GetMailBtn.setVisible(1);
GetEmailBtnClick();
case 1: em_GetMailBtn.setVisible(0);
EM_Browser.clear();
EMailMessageVector.clear();
EmailInboxBodyText.setText("");
EMailGui.state = "getDeletedMail";
EmailGui.key = LaunchGui.key++;
DatabaseQueryArray(14,100,EmailGui.state,EMailGui,EMailGui.key);
}
}
//-----------------------------------------------------------------------------
function EMailGui::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key)
{
if(%this.key != %key)
return;
// echo("RECV: " @ %status);
if(getField(%status,0)==0)
{
switch$(%this.state)
{
case "getMail":
%this.soundPlayed = false;
if(getField(%RowCount_Result,0)>0)
{
%this.messageCount = 0;
%this.message = "";
%this.state = "NewMail";
%this.getCache();
}
else
{
%this.state = "done";
EMailGui.getCache();
EMailGui.outputVector();
if(EMailGui.btnClicked)
{
MessageBoxOK("NOTICE","No New Mail");
EmailGui.btnClicked = false;
}
%this.checkSchedule = schedule(1000 * 60 * 5, 0, CheckEmail, true);
// echo("scheduling Email check " @ %this.checkSchedule @ " in 5 minutes");
}
case "sendMail":
%this.state = "done";
CheckEMail();
case "deleteMail":
%this.state = "done";
CheckEMail();
case "forwardMail":
%this.state = "done";
CheckEMail();
case "replyMail":
%this.state = "done";
CheckEMail();
case "replyAllMail":
%this.state = "done";
CheckEMail();
case "blockSender":
%this.state = "done";
case "Refresh":
%this.state = "done";
CheckEMail();
case "getDeletedMail":
if(getField(%RowCount_Result,0)>0)
{
%this.messageCount = 0;
%this.message = "";
%this.state = "DeletedMail";
}
else
{
%this.state = "done";
MessageBoxOK("NOTICE",getField(%status,2));
}
}
}
else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061")
{
%this.state = "error";
MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again.");
}
else
{
%this.state = "error";
MessageBoxOK("ERROR","Error Retrieving Messages");
}
canvas.SetCursor(DefaultCursor);
}
//-----------------------------------------------------------------------------
function EMailGui::onDatabaseRow(%this, %row,%isLastRow,%key)
{
if(%this.key != %key)
return;
// echo("RECV: " @ %row NL %isLastRow);
switch$(%this.state)
{
case "DeletedMail":
%ID = getField(%row,0);
%senderQuad = getFields(%row,1,4);
%recipientQuad = getFields(%row,5,8);
%created = getField(%row,9);
%isCC = getField(%row,10);
%isDel = getField(%row,11);
%isRead = getField(%row,12);
%TList = getField(%row,13);
%CCList = getField(%row,14);
%subject = getField(%row,15);
%bodyCount = getField(%row,16);
%body = getFields(%row,17);
%msg = %ID NL %senderQuad NL %isRead NL %created NL %TList NL %CCList NL %subject NL %body @ "\n";
%this.message = %msg;
EmailMessageVector.pushBackLine(%this.message, getField(%this.message, 0));
if(%isLastRow)
%this.outputVector();
case "NewMail":
%this.checkingEmail = "";
%ID = getField(%row,0);
%senderQuad = getFields(%row,1,4);
%recipientQuad = getFields(%row,5,8);
%created = getField(%row,9);
%isCC = getField(%row,10);
%isDel = getField(%row,11);
%isRead = getField(%row,12);
%TList = getField(%row,13);
%CCList = getField(%row,14);
%subject = getField(%row,15);
%bodyCount = getField(%row,16);
%body = getFields(%row,17);
%msg = %ID NL %senderQuad NL %isRead NL %created NL %TList NL %CCList NL %subject NL %body @ "\n";
%this.message = %msg;
$EmailNextSeq = %ID;
EmailMessageVector.pushBackLine(%this.message, getField(%this.message, 0));
if(!%this.soundPlayed)
{
if(!getRecord(%this.message, 2))//are there any unread messages in this group?
{
%this.soundPlayed = true;
alxPlay(sGotMail, 0, 0, 0);
}
}
if(%isLastRow)
{
EmailGui.dumpCache();
EmailGui.loadCache();
%this.checkSchedule = schedule(1000 * 60 * 5, 0, CheckEmail, true);
// echo("scheduling Email check " @ %this.checkSchedule @ " in 5 minutes");
}
}
}
//-----------------------------------------------------------------------------
function EmailGui::getCache(%this)
{
EM_Browser.clear();
EMailMessageVector.clear();
EmailInboxBodyText.setText("");
%fileName = $EmailCachePath @ "email0";
%file = new FileObject();
if ( %this.cacheFile $= "" )
{
if ( %file.openForRead( %fileName ) )
{
%guid = %file.readLine();
if ( %guid $= getField( WonGetAuthInfo(), 3 ) )
{
// This is the right one!
%this.cacheFile = "email0";
%this.messageCount = %file.readLine();
while( !%file.isEOF() )
{
%line = %file.readLine();
%id = firstWord( %line );
%msg = collapseEscape( restWords( %line ) );
$EmailNextSeq = %id;
EMailMessageVector.pushBackLine(%msg, %id);
}
%file.close();
}
}
}
else if ( %file.openForRead( %fileName ) )
{
%guid = %file.readLine();
%this.messageCount = %file.readLine();
while( !%file.isEOF() )
{
%line = %file.readLine();
%id = firstWord( %line );
%msg = collapseEscape( restWords( %line ) );
$EmailNextSeq = %id;
EMailMessageVector.pushBackLine(%msg, %id);
}
%file.close();
}
%file.delete();
%this.cacheLoaded = true;
}
//-----------------------------------------------------------------------------
function EmailGui::outputVector(%this)
{
for(%i = 0; %i < EmailMessageVector.getNumLines(); %i++)
EmailMessageAddRow(EmailMessageVector.getLineText(%i),
EmailMessageVector.getLineTag(%i));
EM_Browser.setSelectedRow( 0 );
}
//-----------------------------------------------------------------------------
function EmailGui::loadCache( %this )
{
EM_Browser.clear();
EMailMessageVector.clear();
EMailInboxBodyText.setText("");
%fileName = $EmailCachePath @ "email0";
%file = new FileObject();
if ( %this.cacheFile $= "" )
{
if ( %file.openForRead( %fileName ) )
{
%guid = %file.readLine();
if ( %guid $= getField( WonGetAuthInfo(), 3 ) )
{
// This is the right one!
%this.cacheFile = "email0";
%this.messageCount = %file.readLine();
while( !%file.isEOF() )
{
%line = %file.readLine();
%id = firstWord( %line );
%msg = collapseEscape( restWords( %line ) );
EmailNewMessageArrived( %msg, %id );
}
%file.close();
}
}
}
else if ( %file.openForRead( %fileName ) )
{
%guid = %file.readLine();
%this.messageCount = %file.readLine();
while( !%file.isEOF() )
{
%line = %file.readLine();
%id = firstWord( %line );
%msg = collapseEscape( restWords( %line ) );
EmailNewMessageArrived( %msg, %id );
}
%file.close();
}
%file.delete();
%this.cacheLoaded = true;
}
//-----------------------------------------------------------------------------
function EmailGui::dumpCache( %this )
{
%guid = getField( WONGetAuthInfo(), 3 );
if ( %this.cacheFile $= "" ) %this.cacheFile = "email0";
EmailMessageVector.dump( $EmailCachePath @ %this.cacheFile, %guid );
}
//-----------------------------------------------------------------------------
function EmailGui::onSleep( %this )
{
EMailGui.checkingEMail = false;
%this.checkingEmail = "";
%this.checkSchedule = schedule(1000 * 10 * 1, 0, CheckEmail, true);
Canvas.popDialog( LaunchToolbarDlg );
}
//-----------------------------------------------------------------------------
function EMailGui::getEmail(%this,%fromSchedule)
{
checkEmail(%fromSchedule);
}
//-----------------------------------------------------------------------------
function EmailGui::setKey( %this, %key )
{
}
//-- EM_Browser --------------------------------------------------------------
function EM_Browser::onAdd( %this )
{
// Add the columns with widths from the prefs:
for ( %i = 0; %i < $EmailColumnCount; %i++ )
%this.addColumn( %i, $EmailColumnName[%i], $pref::Email::Column[%i], firstWord( $EmailColumnRange[%i] ), getWord( $EmailColumnRange[%i], 1 ) );
%this.setSortColumn( $pref::Email::SortColumnKey );
%this.setSortIncreasing( $pref::Email::SortInc );
}
//-----------------------------------------------------------------------------
function EM_Browser::onSelect( %this, %id )
{
%text = EmailMessageVector.getLineTextByTag(%id);
if(rbinbox.getValue())
{
if(!getRecord(%text, 2)) // read flag
{
%line = EmailMessageVector.getLineIndexByTag(%id);
%text = setRecord(%text, 2, 1);
DatabaseQuery(7, %id);
// Update the GUI:
%this.setRowFlags( %id, 1 );
EmailMessageVector.deleteLine(%line);
EmailMessageVector.insertLine(%line, %text, %id);
EmailGui.dumpCache();
}
}
EmailInboxBodyText.setValue(EmailGetTextDisplay(%text));
EM_ReplyBtn.setActive( true );
EM_ReplyToAllBtn.setActive( true );
EM_ForwardBtn.setActive( true );
EM_DeleteBtn.setActive( true );
EM_BlockBtn.setActive( true );
}
//-----------------------------------------------------------------------------
function EM_Browser::onSetSortKey( %this, %sortKey, %isIncreasing )
{
$pref::Email::SortColumnKey = %sortKey;
$pref::Email::SortInc = %isIncreasing;
}
//-----------------------------------------------------------------------------
function EM_Browser::onColumnResize( %this, %column, %newSize )
{
$pref::Email::Column[%column] = %newSize;
}