From 2eebea06832a4b940a79d66ec4dd1d3cb418f63a Mon Sep 17 00:00:00 2001
From: unknown <zone117x@gmail.com>
Date: Mon, 13 Jul 2015 01:13:16 -0600
Subject: [PATCH] Implemented T411

---
 src/Jackett/Indexers/T411.cs          | 200 ++++++++++++++++++++++++++
 src/Jackett/Jackett.csproj            |   4 +
 src/Jackett/WebContent/logos/t411.png | Bin 0 -> 28583 bytes
 3 files changed, 204 insertions(+)
 create mode 100644 src/Jackett/Indexers/T411.cs
 create mode 100644 src/Jackett/WebContent/logos/t411.png

diff --git a/src/Jackett/Indexers/T411.cs b/src/Jackett/Indexers/T411.cs
new file mode 100644
index 00000000..cbaff744
--- /dev/null
+++ b/src/Jackett/Indexers/T411.cs
@@ -0,0 +1,200 @@
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web;
+
+namespace Jackett.Indexers
+{
+    public class T411 : IndexerInterface
+    {
+
+        public event Action<IndexerInterface, JToken> OnSaveConfigurationRequested;
+
+        public event Action<IndexerInterface, string, Exception> OnResultParsingError;
+
+        public string DisplayName
+        {
+            get { return "T411"; }
+        }
+
+        public string DisplayDescription
+        {
+            get { return "French Torrent Tracker"; }
+        }
+
+        public Uri SiteLink
+        {
+            get { return new Uri(BaseUrl); }
+        }
+
+        public bool IsConfigured { get; private set; }
+
+        const string BaseUrl = "http://www.t411.io";
+        const string CommentsUrl = BaseUrl + "/torrents/{0}";
+
+        const string ApiUrl = "http://api.t411.io";
+        const string AuthUrl = ApiUrl + "/auth";
+        const string SearchUrl = ApiUrl + "/torrents/search/{0}";
+        const string DownloadUrl = ApiUrl + "/torrents/download/{0}";
+
+        HttpClientHandler handler;
+        HttpClient client;
+
+        string username = string.Empty;
+        string password = string.Empty;
+        string token = string.Empty;
+        DateTime lastTokenFetch = DateTime.MinValue;
+
+        public T411()
+        {
+            IsConfigured = false;
+            handler = new HttpClientHandler
+            {
+                AllowAutoRedirect = true
+            };
+            client = new HttpClient(handler);
+        }
+
+        public Task<ConfigurationData> GetConfigurationForSetup()
+        {
+            var config = new ConfigurationDataBasicLogin();
+            return Task.FromResult<ConfigurationData>(config);
+        }
+
+        async Task<string> GetAuthToken(bool forceFetch = false)
+        {
+            if (!forceFetch && lastTokenFetch > DateTime.Now - TimeSpan.FromHours(48))
+            {
+                return token;
+            }
+
+            var pairs = new Dictionary<string, string> {
+				{ "username", username },
+				{ "password", password }
+			};
+
+            var content = new FormUrlEncodedContent(pairs);
+
+            var response = await client.PostAsync(AuthUrl, content);
+            var responseContent = await response.Content.ReadAsStringAsync();
+            var jsonResponse = JObject.Parse(responseContent);
+            if (jsonResponse["error"] != null)
+            {
+                throw new ApplicationException((string)jsonResponse["error"]);
+            }
+            token = (string)jsonResponse["token"];
+            lastTokenFetch = DateTime.Now;
+            return token;
+        }
+
+        public async Task ApplyConfiguration(JToken configJson)
+        {
+            var config = new ConfigurationDataBasicLogin();
+            config.LoadValuesFromJson(configJson);
+
+            username = config.Username.Value;
+            password = config.Password.Value;
+
+            try
+            {
+                await GetAuthToken(true);
+            }
+            catch (Exception ex)
+            {
+                throw new ExceptionWithConfigData(ex.Message, (ConfigurationData)config);
+            }
+
+            var configSaveData = new JObject();
+            configSaveData["username"] = username;
+            configSaveData["password"] = password;
+            configSaveData["token"] = token;
+            configSaveData["last_token_fetch"] = lastTokenFetch;
+
+            if (OnSaveConfigurationRequested != null)
+                OnSaveConfigurationRequested(this, configSaveData);
+
+            IsConfigured = true;
+        }
+
+        public void LoadFromSavedConfiguration(JToken jsonConfig)
+        {
+            username = (string)jsonConfig["username"];
+            password = (string)jsonConfig["password"];
+            token = (string)jsonConfig["token"];
+            lastTokenFetch = (DateTime)jsonConfig["last_token_fetch"];
+            IsConfigured = true;
+        }
+
+        public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
+        {
+            List<ReleaseInfo> releases = new List<ReleaseInfo>();
+
+            foreach (var title in query.ShowTitles ?? new string[] { "%20" })
+            {
+                var searchString = title + " " + query.GetEpisodeSearchString();
+                var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
+
+                var message = new HttpRequestMessage();
+                message.Method = HttpMethod.Get;
+                message.RequestUri = new Uri(episodeSearchUrl);
+                message.Headers.TryAddWithoutValidation("Authorization", token);
+
+                var response = await client.SendAsync(message);
+                var results = await response.Content.ReadAsStringAsync();
+
+                var jsonResult = JObject.Parse(results);
+                try
+                {
+                    var items = (JArray)jsonResult["torrents"];
+                    foreach (var item in items)
+                    {
+                        var release = new ReleaseInfo();
+
+                        release.MinimumRatio = 1;
+                        release.MinimumSeedTime = 172800;
+                        var torrentId = (string)item["id"];
+                        release.Link = new Uri(string.Format(DownloadUrl, torrentId));
+                        release.Title = (string)item["name"];
+                        release.Description = release.Title;
+                        release.Comments = new Uri(string.Format(CommentsUrl, (string)item["rewritename"]));
+                        release.Guid = release.Comments;
+
+                        var dateUtc = DateTime.ParseExact((string)item["added"], "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
+                        release.PublishDate = DateTime.SpecifyKind(dateUtc, DateTimeKind.Utc).ToLocalTime();
+
+                        release.Seeders = ParseUtil.CoerceInt((string)item["seeders"]);
+                        release.Peers = ParseUtil.CoerceInt((string)item["leechers"]) + release.Seeders;
+
+                        release.Size = ParseUtil.CoerceLong((string)item["size"]);
+
+                        releases.Add(release);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    OnResultParsingError(this, results, ex);
+                    throw ex;
+                }
+            }
+            return releases.ToArray();
+        }
+
+        public async Task<byte[]> Download(Uri link)
+        {
+            var message = new HttpRequestMessage();
+            message.Method = HttpMethod.Get;
+            message.RequestUri = link;
+            message.Headers.TryAddWithoutValidation("Authorization", token);
+
+            var response = await client.SendAsync(message);
+            return await response.Content.ReadAsByteArrayAsync();
+        }
+    }
+}
diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj
index 532f6f42..e53951a7 100644
--- a/src/Jackett/Jackett.csproj
+++ b/src/Jackett/Jackett.csproj
@@ -107,6 +107,7 @@
     <Compile Include="Indexers\SceneTime.cs" />
     <Compile Include="Indexers\ShowRSS.cs" />
     <Compile Include="Indexers\Strike.cs" />
+    <Compile Include="Indexers\T411.cs" />
     <Compile Include="Indexers\ThePirateBay.cs" />
     <Compile Include="Indexers\TorrentDay.cs" />
     <Compile Include="Indexers\AnimeBytes.cs" />
@@ -181,6 +182,9 @@
     <Content Include="WebContent\logos\showrss.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="WebContent\logos\t411.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="WebContent\logos\torrentday.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
diff --git a/src/Jackett/WebContent/logos/t411.png b/src/Jackett/WebContent/logos/t411.png
new file mode 100644
index 0000000000000000000000000000000000000000..30e13134a219fcb3892657209c8f356aad8744f0
GIT binary patch
literal 28583
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
J%Q~loCIH1Eo(=#2

literal 0
HcmV?d00001

-- 
GitLab