Skip to content

Commit

Permalink
Most major functionality done for OpenSubtitles.net
Browse files Browse the repository at this point in the history
  • Loading branch information
iboshkov committed Apr 28, 2017
1 parent 33fd537 commit 08318ca
Show file tree
Hide file tree
Showing 11 changed files with 669 additions and 138 deletions.
12 changes: 8 additions & 4 deletions OpenSubSarchLib/FilenameParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public partial class FilenameParser
{"resolution", "([0-9]{3,4}p)"},
{
"quality",
"((?:PPV\\.)?[HP]DTV|(?:HD)?CAM|B[DR]Rip|(?:HD-?)?TS|(?:PPV )?WEB-?DL(?: DVDRip)?|HDRip|DVDRip|DVDRIP|CamRip|W[EB]BRip|BluRay|DvDScr|hdtv|telesync)"
"((?:PPV\\.)?[HP]DTV|(?:HD)?CAM|B[DR]Rip|(?:HD-?)(TS)|(?:PPV )?WEB-?DL(?: DVDRip)?|HDRip|DVDRip|DVDRIP|CamRip|W[EB]BRip|BluRay|DvDScr|hdtv|telesync)"
},
{"codec", "(xvid|[hx]\\.?26[45])"},
{"audio", "(MP3|DD5\\.?1|Dual[\\- ]Audio|LiNE|DTS|AAC[.-]LC|AAC(?:\\.?2\\.0)?|AC3(?:\\.5\\.1)?)"},
Expand Down Expand Up @@ -111,10 +111,14 @@ public Metadata parse()

var clean_idx = groups.Count - 1;
var raw_idx = 0;
if (key == "quality" && groups.Count > 2)
{
clean_idx -= 1;
}

raw = groups[raw_idx].ToString();
clean = groups[clean_idx].ToString();



