// 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"
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