summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp31
-rw-r--r--korganizer/calendarview.h4
-rw-r--r--korganizer/koeventviewer.cpp80
-rw-r--r--korganizer/koeventviewer.h1
-rw-r--r--korganizer/main.cpp32
5 files changed, 93 insertions, 55 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index bf98ad4..c3c3d47 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -452,12 +452,14 @@ void CalendarView::init()
mTodoEditor = mDialogManager->getTodoEditor();
mFlagEditDescription = false;
mSuspendTimer = new QTimer( this );
mAlarmTimer = new QTimer( this );
+ mRecheckAlarmTimer = new QTimer( this );
+ connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
mAlarmDialog = new AlarmDialog( this );
connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
mAlarmDialog->setServerNotification( false );
mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
@@ -488,15 +490,20 @@ void CalendarView::suspendAlarm()
}
void CalendarView::startAlarm( QString mess , QString filename)
{
mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
+ QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
}
+void CalendarView::checkNextTimerAlarm()
+{
+ mCalendar->checkAlarmForIncidence( 0, true );
+}
void CalendarView::computeAlarm( QString msg )
{
QString mess = msg;
QString mAlarmMessage = mess.mid( 9 );
@@ -601,18 +608,36 @@ void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
#ifndef DESKTOP_VERSION
AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
#endif
return;
}
+ int maxSec;
+ //maxSec = 5; //testing only
+ maxSec = 86400+3600; // one day+1hour
mAlarmNotification = noti;
- int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
- //qDebug("Alarm timer started with secs: %d ", ms/1000);
- mAlarmTimer->start( ms , true );
+ int sec = QDateTime::currentDateTime().secsTo( qdt );
+ if ( sec > maxSec ) {
+ mRecheckAlarmTimer->start( maxSec * 1000 );
+ // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
+ return;
+ } else {
+ mRecheckAlarmTimer->stop();
+ }
+ //qDebug("Alarm timer started with secs: %d ", sec);
+ mAlarmTimer->start( sec *1000 , true );
}
+// called by mRecheckAlarmTimer to get next alarm
+// we need this, because a QTimer has only a max range of 25 days
+void CalendarView::recheckTimerAlarm()
+{
+ mAlarmTimer->stop();
+ mRecheckAlarmTimer->stop();
+ mCalendar->checkAlarmForIncidence( 0, true );
+}
void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
{
//qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
#ifndef DESKTOP_VERSION
AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index e7aa351..fda02f7 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -168,13 +168,14 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
void calendarViewExpanded( bool );
void updateSearchDialog();
public slots:
-
+ void recheckTimerAlarm();
+ void checkNextTimerAlarm();
void addAlarm(const QDateTime &qdt, const QString &noti );
void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
void removeAlarm(const QDateTime &qdt, const QString &noti );
/** options dialog made a changed to the configuration. we catch this
* and notify all widgets which need to update their configuration. */
@@ -471,12 +472,13 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
private:
AlarmDialog * mAlarmDialog;
QString mAlarmNotification;
QString mSuspendAlarmNotification;
QTimer* mSuspendTimer;
QTimer* mAlarmTimer;
+ QTimer* mRecheckAlarmTimer;
void computeAlarm( QString );
void startAlarm( QString, QString );
void setSyncEventsReadOnly();
QDateTime loadedFileVersion;
void checkSharpEvent( Event* lastSync, Incidence* toDelete );
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index bac66d3..1f69700 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -47,12 +47,16 @@
#include "koeventviewer.h"
#ifndef KORG_NOKABC
#include <kabc/stdaddressbook.h>
#define size count
#endif
+#ifndef DESKTOP_VERSION
+#include <qtopia/qcopenvelope_qws.h>
+#endif
+
KOEventViewer::KOEventViewer(QWidget *parent,const char *name)
: QTextBrowser(parent,name)
{
mSyncMode = false;
mColorMode = 0;
}
@@ -60,40 +64,52 @@ KOEventViewer::KOEventViewer(QWidget *parent,const char *name)
KOEventViewer::~KOEventViewer()
{
}
void KOEventViewer::setSource(const QString& n)
{
- KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
- KABC::AddressBook::Iterator it;
- for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
- // LR I do not understand, why the uid string is different on zaurus and desktop
+
+ if ( n.left(3) == "uid" ) {
+ KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
+ KABC::AddressBook::Iterator it;
+ for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
+ // LR I do not understand, why the uid string is different on zaurus and desktop
#ifdef DESKTOP_VERSION
- QString uid = "uid://"+(*it).uid();
+ QString uid = "uid://"+(*it).uid();
#else
- QString uid = "uid:"+(*it).uid();
+ QString uid = "uid:"+(*it).uid();
#endif
- //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1());
- if (n == uid ) {
- //qDebug("found %s ",(*it).mobileHomePhone().latin1() );
- QDialog dia( this,"dia123", true );
- dia.setCaption( i18n("Details of attendee") );
- QVBoxLayout lay ( &dia );
- KPIM::AddresseeView av ( &dia );
- av.setAddressee( (*it) );
- lay.addWidget( &av );
- if ( QApplication::desktop()->width() < 480 )
- dia.resize( 220, 240);
- else {
- dia.resize( 400,400);
+ //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1());
+ if (n == uid ) {
+ //qDebug("found %s ",(*it).mobileHomePhone().latin1() );
+ QDialog dia( this,"dia123", true );
+ dia.setCaption( i18n("Details of attendee") );
+ QVBoxLayout lay ( &dia );
+ KPIM::AddresseeView av ( &dia );
+ av.setAddressee( (*it) );
+ lay.addWidget( &av );
+ if ( QApplication::desktop()->width() < 480 )
+ dia.resize( 220, 240);
+ else {
+ dia.resize( 400,400);
+ }
+ dia.exec();
+ break;
+ }
}
- dia.exec();
- break;
- }
- }
+ return;
+ }
+ if ( n.left(6) == "mailto" ) {
+ // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1());
+#ifndef DESKTOP_VERSION
+ QCopEnvelope e("QPE/Application/kmpi", "newMail(QString)" );
+ e << n.mid(7);
+#endif
+
+ }
#ifndef KORG_NODCOP
kdDebug() << "KOEventViewer::setSource(): " << n << endl;
QString tmpStr;
if (n.startsWith("mailto:")) {
@@ -167,12 +183,13 @@ void KOEventViewer::addTag(const QString & tag,const QString & text)
void KOEventViewer::setColorMode( int m )
{
mColorMode = m;
}
void KOEventViewer::appendEvent(Event *event, int mode )
{
+ mMailSubject = "";
mCurrentIncidence = event;
bool shortDate = KOPrefs::instance()->mShortDateInViewer;
topLevelWidget()->setCaption(i18n("Event Viewer"));
if ( mode == 0 ) {
addTag("h2",event->summary());
}
@@ -190,21 +207,24 @@ void KOEventViewer::appendEvent(Event *event, int mode )
addTag("h2",i18n( "Remote: " ) +event->summary());
}
addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
if ( mColorMode )
mText += "</font>";
}
+ mMailSubject += i18n( "Meeting " )+ event->summary();
if (event->cancelled ()) {
mText +="<font color=\"#B00000\">";
addTag("i",i18n("This event has been cancelled!"));
mText.append("<br>");
mText += "</font>";
+ mMailSubject += i18n("(cancelled)");
}
if (!event->location().isEmpty()) {
addTag("b",i18n("Location: "));
mText.append(event->location()+"<br>");
+ mMailSubject += i18n(" at ") + event->location();
}
if (event->doesFloat()) {
if (event->isMultiDay()) {
mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
.arg(event->dtStartDateStr(shortDate))
.arg(event->dtEndDateStr(shortDate)));
@@ -235,16 +255,22 @@ void KOEventViewer::appendEvent(Event *event, int mode )
QDate next;
next = event->recurrence()->getPreviousDate( start , &last );
if ( !last ) {
next = event->recurrence()->getNextDate( start.addDays( - 1 ) );
addTag("p",i18n("<b>Next recurrence is on:</b>") );
addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
+ QDateTime nextdt = QDateTime( next, event->dtStart().time());
+ mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true );
+
} else {
addTag("p",i18n("<b>Last recurrence was on:</b>") );
addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
}
+ } else {
+ mMailSubject += i18n(" - " )+event->dtStartStr( true );
+
}
if (event->isAlarmEnabled()) {
Alarm *alarm =event->alarms().first() ;
QDateTime t = alarm->time();
@@ -271,12 +297,13 @@ void KOEventViewer::appendEvent(Event *event, int mode )
//QWhatsThis::add(this,mText);
}
void KOEventViewer::appendTodo(Todo *event, int mode )
{
+ mMailSubject = "";
mCurrentIncidence = event;
topLevelWidget()->setCaption(i18n("Todo Viewer"));
bool shortDate = KOPrefs::instance()->mShortDateInViewer;
if (mode == 0 )
addTag("h2",event->summary());
else {
@@ -292,25 +319,29 @@ void KOEventViewer::appendTodo(Todo *event, int mode )
addTag("h2",i18n( "Remote: " ) +event->summary());
}
addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
if ( mColorMode )
mText += "</font>";
}
+ mMailSubject += i18n( "Todo " )+ event->summary();
if (event->cancelled ()) {
mText +="<font color=\"#B00000\">";
addTag("i",i18n("This todo has been cancelled!"));
mText.append("<br>");
mText += "</font>";
+ mMailSubject += i18n("(cancelled)");
}
if (!event->location().isEmpty()) {
addTag("b",i18n("Location: "));
mText.append(event->location()+"<br>");
+ mMailSubject += i18n(" at ") + event->location();
}
if (event->hasDueDate()) {
mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
+ mMailSubject += i18n(" - " )+event->dtDueStr( true );
}
addTag("b",i18n("Access: "));
mText.append(event->secrecyStr()+"<br>");
if (!event->description().isEmpty()) {
addTag("p",i18n("<b>Details: </b>"));
addTag("p",event->description());
@@ -402,15 +433,16 @@ void KOEventViewer::formatAttendees(Incidence *event)
mText += "<li><a href=\"uid:" + a->uid() + "\">";
if (!a->name().isEmpty()) mText += a->name();
else mText += a->email();
mText += "</a>\n";
#endif
+
if (!a->email().isEmpty()) {
if (iconPath) {
- mText += "<a href=\"mailto:" + a->name() +" "+ "<" + a->email() + ">" + "\">";
+ mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
mText += "<IMG src=\"" + iconPath + "\">";
mText += "</a>\n";
}
}
if (a->status() != Attendee::NeedsAction )
mText +="[" + a->statusStr() + "] ";
diff --git a/korganizer/koeventviewer.h b/korganizer/koeventviewer.h
index 74f1135..0cd3f33 100644
--- a/korganizer/koeventviewer.h
+++ b/korganizer/koeventviewer.h
@@ -62,12 +62,13 @@ class KOEventViewer : public QTextBrowser {
private:
QTextBrowser *mEventTextView;
bool mSyncMode;
QString mText;
+ QString mMailSubject;
Incidence* mCurrentIncidence;
signals:
void launchaddressbook(QString uid);
};
#endif
diff --git a/korganizer/main.cpp b/korganizer/main.cpp
index a357988..69ef294 100644
--- a/korganizer/main.cpp
+++ b/korganizer/main.cpp
@@ -50,44 +50,22 @@ int main( int argc, char **argv )
printf(" KO/Pi is exiting now. Bye!\n");
exitHelp = true;
}
}
if ( ! exitHelp ) {
KGlobal::setAppName( "korganizer" );
-
-
- QString fileName ;
+ QString fileName ;
#ifndef DESKTOP_VERSION
- QString appdir = QDir::homeDirPath() + "/kdepim/apps/" + KGlobal::getAppName();
- KStandardDirs::setAppDir( appdir );
-
fileName = getenv("QPEDIR");
KGlobal::iconLoader()->setIconPath( fileName +"/pics/kdepim/korganizer/");
#else
-
-#ifndef _WIN32_
- fileName = qApp->applicationDirPath () + "/kdepim/korganizer/";
-#else
- fileName = qApp->applicationDirPath () + "\\kdepim\\korganizer\\";
-#endif
-
- KGlobal::iconLoader()->setIconPath(fileName);
-
- QString appdir = QDir::homeDirPath();
- //appdir = "C:\\";
- if ( appdir.right(1) == "\\" || appdir.right(1) == "/" )
- appdir += "korganizer";
- else
- appdir += "/korganizer";
- KStandardDirs::setAppDir( QDir::convertSeparators( appdir ));
- // qDebug(" %s ",KStandardDirs::appDir().latin1() );
+ fileName = qApp->applicationDirPath () + "/kdepim/korganizer/";
+ KGlobal::iconLoader()->setIconPath(QDir::convertSeparators(fileName));
#endif
- QDir app_dir;
- if ( !app_dir.exists(KStandardDirs::appDir()) )
- app_dir.mkdir (KStandardDirs::appDir());
- MainWindow m;
+ KStandardDirs::setAppDir( QDir::convertSeparators(locateLocal("data", "korganizer")));
+ MainWindow m;
#ifndef DESKTOP_VERSION
QObject::connect( &a, SIGNAL (appMessage ( const QCString &, const QByteArray & )),&m, SLOT(recieve( const QCString&, const QByteArray& )));
a.showMainWidget(&m );
#else
a.setMainWidget(&m );
m.show();