Exemple #1
0
 /// <summary>
 /// Get subtitles languages
 /// </summary>
 /// <returns>Languages</returns>
 public async Task <IEnumerable <Language> > GetSubLanguages()
 {
     using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
     {
         return(await osdb.GetSubLanguages());
     }
 }
Exemple #2
0
 /// <summary>
 /// Get subtitles languages
 /// </summary>
 /// <returns>Languages</returns>
 public IEnumerable <OSDBnet.Language> GetSubLanguages()
 {
     using (var osdb = Osdb.Login("OSTestUserAgentTemp"))
     {
         return(osdb.GetSubLanguages());
     }
 }
 /// <summary>
 /// Search subtitles by imdb code and languages
 /// </summary>
 /// <param name="languages">Languages</param>
 /// <param name="imdbId">Imdb code</param>
 /// <returns></returns>
 public IList <Subtitle> SearchSubtitlesFromImdb(string languages, string imdbId)
 {
     using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
     {
         return(osdb.SearchSubtitlesFromImdb(languages, imdbId));
     }
 }
Exemple #4
0
 /// <summary>
 /// Search subtitles by imdb code and languages
 /// </summary>
 /// <param name="languages">Languages</param>
 /// <param name="imdbId">Imdb code</param>
 /// <param name="season">Season number</param>
 /// <param name="episode">Episode number</param>
 /// <returns>Subtitles</returns>
 public async Task <IList <Subtitle> > SearchSubtitlesFromImdb(string languages, string imdbId, int?season, int?episode)
 {
     using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
     {
         return(await osdb.SearchSubtitlesFromImdb(languages, imdbId, season, episode));
     }
 }
Exemple #5
0
        public void CanSearchOnlyText()
        {
            var client  = Osdb.Create(UserAgent);
            var results = client.SearchSubtitlesFromQuery("en", "Arrow").Result;

            Assert.IsTrue(results.Count > 0);
        }
 /// <summary>
 /// Get subtitles languages
 /// </summary>
 /// <returns>Languages</returns>
 public IEnumerable <Language> GetSubLanguages()
 {
     using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
     {
         return(osdb.GetSubLanguages());
     }
 }
Exemple #7
0
        static void DownloadSubtitle(string movieFileName, bool lucky, IList <string> languages)
        {
            using (var osdb = Osdb.Create("TemporaryUserAgent"))
            {
                var subtitles = osdb.SearchSubtitlesFromFile(languages.Aggregate((a, b) => a + "," + b), movieFileName).Result;

                int subtitlesCount = subtitles.Count;
                if (subtitlesCount == 0)
                {
                    Console.WriteLine("Sorry, no subtitles found for your movie");
                    return;
                }
                var selectedSubtitle = subtitles.First();
                if (!lucky)
                {
                    var canceled = !PromptForSubtitle(subtitles, ref selectedSubtitle);
                    if (canceled)
                    {
                        return;
                    }
                }

                string subtitleFile = osdb.DownloadSubtitleToPath(Path.GetDirectoryName(movieFileName), selectedSubtitle).Result;
                Console.WriteLine("Subtitle downloaded to '{0}'", subtitleFile);
            }
        }
Exemple #8
0
        public void CanSearchWithSeasonAndEpisode()
        {
            var client  = Osdb.Create(UserAgent);
            var results = client.SearchSubtitlesFromQuery("en", "arrow", 1, 1).Result;

            Assert.IsTrue(results.Count > 0);
        }
Exemple #9
0
        public void CanSearchOnlyText()
        {
            var client  = Osdb.Login("en", ConfigurationManager.AppSettings["TestUserAgent"]);
            var results = client.SearchSubtitlesFromQuery("en", "Arrow");

            Assert.IsTrue(results.Count > 0);
        }
Exemple #10
0
 /// <summary>
 /// Download a subtitle to a path
 /// </summary>
 /// <param name="path">Path to download</param>
 /// <param name="subtitle">Subtitle to download</param>
 /// <returns>Downloaded subtitle path</returns>
 public async Task <string> DownloadSubtitleToPath(string path, Subtitle subtitle)
 {
     using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
     {
         return(await osdb.DownloadSubtitleToPath(path, subtitle));
     }
 }
