diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs b/Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs new file mode 100644 index 000000000..70903b833 --- /dev/null +++ b/Software/Visual_Studio/Tango.Telemetry/TelemetryPendingStorageManager.cs @@ -0,0 +1,80 @@ +using LiteDB; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Telemetry +{ + public class TelemetryPendingStorageManager + { + private bool _disposed; + private LiteDatabase _database; + + public String DatabasePath { get; private set; } + + public TelemetryPendingStorageManager() + { + DatabasePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Twine", "Tango", "Telemetry", Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName) + ".telemetry"); + Directory.CreateDirectory(Path.GetDirectoryName(DatabasePath)); + + _database = new LiteDatabase($"Filename={DatabasePath}"); + _database.Pragma("TIMEOUT", 10); //Read Timeout + _database.Pragma("UTC_DATE", true); //Keep time as UTC when getting data + _database.Commit(); + } + + public virtual void Dispose() + { + if (_database != null) + { + try + { + _disposed = true; + _database.Dispose(); + _database = null; + } + catch { } + } + } + + ~TelemetryPendingStorageManager() + { + Dispose(); + } + + private ILiteCollection<T> GetCollection<T>() where T : ITelemetry + { + return _database.GetCollection<T>(); + } + + public void InsertOrUpdateTelemetryObject<T>(T telemetry) where T : ITelemetry + { + var collection = GetCollection<T>(); + collection.Upsert(telemetry); + } + + public void DeleteTelemetryObject<T>(T telemetry) where T : ITelemetry + { + var collection = GetCollection<T>(); + collection.Delete(telemetry.Id); + } + + public List<ITelemetry> GetTelemetryAll() + { + var names = _database.GetCollectionNames(); + + List<ITelemetry> telemetryAll = new List<ITelemetry>(); + + foreach (var name in names) + { + var collection = _database.GetCollection<ITelemetry>(name); + telemetryAll.AddRange(collection.FindAll().ToList()); + } + + return telemetryAll.OrderBy(x => x.Time).ToList(); + } + } +} |
