// CalendarDataStorage.h - CalendarDataStorage class header // // (c) 2016-2017 Xestia Software Development. // // This file is part of Xestia Calendar. // // Xestia Calendar is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by the // Free Software Foundation, version 3 of the license. // // Xestia Calendar is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with Xestia Calendar. If not, see #ifndef __LIBRARIES_CALENDARDATASTORAGE_H__ #define __LIBRARIES_CALENDARDATASTORAGE_H__ #include #include #include #include #include #include #include "../../objects/calendarevent/CalendarEvent.h" #include "../../common/colour.h" #include "../../common/random.h" #if defined(WIN32) #include #endif enum CDSAccountResult{ CDSACCOUNT_UNITTESTFAIL = -1, CDSACCOUNT_OK, CDSACCOUNT_FAILED, CDSACCOUNT_NOACTION, CDSACCOUNT_NOACCOUNT, CDSACCOUNT_NONAME }; enum CDSCalendarResult{ CDSCALENDAR_UNITTESTFAIL = -1, CDSCALENDAR_OK, CDSCALENDAR_FAILED, CDSCALENDAR_NOACTION, CDSCALENDAR_NOACCOUNT, CDSCALENDAR_NOCALENDAR }; enum CDSEntryResult{ CDSENTRY_UNITTESTFAIL = -1, CDSENTRY_OK, CDSENTRY_FAILED, CDSENTRY_NOACTION, CDSENTRY_NOACCOUNT, CDSENTRY_NOCALENDAR, CDSENTRY_NOENTRY, CDSENTRY_MISSINGFILE, CDSENTRY_CANNOTOPENFILE, CDSENTRY_INVALIDFILE, }; struct CDSGetAccountInfo{ int accountID = 0; int accountPreferencesID = 0; std::string accountName = ""; CDSAccountResult accountInfoResult = CDSACCOUNT_NOACTION; }; struct CDSGetCalendarInfo{ int accountID = 0; int calendarID = 0; std::string accountName = ""; std::string calendarName = ""; std::string calendarTextID = ""; std::string calendarDescription = ""; Colour calendarColour; CDSAccountResult accountInfoResult = CDSACCOUNT_NOACTION; CDSCalendarResult calendarInfoResult = CDSCALENDAR_NOACTION; }; struct CDSAddEntryResult{ int calendarEntryID = 0; CDSEntryResult addEventResult = CDSENTRY_NOACTION; }; struct CDSEditEntryResult{ int calendarEntryID = 0; CDSEntryResult editEventResult = CDSENTRY_NOACTION; }; struct CDSGetCalendarEntryInfo{ int accountID = 0; int calendarID = 0; int calendarEntryID = 0; std::string entryName = ""; std::string entryDescription = ""; std::string entryFilename = ""; int entryStartYear = 0; int entryStartMonth = 0; int entryStartDay = 0; int entryStartHour = 0; int entryStartMinute = 0; int entryStartSecond = 0; int entryEndYear = 0; int entryEndMonth = 0; int entryEndDay = 0; int entryEndHour = 0; int entryEndMinute = 0; int entryEndSecond = 0; int entryDurationWeeks = 0; int entryDurationDays = 0; int entryDurationHours = 0; int entryDurationMinutes = 0; int entryDurationSeconds = 0; CDSEntryResult getEventResult = CDSENTRY_NOACTION; }; struct CDSEntryList{ std::vector entryList; CDSEntryResult getEventListResult = CDSENTRY_NOACTION; }; struct CDSCalendarList{ std::vector calendarList; std::vector calendarListTextID; CDSCalendarResult getCalendarListResult = CDSCALENDAR_NOACTION; }; struct CDSAccountList{ std::vector accountList; CDSAccountResult getAccountListResult = CDSACCOUNT_NOACTION; }; enum CDSChecksumResult{ CDSCHECKSUM_UNITTESTFAIL = -1, CDSCHECKSUM_OK, CDSCHECKSUM_FAILED, CDSCHECKSUM_NOHASH, CDSCHECKSUM_CHECKSUMALREADYEXISTS, CDSCHECKSUM_NORESULT }; struct CDSGetChecksumResult{ CDSChecksumResult getChecksumResult = CDSCHECKSUM_NORESULT; std::string checksumValue = ""; }; enum CDSCleanupResult{ CDSCLEANUP_UNITTESTFAIL = -1, CDSCLEANUP_OK, CDSCLEANUP_FAILED }; class CalendarDataStorage{ private: sqlite3 *db = nullptr; void SetupTables(); bool DataStorageInitOK = false; public: CalendarDataStorage(); ~CalendarDataStorage(); bool DidInitOK(); // Account functions. CDSAccountResult AddAccount(std::string accountName, int accountPreferencesID); CDSGetAccountInfo GetAccount(std::string accountName); CDSAccountResult UpdateAccount(int accountID, std::string accountName); CDSAccountResult DeleteAccount(int accountID); CDSAccountList GetAccountList(); // Calendar functions. CDSCalendarResult AddCalendar(int accountID, std::string calendarName, std::string calendarID, Colour calendarColour, std::string calendarDescription); CDSGetCalendarInfo GetCalendar(std::string accountName, std::string calendarTextID); CDSGetCalendarInfo GetCalendar(int calendarID); CDSCalendarList GetCalendarList(int accountID); CDSCalendarResult UpdateCalendar(int calendarID, std::string calendarName, Colour calendarColour, std::string calendarDescription); CDSCalendarResult DeleteCalendar(int calendarID); // Entry functions CDSAddEntryResult AddEvent(int calendarID, std::string filename); CDSGetCalendarEntryInfo GetEvent(int calendarEntryID); CDSEntryList GetEventList(int calendarID); CDSEntryList GetEventListByDate(int calendarYear, int calendarMonth, int calendarDay); CDSEditEntryResult UpdateEvent(int eventID, std::string filename); CDSEntryResult DeleteEvent(int calendarEntryID); // Checksum functions. CDSChecksumResult AddChecksum(std::string checksumName, std::string checksumValue); CDSGetChecksumResult GetChecksum(std::string checksumName); CDSChecksumResult UpdateChecksum(std::string checksumName, std::string checksumValue); // Cleanup functions. CDSCleanupResult Clear(); }; #endif