if (key == "group")
{
MatchCollection codec_matches = Regex.Matches(clean, patterns["codec"], RegexOptions.IgnoreCase);
Expand Down Expand Up @@ -154,7 +158,7 @@ public Metadata parse()
clean = Regex.Replace(clean, "([\\[\\(_]|- )$", "").Trim();

part("title", null, raw, clean, -1, -1);

Console.WriteLine($"{excess_raw}");
// clean = Regex.Replace(excess_raw, "(^[-\\. ()]+)|([-\\. ]+$)", "");
// clean = Regex.Replace(clean, "[\\(\\)\\/]", " ");
// TODO: The rest.
Expand Down
89 changes: 89 additions & 0 deletions OpenSubSarchLib/ISubService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OSDBnet;

namespace OpenSubSarchLib
{
public class Subtitle
{
public string id { get; set; }

public string hash { get; set; }

public string fileName { get; set; }

public string moveId { get; set; }

public string imdbId { get; set; }

public string title { get; set; }

public string originalTitle { get; set; }

public int year { get; set; }

public string languageId { get; set; }

public string languageName { get; set; }

public string rating { get; set; }

public string bad { get; set; }

public Uri downloadLink { get; set; }

public Uri pageLink { get; set; }
}

public class Language
{
public String id_iso639;
public String service_id;
public String name;

public override string ToString()
{
return name;
}
}

public interface ISubService
{
IList<Subtitle> searchSubtitlesFromFile(string languages, string filePath);
IList<Subtitle> searchSubtitlesFromQuery(string languages, string query, int? season = null, int? episode = null);

IList<Language> getAvailableLanguages();

string serviceId();
}

public class SubServiceFactory
{
private Dictionary<String, ISubService> svcMap;

public SubServiceFactory()
{
svcMap = new Dictionary<string, ISubService>();
OSDBService svc = new OSDBService();
svcMap[svc.serviceId()] = svc;
}

public ISubService getService(string id)
{
return svcMap[id];
}

public List<String> getServiceIds()
{
return svcMap.Keys.ToList();
}

public ISubService getFirstService()
{
return svcMap.Values.ToList()[0];
}
}
}
17 changes: 12 additions & 5 deletions OpenSubSarchLib/Metadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ public class Metadata
public String input;

public String title;
public Int32 season;
public Int32 episode;
public int? season;
public int? episode;
public int? year;
public String quality;
public String resolution;
public String group;
Expand Down Expand Up @@ -72,9 +73,15 @@ public bool setIfExists(Dictionary<String, String> dict, String key, out String
public void _fromDictionary(Dictionary<String, String> dict)
{
_sourceDict = dict;

tryParseInt(dict, "season", out season);
tryParseInt(dict, "episode", out episode);
int season = -1;
bool valid = tryParseInt(dict, "season", out season);
if (valid) this.season = season;
int episode = -1;
valid = tryParseInt(dict, "episode", out episode);
if (valid) this.episode = episode;
int year = -1;
valid = tryParseInt(dict, "year", out year);
if (valid) this.year = year;
setIfExists(dict, "title", out title);
setIfExists(dict, "quality", out quality);
setIfExists(dict, "group", out group);
Expand Down
64 changes: 64 additions & 0 deletions OpenSubSarchLib/OSDBService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using OSDBnet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OpenSubSarchLib
{
public class OSDBService : ISubService
{
IAnonymousClient client;

public OSDBService()
{
client = Osdb.Login("en", "opensubsearch");
}

public String serviceId()
{
return "OSDB_SVC";
}

public IList<Subtitle> searchSubtitlesFromFile(string languages, string filePath)
{
return remapList(client.SearchSubtitlesFromFile(languages, filePath));
}

public IList<Language> getAvailableLanguages()
{
return client.GetSubLanguages().Select(lang => new Language()
{
name = lang.LanguageName,
id_iso639 = lang.ISO639,
service_id = lang.SubLanguageID
}).ToList();
}

IList<Subtitle> remapList(IList<OSDBnet.Subtitle> input)
{
return input.Select(sub => new Subtitle()
{
id = sub.SubtitleId,
fileName = sub.SubtitleFileName,
title = sub.MovieName,
year = sub.MovieYear,
hash = sub.SubtitleHash,
originalTitle = sub.OriginalMovieName,
languageName = sub.LanguageName,
languageId = sub.LanguageId,
rating = sub.Rating,
bad = sub.Bad,
imdbId = sub.ImdbId,
downloadLink = sub.SubTitleDownloadLink,
pageLink = sub.SubtitlePageLink
}).ToList();
}

public IList<Subtitle> searchSubtitlesFromQuery(string languages, string query, int? season = null, int? episode = null)
{
return remapList(client.SearchSubtitlesFromQuery(languages, query, season, episode));
}
}
}
11 changes: 11 additions & 0 deletions OpenSubSarchLib/OpenSubSarchLib.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CookComputing.XmlRpcV2, Version=2.5.0.0, Culture=neutral, PublicKeyToken=a7d6e17aa302004d, processorArchitecture=MSIL">
<HintPath>..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll</HintPath>
</Reference>
<Reference Include="OSDBnet, Version=0.4.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\OSDBnet.0.4.0.0\lib\net40\OSDBnet.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
Expand All @@ -43,7 +49,12 @@
<Compile Include="FilenameParser.cs" />
<Compile Include="HashUtils.cs" />
<Compile Include="Metadata.cs" />
<Compile Include="OSDBService.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ISubService.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
5 changes: 5 additions & 0 deletions OpenSubSarchLib/packages.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="OSDBnet" version="0.4.0.0" targetFramework="net452" />
<package id="xmlrpcnet" version="2.5.0" targetFramework="net452" />
</packages>
3 changes: 3 additions & 0 deletions OpenSubSearch.sln
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
VisualStudioVersion = 15.0.26228.9
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSubSearch", "OpenSubSearch\OpenSubSearch.csproj", "{E093DAC8-7DAD-4667-9720-799B925BF291}"
ProjectSection(ProjectDependencies) = postProject
{BFF759AB-08E0-437B-9BC4-AF558B5D4B21} = {BFF759AB-08E0-437B-9BC4-AF558B5D4B21}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSubSearchCLI", "OpenSubSearchCLI\OpenSubSearchCLI.csproj", "{3F3003AB-FFB4-4FC2-B170-2BDAE92ADEAB}"
EndProject
Expand Down
Loading

0 comments on commit 08318ca

Please sign in to comment.