Private GIT

Skip to content
Snippets Groups Projects
Commit dce596ed authored by zone117x's avatar zone117x
Browse files

Now works on Linux (headless), detailed logging, season searching

parent ac003e7a
Branches
Tags
No related merge requests found
...@@ -89,8 +89,10 @@ namespace Jackett ...@@ -89,8 +89,10 @@ namespace Jackett
{ {
var browseQuery = new TorznabQuery(); var browseQuery = new TorznabQuery();
var results = await indexer.PerformQuery(browseQuery); var results = await indexer.PerformQuery(browseQuery);
Program.LoggerInstance.Debug(string.Format("Found {0} releases from {1}", results.Length, indexer.DisplayName));
if (results.Length == 0) if (results.Length == 0)
throw new Exception("Found no results while trying to browse this tracker"); throw new Exception("Found no results while trying to browse this tracker");
} }
} }
......
...@@ -23,12 +23,18 @@ namespace Jackett ...@@ -23,12 +23,18 @@ namespace Jackett
toolStripMenuItemAutoStart.Checked = AutoStart; toolStripMenuItemAutoStart.Checked = AutoStart;
toolStripMenuItemAutoStart.CheckedChanged += toolStripMenuItemAutoStart_CheckedChanged; toolStripMenuItemAutoStart.CheckedChanged += toolStripMenuItemAutoStart_CheckedChanged;
toolStripMenuItemWebUI.Click += toolStripMenuItemWebUI_Click;
toolStripMenuItemShutdown.Click += toolStripMenuItemShutdown_Click; toolStripMenuItemShutdown.Click += toolStripMenuItemShutdown_Click;
if (Program.IsFirstRun) if (Program.IsFirstRun)
AutoStart = true; AutoStart = true;
} }
void toolStripMenuItemWebUI_Click(object sender, EventArgs e)
{
Process.Start("http://127.0.0.1:" + Server.Port);
}
void toolStripMenuItemShutdown_Click(object sender, EventArgs e) void toolStripMenuItemShutdown_Click(object sender, EventArgs e)
{ {
Application.Exit(); Application.Exit();
......
...@@ -24,8 +24,12 @@ namespace Jackett ...@@ -24,8 +24,12 @@ namespace Jackett
public static Logger LoggerInstance { get; private set; } public static Logger LoggerInstance { get; private set; }
public static ManualResetEvent ExitEvent { get; private set; }
static void Main(string[] args) static void Main(string[] args)
{ {
ExitEvent = new ManualResetEvent(false);
try try
{ {
if (!Directory.Exists(AppConfigDirectory)) if (!Directory.Exists(AppConfigDirectory))
...@@ -46,31 +50,45 @@ namespace Jackett ...@@ -46,31 +50,45 @@ namespace Jackett
var logFile = new FileTarget(); var logFile = new FileTarget();
logConfig.AddTarget("file", logFile); logConfig.AddTarget("file", logFile);
logFile.FileName = Path.Combine(AppConfigDirectory, "log.txt"); logFile.FileName = Path.Combine(AppConfigDirectory, "log.txt");
logFile.Layout = "${longdate} ${level} ${message}"; logFile.Layout = "${longdate} ${level} ${message} \n ${exception:format=ToString}\n";
var logFileRule = new LoggingRule("*", LogLevel.Debug, logFile); var logFileRule = new LoggingRule("*", LogLevel.Debug, logFile);
var logAlert = new MessageBoxTarget(); var logAlert = new MessageBoxTarget();
logConfig.AddTarget("alert", logAlert); logConfig.AddTarget("alert", logAlert);
logAlert.Layout = "${message}"; logAlert.Layout = "${message}";
logAlert.Caption = "Alert"; logAlert.Caption = "Alert";
var logAlertRule = new LoggingRule("*", LogLevel.Error, logAlert); var logAlertRule = new LoggingRule("*", LogLevel.Fatal, logAlert);
var logConsole = new ConsoleTarget();
logConfig.AddTarget("console", logConsole);
logConsole.Layout = "${longdate} ${level} ${message} ${exception:format=ToString}";
var logConsoleRule = new LoggingRule("*", LogLevel.Debug, logConsole);
logConfig.LoggingRules.Add(logFileRule); logConfig.LoggingRules.Add(logFileRule);
logConfig.LoggingRules.Add(logAlertRule); logConfig.LoggingRules.Add(logAlertRule);
logConfig.LoggingRules.Add(logConsoleRule);
LogManager.Configuration = logConfig; LogManager.Configuration = logConfig;
LoggerInstance = LogManager.GetCurrentClassLogger(); LoggerInstance = LogManager.GetCurrentClassLogger();
Task.Run(() => var serverTask = Task.Run(async () =>
{ {
ServerInstance = new Server(); ServerInstance = new Server();
ServerInstance.Start(); await ServerInstance.Start();
}); });
try
{
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Main()); Application.Run(new Main());
}
catch (Exception ex)
{
Console.WriteLine("Running in headless mode.");
}
Task.WaitAll(serverTask);
Console.WriteLine("Server thread exit");
} }
static public void RestartAsAdmin() static public void RestartAsAdmin()
......
...@@ -15,7 +15,7 @@ namespace Jackett ...@@ -15,7 +15,7 @@ namespace Jackett
{ {
public class Server public class Server
{ {
int Port = 9117; public const int Port = 9117;
HttpListener listener; HttpListener listener;
IndexerManager indexerManager; IndexerManager indexerManager;
...@@ -46,17 +46,17 @@ namespace Jackett ...@@ -46,17 +46,17 @@ namespace Jackett
} }
} }
public async void Start() public async Task Start()
{ {
Program.LoggerInstance.Info("Starting HTTP server..."); Program.LoggerInstance.Info("Starting HTTP server...");
try try
{ {
listener.Start(); listener.Start();
Process.Start("http://127.0.0.1:" + Port);
} }
catch (HttpListenerException ex) catch (HttpListenerException ex)
{ {
Console.WriteLine("Server start exception: " + ex.ToString());
var dialogResult = MessageBox.Show( var dialogResult = MessageBox.Show(
"App must be ran as Admin for permission to use port " + Port + Environment.NewLine + "Restart app with admin privileges?", "App must be ran as Admin for permission to use port " + Port + Environment.NewLine + "Restart app with admin privileges?",
"Failed to open port", "Failed to open port",
...@@ -75,10 +75,18 @@ namespace Jackett ...@@ -75,10 +75,18 @@ namespace Jackett
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine("Server start exception: " + ex.ToString());
Program.LoggerInstance.ErrorException("Error: " + ex.Message, ex); Program.LoggerInstance.ErrorException("Error: " + ex.Message, ex);
return; return;
} }
Program.LoggerInstance.Info("Server started on port " + Port); Program.LoggerInstance.Info("Server started on port " + Port);
try
{
Process.Start("http://127.0.0.1:" + Port);
}
catch (Exception) { }
while (true) while (true)
{ {
var context = await listener.GetContextAsync(); var context = await listener.GetContextAsync();
...@@ -115,6 +123,7 @@ namespace Jackett ...@@ -115,6 +123,7 @@ namespace Jackett
catch (Exception ex) catch (Exception ex)
{ {
exception = ex; exception = ex;
Program.LoggerInstance.ErrorException(ex.Message + ex.ToString(), ex);
} }
if (exception != null) if (exception != null)
...@@ -127,7 +136,11 @@ namespace Jackett ...@@ -127,7 +136,11 @@ namespace Jackett
catch (Exception) { } catch (Exception) { }
} }
try
{
context.Response.Close(); context.Response.Close();
}
catch (Exception) { }
} }
...@@ -157,6 +170,8 @@ namespace Jackett ...@@ -157,6 +170,8 @@ namespace Jackett
var releases = await indexer.PerformQuery(torznabQuery); var releases = await indexer.PerformQuery(torznabQuery);
Program.LoggerInstance.Debug(string.Format("Found {0} releases from {1}", releases.Length, indexer.DisplayName));
var severUrl = string.Format("{0}://{1}:{2}/", context.Request.Url.Scheme, context.Request.Url.Host, context.Request.Url.Port); var severUrl = string.Format("{0}://{1}:{2}/", context.Request.Url.Scheme, context.Request.Url.Host, context.Request.Url.Port);
var resultPage = new ResultPage(new ChannelInfo var resultPage = new ResultPage(new ChannelInfo
......
...@@ -30,6 +30,8 @@ namespace Jackett ...@@ -30,6 +30,8 @@ namespace Jackett
DateTime showDate; DateTime showDate;
if (DateTime.TryParseExact(string.Format("{0} {1}", Season, Episode), "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out showDate)) if (DateTime.TryParseExact(string.Format("{0} {1}", Season, Episode), "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out showDate))
episodeString = showDate.ToString("yyyy.MM.dd"); episodeString = showDate.ToString("yyyy.MM.dd");
else if (string.IsNullOrEmpty(Episode))
episodeString = string.Format("S{0:00}", Season);
else else
episodeString = string.Format("S{0:00}E{1:00}", Season, int.Parse(Episode)); episodeString = string.Format("S{0:00}E{1:00}", Season, int.Parse(Episode));
......
...@@ -131,14 +131,21 @@ namespace Jackett ...@@ -131,14 +131,21 @@ namespace Jackett
break; break;
} }
JToken jsonReply = await handlerTask(context); JToken jsonReply = await handlerTask(context);
ReplyWithJson(context, jsonReply); await ReplyWithJson(context, jsonReply, method.ToString());
} }
async void ReplyWithJson(HttpListenerContext context, JToken json) async Task ReplyWithJson(HttpListenerContext context, JToken json, string apiCall)
{
try
{ {
byte[] jsonBytes = Encoding.UTF8.GetBytes(json.ToString()); byte[] jsonBytes = Encoding.UTF8.GetBytes(json.ToString());
await context.Response.OutputStream.WriteAsync(jsonBytes, 0, jsonBytes.Length); await context.Response.OutputStream.WriteAsync(jsonBytes, 0, jsonBytes.Length);
} }
catch (Exception ex)
{
Console.WriteLine("Error writing json to stream for API call " + apiCall + Environment.NewLine + ex.ToString());
}
}
async Task<JToken> HandleTestSonarr(HttpListenerContext context) async Task<JToken> HandleTestSonarr(HttpListenerContext context)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment