#ifndef GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_
#define GOOGLE_APIS_CALENDAR_CALENDAR_API_REQUESTS_H_
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "google_apis/calendar/calendar_api_response_types.h"
#include "google_apis/calendar/calendar_api_url_generator.h"
#include "google_apis/common/api_error_codes.h"
#include "google_apis/common/base_requests.h"
namespace google_apis {
namespace calendar {
inline const std::string kInjectedColorIdPrefix = "c";
inline constexpr char kPrimaryCalendarId[] = "primary";
using CalendarListCallback =
base::OnceCallback<void(ApiErrorCode error,
std::unique_ptr<CalendarList> calendars)>;
using CalendarEventListCallback =
base::OnceCallback<void(ApiErrorCode error,
std::unique_ptr<EventList> events)>;
class CalendarApiGetRequest : public UrlFetchRequestBase {
public:
CalendarApiGetRequest(RequestSender* sender, const std::string& fields);
CalendarApiGetRequest(const CalendarApiGetRequest&) = delete;
CalendarApiGetRequest& operator=(const CalendarApiGetRequest&) = delete;
~CalendarApiGetRequest() override;
protected:
GURL GetURL() const override;
ApiErrorCode MapReasonToError(ApiErrorCode code,
const std::string& reason) override;
bool IsSuccessfulErrorCode(ApiErrorCode error) override;
virtual GURL GetURLInternal() const = 0;
private:
std::string fields_;
};
class CalendarApiCalendarListRequest : public CalendarApiGetRequest {
public:
CalendarApiCalendarListRequest(RequestSender* sender,
const CalendarApiUrlGenerator& url_generator,
CalendarListCallback callback);
CalendarApiCalendarListRequest(const CalendarApiCalendarListRequest&) =
delete;
CalendarApiCalendarListRequest& operator=(
const CalendarApiCalendarListRequest&) = delete;
~CalendarApiCalendarListRequest() override;
protected:
GURL GetURLInternal() const override;
void ProcessURLFetchResults(
const network::mojom::URLResponseHead* response_head,
base::FilePath response_file,
std::string response_body) override;
void RunCallbackOnPrematureFailure(ApiErrorCode code) override;
private:
static std::unique_ptr<CalendarList> Parse(std::string json);
void OnDataParsed(ApiErrorCode error,
std::unique_ptr<CalendarList> calendars);
CalendarListCallback callback_;
const CalendarApiUrlGenerator url_generator_;
base::WeakPtrFactory<CalendarApiCalendarListRequest> weak_ptr_factory_{this};
};
class CalendarApiEventsRequest : public CalendarApiGetRequest {
public:
CalendarApiEventsRequest(RequestSender* sender,
const CalendarApiUrlGenerator& url_generator,
CalendarEventListCallback callback,
const base::Time& start_time,
const base::Time& end_time,
const std::string& calendar_id,
const std::string& calendar_color_id);
CalendarApiEventsRequest(RequestSender* sender,
const CalendarApiUrlGenerator& url_generator,
CalendarEventListCallback callback,
const base::Time& start_time,
const base::Time& end_time,
bool include_attachments = false);
CalendarApiEventsRequest(RequestSender* sender,
const CalendarApiUrlGenerator& url_generator,
CalendarEventListCallback callback,
const base::Time& start_time,
const base::Time& end_time,
const std::vector<EventType>& event_types,
const std::string& experiment,
const std::string& order_by,
bool include_attachments = true);
CalendarApiEventsRequest(const CalendarApiEventsRequest&) = delete;
CalendarApiEventsRequest& operator=(const CalendarApiEventsRequest&) = delete;
~CalendarApiEventsRequest() override;
protected:
GURL GetURLInternal() const override;
void ProcessURLFetchResults(
const network::mojom::URLResponseHead* response_head,
base::FilePath response_file,
std::string response_body) override;
void RunCallbackOnPrematureFailure(ApiErrorCode code) override;
private:
static std::unique_ptr<EventList> Parse(std::string json);
void OnDataParsed(ApiErrorCode error, std::unique_ptr<EventList> events);
CalendarEventListCallback callback_;
const CalendarApiUrlGenerator url_generator_;
const std::string calendar_color_id_;
const std::string calendar_id_;
const base::Time end_time_;
const std::vector<EventType> event_types_;
const std::string experiment_;
const std::optional<int> max_attendees_;
const std::string order_by_;
const base::Time start_time_;
base::WeakPtrFactory<CalendarApiEventsRequest> weak_ptr_factory_{this};
};
}
}
#endif