/* -*- 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.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ /********************************************************************** 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; }