From abb569d284027c425212909df2e6cfd8e944777b Mon Sep 17 00:00:00 2001 From: "mostafah%oeone.com" Date: Wed, 1 Sep 2004 20:11:06 +0000 Subject: [PATCH] Added suppressAlarms attribute to oeICal and suppressAlarmsByDefault to oeICalContainer This is the first step to achieve the goal in bug 257428: alarm sound / popup box / show preferences on a per-calendar basis --- calendar/libxpical/oeICalContainerImpl.cpp | 16 +++ calendar/libxpical/oeICalContainerImpl.h | 113 --------------------- calendar/libxpical/oeICalImpl.cpp | 70 ++++++++----- calendar/libxpical/oeICalImpl.h | 2 + calendar/libxpical/oeIICal.idl | 2 + 5 files changed, 65 insertions(+), 138 deletions(-) diff --git a/calendar/libxpical/oeICalContainerImpl.cpp b/calendar/libxpical/oeICalContainerImpl.cpp index a4f150f5483..67288fc8f47 100644 --- a/calendar/libxpical/oeICalContainerImpl.cpp +++ b/calendar/libxpical/oeICalContainerImpl.cpp @@ -225,6 +225,7 @@ oeICalContainerImpl::oeICalContainerImpl() #endif m_batchMode = false; + m_suppressAlarmsByDefault = false; NS_NewISupportsArray(getter_AddRefs(m_calendarArray)); if ( m_calendarArray == nsnull ) { @@ -332,6 +333,8 @@ oeICalContainerImpl::AddCalendar( const char *server, const char *type ) { calendar->SetBatchMode( m_batchMode ); //Make sure the current batchmode value is inherited + calendar->SetSuppressAlarms( m_suppressAlarmsByDefault ); + calendar->SetServer( server ); return NS_OK; @@ -482,6 +485,19 @@ NS_IMETHODIMP oeICalContainerImpl::SetBatchMode(PRBool aBatchMode) return NS_OK; } +/* attribute boolean suppressAlarmsByDefault; */ +NS_IMETHODIMP oeICalContainerImpl::GetSuppressAlarmsByDefault(PRBool *aRetVal) +{ + *aRetVal = m_suppressAlarmsByDefault; + return NS_OK; +} + +NS_IMETHODIMP oeICalContainerImpl::SetSuppressAlarmsByDefault(PRBool aNewVal) +{ + m_suppressAlarmsByDefault = aNewVal; + return NS_OK; +} + NS_IMETHODIMP oeICalContainerImpl::AddEvent( oeIICalEvent *icalevent, const char *server, char **retid ) { #ifdef ICAL_DEBUG diff --git a/calendar/libxpical/oeICalContainerImpl.h b/calendar/libxpical/oeICalContainerImpl.h index 6dafbc50f5d..e69de29bb2d 100644 --- a/calendar/libxpical/oeICalContainerImpl.h +++ b/calendar/libxpical/oeICalContainerImpl.h @@ -1,113 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla 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/MPL/ - * - * 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 OEone Calendar Code, released October 31st, 2001. - * - * The Initial Developer of the Original Code is - * OEone Corporation. - * Portions created by the Initial Developer are Copyright (C) 2001 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): Mostafa Hosseini - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -/* Header file for oeICalContainerImpl.cpp containing its CID and CONTRACTID.*/ - -#include "oeIICal.h" -#include "oeICalImpl.h" -#include "oeICalEventImpl.h" -#include "oeICalTodoImpl.h" -#include "nsISupportsArray.h" - -#define OE_ICALCONTAINER_CID \ -{ 0x10697055, 0x4199, 0x4c2a, { 0x89, 0xf4, 0x60, 0x24, 0x3a, 0x8c, 0x76, 0xca } } - -#define OE_ICALCONTAINER_CONTRACTID "@mozilla.org/ical-container;1" - -class oeFilterDateTime : public oeIDateTime -{ -public: - NS_DECL_ISUPPORTS - NS_DECL_OEIDATETIME - oeFilterDateTime(); - virtual ~oeFilterDateTime(); - void SetFieldType( PRInt32 type ); - class oeICalContainerFilter *m_parent; -private: - struct icaltimetype m_datetime; - PRInt32 m_icaltype; -}; - -class oeICalContainerFilter : public oeIICalTodo -{ -public: - NS_DECL_ISUPPORTS - NS_DECL_OEIICALEVENT - NS_DECL_OEIICALTODO - - oeICalContainerFilter(); - virtual ~oeICalContainerFilter(); - nsCOMPtr m_calendarArray; - void UpdateAllFilters( PRInt32 icaltype ); -private: - oeFilterDateTime *m_completed; -}; - -class oeICalContainerImpl : public oeIICalContainer -{ -public: - oeICalContainerImpl(); - virtual ~oeICalContainerImpl(); - - /** - * This macro expands into a declaration of the nsISupports interface. - * Every XPCOM component needs to implement nsISupports, as it acts - * as the gateway to other interfaces this component implements. You - * could manually declare QueryInterface, AddRef, and Release instead - * of using this macro, but why? - */ - // nsISupports interface - NS_DECL_ISUPPORTS - - /** - * This macro is defined in the nsISample.h file, and is generated - * automatically by the xpidl compiler. It expands to - * declarations of all of the methods required to implement the - * interface. xpidl will generate a NS_DECL_[INTERFACENAME] macro - * for each interface that it processes. - * - * The methods of nsISample are discussed individually below, but - * commented out (because this macro already defines them.) - */ - NS_DECL_OEIICALCONTAINER - icaltimetype GetNextEvent( icaltimetype starting ); -private: - bool m_batchMode; - nsCOMPtr m_calendarArray; - nsCOMPtr m_observerArray; - nsCOMPtr m_todoobserverArray; - oeICalContainerFilter *m_filter; -}; diff --git a/calendar/libxpical/oeICalImpl.cpp b/calendar/libxpical/oeICalImpl.cpp index 31a362f8907..d743b3a1ff8 100644 --- a/calendar/libxpical/oeICalImpl.cpp +++ b/calendar/libxpical/oeICalImpl.cpp @@ -353,6 +353,7 @@ oeICalImpl::oeICalImpl() #endif m_batchMode = false; + m_suppressAlarms = false; m_alarmtimer = nsnull; @@ -368,18 +369,7 @@ oeICalImpl::~oeICalImpl() #ifdef ICAL_DEBUG printf( "oeICalImpl::~oeICalImpl()\n" ); #endif - if( m_alarmtimer ) { - PRUint32 delay = 0; - #ifdef NS_INIT_REFCNT //A temporary way of keeping backward compatibility with Mozilla 1.0 source compile - delay = m_alarmtimer->GetDelay(); - #else - m_alarmtimer->GetDelay( &delay ); - #endif - if ( delay != 0 ) - m_alarmtimer->Cancel(); - m_alarmtimer->Release(); - m_alarmtimer = nsnull; - } + CancelAlarmTimer(); NS_RELEASE( m_filter ); } @@ -956,6 +946,30 @@ NS_IMETHODIMP oeICalImpl::SetBatchMode(PRBool aBatchMode) return NS_OK; } +/* attribute boolean suppressAlarms; */ +NS_IMETHODIMP oeICalImpl::GetSuppressAlarms(PRBool *aRetVal) +{ + *aRetVal = m_suppressAlarms; + + return NS_OK; +} + + +NS_IMETHODIMP oeICalImpl::SetSuppressAlarms(PRBool aNewVal) +{ + if( m_suppressAlarms ) { + if( !aNewVal ) { + m_suppressAlarms = PR_FALSE; + SetupAlarmManager(); + } + } else { + if( aNewVal ) { + m_suppressAlarms = PR_TRUE; + CancelAlarmTimer(); + } + } + return NS_OK; +} /** * @@ -1804,7 +1818,8 @@ void oeICalImpl::SetupAlarmManager() { #ifdef ICAL_DEBUG printf( "oeICalImpl::SetupAlarmManager()\n" ); #endif - + if( m_suppressAlarms ) + return; if( m_batchMode ) { #ifdef ICAL_DEBUG @@ -1973,18 +1988,8 @@ void oeICalImpl::SetupAlarmManager() { lastcheck = now; - if( m_alarmtimer ) { - PRUint32 delay = 0; - #ifdef NS_INIT_REFCNT //A temporary way of keeping backward compatibility with Mozilla 1.0 source compile - delay = m_alarmtimer->GetDelay(); - #else - m_alarmtimer->GetDelay( &delay ); - #endif - if ( delay != 0 ) - m_alarmtimer->Cancel(); - m_alarmtimer->Release(); - m_alarmtimer = nsnull; - } + CancelAlarmTimer(); //cancel the current alarm timer if any + if( !icaltime_is_null_time( nextalarm ) ) { #ifdef ICAL_DEBUG printf( "NEXT ALARM IS: %s\n", icaltime_as_ical_string( nextalarm ) ); @@ -2005,6 +2010,21 @@ void oeICalImpl::SetupAlarmManager() { } } +void oeICalImpl::CancelAlarmTimer() { + if( m_alarmtimer ) { + PRUint32 delay = 0; + #ifdef NS_INIT_REFCNT //A temporary way of keeping backward compatibility with Mozilla 1.0 source compile + delay = m_alarmtimer->GetDelay(); + #else + m_alarmtimer->GetDelay( &delay ); + #endif + if ( delay != 0 ) + m_alarmtimer->Cancel(); + m_alarmtimer->Release(); + m_alarmtimer = nsnull; + } +} + /** * * AddTodo diff --git a/calendar/libxpical/oeICalImpl.h b/calendar/libxpical/oeICalImpl.h index 367e281158c..5c6898097d9 100644 --- a/calendar/libxpical/oeICalImpl.h +++ b/calendar/libxpical/oeICalImpl.h @@ -246,6 +246,7 @@ private: nsCOMPtr m_observerlist; nsCOMPtr m_todoobserverlist; bool m_batchMode; + bool m_suppressAlarms; EventList m_eventlist; TodoList m_todolist; nsITimer *m_alarmtimer; @@ -254,6 +255,7 @@ private: bool SatisfiesFilter( oeIICalTodo *comp ); void ChopAndAddEventToEnum( struct icaltimetype startdate, nsISimpleEnumerator **eventlist, oeICalEventImpl* event, bool isallday, bool isbeginning ); + void CancelAlarmTimer(); }; #endif diff --git a/calendar/libxpical/oeIICal.idl b/calendar/libxpical/oeIICal.idl index 288e71dfb82..dff10f5fe1b 100644 --- a/calendar/libxpical/oeIICal.idl +++ b/calendar/libxpical/oeIICal.idl @@ -219,6 +219,7 @@ interface oeIICal : nsISupports attribute boolean batchMode; readonly attribute oeIICalTodo filter; attribute string server; + attribute boolean suppressAlarms; void addObserver( in oeIICalObserver observer ); void removeObserver( in oeIICalObserver observer ); @@ -256,6 +257,7 @@ interface oeIICal : nsISupports interface oeIICalContainer : nsISupports { attribute boolean batchMode; + attribute boolean suppressAlarmsByDefault; readonly attribute oeIICalTodo filter;