mirror of
https://github.com/lidarr/Lidarr
synced 2024-12-24 16:51:58 +00:00
don't remember what I did here ;)
This commit is contained in:
parent
bee99cbd5b
commit
129be92001
2 changed files with 134 additions and 16 deletions
|
@ -7,6 +7,7 @@
|
|||
using System.Text;
|
||||
using System.Xml.Linq;
|
||||
using Ionic.Zip;
|
||||
using Ionic.Zlib;
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using SubSonic.DataProviders;
|
||||
|
@ -19,23 +20,41 @@ class Program
|
|||
static Logger _logger = LogManager.GetLogger("Main");
|
||||
private static DirectoryInfo _target;
|
||||
private static DirectoryInfo _temp;
|
||||
|
||||
private static bool _cleanDb;
|
||||
private static string dbPath;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
SetupLogger();
|
||||
_logger.Info("Starting TVDB Offline...");
|
||||
GetPath(args);
|
||||
ProcessArguments(args);
|
||||
|
||||
Start();
|
||||
if (_cleanDb)
|
||||
{
|
||||
CleanUpDb();
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateNewDb();
|
||||
}
|
||||
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(dbPath))
|
||||
{
|
||||
using (ZipFile zip = new ZipFile())
|
||||
{
|
||||
_logger.Info("Compressing database file");
|
||||
zip.CompressionLevel = CompressionLevel.BestCompression;
|
||||
zip.AddFiles(new[] { dbPath });
|
||||
zip.Save(dbPath + ".zip");
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine("Press any key to exit...");
|
||||
Console.ReadLine();
|
||||
}
|
||||
|
||||
|
||||
private static void Start()
|
||||
private static void CreateNewDb()
|
||||
{
|
||||
_logger.Info("Starting to generate offline DB...");
|
||||
var files = _target.GetFiles("*.zip");
|
||||
|
@ -43,7 +62,7 @@ private static void Start()
|
|||
|
||||
var list = new Dictionary<int, Series>();
|
||||
|
||||
var repo = InitSubsonic();
|
||||
var repo = InitSubsonic(true);
|
||||
decimal progress = 0;
|
||||
foreach (var fileInfo in files)
|
||||
{
|
||||
|
@ -123,23 +142,23 @@ private static Series ProcessFile(FileInfo fileInfo, IRepository repo)
|
|||
|
||||
}
|
||||
|
||||
private static IRepository InitSubsonic()
|
||||
private static IRepository InitSubsonic(bool purge, string name = "")
|
||||
{
|
||||
var path = Path.Combine(_temp.FullName, "series_data.db");
|
||||
_logger.Info("Creating Database file at {0}", path);
|
||||
dbPath = Path.Combine(_temp.FullName, "series_data" + name + ".db");
|
||||
_logger.Info("Loading Database file at {0}", dbPath);
|
||||
|
||||
if (File.Exists(path))
|
||||
if (purge && File.Exists(dbPath))
|
||||
{
|
||||
File.Delete(path);
|
||||
File.Delete(dbPath);
|
||||
}
|
||||
|
||||
string logConnectionString = String.Format("Data Source={0};Version=3;", path);
|
||||
string logConnectionString = String.Format("Data Source={0};Version=3;", dbPath);
|
||||
var provider = ProviderFactory.GetProvider(logConnectionString, "System.Data.SQLite");
|
||||
|
||||
return new SimpleRepository(provider, SimpleRepositoryOptions.RunMigrations);
|
||||
}
|
||||
|
||||
private static void GetPath(string[] args)
|
||||
private static void ProcessArguments(string[] args)
|
||||
{
|
||||
if (args == null || args.Count() == 0 || string.IsNullOrWhiteSpace(args[0]))
|
||||
{
|
||||
|
@ -155,13 +174,16 @@ private static void GetPath(string[] args)
|
|||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
if (args.Count() > 1 && !string.IsNullOrWhiteSpace(args[1]) && args[1].Trim().ToLower() == "/clean")
|
||||
{
|
||||
_cleanDb = true;
|
||||
}
|
||||
_logger.Info("Target Path '[{0}]'", _target.FullName);
|
||||
|
||||
_logger.Debug("Creating temporary folder");
|
||||
_temp = _target.CreateSubdirectory("temp");
|
||||
}
|
||||
|
||||
|
||||
private static void SetupLogger()
|
||||
{
|
||||
|
||||
|
@ -177,5 +199,93 @@ private static void SetupLogger()
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
private static void CleanUpDb()
|
||||
{
|
||||
_logger.Info("Cleaning up database");
|
||||
var repo = InitSubsonic(false);
|
||||
var series = repo.All<Series>().ToList();
|
||||
var cleanSeries = new List<Series>();
|
||||
decimal progress = 0;
|
||||
|
||||
foreach (var item in series)
|
||||
{
|
||||
Console.Write("\r{0:0.0}%", progress * 100 / series.Count());
|
||||
|
||||
var clean = CleanSeries(item);
|
||||
|
||||
if (clean != null)
|
||||
{
|
||||
cleanSeries.Add(clean);
|
||||
}
|
||||
|
||||
|
||||
progress++;
|
||||
}
|
||||
|
||||
repo = InitSubsonic(true, "_cleanTitle");
|
||||
_logger.Info("Writing clean list to database");
|
||||
repo.AddMany(cleanSeries);
|
||||
}
|
||||
|
||||
|
||||
private static Series CleanSeries(Series series)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(series.Title))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (String.IsNullOrWhiteSpace(series.AirsDayOfWeek))
|
||||
{
|
||||
series.AirsDayOfWeek = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (series.AirsDayOfWeek.ToLower() == "daily")
|
||||
//{
|
||||
// series.WeekDay = 8;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// DayOfWeek weekdayEnum;
|
||||
// if (Enum.TryParse(series.AirsDayOfWeek, true, out weekdayEnum))
|
||||
// {
|
||||
// series.WeekDay = (int)weekdayEnum;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// _logger.Warn("Can't parse weekday enum " + series.AirsDayOfWeek);
|
||||
// }
|
||||
//}
|
||||
if (String.IsNullOrWhiteSpace(series.AirsDayOfWeek))
|
||||
{
|
||||
series.AirsDayOfWeek = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (String.IsNullOrWhiteSpace(series.Status))
|
||||
{
|
||||
series.Active = null;
|
||||
}
|
||||
else if (series.Status == "Ended")
|
||||
{
|
||||
series.Active = false;
|
||||
}
|
||||
else if (series.Status == "Continuing")
|
||||
{
|
||||
series.Active = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("Can't parse status " + series.Status);
|
||||
}
|
||||
|
||||
series.Status = null;
|
||||
series.Overview = null;
|
||||
series.CleanTitle = null;
|
||||
|
||||
return series;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,19 +10,27 @@ public class Series
|
|||
|
||||
public string Title { get; set; }
|
||||
|
||||
[SubSonicNullString]
|
||||
public string CleanTitle { get; set; }
|
||||
|
||||
[SubSonicNullString]
|
||||
public string Status { get; set; }
|
||||
|
||||
public Boolean? Active { get; set; }
|
||||
|
||||
[SubSonicNullString]
|
||||
public string Overview { get; set; }
|
||||
|
||||
[SubSonicNullString]
|
||||
public string AirsDayOfWeek { get; set; }
|
||||
|
||||
public int? WeekDay { get; set; }
|
||||
|
||||
public String AirTimes { get; set; }
|
||||
|
||||
public int RateCount { get; set; }
|
||||
public int? RateCount { get; set; }
|
||||
|
||||
public decimal Rating { get; set; }
|
||||
public decimal? Rating { get; set; }
|
||||
|
||||
[SubSonicIgnore]
|
||||
public String Path { get; set; }
|
||||
|
|
Loading…
Reference in a new issue