Exemple #11
0
 /// <summary>
 /// Download a subtitle to a path
 /// </summary>
 /// <param name="path">Path to download</param>
 /// <param name="subtitle">Subtitle to download</param>
 /// <returns>Downloaded subtitle path</returns>
 public string DownloadSubtitleToPath(string path, Subtitle subtitle)
 {
     using (var osdb = Osdb.Login("OSTestUserAgentTemp"))
     {
         return(osdb.DownloadSubtitleToPath(path, subtitle));
     }
 }
        public Task <IEnumerable <OpenSubtitleSearchResult> > SearchForFile(string videoFilePath, Language[] languages, string imdbId = null)
        {
            if (videoFilePath == null)
            {
                throw new ArgumentNullException("videoFilePath");
            }

            var fileInfo = new FileInfo(videoFilePath);

            if (!fileInfo.Exists)
            {
                throw new FileNotFoundException(string.Format(Resources.FileNotFound, videoFilePath), videoFilePath);
            }

            return(Task.Run(() => {
                try {
                    using (var client = Osdb.Login(UserAgent)) {
                        var languageIds = languages.Select(GetLanguageId).ToList();
                        var languageIdsPrm = string.Join(",", languages.Select(GetLanguageId));

                        var results = client.SearchSubtitlesFromFile(languageIdsPrm, videoFilePath);
                        results = results.OrderBy(s => s.LanguageId, new SubtitleLanguageComparer(languageIds)).ToList();

                        return results.Select(r => new OpenSubtitleSearchResult(this, r));
                    }
                }
                catch (Exception ex) {
                    if (ex.Message == "Unexpected error response 401 Unauthorized")
                    {
                        return Enumerable.Empty <OpenSubtitleSearchResult>();
                    }
                    throw;
                }
            }));
        }
Exemple #13
0
        async static Task <bool> SearchOpenSubtitles(string fileHash, long fileSize, string languages = DEFAULT_LANGUAGE)
        {
            bool retval = false;

            var             client        = Osdb.Create("SubSearch");
            List <Subtitle> targetSubList = (await client.SearchSubtitlesFromHash(languages, fileHash, fileSize)).ToList();

            return(retval);
        }
Exemple #14
0
 private static IAnonymousClient Login()
 {
     try
     {
         IAnonymousClient client = Osdb.Login("en", "SolEol 0.0.8");
         return(client);
     }
     catch (Exception ex)
     {
         errorQueue.Send(new ErrorMessage {
             Message = ex.ToString(), Time = DateTime.Now
         });
         return(null);
     }
 }
Exemple #15
0
        /// <summary>
        /// Search subtitles by imdb code and languages
        /// </summary>
        /// <param name="languages">Languages</param>
        /// <param name="imdbId">Imdb code</param>
        /// <param name="season">Season number</param>
        /// <param name="episode">Episode number</param>
        /// <returns>Subtitles</returns>
        public async Task <IList <Subtitle> > SearchSubtitlesFromImdb(string languages, string imdbId, int?season, int?episode)
        {
            var retrySearchSubtitlesFromImdbPolicy = Policy
                                                     .Handle <XmlRpcServerException>()
                                                     .WaitAndRetryAsync(5, retryAttempt =>
                                                                        TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
                                                                        );

            return(await retrySearchSubtitlesFromImdbPolicy.ExecuteAsync(async() =>
            {
                using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
                {
                    return await osdb.SearchSubtitlesFromImdb(languages, imdbId, season, episode);
                }
            }));
        }
Exemple #16
0
        /// <summary>
        /// Download a subtitle to a path
        /// </summary>
        /// <param name="path">Path to download</param>
        /// <param name="subtitle">Subtitle to download</param>
        /// <returns>Downloaded subtitle path</returns>
        public async Task <string> DownloadSubtitleToPath(string path, Subtitle subtitle)
        {
            var retryDownloadSubtitleToPathPolicy = Policy
                                                    .Handle <XmlRpcServerException>()
                                                    .WaitAndRetryAsync(5, retryAttempt =>
                                                                       TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
                                                                       );

            return(await retryDownloadSubtitleToPathPolicy.ExecuteAsync(async() =>
            {
                using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
                {
                    return await osdb.DownloadSubtitleToPath(path, subtitle);
                }
            }));
        }
Exemple #17
0
        /// <summary>
        /// Get subtitles languages
        /// </summary>
        /// <returns>Languages</returns>
        public async Task <IEnumerable <Language> > GetSubLanguages()
        {
            var retryGetSubLanguagesPolicy = Policy
                                             .Handle <XmlRpcServerException>()
                                             .WaitAndRetryAsync(5, retryAttempt =>
                                                                TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
                                                                );

            return(await retryGetSubLanguagesPolicy.ExecuteAsync(async() =>
            {
                using (var osdb = new Osdb().Login("OSTestUserAgentTemp"))
                {
                    return await osdb.GetSubLanguages();
                }
            }));
        }
Exemple #18
0
 public static Uri GetSubtitlePageLink(String IMDbId)
 {
     try
     {
         var osdb      = Osdb.Login("eng", "FileBot");
         var subtitles = osdb.SearchSubtitlesFromImdb("eng", IMDbId.Substring(2));
         if (subtitles.Count > 0)
         {
             return(subtitles.First().SubtitlePageLink);
         }
         return(null);
     }
     catch (Exception e)
     {
         return(null);
     }
 }
        public Task <bool> Download(string videoFilePath, OpenSubtitleSearchResult searchResult)
        {
            if (videoFilePath == null)
            {
                throw new ArgumentNullException("videoFilePath");
            }

            var fileInfo = new FileInfo(videoFilePath);

            if (!fileInfo.Exists)
            {
                throw new FileNotFoundException(string.Format(Resources.FileNotFound, videoFilePath), videoFilePath);
            }

            return(Task.Run(() => {
                try {
                    using (var client = Osdb.Login(UserAgent)) {
                        var subtitlePath = client.DownloadSubtitleToPath(fileInfo.DirectoryName, searchResult.Subtitle);
                        var subtitleFile = new FileInfo(subtitlePath);
                        var newSubtitlePath = Helper.ReplaceExtension(fileInfo, subtitleFile.Extension);

                        if (!subtitleFile.Exists)
                        {
                            return false;
                        }
                        if (string.Equals(subtitlePath, newSubtitlePath, StringComparison.OrdinalIgnoreCase))
                        {
                            return true;
                        }

                        Helper.DeleteFile(newSubtitlePath);
                        subtitleFile.MoveTo(newSubtitlePath);

                        return true;
                    }
                }
                catch (Exception ex) {
                    if (ex.Message == "Unexpected error response 401 Unauthorized")
                    {
                        return false;
                    }
                    throw;
                }
            }));
        }
Exemple #20
0
 public Movie SubtitleData(Movie movie, bool refresh = false)
 {
     try
     {
         var osdb      = Osdb.Login("eng", "FileBot");
         var subtitles = osdb.SearchSubtitlesFromImdb("eng", movie.IMDbId.Substring(2));
         if (subtitles.Count > 0)
         {
             movie.MovieSubtitle = subtitles.First();
             if (refresh)
             {
                 baza.updateMovie(movie);
             }
         }
         return(movie);
     }
     catch (Exception e)
     {
         return(movie);
     }
 }
        public Task <IEnumerable <OpenSubtitleSearchResult> > Search(string query, Language[] languages, string imdbId = null)
        {
            return(Task.Run(() => {
                try {
                    using (var client = Osdb.Login(UserAgent)) {
                        var languageIds = languages.Select(GetLanguageId).ToList();
                        var languageIdsPrm = string.Join(",", languages.Select(GetLanguageId));

                        var results = client.SearchSubtitlesFromQuery(languageIdsPrm, query);
                        results = results.OrderBy(s => s.LanguageId, new SubtitleLanguageComparer(languageIds)).ToList();
                        return results.Select(r => new OpenSubtitleSearchResult(this, r));
                    }
                }
                catch (Exception ex) {
                    if (ex.Message == "Unexpected error response 401 Unauthorized")
                    {
                        return Enumerable.Empty <OpenSubtitleSearchResult>();
                    }
                    throw;
                }
            }));
        }
