1.0.6 candidate
[qtmeetings] / src / IO / Communication / CommunicationManager.cpp
index c941c7d..0880920 100644 (file)
@@ -6,14 +6,17 @@
 #include <QDateTime>
 #include <QDomDocument>
 #include <QDebug>
+#include "../../Domain/Configuration/Configuration.h"
 
 static const int ERROR_BASE=100;
 
-CommunicationManager::CommunicationManager( const ConnectionSettings &aConnection )
+
+CommunicationManager::CommunicationManager()
 {
-       iConnectionSettings = new ConnectionSettings( aConnection );
+
        iModifyingCommunication = NULL;
-       iFetchingCommunication = new Communication( aConnection );
+
+       iFetchingCommunication = new Communication();
 
        if ( iFetchingCommunication )
        {
@@ -28,26 +31,43 @@ CommunicationManager::CommunicationManager( const ConnectionSettings &aConnectio
                                 SLOT( requestFinished( int, int ) )
                                );
        }
+
 }
 
 CommunicationManager::~CommunicationManager()
 {
-       delete iConnectionSettings;
+       //delete iConnectionSettings;
        delete iModifyingCommunication;
        delete iFetchingCommunication;
        while ( !iMeetings.isEmpty() )
                delete iMeetings.takeFirst();
 }
 
-void CommunicationManager::fetchMeetings( const QDateTime &aFrom, const QDateTime &aUntil, const Room &aIn )
+void CommunicationManager::fetchMeetings( const int aWeek, const int aYear, const Room &aIn )
 {
        //prevent making multiple simultaneous user availibility requests
+       //TODO: Would be nice to queue these requests instead of just aborting 
        const RequestData* rd = findRequest( GetUserAvailability );
        if( rd )
                return;
+       
+       // Set from to beginning, 00:00 of the requested week
+       QDateTime from = QDateTime::currentDateTime();
+       from = from.addYears( aYear - from.date().year() );
+       from = from.addDays( -1*(from.date().dayOfWeek()-1) );
+       from = from.addDays( (aWeek - from.date().weekNumber())*7 );
+       QTime midnight = from.time();
+       midnight.setHMS( 0,0,0 );
+       from.setTime( midnight );
+       qDebug() << "CommunicationManager::fetchMeetings from: " << from.toString();
+       
+       QDateTime until = from.addDays(7);
+       qDebug() << "CommunicationManager::fetchMeetings until: " << until.toString();
+       
+       
        ReqMsgGetUserAvailability msg;
        msg.setTimeZone();
-       msg.setTimeWindow( aFrom, aUntil );
+       msg.setTimeWindow( from, until );
        msg.addUser( aIn.address() );
                
        int id = iFetchingCommunication->request( msg.getContentTypeForHeader(), msg.getMessage() );
@@ -134,6 +154,9 @@ void CommunicationManager::requestFinished( int aRequestId, int aError )
                        err = 10;
                delete rd;
                emit error( ERROR_BASE+(int)err, CommunicationManager::FetchingCommunication );
+               while ( !iMeetings.isEmpty() )
+                                       delete iMeetings.takeFirst();
+               emit meetingsFetched( iMeetings );
                return;
        }
 
@@ -148,9 +171,17 @@ void CommunicationManager::requestFinished( int aRequestId, int aError )
        
                int err = msg.getMeetingsFromResponse( iMeetings, *(rd->room) );
                if( err )
+                       {
                        emit error( ERROR_BASE+8, CommunicationManager::FetchingCommunication );
+                       while ( !iMeetings.isEmpty() )
+                                                               delete iMeetings.takeFirst();
+                                       emit meetingsFetched( iMeetings );
+                       }
                else
+                       {
+                       qDebug("*** COMMUNICATIONMANAGER ::: Meetings fetched!");
                        emit meetingsFetched( iMeetings );
+                       }
                break;
                }
        case ConvertId:
@@ -169,7 +200,13 @@ void CommunicationManager::requestFinished( int aRequestId, int aError )
                ResMsgGetCalendarItem msg( *response );
                int err = msg.getMeetingDetailsFromResponse( *(rd->meeting) );
                if( err )
+                       {
                        emit error( ERROR_BASE+9, CommunicationManager::FetchingCommunication );
+                       while ( !iMeetings.isEmpty() )
+                                                               delete iMeetings.takeFirst();
+                                       emit meetingsFetched( iMeetings );
+                       }
+
                else
                        emit meetingDetailsFetched( *(rd->meeting) );
                break;
@@ -219,3 +256,4 @@ const CommunicationManager::RequestData* CommunicationManager::findRequest( Requ
        }
        return NULL;
 }
+