X-Git-Url: http://Server1/repobrowser/?p=xestiacalendar%2F.git;a=blobdiff_plain;f=source%2Flibraries%2FCalendarDataStorage%2FCalendarDataStorage.cpp;h=5b24853ebbc8c4d1fb5ae44bace917052b6ef8af;hp=4a690b21dfe8edb2409d276642647cb44d4cb352;hb=49789773e2797383c866dca470fb99e80cb49e41;hpb=1fe6e43892e5c572949a293a9e19704b5debadad diff --git a/source/libraries/CalendarDataStorage/CalendarDataStorage.cpp b/source/libraries/CalendarDataStorage/CalendarDataStorage.cpp index 4a690b2..5b24853 100644 --- a/source/libraries/CalendarDataStorage/CalendarDataStorage.cpp +++ b/source/libraries/CalendarDataStorage/CalendarDataStorage.cpp @@ -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; }