Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Win32: implement further UTF8 support
[xestiacalendar/.git] / source / libraries / CalendarDataStorage / CalendarDataStorage.cpp
index 4a690b2..5b24853 100644 (file)
@@ -157,6 +157,33 @@ CDSAccountResult CalendarDataStorage::AddAccount(string accountName, int account
        int resultCode;
        
        sqlite3_stmt *statementHandle;
+       sqlite3_stmt *findHandle;
+       
+       if (accountName == ""){
+               return CDSACCOUNT_NONAME;
+       }
+       
+       // Check if the account name already exsits.
+
+       resultCode = sqlite3_prepare_v2(db, "SELECT name FROM accounts WHERE name=(?1);", -1, &findHandle, nullptr);
+       
+       if (resultCode != 0){
+               return CDSACCOUNT_FAILED;
+       }
+       
+       resultCode = sqlite3_bind_text(findHandle, 1, accountName.c_str(), -1, SQLITE_STATIC);
+       
+       if (resultCode != 0){
+               return CDSACCOUNT_FAILED;
+       }
+       
+       resultCode = sqlite3_step(findHandle);
+       
+       if (resultCode != SQLITE_DONE){
+               return CDSACCOUNT_FAILED;
+       } else if (resultCode == SQLITE_ROW){
+               return CDSACCOUNT_FAILED;
+       }
        
        resultCode = sqlite3_prepare_v2(db, "INSERT INTO accounts (name, preferencesid) VALUES(?1, ?2);", -1, &statementHandle, nullptr);
        
@@ -316,8 +343,13 @@ CDSAccountResult CalendarDataStorage::UpdateAccount(int accountID, string accoun
        int resultCode;
        
        sqlite3_stmt *findHandle;
+       sqlite3_stmt *existingHandle;
        sqlite3_stmt *statementHandle;
        
+       if (accountName == ""){
+               return CDSACCOUNT_NONAME;
+       }
+       
        // Check if account exists first.
        
        resultCode = sqlite3_prepare_v2(db, "SELECT id from accounts WHERE id=(?1);", -1, &findHandle, nullptr);
@@ -342,6 +374,30 @@ CDSAccountResult CalendarDataStorage::UpdateAccount(int accountID, string accoun
                return CDSACCOUNT_FAILED;
        }
        
+       // Check if account with the name given already exists before renaming.
+       
+       resultCode = sqlite3_prepare_v2(db, "SELECT name from accounts WHERE name=(?1);", -1, &existingHandle, nullptr);
+       
+       if (resultCode != 0){
+               return CDSACCOUNT_FAILED;
+       }
+       
+       resultCode = sqlite3_bind_text(existingHandle, 1, accountName.c_str(), -1, SQLITE_STATIC);
+       
+       if (resultCode != 0){
+               return CDSACCOUNT_FAILED;
+       }
+       
+       resultCode = sqlite3_step(existingHandle);
+       
+       if (resultCode == SQLITE_ROW){
+               return CDSACCOUNT_FAILED;
+       } else if (resultCode == SQLITE_DONE) {
+       
+       } else {
+               return CDSACCOUNT_FAILED;
+       }
+       
        // Update the account.
        
        resultCode = sqlite3_prepare_v2(db, "UPDATE accounts SET name=(?1) WHERE id=(?2);", -1, &statementHandle, nullptr);
@@ -409,7 +465,7 @@ CDSAccountResult CalendarDataStorage::DeleteAccount(int accountID)
        } else if (resultCode == SQLITE_DONE) {
                return CDSACCOUNT_NOACCOUNT;
        } else {
-               return CDSACCOUNT_FAILED;
+
        }
        
        // Delete the account.
@@ -482,9 +538,30 @@ CDSCalendarResult CalendarDataStorage::AddCalendar(int accountID, string calenda
 
        CDSCalendarResult addResult = CDSCALENDAR_UNITTESTFAIL;
        int resultCode;
-       
+
+       sqlite3_stmt *findHandle;       
        sqlite3_stmt *statementHandle;
        
+       // Check if the account exists first.
+       
+       resultCode = sqlite3_prepare_v2(db, "SELECT id FROM accounts WHERE id=(?1);", -1, &findHandle, nullptr);
+       
+       if (resultCode != 0){
+               return CDSCALENDAR_FAILED;
+       }       
+
+       resultCode = sqlite3_bind_int(findHandle, 1, accountID);
+
+       if (resultCode != 0){
+               return CDSCALENDAR_FAILED;
+       }
+       
+       resultCode = sqlite3_step(findHandle);
+       
+       if (resultCode != SQLITE_ROW){
+               return CDSCALENDAR_NOACCOUNT;
+       }       
+       
        resultCode = sqlite3_prepare_v2(db, "INSERT INTO calendars (name, calendarid, accountid, colour, description) VALUES(?1, ?2, ?3, ?4, ?5);", -1, &statementHandle, nullptr);
        
        if (resultCode != 0){
@@ -509,7 +586,8 @@ CDSCalendarResult CalendarDataStorage::AddCalendar(int accountID, string calenda
                return CDSCALENDAR_FAILED;
        }
        
-       resultCode = sqlite3_bind_text(statementHandle, 4, ((string)calendarColour).c_str(), -1, SQLITE_STATIC);
+       string calendarColourString = (string)calendarColour;
+       resultCode = sqlite3_bind_text(statementHandle, 4, calendarColourString.c_str(), -1, SQLITE_STATIC);
 
        if (resultCode != 0){
                return CDSCALENDAR_FAILED;
@@ -781,7 +859,8 @@ CDSCalendarResult CalendarDataStorage::UpdateCalendar(int calendarID, string cal
                return CDSCALENDAR_FAILED;
        }
 
-       resultCode = sqlite3_bind_text(statementHandle, 2, string(calendarColour).c_str(), -1, SQLITE_STATIC);
+       string calendarColourString = calendarColour;
+       resultCode = sqlite3_bind_text(statementHandle, 2, calendarColourString.c_str(), -1, SQLITE_STATIC);
        
        if (resultCode != 0){
                return CDSCALENDAR_FAILED;
@@ -907,9 +986,9 @@ CDSAddEntryResult CalendarDataStorage::AddEvent(int calendarID, std::string file
        
        // Load the event file.
        
-       CalendarEventObject eventData;
+       CalendarEventObject eventData;  
        CalendarObjectLoadResult eventLoadResult = eventData.LoadFile(filename);
-       
+
        // Check the result of the event file load.
        
        switch (eventLoadResult){
@@ -1771,11 +1850,11 @@ CDSEditEntryResult CalendarDataStorage::UpdateEvent(int eventID, std::string fil
        std::string sqlParameter = "UPDATE calendarentries SET entryname=(?2), entrydescription=(?3),"
        " entrystartyear=(?4), entrystartmonth=(?5), entrystartday=(?6), entrystarthour=(?7), entrystartminute=(?8), entrystartsecond=(?9),"
        " entryendyear=(?10), entryendmonth=(?11), entryendday=(?12), entryendhour=(?13), entryendminute=(?14), entryendsecond=(?15), "
-       " entrydurationweek=(?16), entrydurationday=(?17), entrydurationhour=(?18), entrydurationminute=(?19), entrydurationsecond=(?20), "
+       " entrydurationweek=(?16), entrydurationday=(?17), entrydurationhour=(?18), entrydurationminute=(?19), entrydurationsecond=(?20) "
        " WHERE id=(?1)";
        
        resultCode = sqlite3_prepare_v2(db, sqlParameter.c_str(), -1, &statementHandle, nullptr);
-
+       
        resultCode = sqlite3_bind_int(statementHandle, 1, eventID);
        
        if (resultCode != 0){
@@ -2544,85 +2623,72 @@ CDSCleanupResult CalendarDataStorage::Clear(){
        resultCode = sqlite3_prepare_v2(db, "DELETE FROM calendarentries", -    1, &statementHandle, nullptr);
        
        if (resultCode != 0){
-               cout << "Fail 1" << endl;
                return CDSCLEANUP_FAILED;
        }
        
        resultCode = sqlite3_step(statementHandle);
        
        if (resultCode != SQLITE_DONE){
-               cout << "Fail 2" << endl;
                return CDSCLEANUP_FAILED;
        }
        
        resultCode = sqlite3_prepare_v2(db, "DELETE FROM sqlite_sequence WHERE name='calendarentries';", -1, &statementHandle, nullptr);
        
        if (resultCode != 0){
-               cout << "Fail 3" << endl;
-               cout << sqlite3_errmsg(db) << endl;
                return CDSCLEANUP_FAILED;
        }
 
        resultCode = sqlite3_step(statementHandle);
        
        if (resultCode != SQLITE_DONE){
-               cout << "Fail 4" << endl;
                return CDSCLEANUP_FAILED;
        }
 
        resultCode = sqlite3_prepare_v2(db, "DELETE FROM calendars", -1, &statementHandle, nullptr);
        
        if (resultCode != 0){
-               cout << "Fail 5" << endl;
                return CDSCLEANUP_FAILED;
        }
        
        resultCode = sqlite3_step(statementHandle);
        
        if (resultCode != SQLITE_DONE){
-               cout << "Fail 6" << endl;
                return CDSCLEANUP_FAILED;
        }
        
        resultCode = sqlite3_prepare_v2(db, "DELETE FROM sqlite_sequence WHERE name='calendars';", -1, &statementHandle, nullptr);
        
        if (resultCode != 0){
-               cout << "Fail 7" << endl;
                return CDSCLEANUP_FAILED;
        }
 
        resultCode = sqlite3_step(statementHandle);
        
        if (resultCode != SQLITE_DONE){
-               cout << "Fail 8" << endl;
                return CDSCLEANUP_FAILED;
        }
        
        resultCode = sqlite3_prepare_v2(db, "DELETE FROM accounts", -1, &statementHandle, nullptr);
        
        if (resultCode != 0){
-               cout << "Fail 9" << endl;
                return CDSCLEANUP_FAILED;
        }
        
        resultCode = sqlite3_step(statementHandle);
        
        if (resultCode != SQLITE_DONE){
-               cout << "Fail 10" << endl;
                return CDSCLEANUP_FAILED;
        }
        
        resultCode = sqlite3_prepare_v2(db, "DELETE FROM sqlite_sequence WHERE name='accounts'", -1, &statementHandle, nullptr);
        
        if (resultCode != 0){
-               cout << "Fail 11" << endl;
                return CDSCLEANUP_FAILED;
        }
 
        resultCode = sqlite3_step(statementHandle);
        
        if (resultCode != SQLITE_DONE){
-               cout << "Fail 12" << endl;
                return CDSCLEANUP_FAILED;
        }
        
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy