GPrefsMgr::~GPrefsMgr()
{
	SetData(kGProgramVersionID, GMGetVersionNumberStr());
	SaveToDisk();
}
GMApp::GMApp
(
    int*		argc,
    char*		argv[],
    JBoolean*	displayAbout,
    JString*	prevVersStr
)
    :
    JXApplication(argc, argv, kAppSignature, kGMDefaultStringData),
    itsTableDirs(NULL),
    itsHasFileDirectory(kJFalse),
    itsOpenPrefsAfterAbout(kJFalse),
    itsPrefsNew(kJFalse),
    itsAboutDialog(NULL)
{
    *displayAbout = GMCreateGlobals(this);

    if (!*displayAbout)
    {
        *prevVersStr = (GGetPrefsMgr())->GetArrowVersionStr();
        if (*prevVersStr == GMGetVersionNumberStr())
        {
            prevVersStr->Clear();
        }
        else
        {
            *displayAbout = kJTrue;
            if (prevVersStr->BeginsWith("1") ||
                    prevVersStr->BeginsWith("0") ||
                    prevVersStr->BeginsWith("2.0b"))
            {
                itsOpenPrefsAfterAbout	= kJTrue;
            }
        }
    }
    else
    {
        itsPrefsNew				= kJTrue;
        itsOpenPrefsAfterAbout	= kJTrue;
        prevVersStr->Clear();
    }

    GMMDIServer* mdi = new GMMDIServer(this);
    assert(mdi != NULL);

    itsTableDirs = new JPtrArray<GMessageTableDir>(JPtrArrayT::kForgetAll);
    assert(itsTableDirs != NULL);

    itsEditDirs = new JPtrArray<GMessageEditDir>(JPtrArrayT::kForgetAll);
    assert(itsEditDirs != NULL);

    itsLockTasks = new JPtrArray<GLockFileTask>(JPtrArrayT::kForgetAll);
    assert(itsLockTasks != NULL);

    if (*displayAbout)
    {
        if (!(JGetUserNotification())->AcceptLicense())
        {
            exit(0);
        }
    }

    JString home;
    if (JGetHomeDirectory(&home))
    {
        JAppendDirSeparator(&home);
        home += kArrowFilesDir;
        if (!JDirectoryExists(home))
        {
            JError err = JCreateDirectory(home);
            if (err.OK())
            {
                itsFileDirectory	= home;
                itsHasFileDirectory	= kJTrue;
            }
        }
        else
        {
            if (JKillDirectory(home))
            {
                JCreateDirectory(home);
            }
            if (JDirectoryExists(home))
            {
                itsFileDirectory	= home;
                itsHasFileDirectory	= kJTrue;
            }
        }
    }

    JBoolean ok = OpenSession();

    if (*argc > 1)
    {
        mdi->HandleCmdLineOptions(*argc, argv);
    }
    else if (!ok)
    {
        OpenSystemMailbox();
    }

    OpenMailboxWindowIfNeeded();

    ListenTo(GGetPrefsMgr());

    /*	JString test("pulp");
    	JPtrArray<JString> names;
    	GParseNameList(test, names);
    	JPtrArray<JString> aliases;
    	aliases.SetCompareFunction(JCompareStringsCaseSensitive);
    	JSize i = 1;
    	while (i <= names.GetElementCount())
    		{
    		JString& name = *(names.NthElement(i));
    		JString alias;
    		JString fcc;
    		if (GGetAddressBookMgr()->NameIsAlias(name, alias, fcc))
    			{
    			JIndex findex;
    			if (!aliases.SearchSorted(&name, JOrderedSetT::kAnyMatch, &findex))
    				{
    				GParseNameList(alias, names);
    				aliases.InsertSorted(names.NthElement(i));
    				names.RemoveElement(i);
    				}
    			else
    				{
    				names.DeleteElement(i);
    				}
    			}
    		else
    			{
    			i++;
    			}
    		}
    	aliases.DeleteAll();
    	const JSize count	= names.GetElementCount();
    	for (JIndex i = 1; i <= count; i++)
    		{
    		cout << *(names.NthElement(i)) << endl;
    		}*/
}
Example #3
0
void
SMTPMessage::SendNextData()
{
	if (itsCurrentMode == kHello)
		{
		JCharacter hostname[255];
		gethostname(hostname, 255);
		JString senddata = "HELO ";
		senddata += hostname;
		SendLine(senddata);
		senddata += "\n";
		GMGetSMTPDebugDir()->AddText(senddata);
		}
	else if (itsCurrentMode == kFrom)
		{
		JString senddata = "MAIL FROM: " + *itsFrom;
		SendLine(senddata);
		senddata += "\n";
		GMGetSMTPDebugDir()->AddText(senddata);
		}
	else if (itsCurrentMode == kTo)
		{
		assert(itsCurrentIndex <= itsToNames->GetElementCount());
		JString senddata;
		JString name = *(itsToNames->NthElement(itsCurrentIndex));
		senddata = "RCPT TO: " + name;
		SendLine(senddata);
		senddata += "\n";
		GMGetSMTPDebugDir()->AddText(senddata);
		}
	else if (itsCurrentMode == kCc)
		{
		assert(itsCurrentIndex <= itsCcNames->GetElementCount());
		JString senddata;
		JString name = *(itsCcNames->NthElement(itsCurrentIndex));
		senddata = "RCPT TO: " + name;
		SendLine(senddata);
		senddata += "\n";
		GMGetSMTPDebugDir()->AddText(senddata);
		}
	else if (itsCurrentMode == kBcc)
		{
		assert(itsCurrentIndex <= itsBccNames->GetElementCount());
		JString senddata;
		JString name = *(itsBccNames->NthElement(itsCurrentIndex));
		senddata = "RCPT TO: " + name;
		SendLine(senddata);
		senddata += "\n";
		GMGetSMTPDebugDir()->AddText(senddata);
		}
	else if (itsCurrentMode == kDataHeader)
		{
		JString senddata = "DATA";
		SendLine(senddata);
		senddata += "\n";
		GMGetSMTPDebugDir()->AddText(senddata);
		}
	else if (itsCurrentMode == kData)
		{
		JString from	 = itsFullName + " <" + itsSMTPUser + ">";
		if (!from.IsEmpty())
			{
			JString senddata = "From: " + from;
			SendLine(senddata);
			senddata += "\n";
			GMGetSMTPDebugDir()->AddText(senddata);
			AppendToOutbox("From: ");
			AppendToOutbox(from);
			AppendToOutbox("\n");
			}

		struct utsname buf;
		uname(&buf);

		JString senddata = "X-Mailer: Arrow ";
		senddata += GMGetVersionNumberStr();
		senddata += JString(" (X11; ") + buf.sysname + JString(" ") +  + JString(buf.release);
		senddata += JString("; ") + buf.machine + JString(")");
		SendLine(senddata);
		AppendToOutbox(senddata);
		AppendToOutbox("\n");
		GMGetSMTPDebugDir()->AddText(senddata);

		senddata = "To: ";
		assert(itsToNames->GetElementCount() > 0);
		senddata += *(itsToNames->NthElement(1));
		for (JSize i = 2; i <= itsToNames->GetElementCount(); i++)
			{
			senddata += ",\n\t" + *(itsToNames->NthElement(i));
			}
		SendLine(senddata);
		AppendToOutbox(senddata);
		AppendToOutbox("\n");
		GMGetSMTPDebugDir()->AddText(senddata);

		if (!itsReplyTo->IsEmpty())
			{
			senddata = "Reply-To: " + *itsReplyTo;
			SendLine(senddata);
			GMGetSMTPDebugDir()->AddText(senddata);
			}

		if (itsCcNames->GetElementCount() != 0)
			{
			JSize count = itsCcNames->GetElementCount();
			senddata = "Cc: ";
			senddata += *(itsCcNames->NthElement(1));
			for (JSize i = 2; i <= count; i++)
				{
				senddata += ",\n\t" + *(itsCcNames->NthElement(i));
				}
			SendLine(senddata);
			AppendToOutbox(senddata);
			AppendToOutbox("\n");
			GMGetSMTPDebugDir()->AddText(senddata);
			}

		if (!itsSubject->IsEmpty())
			{
			senddata = "Subject: " + *itsSubject;
			SendLine(senddata);
			AppendToOutbox("Subject: ");
			AppendToOutbox(*itsSubject);
			AppendToOutbox("\n");
			GMGetSMTPDebugDir()->AddText(senddata);
			}

		if (!itsAddedHeaders->IsEmpty())
			{
			SendMultiLine(itsAddedHeaders);
			}

		SendLine("");
		AppendToOutbox("\n");

		GMGetSMTPDebugDir()->AddText("\nData not shown ...\n");
		AppendToOutbox(*itsData);
		SendData();
		AppendToOutbox("\n");
		AppendToOutbox("\n");

		SendLine("");
		SendLine(".");
		SendLine("QUIT");
		WriteToOutbox();
		}
}