| Summary: | When creating new calendar item, should auto-upload free/busy | ||
|---|---|---|---|
| Product: | [Applications] korganizer | Reporter: | Nathan Toone <nathan> |
| Component: | general | Assignee: | kdepim bugs <pim-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Gentoo Packages | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Nathan Toone
2004-03-10 21:13:02 UTC
This is a korganizer specific issue I think this is actually fixed now - I don't have access to a kolab server anymore, and since I'm the only one who apparently cares about this bug, I'm closing it. Oh, really it's fixed? Didn't work for me a month ago... And there hasn't been any work done on that issue, so I don't think it's fixed. Cheers, Reinhold Reassigning all KOrganizer bug reports and wishes to the newly created korganizer-devel mailing list. SVN commit 691427 by bvirlet:
Fix various free/busy upload and download bugs, fixes a crash.
Fixes novell bugs : 274438 and 274476
BUG: 77223
BUG: 85630
BUG: 111419
M +8 -2 freebusymanager.cpp
M +1 -1 freebusymanager.h
M +24 -9 koeditorfreebusy.cpp
M +7 -2 koeditorfreebusy.h
M +20 -3 kogroupware.cpp
M +8 -0 kogroupware.h
--- branches/KDE/3.5/kdepim/korganizer/freebusymanager.cpp #691426:691427
@@ -225,6 +225,12 @@
"</qt>" ), i18n("No Free/Busy Upload URL") );
return;
}
+ if ( !targetURL.isValid() ) {
+ KMessageBox::sorry( 0,
+ i18n( "<qt>The target URL '%1' provided is invalid."
+ "</qt>" ).arg( targetURL.prettyURL() ), i18n("Invalid URL") );
+ return;
+ }
targetURL.setUser( KOPrefs::instance()->mFreeBusyPublishUser );
targetURL.setPass( KOPrefs::instance()->mFreeBusyPublishPassword );
@@ -325,7 +331,7 @@
mUploadingFreeBusy = false;
}
-bool FreeBusyManager::retrieveFreeBusy( const QString &email )
+bool FreeBusyManager::retrieveFreeBusy( const QString &email, bool forceDownload )
{
kdDebug(5850) << "FreeBusyManager::retrieveFreeBusy(): " << email << endl;
if ( email.isEmpty() ) return false;
@@ -344,7 +350,7 @@
}
// Don't download free/busy if the user does not want it.
- if( !KOPrefs::instance()->mFreeBusyRetrieveAuto )
+ if( !KOPrefs::instance()->mFreeBusyRetrieveAuto && !forceDownload)
return false;
mRetrieveQueue.append( email );
--- branches/KDE/3.5/kdepim/korganizer/freebusymanager.h #691426:691427
@@ -94,7 +94,7 @@
Return true if a download is initiated, and false otherwise
*/
- bool retrieveFreeBusy( const QString &email );
+ bool retrieveFreeBusy( const QString &email, bool forceDownload );
void cancelRetrieval();
--- branches/KDE/3.5/kdepim/korganizer/koeditorfreebusy.cpp #691426:691427
@@ -91,10 +91,10 @@
void setUpdateTimerID( int id ) { mTimerID = id; }
int updateTimerID() const { return mTimerID; }
- void startDownload() {
+ void startDownload( bool forceDownload ) {
mIsDownloading = true;
FreeBusyManager *m = KOGroupware::instance()->freeBusyManager();
- if ( !m->retrieveFreeBusy( attendee()->email() ) )
+ if ( !m->retrieveFreeBusy( attendee()->email(), forceDownload ) )
mIsDownloading = false;
}
void setIsDownloading( bool d ) { mIsDownloading = d; }
@@ -199,7 +199,7 @@
QWhatsThis::add( label, whatsThis );
controlLayout->addWidget( label );
- scaleCombo = new QComboBox( this );
+ scaleCombo = new QComboBox( this );
QWhatsThis::add( scaleCombo, whatsThis );
scaleCombo->insertItem( i18n( "Hour" ) );
scaleCombo->insertItem( i18n( "Day" ) );
@@ -241,7 +241,7 @@
i18n("Reloads Free/Busy data for all attendees from "
"the corresponding servers.") );
controlLayout->addWidget( button );
- connect( button, SIGNAL( clicked() ), SLOT( reload() ) );
+ connect( button, SIGNAL( clicked() ), SLOT( manualReload() ) );
mGanttView = new KDGanttView( this, "mGanttView" );
QWhatsThis::add( mGanttView,
@@ -290,7 +290,7 @@
connect( m, SIGNAL( freeBusyRetrieved( KCal::FreeBusy *, const QString & ) ),
SLOT( slotInsertFreeBusy( KCal::FreeBusy *, const QString & ) ) );
- connect( &mReloadTimer, SIGNAL( timeout() ), SLOT( reload() ) );
+ connect( &mReloadTimer, SIGNAL( timeout() ), SLOT( autoReload() ) );
}
KOEditorFreeBusy::~KOEditorFreeBusy()
@@ -401,12 +401,11 @@
void KOEditorFreeBusy::timerEvent( QTimerEvent* event )
{
- killTimer( event->timerId() );
FreeBusyItem *item = static_cast<FreeBusyItem *>( mGanttView->firstChild() );
while( item ) {
if( item->updateTimerID() == event->timerId() ) {
item->setUpdateTimerID( 0 );
- item->startDownload();
+ item->startDownload( mForceDownload );
return;
}
item = static_cast<FreeBusyItem *>( item->nextSibling() );
@@ -466,7 +465,7 @@
if( success ) {
if ( start == mDtStart && end == mDtEnd ) {
KMessageBox::information( this,
- i18n( "The meeting already has suitable start/end times." ), QString::null,
+ i18n( "The meeting already has suitable start/end times." ), QString::null,
"MeetingTimeOKFreeBusy" );
} else {
emit dateTimesChanged( start, end );
@@ -631,13 +630,29 @@
mReloadTimer.stop();
}
+void KOEditorFreeBusy::manualReload()
+{
+ mForceDownload = true;
+ reload();
+}
+
+void KOEditorFreeBusy::autoReload()
+{
+ mForceDownload = false;
+ reload();
+}
+
void KOEditorFreeBusy::reload()
{
kdDebug(5850) << "KOEditorFreeBusy::reload()" << endl;
FreeBusyItem *item = static_cast<FreeBusyItem *>( mGanttView->firstChild() );
while( item ) {
- updateFreeBusyData( item );
+ if ( mForceDownload )
+ item->startDownload( mForceDownload );
+ else
+ updateFreeBusyData( item );
+
item = static_cast<FreeBusyItem *>( item->nextSibling() );
}
}
--- branches/KDE/3.5/kdepim/korganizer/koeditorfreebusy.h #691426:691427
@@ -77,7 +77,10 @@
void slotZoomToTime();
void slotPickDate();
- void reload();
+ // Force the download of FB informations
+ void manualReload();
+ // Only download FB if the auto-download option is set in config
+ void autoReload();
protected:
void timerEvent( QTimerEvent* );
@@ -90,7 +93,7 @@
bool tryDate( FreeBusyItem *attendee,
QDateTime &tryFrom, QDateTime &tryTo );
void updateStatusSummary();
-
+ void reload();
KDGanttView *mGanttView;
QLabel *mStatusSummaryLabel;
bool mIsOrganizer;
@@ -99,6 +102,8 @@
QDateTime mDtStart, mDtEnd;
QTimer mReloadTimer;
+
+ bool mForceDownload;
};
#endif
--- branches/KDE/3.5/kdepim/korganizer/kogroupware.cpp #691426:691427
@@ -87,17 +87,34 @@
incomingDirChanged( locateLocal( "data", "korganizer/income.tentative/" ) );
incomingDirChanged( locateLocal( "data", "korganizer/income.cancel/" ) );
incomingDirChanged( locateLocal( "data", "korganizer/income.reply/" ) );
-}
-FreeBusyManager *KOGroupware::freeBusyManager()
-{
if ( !mFreeBusyManager ) {
mFreeBusyManager = new FreeBusyManager( this, "freebusymanager" );
mFreeBusyManager->setCalendar( mCalendar );
connect( mCalendar, SIGNAL( calendarChanged() ),
mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) );
+ connect( mView, SIGNAL( newIncidenceChanger( IncidenceChangerBase* ) ),
+ this, SLOT( slotViewNewIncidenceChanger( IncidenceChangerBase* ) ) );
+ slotViewNewIncidenceChanger( mView->incidenceChanger() );
}
+}
+
+void KOGroupware::slotViewNewIncidenceChanger( IncidenceChangerBase* changer )
+{
+ // Call slot perhapsUploadFB if an incidence was added, changed or removed
+ connect( changer, SIGNAL( incidenceAdded( Incidence* ) ),
+ mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) );
+ connect( changer, SIGNAL( incidenceChanged( Incidence*, Incidence*, int ) ),
+ mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) );
+ connect( changer, SIGNAL( incidenceChanged( Incidence*, Incidence* ) ),
+ mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) ) ;
+ connect( changer, SIGNAL( incidenceDeleted( Incidence * ) ),
+ mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) );
+}
+
+FreeBusyManager *KOGroupware::freeBusyManager()
+{
return mFreeBusyManager;
}
--- branches/KDE/3.5/kdepim/korganizer/kogroupware.h #691426:691427
@@ -53,6 +53,12 @@
class CalendarView;
class FreeBusyManager;
+namespace KOrg {
+class IncidenceChangerBase;
+}
+
+using namespace KOrg;
+
class KOGroupware : public QObject
{
Q_OBJECT
@@ -80,6 +86,8 @@
/** Handle iCals given by KMail. */
void incomingDirChanged( const QString& path );
+ /** Updates some slot connections when the view incidence changer changes */
+ void slotViewNewIncidenceChanger( IncidenceChangerBase* changer );
protected:
KOGroupware( CalendarView*, KCal::CalendarResources* );
SVN commit 700059 by wstephens: Port dependent commits 691427 and 691750 by bruno.virlet@gmail.com to enterprise branch. Fixes Novell bugs 274438 and 274476. CCBUG:77223 CCBUG:85630 CCBUG:111419 M +3 -0 actionmanager.cpp M +18 -3 freebusymanager.cpp M +9 -1 freebusymanager.h M +22 -7 koeditorfreebusy.cpp M +7 -2 koeditorfreebusy.h M +16 -0 kogroupware.cpp M +8 -0 kogroupware.h --- branches/kdepim/enterprise/kdepim/korganizer/actionmanager.cpp #700058:700059 @@ -43,6 +43,7 @@ #include "importdialog.h" #include "eventarchiver.h" #include "stdcalendar.h" +#include "freebusymanager.h" #include <libkcal/calendarlocal.h> #include <libkcal/calendarresources.h> @@ -1264,6 +1265,8 @@ if ( mResourceView ) mResourceView->updateView(); + + KOGroupware::instance()->freeBusyManager()->setBrokenUrl( false ); } void ActionManager::setDestinationPolicy() --- branches/kdepim/enterprise/kdepim/korganizer/freebusymanager.cpp #700058:700059 @@ -117,7 +117,8 @@ FreeBusyManager::FreeBusyManager( QObject *parent, const char *name ) : QObject( parent, name ), - mCalendar( 0 ), mTimerID( 0 ), mUploadingFreeBusy( false ) + mCalendar( 0 ), mTimerID( 0 ), mUploadingFreeBusy( false ), + mBrokenUrl( false ) { } @@ -207,6 +208,11 @@ publishFreeBusy(); } +void FreeBusyManager::setBrokenUrl( bool isBroken ) +{ + mBrokenUrl = isBroken; +} + /*! This method is called when the user has selected to publish its free/busy list or when the delay have passed. @@ -226,6 +232,15 @@ "</qt>" ), i18n("No Free/Busy Upload URL") ); return; } + if ( mBrokenUrl ) // Url is invalid, don't try again + return; + if ( !targetURL.isValid() ) { + KMessageBox::sorry( 0, + i18n( "<qt>The target URL '%1' provided is invalid." + "</qt>" ).arg( targetURL.prettyURL() ), i18n("Invalid URL") ); + mBrokenUrl = true; + return; + } targetURL.setUser( KOPrefs::instance()->mFreeBusyPublishUser ); targetURL.setPass( KOPrefs::instance()->mFreeBusyPublishPassword ); @@ -326,7 +341,7 @@ mUploadingFreeBusy = false; } -bool FreeBusyManager::retrieveFreeBusy( const QString &email ) +bool FreeBusyManager::retrieveFreeBusy( const QString &email, bool forceDownload ) { kdDebug(5850) << "FreeBusyManager::retrieveFreeBusy(): " << email << endl; if ( email.isEmpty() ) return false; @@ -338,7 +353,7 @@ } // Don't download free/busy if the user does not want it. - if( !KOPrefs::instance()->mFreeBusyRetrieveAuto ) { + if( !KOPrefs::instance()->mFreeBusyRetrieveAuto && !forceDownload) { slotFreeBusyDownloadError( email ); // fblist return false; } --- branches/kdepim/enterprise/kdepim/korganizer/freebusymanager.h #700058:700059 @@ -95,7 +95,7 @@ Return true if a download is initiated, and false otherwise */ - bool retrieveFreeBusy( const QString &email ); + bool retrieveFreeBusy( const QString &email, bool forceDownload ); void cancelRetrieval(); @@ -121,6 +121,12 @@ */ QString freeBusyDir(); + /** + Change the broken Url status + mBrokenUrl is used to show the 'broken url popup' only once + */ + void setBrokenUrl( bool isBroken ); + public slots: // When something changed in the calendar, we get this called void slotPerhapsUploadFB(); @@ -166,6 +172,8 @@ QDateTime mNextUploadTime; int mTimerID; bool mUploadingFreeBusy; + bool mBrokenUrl; + }; #endif --- branches/kdepim/enterprise/kdepim/korganizer/koeditorfreebusy.cpp #700058:700059 @@ -94,10 +94,10 @@ void setUpdateTimerID( int id ) { mTimerID = id; } int updateTimerID() const { return mTimerID; } - void startDownload() { + void startDownload( bool forceDownload ) { mIsDownloading = true; FreeBusyManager *m = KOGroupware::instance()->freeBusyManager(); - if ( !m->retrieveFreeBusy( attendee()->email() ) ) + if ( !m->retrieveFreeBusy( attendee()->email(), forceDownload ) ) mIsDownloading = false; } void setIsDownloading( bool d ) { mIsDownloading = d; } @@ -245,7 +245,7 @@ i18n("Reloads Free/Busy data for all attendees from " "the corresponding servers.") ); controlLayout->addWidget( button ); - connect( button, SIGNAL( clicked() ), SLOT( reload() ) ); + connect( button, SIGNAL( clicked() ), SLOT( manualReload() ) ); mGanttView = new KDGanttView( this, "mGanttView" ); QWhatsThis::add( mGanttView, @@ -302,7 +302,7 @@ connect( m, SIGNAL( freeBusyRetrieved( KCal::FreeBusy *, const QString & ) ), SLOT( slotInsertFreeBusy( KCal::FreeBusy *, const QString & ) ) ); - connect( &mReloadTimer, SIGNAL( timeout() ), SLOT( reload() ) ); + connect( &mReloadTimer, SIGNAL( timeout() ), SLOT( autoReload() ) ); } KOEditorFreeBusy::~KOEditorFreeBusy() @@ -420,12 +420,11 @@ void KOEditorFreeBusy::timerEvent( QTimerEvent* event ) { - killTimer( event->timerId() ); FreeBusyItem *item = static_cast<FreeBusyItem *>( mGanttView->firstChild() ); while( item ) { if( item->updateTimerID() == event->timerId() ) { item->setUpdateTimerID( 0 ); - item->startDownload(); + item->startDownload( mForceDownload ); return; } item = static_cast<FreeBusyItem *>( item->nextSibling() ); @@ -649,13 +648,29 @@ mReloadTimer.stop(); } +void KOEditorFreeBusy::manualReload() +{ + mForceDownload = true; + reload(); +} + +void KOEditorFreeBusy::autoReload() +{ + mForceDownload = false; + reload(); +} + void KOEditorFreeBusy::reload() { kdDebug(5850) << "KOEditorFreeBusy::reload()" << endl; FreeBusyItem *item = static_cast<FreeBusyItem *>( mGanttView->firstChild() ); while( item ) { - updateFreeBusyData( item ); + if ( mForceDownload ) + item->startDownload( mForceDownload ); + else + updateFreeBusyData( item ); + item = static_cast<FreeBusyItem *>( item->nextSibling() ); } } --- branches/kdepim/enterprise/kdepim/korganizer/koeditorfreebusy.h #700058:700059 @@ -78,7 +78,10 @@ void slotZoomToTime(); void slotPickDate(); - void reload(); + // Force the download of FB informations + void manualReload(); + // Only download FB if the auto-download option is set in config + void autoReload(); void slotIntervalColorRectangleMoved( const QDateTime& start, const QDateTime& end ); protected: @@ -92,7 +95,7 @@ bool tryDate( FreeBusyItem *attendee, QDateTime &tryFrom, QDateTime &tryTo ); void updateStatusSummary(); - + void reload(); KDGanttView *mGanttView; KDIntervalColorRectangle* mEventRectangle; QLabel *mStatusSummaryLabel; @@ -102,6 +105,8 @@ QDateTime mDtStart, mDtEnd; QTimer mReloadTimer; + + bool mForceDownload; }; #endif --- branches/kdepim/enterprise/kdepim/korganizer/kogroupware.cpp #700058:700059 @@ -91,6 +91,19 @@ incomingDirChanged( locateLocal( "data", "korganizer/income.delegated/" ) ); } +void KOGroupware::slotViewNewIncidenceChanger( IncidenceChangerBase* changer ) +{ + // Call slot perhapsUploadFB if an incidence was added, changed or removed + connect( changer, SIGNAL( incidenceAdded( Incidence* ) ), + mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) ); + connect( changer, SIGNAL( incidenceChanged( Incidence*, Incidence*, int ) ), + mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) ); + connect( changer, SIGNAL( incidenceChanged( Incidence*, Incidence* ) ), + mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) ) ; + connect( changer, SIGNAL( incidenceDeleted( Incidence * ) ), + mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) ); +} + FreeBusyManager *KOGroupware::freeBusyManager() { if ( !mFreeBusyManager ) { @@ -98,6 +111,9 @@ mFreeBusyManager->setCalendar( mCalendar ); connect( mCalendar, SIGNAL( calendarChanged() ), mFreeBusyManager, SLOT( slotPerhapsUploadFB() ) ); + connect( mView, SIGNAL( newIncidenceChanger( IncidenceChangerBase* ) ), + this, SLOT( slotViewNewIncidenceChanger( IncidenceChangerBase* ) ) ); + slotViewNewIncidenceChanger( mView->incidenceChanger() ); } return mFreeBusyManager; --- branches/kdepim/enterprise/kdepim/korganizer/kogroupware.h #700058:700059 @@ -53,6 +53,12 @@ class CalendarView; class FreeBusyManager; +namespace KOrg { +class IncidenceChangerBase; +} + +using namespace KOrg; + class KOGroupware : public QObject { Q_OBJECT @@ -80,6 +86,8 @@ /** Handle iCals given by KMail. */ void incomingDirChanged( const QString& path ); + /** Updates some slot connections when the view incidence changer changes */ + void slotViewNewIncidenceChanger( IncidenceChangerBase* changer ); protected: KOGroupware( CalendarView*, KCal::CalendarResources* ); |