diff --git a/PlexRequests.Services/Jobs/StoreBackup.cs b/PlexRequests.Services/Jobs/StoreBackup.cs
new file mode 100644
index 000000000..2d63987b0
--- /dev/null
+++ b/PlexRequests.Services/Jobs/StoreBackup.cs
@@ -0,0 +1,88 @@
+#region Copyright
+// /************************************************************************
+// Copyright (c) 2016 Jamie Rees
+// File: StoreBackup.cs
+// Created By: Jamie Rees
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+// ************************************************************************/
+#endregion
+using System;
+using System.IO;
+using System.Linq;
+
+using NLog;
+
+using PlexRequests.Store;
+
+using Quartz;
+
+using Directory = System.IO.Directory;
+
+namespace PlexRequests.Services.Jobs
+{
+ public class StoreBackup : IJob
+ {
+ public StoreBackup(ISqliteConfiguration sql)
+ {
+ Sql = sql;
+ }
+
+ private ISqliteConfiguration Sql { get; }
+
+ private static Logger Log = LogManager.GetCurrentClassLogger();
+
+ public void Execute(IJobExecutionContext context)
+ {
+ TakeBackup();
+ }
+
+ private void TakeBackup()
+ {
+ Log.Trace("Starting DB Backup");
+ var dbPath = Sql.CurrentPath;
+ var dir = Path.GetDirectoryName(dbPath);
+ if (dir == null)
+ {
+ Log.Warn("We couldn't find the DB path. We cannot backup.");
+ return;
+ }
+ var backupDir = Directory.CreateDirectory(Path.Combine(dir, "Backup"));
+
+
+ if (string.IsNullOrEmpty(dbPath))
+ {
+ Log.Warn("Could not find the actual database. We cannot backup.");
+ return;
+ }
+
+ try
+ {
+ File.Copy(dbPath, Path.Combine(backupDir.FullName, $"PlexRequests.sqlite_{DateTime.Now.ToString("yyyy-MM-dd hh.mm.ss")}.bak"));
+ }
+ catch (Exception e)
+ {
+ Log.Warn(e);
+ Log.Warn("Exception when trying to copy the backup.");
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexRequests.Services/PlexRequests.Services.csproj b/PlexRequests.Services/PlexRequests.Services.csproj
index 49650d33e..1b088294a 100644
--- a/PlexRequests.Services/PlexRequests.Services.csproj
+++ b/PlexRequests.Services/PlexRequests.Services.csproj
@@ -84,6 +84,7 @@
+
@@ -92,6 +93,7 @@
+
diff --git a/PlexRequests.Store/DbConfiguration.cs b/PlexRequests.Store/DbConfiguration.cs
index 7ddd60483..27e7f20f9 100644
--- a/PlexRequests.Store/DbConfiguration.cs
+++ b/PlexRequests.Store/DbConfiguration.cs
@@ -44,7 +44,7 @@ namespace PlexRequests.Store
}
private SqliteFactory Factory { get; }
- private string CurrentPath =>Path.Combine(Path.GetDirectoryName(Application.ExecutablePath) ?? string.Empty, DbFile);
+ public string CurrentPath =>Path.Combine(Path.GetDirectoryName(Application.ExecutablePath) ?? string.Empty, DbFile);
public virtual bool CheckDb()
{
@@ -59,7 +59,7 @@ namespace PlexRequests.Store
return false;
}
- public string DbFile = "PlexRequests.sqlite";
+ public const string DbFile = "PlexRequests.sqlite";
///
/// Gets the database connection.
diff --git a/PlexRequests.Store/ISqliteConfiguration.cs b/PlexRequests.Store/ISqliteConfiguration.cs
index 19c5b6756..528944e95 100644
--- a/PlexRequests.Store/ISqliteConfiguration.cs
+++ b/PlexRequests.Store/ISqliteConfiguration.cs
@@ -45,6 +45,9 @@ namespace PlexRequests.Store
/// Creates the database.
///
void CreateDatabase();
- }
+
+ string CurrentPath { get; }
+
+ }
}
diff --git a/PlexRequests.UI/Jobs/Scheduler.cs b/PlexRequests.UI/Jobs/Scheduler.cs
index 5a91733e1..0ccae710b 100644
--- a/PlexRequests.UI/Jobs/Scheduler.cs
+++ b/PlexRequests.UI/Jobs/Scheduler.cs
@@ -56,11 +56,13 @@ namespace PlexRequests.UI.Jobs
var sickrage = JobBuilder.Create().WithIdentity("SickRageCacher", "Cache").Build();
var sonarr = JobBuilder.Create().WithIdentity("SonarrCacher", "Cache").Build();
var cp = JobBuilder.Create().WithIdentity("CouchPotatoCacher", "Cache").Build();
+ var store = JobBuilder.Create().WithIdentity("StoreBackup", "Backup").Build();
jobs.Add(plex);
jobs.Add(sickrage);
jobs.Add(sonarr);
jobs.Add(cp);
+ jobs.Add(store);
return jobs;
}
@@ -125,11 +127,19 @@ namespace PlexRequests.UI.Jobs
.WithSimpleSchedule(x => x.WithIntervalInMinutes(10).RepeatForever())
.Build();
+ var storeBackup =
+ TriggerBuilder.Create()
+ .WithIdentity("StoreBackup", "Backup")
+ .StartNow()
+ .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
+ .Build();
+
triggers.Add(plexAvailabilityChecker);
triggers.Add(srCacher);
triggers.Add(sonarrCacher);
triggers.Add(cpCacher);
+ triggers.Add(storeBackup);
return triggers;
}