gecko-dev/cmd/xfe/altmail.c

175 строки
4.3 KiB
C

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
/**********************************************************************
altmail.c
Implementation for alternate mailers.
**********************************************************************/
#include "altmail.h"
#include "xp.h"
#include "xfe.h"
#include "prefapi.h"
#include "nspr.h"
int (*altmail_RegisterMailClient)(void) = NULL;
int (*altmail_UnRegisterMailClient)(void) = NULL;
int (*altmail_OpenMailSession)(void*, void*) = NULL;
int (*altmail_CloseMailSession)(void) = NULL;
int (*altmail_ComposeMailMessage)(void* reserved, char* to, char* org,
char* subject, char* body, char*
cc, char* bcc) = NULL;
int (*altmail_ShowMailBox)(void) = NULL;
int (*altmail_ShowMessageCenter)(void) = NULL;
char* (*altmail_GetMenuItemString)(void) = NULL;
char* (*altmail_GetNewsMenuItemString)(void) = NULL;
char* (*altmail_HandleNewsUrl)(char*) = NULL;
/*
* change_resource
*/
static void
change_resource(char* resource, char* value)
{
XrmDatabase database;
if ( resource == NULL || value == NULL ) return;
database = XrmGetDatabase(fe_display);
XrmPutStringResource(&database, resource, value);
}
/*
* AltMailInit
*/
void
AltMailInit(void)
{
XP_Bool use_altmail = FALSE;
char* lib_name;
PRLibrary* lib;
PREF_GetBoolPref("mail.use_altmail", &use_altmail);
if ( use_altmail == FALSE ) return;
PREF_CopyCharPref("mail.altmail_dll", &lib_name);
if ( lib_name == NULL || *lib_name == '\0' ) return;
lib = PR_LoadLibrary(lib_name);
if ( lib == NULL ) return;
altmail_RegisterMailClient = PR_FindSymbol(lib, "RegisterMailClient");
altmail_UnRegisterMailClient = PR_FindSymbol(lib, "UnRegisterMailClient");
altmail_OpenMailSession = PR_FindSymbol(lib, "OpenMailSession");
altmail_CloseMailSession = PR_FindSymbol(lib, "CloseMailSession");
altmail_ComposeMailMessage = PR_FindSymbol(lib, "ComposeMailMessage");
altmail_ShowMailBox = PR_FindSymbol(lib, "ShowMailBox");
altmail_ShowMessageCenter = PR_FindSymbol(lib, "ShowMessageCenter");
altmail_GetMenuItemString = PR_FindSymbol(lib, "GetMenuItemString");
altmail_GetNewsMenuItemString = PR_FindSymbol(lib, "GetNewsMenuItemString");
altmail_HandleNewsUrl = PR_FindSymbol(lib, "HandleNewsUrl");
if ( altmail_RegisterMailClient ) {
altmail_RegisterMailClient();
}
if ( altmail_GetMenuItemString ) {
change_resource("*menuBar*openInbox.labelString",
altmail_GetMenuItemString());
}
if ( altmail_GetNewsMenuItemString ) {
change_resource("*menuBar*openNewsgroups.labelString",
altmail_GetNewsMenuItemString());
}
}
/*
* AltMailOpenSession
*/
void
AltMailOpenSession(void)
{
static int session_open = FALSE;
if ( session_open == FALSE && altmail_OpenMailSession != NULL ) {
altmail_OpenMailSession(NULL, NULL);
session_open = TRUE;
}
}
/*
* AltMailExit
*/
void
AltMailExit(void)
{
if ( altmail_CloseMailSession ) {
altmail_CloseMailSession();
}
if ( altmail_UnRegisterMailClient ) {
altmail_UnRegisterMailClient();
}
}
/*
* FE_AlternateCompose
*/
void
FE_AlternateCompose(char* from, char* reply_to, char* to, char* cc,
char* bcc, char* fcc, char* newsgroups,
char* followup_to, char* organization, char* subject,
char* references, char* other_random_headers,
char* priority, char* attachment, char* newspost_url,
char* body)
{
if ( altmail_ComposeMailMessage ) {
altmail_ComposeMailMessage(NULL, to, organization, subject, body,
cc, bcc);
}
}
/*
* FE_AlternateNewsReader
*/
int
FE_AlternateNewsReader(char* url)
{
if ( altmail_HandleNewsUrl ) {
altmail_HandleNewsUrl(url);
return 1;
}
return 0;
}