Making the configuration actually do something. Setting a default configuration if there is no DB

pull/13/head
Jamie Rees 9 years ago
parent c49e9a386b
commit f2399d6407

@ -32,7 +32,7 @@ namespace PlexRequests.Core.SettingModels
public bool SearchForMovies { get; set; }
public bool SearchForTvShows { get; set; }
public bool RequireApprovial { get; set; }
public bool RequireApproval { get; set; }
public int WeeklyRequestLimit { get; set; }
}
}

@ -25,8 +25,10 @@
// ************************************************************************/
#endregion
using Mono.Data.Sqlite;
using PlexRequests.Core.SettingModels;
using PlexRequests.Helpers;
using PlexRequests.Store;
using PlexRequests.Store.Repository;
namespace PlexRequests.Core
{
@ -36,9 +38,29 @@ namespace PlexRequests.Core
public string SetupDb()
{
var db = new DbConfiguration(new SqliteFactory());
db.CheckDb();
var created = db.CheckDb();
TableCreation.CreateTables(db.DbConnection());
if (created)
{
CreateDefaultSettingsPage();
}
return db.DbConnection().ConnectionString;
}
private void CreateDefaultSettingsPage()
{
var defaultSettings = new PlexRequestSettings
{
RequireApproval = true,
SearchForMovies = true,
SearchForTvShows = true,
WeeklyRequestLimit = 0
};
var s = new SettingsServiceV2<PlexRequestSettings>(new JsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider()));
s.SaveSettings(defaultSettings);
}
}
}

