mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-11 11:26:27 +00:00
Simplify release install process
Fix install on startup
This commit is contained in:
1 parent
09a2f769c3
commit
4a8845e578
18 files changed
+237
-253
No files matched your search
@@ -7,15 +7,5 @@ public class ReleaseEntity
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public string Version { get; set; }
|
||||
public string ReleaseId { get; set; }
|
||||
public ReleaseEntityStatus Status { get; set; }
|
||||
public DateTimeOffset? InstalledAt { get; set; }
|
||||
}
|
||||
|
||||
public enum ReleaseEntityStatus
|
||||
{
|
||||
Queued,
|
||||
Installed,
|
||||
Historical,
|
||||
Unknown
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Artemis.Storage.Entities.General;
|
||||
using Artemis.Storage.Repositories.Interfaces;
|
||||
using LiteDB;
|
||||
@@ -14,63 +13,25 @@ public class ReleaseRepository : IReleaseRepository
|
||||
{
|
||||
_repository = repository;
|
||||
_repository.Database.GetCollection<ReleaseEntity>().EnsureIndex(s => s.Version, true);
|
||||
_repository.Database.GetCollection<ReleaseEntity>().EnsureIndex(s => s.Status);
|
||||
}
|
||||
|
||||
public ReleaseEntity GetQueuedVersion()
|
||||
public void SaveVersionInstallDate(string version)
|
||||
{
|
||||
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Queued).FirstOrDefault();
|
||||
}
|
||||
ReleaseEntity release = _repository.Query<ReleaseEntity>().Where(r => r.Version == version).FirstOrDefault();
|
||||
if (release != null)
|
||||
return;
|
||||
|
||||
public ReleaseEntity GetInstalledVersion()
|
||||
{
|
||||
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Installed).FirstOrDefault();
|
||||
_repository.Insert(new ReleaseEntity {Version = version, InstalledAt = DateTimeOffset.UtcNow});
|
||||
}
|
||||
|
||||
public ReleaseEntity GetPreviousInstalledVersion()
|
||||
{
|
||||
return _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Historical).OrderByDescending(r => r.InstalledAt).FirstOrDefault();
|
||||
}
|
||||
|
||||
public void QueueInstallation(string version, string releaseId)
|
||||
{
|
||||
// Mark release as queued and add if missing
|
||||
ReleaseEntity release = _repository.Query<ReleaseEntity>().Where(r => r.Version == version).FirstOrDefault() ?? new ReleaseEntity {Version = version, ReleaseId = releaseId};
|
||||
release.Status = ReleaseEntityStatus.Queued;
|
||||
_repository.Upsert(release);
|
||||
}
|
||||
|
||||
public void FinishInstallation(string version)
|
||||
{
|
||||
// Mark release as installed and add if missing
|
||||
ReleaseEntity release = _repository.Query<ReleaseEntity>().Where(r => r.Version == version).FirstOrDefault() ?? new ReleaseEntity {Version = version};
|
||||
release.Status = ReleaseEntityStatus.Installed;
|
||||
release.InstalledAt = DateTimeOffset.UtcNow;
|
||||
_repository.Upsert(release);
|
||||
|
||||
// Mark other releases as historical
|
||||
List<ReleaseEntity> oldReleases = _repository.Query<ReleaseEntity>().Where(r => r.Version != version && r.Status != ReleaseEntityStatus.Historical).ToList();
|
||||
foreach (ReleaseEntity oldRelease in oldReleases)
|
||||
oldRelease.Status = ReleaseEntityStatus.Historical;
|
||||
_repository.Update<ReleaseEntity>(oldReleases);
|
||||
}
|
||||
|
||||
public void DequeueInstallation()
|
||||
{
|
||||
// Mark all queued releases as unknown, until FinishInstallation is called we don't know the status
|
||||
List<ReleaseEntity> queuedReleases = _repository.Query<ReleaseEntity>().Where(r => r.Status == ReleaseEntityStatus.Queued).ToList();
|
||||
foreach (ReleaseEntity queuedRelease in queuedReleases)
|
||||
queuedRelease.Status = ReleaseEntityStatus.Unknown;
|
||||
_repository.Update<ReleaseEntity>(queuedReleases);
|
||||
return _repository.Query<ReleaseEntity>().OrderByDescending(r => r.InstalledAt).Skip(1).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
|
||||
public interface IReleaseRepository : IRepository
|
||||
{
|
||||
ReleaseEntity GetQueuedVersion();
|
||||
ReleaseEntity GetInstalledVersion();
|
||||
void SaveVersionInstallDate(string version);
|
||||
ReleaseEntity GetPreviousInstalledVersion();
|
||||
void QueueInstallation(string version, string releaseId);
|
||||
void FinishInstallation(string version);
|
||||
void DequeueInstallation();
|
||||
}
|
||||
Reference in new issue
Block a user