Exemple #22
0
        /// <summary>
        /// Get subtitles languages
        /// </summary>
        /// <returns>Languages</returns>
        public async Task <IEnumerable <Language> > GetSubLanguages()
        {
            var retryGetSubLanguagesPolicy = Policy
                                             .Handle <XmlRpcServerException>()
                                             .WaitAndRetryAsync(5, retryAttempt =>
                                                                TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
                                                                );

            try
            {
                return(await retryGetSubLanguagesPolicy.ExecuteAsync(async() =>
                {
                    using (var osdb = new Osdb().Login(Constants.OsdbUa))
                    {
                        return await osdb.GetSubLanguages();
                    }
                }));
            }
            catch (Exception)
            {
                return(new List <Language>());
            }
        }
Exemple #23
0
 /// <summary>
 /// Initializes a new instance of the <see cref="OpenSubtitlesDb"/> class.
 /// </summary>
 public OpenSubtitlesDb()
 {
     this.client = Osdb.Login("en", agent);
 }
Exemple #24
0
        public BLL.MovieDetails AddToDbIfNotExist(FBMovie movie)
        {
            //Open connection to database:
            var db = MongoInstance.GetDatabase;

            //Initialize OMDb and OSDb clients:
            OMDbClient omdb = new OMDbClient(true);
            var        osdb = Osdb.Login("eng", "FileBot");

            //Prepare database collections:
            var movies    = db.GetCollection <Item>("Movies");
            var subtitles = db.GetCollection <Subtitle>("Subtitles");
            //If movie is not in the database, add it and the subtitles

            Item     dbMovie    = null;
            Subtitle dbSubtitle = null;
            var      mquery     = movies.Find(p => p.Title == movie.Title);

            if (mquery.Count() > 0)
            {
                dbMovie = mquery.First();
                var squery = subtitles.Find(p => p.MovieName == movie.Title);
                if (squery.Count() > 0)
                {
                    dbSubtitle = squery.First();
                }
            }

            if (dbMovie == null)
            {
                Item omdbResult = omdb.GetItemByTitle(movie.Title).Result;
                if (omdbResult != null)
                {
                    movies.ReplaceOne(p => p.Title == omdbResult.Title,
                                      omdbResult,
                                      new UpdateOptions {
                        IsUpsert = true
                    });
                    dbMovie = omdbResult;

                    var squery = subtitles.Find(p => p.MovieName == movie.Title);
                    if (squery.Count() > 0)
                    {
                        dbSubtitle = squery.First();
                    }
                    if (dbSubtitle == null)
                    {
                        var osdbResult = osdb.SearchSubtitlesFromQuery("eng", movie.Title);
                        if (osdbResult.Count > 0)
                        {
                            subtitles.ReplaceOne(p => p.SubtitleId == osdbResult.First().SubtitleId,
                                                 osdbResult.First(),
                                                 new UpdateOptions {
                                IsUpsert = true
                            });
                            dbSubtitle = osdbResult.First();
                        }
                    }
                }
            }

            Uri link = null;

            if (dbSubtitle != null)
            {
                link = dbSubtitle.SubTitleDownloadLink;
            }
            return(new BLL.MovieDetails
            {
                item = dbMovie,
                downloadLink = link
            });
        }
 public OSDBService(string clientVersionStr = "")
 {
     client = Osdb.Login("en", "opensubsearch v0.1 " + clientVersionStr);
     timer  = new Timer(OnTimeout, null, new TimeSpan(0, 14, 50), new TimeSpan(0, 14, 50));
 }