@ -31,6 +31,8 @@ using System.IO;
using Mono.Data.Sqlite;
using NLog;
using PlexRequests.Helpers;
using PlexRequests.Store.Repository;
namespace PlexRequests.Store
{
@ -44,14 +46,16 @@ namespace PlexRequests.Store
private SqliteFactory Factory { get; set; }
public virtual void CheckDb()
public virtual bool CheckDb()
{
Log.Trace("Checking DB");
if (!File.Exists(DbFile))
{
Log.Trace("DB doesn't exist, creating a new one");
CreateDatabase();
return true;
}
return false;
}
public string DbFile = "RequestPlex.sqlite";

@ -33,7 +33,7 @@ namespace PlexRequests.Store
/// <summary>
/// Checks the database.
/// </summary>
void CheckDb();
bool CheckDb();
/// <summary>
/// Returns the database connection.

@ -30,7 +30,8 @@ using Humanizer;
using Nancy;
using Nancy.Responses.Negotiation;
using PlexRequests.Core;
using PlexRequests.Core.SettingModels;
using PlexRequests.Store;
using PlexRequests.UI.Models;
@ -38,10 +39,11 @@ namespace PlexRequests.UI.Modules
{
public class RequestsModule : BaseModule
{
private IRepository<RequestedModel> Service { get; set; }
public RequestsModule(IRepository<RequestedModel> service) : base("requests")
public RequestsModule(IRepository<RequestedModel> service, ISettingsService<PlexRequestSettings> prSettings) : base("requests")
{
Service = service;
PrSettings = prSettings;
Get["/"] = _ => LoadRequests();
Get["/movies"] = _ => GetMovies();
@ -52,11 +54,13 @@ namespace PlexRequests.UI.Modules
return DeleteRequest((int)Request.Form.id, convertedType);
};
}
private IRepository<RequestedModel> Service { get; }
private ISettingsService<PlexRequestSettings> PrSettings { get; }
private Negotiator LoadRequests()
{
return View["Requests/Index"];
var settings = PrSettings.GetSettings();
return View["Requests/Index", settings];
}
private Response GetMovies()

@ -43,13 +43,14 @@ namespace PlexRequests.UI.Modules
{
public class SearchModule : BaseModule
{
public SearchModule(ICacheProvider cache, ISettingsService<CouchPotatoSettings> cpSettings) : base("search")
public SearchModule(ICacheProvider cache, ISettingsService<CouchPotatoSettings> cpSettings, ISettingsService<PlexRequestSettings> prSettings) : base("search")
{
CpService = cpSettings;
PrService = prSettings;
MovieApi = new TheMovieDbApi();
TvApi = new TheTvDbApi();
Cache = cache;
Get["/"] = parameters => RequestLoad();
Get["movie/{searchTerm}"] = parameters => SearchMovie((string)parameters.searchTerm);
@ -64,14 +65,17 @@ namespace PlexRequests.UI.Modules
private TheMovieDbApi MovieApi { get; }
private TheTvDbApi TvApi { get; }
private ICacheProvider Cache { get; }
private ISettingsService<CouchPotatoSettings> CpService { get; set; }
private ISettingsService<CouchPotatoSettings> CpService { get; }
private ISettingsService<PlexRequestSettings> PrService { get; }
private static Logger Log = LogManager.GetCurrentClassLogger();
private string AuthToken => Cache.GetOrSet(CacheKeys.TvDbToken, TvApi.Authenticate, 50);
private Negotiator RequestLoad()
{
var settings = PrService.GetSettings();
Log.Trace("Loading Index");
return View["Search/Index"];
return View["Search/Index", settings];
}
private Response SearchMovie(string searchTerm)
@ -103,7 +107,7 @@ namespace PlexRequests.UI.Modules
Aliases = t.aliases,
// We are constructing the banner with the id:
// http://thetvdb.com/banners/_cache/posters/ID-1.jpg
Banner = t.id.ToString(),
Banner = t.id.ToString(),
FirstAired = t.firstAired,
Genre = t.genre,
Id = t.id,
@ -148,14 +152,14 @@ namespace PlexRequests.UI.Modules
return Response.AsJson(new { Result = false, Message = "Movie has already been requested!" });
}
Log.Trace("movie with id {0} doesnt exists", movieId);
var settings = CpService.GetSettings();
if (settings.ApiKey == null)
var cpSettings = CpService.GetSettings();
if (cpSettings.ApiKey == null)
{
Log.Warn("CP apiKey is null");
return Response.AsJson(new { Result = false, Message = "CouchPotato is not yet configured, If you are the Admin, please log in." });
}
Log.Trace("Settings: ");
Log.Trace(settings.DumpJson);
Log.Trace(cpSettings.DumpJson);
var movieApi = new TheMovieDbApi();
var movieInfo = movieApi.GetMovieInformation(movieId).Result;
@ -173,21 +177,41 @@ namespace PlexRequests.UI.Modules
ReleaseDate = movieInfo.ReleaseDate ?? DateTime.MinValue,
Status = movieInfo.Status,
RequestedDate = DateTime.Now,
Approved = false
Approved = false,
RequestedBy = Session[SessionKeys.UsernameKey].ToString()
};
var cp = new CouchPotatoApi();
Log.Trace("Adding movie to CP");
var result = cp.AddMovie(model.ImdbId, settings.ApiKey, model.Title, settings.FullUri);
Log.Trace("Adding movie to CP result {0}", result);
if (result)
var settings = PrService.GetSettings();
if (!settings.RequireApproval)
{
var cp = new CouchPotatoApi();
Log.Trace("Adding movie to CP (No approval required)");
var result = cp.AddMovie(model.ImdbId, cpSettings.ApiKey, model.Title, cpSettings.FullUri);
Log.Trace("Adding movie to CP result {0}", result);
if (result)
{
model.Approved = true;
Log.Trace("Adding movie to database requests (No approval required)");
s.AddRequest(movieId, model);
return Response.AsJson(new { Result = true });
}
return Response.AsJson(new { Result = false, Message = "Something went wrong adding the movie to CouchPotato! Please check your settings." });
}
try
{
Log.Trace("Adding movie to database requests");
s.AddRequest(movieId, model);
return Response.AsJson(new { Result = true });
}
return Response.AsJson(new { Result = false, Message = "Something went wrong adding the movie to CouchPotato! Please check your settings." });
catch (Exception e)
{
Log.Fatal(e);
return Response.AsJson(new { Result = false, Message = "Something went wrong adding the movie to CouchPotato! Please check your settings." });
}
}
/// <summary>
@ -213,7 +237,7 @@ namespace PlexRequests.UI.Modules
DateTime firstAir;
DateTime.TryParse(showInfo.firstAired, out firstAir);
var model = new RequestedModel
var model = new RequestedModel
{
ProviderId = showInfo.id,
Type = RequestType.TvShow,
@ -223,11 +247,12 @@ namespace PlexRequests.UI.Modules
ReleaseDate = firstAir,
Status = showInfo.status,
RequestedDate = DateTime.Now,
Approved = false
Approved = false,
RequestedBy = Session[SessionKeys.UsernameKey].ToString()
};
s.AddRequest(showId, model);
return Response.AsJson(new {Result = true });
return Response.AsJson(new { Result = true });
}
private string GetAuthToken(TheTvDbApi api)
{

@ -54,7 +54,24 @@
</label>
</div>
</div>
<div class="form-group">
<label for="RequireApproval" class="col-lg-2 control-label">Require approval of requests</label>
<div class="col-lg-10 checkbox">
<label>
@if (Model.RequireApproval)
{
<input type="checkbox" id="RequireApproval" name="RequireApproval" checked="checked">
}
else
{
<input type="checkbox" id="RequireApproval" name="RequireApproval">
}
</label>
</div>
</div>
<div class="form-group">
<label for="WeeklyRequestLimit" class="col-lg-2 control-label">Weekly Request Limit</label>
<div class="col-lg-10">

@ -1,6 +1,6 @@
<div class="col-lg-3 col-md-3 col-sm-4">
<div class="list-group table-of-contents">
<a class="list-group-item" href="/admin">Request Plex Settings</a>
<a class="list-group-item" href="/admin">Plex Request Settings</a>
<a class="list-group-item" href="/admin/authentication">Authentication</a>
<a class="list-group-item" href="/admin/couchpotato">CouchPotato Settings</a>
<a class="list-group-item" href="/admin/sonarr">Sonarr Settings</a>

@ -3,31 +3,42 @@
<h4>Below you can see yours and all other requests, as well as their download and approval status.</h4>
<!-- Nav tabs -->
<ul id="nav-tabs" class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#MoviesTab" aria-controls="home" role="tab" data-toggle="tab">Movies</a></li>
<li role="presentation"><a href="#TvShowTab" aria-controls="profile" role="tab" data-toggle="tab">TV Shows</a></li>
@if (Model.SearchForMovies)
{
<li role="presentation" class="active"><a href="#MoviesTab" aria-controls="home" role="tab" data-toggle="tab">Movies</a></li>
}
@if (Model.SearchForTvShows)
{
<li role="presentation"><a href="#TvShowTab" aria-controls="profile" role="tab" data-toggle="tab">TV Shows</a></li>
}
</ul>
<!-- Tab panes -->
<div class="tab-content">
<!-- Movie tab -->
<div role="tabpanel" class="tab-pane active" id="MoviesTab">
<br />
<br />
<!-- Movie content -->
<div id="movieList">
@if (Model.SearchForMovies)
{
<!-- Movie tab -->
<div role="tabpanel" class="tab-pane active" id="MoviesTab">
<br />
<br />
<!-- Movie content -->
<div id="movieList">
</div>
</div>
</div>
}
<!-- TV tab -->
<div role="tabpanel" class="tab-pane" id="TvShowTab">
<br />
<br />
<!-- TV content -->
<div id="tvList">
@if (Model.SearchForTvShows)
{
<!-- TV tab -->
<div role="tabpanel" class="tab-pane" id="TvShowTab">
<br />
<br />
<!-- TV content -->
<div id="tvList">
</div>
</div>
</div>
}
</div>
</div>

@ -1,47 +1,60 @@
<div>
<h2>Search</h2>
<h4>Want to wacth something that is not currently on Plex?! No problem! Just search for it below and request it!</h4>
<h4>Want to watch something that is not currently on Plex?! No problem! Just search for it below and request it!</h4>
<!-- Nav tabs -->
<ul id="nav-tabs" class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#MoviesTab" aria-controls="home" role="tab" data-toggle="tab">Movies</a></li>
<li role="presentation"><a href="#TvShowTab" aria-controls="profile" role="tab" data-toggle="tab">TV Shows</a></li>
@if (Model.SearchForMovies)
{
<li role="presentation" class="active"><a href="#MoviesTab" aria-controls="home" role="tab" data-toggle="tab">Movies</a></li>
}
@if (Model.SearchForTvShows)
{
<li role="presentation"><a href="#TvShowTab" aria-controls="profile" role="tab" data-toggle="tab">TV Shows</a></li>
}
</ul>
<!-- Tab panes -->
<div class="tab-content">
<!-- Movie tab -->
<div role="tabpanel" class="tab-pane active" id="MoviesTab">
<div class="input-group">
<input id="movieSearchContent" type="text" class="form-control">
<div class="input-group-addon">
<i class="fa fa-search"></i>
@if (Model.SearchForMovies)
{
<!-- Movie tab -->
<div role="tabpanel" class="tab-pane active" id="MoviesTab">
<div class="input-group">
<input id="movieSearchContent" type="text" class="form-control">
<div class="input-group-addon">
<i class="fa fa-search"></i>
</div>
</div>
<br />
<br />
<!-- Movie content -->
<div id="movieList">
</div>
</div>
<br />
<br />
<!-- Movie content -->
<div id="movieList">
</div>
</div>
}
<!-- TV tab -->
<div role="tabpanel" class="tab-pane" id="TvShowTab">
<div class="input-group">
<input id="tvSearchContent" type="text" class="form-control">
<div class="input-group-addon">
<i class="fa fa-search"></i>
@if (Model.SearchForTvShows)
{
<!-- TV tab -->
<div role="tabpanel" class="tab-pane" id="TvShowTab">
<div class="input-group">
<input id="tvSearchContent" type="text" class="form-control">
<div class="input-group-addon">
<i class="fa fa-search"></i>
</div>
</div>
<br />
<br />
<!-- TV content -->
<div id="tvList">
</div>
</div>
<br />
<br />
<!-- TV content -->
<div id="tvList">
</div>
</div>
}
</div>
</div>

Loading…
Cancel
Save