1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_POWER_BOOKMARKS_COMMON_POWER_H_
#define COMPONENTS_POWER_BOOKMARKS_COMMON_POWER_H_
#include "base/time/time.h"
#include "base/uuid.h"
#include "components/sync/protocol/power_bookmark_specifics.pb.h"
#include "url/gurl.h"
namespace power_bookmarks {
// Class for the in-memory representation for Powers.
// When writing to local storage or sync, this class is written to the
// save_specifics proto.
class Power {
public:
// ctor used for creating a Power in-memory.
explicit Power(std::unique_ptr<sync_pb::PowerEntity> power_entity);
// ctor used for creating a Power from the db.
explicit Power(const sync_pb::PowerBookmarkSpecifics& specifics);
Power(const Power&) = delete;
Power& operator=(const Power&) = delete;
~Power();
const base::Uuid& guid() const { return guid_; }
void set_guid(base::Uuid guid) { guid_ = guid; }
std::string guid_string() const { return guid_.AsLowercaseString(); }
const GURL& url() const { return url_; }
void set_url(GURL url) { url_ = url; }
const sync_pb::PowerBookmarkSpecifics::PowerType& power_type() const {
return power_type_;
}
void set_power_type(sync_pb::PowerBookmarkSpecifics::PowerType power_type) {
power_type_ = power_type;
}
const base::Time time_added() const { return time_added_; }
void set_time_added(base::Time time_added) { time_added_ = time_added; }
const base::Time time_modified() const { return time_modified_; }
void set_time_modified(base::Time time_modified) {
time_modified_ = time_modified;
}
// Used to get fields from PowerEntity.
const sync_pb::PowerEntity* power_entity() const {
return power_entity_.get();
}
// Used to set fields to PowerEntity.
sync_pb::PowerEntity* power_entity() { return power_entity_.get(); }
// Write the properties held in this class to power_bookmark_specifics.proto.
// `power_bookmark_specifics` will never be nullptr.
void ToPowerBookmarkSpecifics(
sync_pb::PowerBookmarkSpecifics* save_specifics) const;
// Merge the curr sync_pb::PowerBookmarkSpecifics::PowerType other one.
// guid, url and sync_pb::PowerBookmarkSpecifics::PowerType are not allowed to
// be different from the other power.
void Merge(const Power& other);
// Clone a power. Every power should be independent to others.
// This should be call to duplicate a power instead of direct assign.
std::unique_ptr<Power> Clone() const;
private:
base::Uuid guid_;
GURL url_;
sync_pb::PowerBookmarkSpecifics::PowerType power_type_;
base::Time time_modified_;
base::Time time_added_;
std::unique_ptr<sync_pb::PowerEntity> power_entity_;
};
} // namespace power_bookmarks
#endif // COMPONENTS_POWER_BOOKMARKS_COMMON_POWER_H_
|