namespace Firebase.Database.Offline
{
using System;
using Newtonsoft.Json;
///
/// Represents an object stored in offline storage.
///
public class OfflineEntry
{
private object dataInstance;
///
/// Initializes a new instance of the class with an already serialized object.
///
/// The key.
/// The object.
/// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority.
/// The sync options.
public OfflineEntry(string key, object obj, string data, int priority, SyncOptions syncOptions, bool isPartial = false)
{
this.Key = key;
this.Priority = priority;
this.Data = data;
this.Timestamp = DateTime.UtcNow;
this.SyncOptions = syncOptions;
this.IsPartial = isPartial;
this.dataInstance = obj;
}
///
/// Initializes a new instance of the class.
///
/// The key.
/// The object.
/// The priority. Objects with higher priority will be synced first. Higher number indicates higher priority.
/// The sync options.
public OfflineEntry(string key, object obj, int priority, SyncOptions syncOptions, bool isPartial = false)
: this(key, obj, JsonConvert.SerializeObject(obj), priority, syncOptions, isPartial)
{
}
///
/// Initializes a new instance of the class.
///
public OfflineEntry()
{
}
///
/// Gets or sets the key of this entry.
///
public string Key
{
get;
set;
}
///
/// Gets or sets the priority. Objects with higher priority will be synced first. Higher number indicates higher priority.
///
public int Priority
{
get;
set;
}
///
/// Gets or sets the timestamp when this entry was last touched.
///
public DateTime Timestamp
{
get;
set;
}
///
/// Gets or sets the which define what sync state this entry is in.
///
public SyncOptions SyncOptions
{
get;
set;
}
///
/// Gets or sets serialized JSON data.
///
public string Data
{
get;
set;
}
///
/// Specifies whether this is only a partial object.
///
public bool IsPartial
{
get;
set;
}
///
/// Deserializes into . The result is cached.
///
/// Type of object to deserialize into.
/// Instance of .
public T Deserialize()
{
return (T)(this.dataInstance ?? (this.dataInstance = JsonConvert.DeserializeObject(this.Data)));
}
}
}