Example #1
0
            public static async Task <PushStreamContent> RangeHeader()
            {
                await Task.Delay(0);

                return(new PushStreamContent(async(outputStream, httpContent, transpContext)
                                             =>
                {
                    using (outputStream) // Copy the file to output stream straightforward.
                        using (Stream inputStream = MovieFileInfo.OpenRead())
                        {
                            try
                            {
                                await inputStream.CopyToAsync(outputStream, ReadStreamBufferSize);
                            }
                            catch (Exception e)
                            {
                                await History.Create(History.Type.API, new History_API()
                                {
                                    api_action = "Exception caught | Message " + e.Message,
                                    api_type = "Exception -> MoviesAPI.Get.MovieInfo()",
                                    api_datetime = DateTime.Now
                                });
                            }
                        }
                }, Get.MimeNameFromExt(MovieFileInfo.Extension)));
            }
Example #2
0
            public static async Task <PushStreamContent> PartialContent(long start, long end)
            {
                await Task.Delay(0);

                return(new PushStreamContent(async(outputStream, httpContent, transpContext)
                                             =>
                {
                    try
                    {
                        using (outputStream)
                            using (Stream inputStream = MovieFileInfo.OpenRead())
                            {
                                await WriteToOutputStream(inputStream, outputStream, start, end);
                            }
                    }
                    catch (Exception ex)
                    {
                        await History.Create(History.Type.API, new History_API()
                        {
                            api_action = "Exception error -> " + ex.Message,
                            api_type = "Exception on Streaming.Create.PartialContent"
                        });
                    }
                }, Get.MimeNameFromExt(MovieFileInfo.Extension)));
            }
Example #3
0
        // Private Methods (2) 

        private static bool processNewMovieFile(ref long userImdbId, MovieFileInfo fileInfo, ref TryUploadResult res, Exception ex)
        {
            if (ex.Message.Contains("response contains boolean value where array expected")) // what did you expect from PHP developers?!
            {
                if (userImdbId == 0)
                {
                    userImdbId = Imdb.GetImdbId(Path.GetFileNameWithoutExtension(fileInfo.MovieFileName));
                    if (userImdbId == 0)
                    {
                        throw new NotSupportedException("It's a new movie file. Please find/fill its IMDB Id first.");
                    }
                    LogWindow.AddMessage(LogType.Info, string.Format("ImdbId: {0}", userImdbId));
                }

                //it's a new movie file and site's db has no info (IDMovieImdb val) about it.
                res = new TryUploadResult {
                    data = null, status = "200 OK", alreadyindb = 0
                };
                return(true);
            }
            return(false);
        }
Example #4
0
        public string UploadSubtitle(long userImdbId, string subLanguageId, string subFileNamePath, Action <int> progress)
        {
            string finalUrl;

            subFileNamePath = new ChangeEncoding().TryReduceRtlLargeFileContent(subFileNamePath);
            var fileInfo = new MovieFileInfo(_movieFileName, subFileNamePath);

            //login
            if (progress != null)
            {
                progress(10);
            }

            LogWindow.AddMessage(LogType.Info, "TryLogin ...");
            tryLogin();

            if (progress != null)
            {
                progress(25);
            }

            LogWindow.AddMessage(LogType.Info, "TryUploadSubtitle ...");

            TryUploadResult res = null;

            try
            {
                res = _client.TryUploadSubtitles(_loginToken,
                                                 new[]
                {
                    new TryUploadInfo
                    {
                        subhash       = fileInfo.SubtitleHash,
                        subfilename   = fileInfo.SubFileName,
                        moviehash     = fileInfo.MovieHash,
                        moviebytesize = fileInfo.MovieFileLength,
                        moviefilename = fileInfo.MovieFileName
                    }
                }
                                                 );
            }
            catch (Exception ex)
            {
                if (!processNewMovieFile(ref userImdbId, fileInfo, ref res, ex))
                {
                    throw;
                }
            }

            if (res == null)
            {
                throw new InvalidOperationException("Bad response ...");
            }

            if (progress != null)
            {
                progress(50);
            }

            if (res.status != "200 OK")
            {
                throw new Exception("Bad response ...");
            }

            if (res.alreadyindb == 0)
            {
                if ((userImdbId == 0) && (res.data == null || res.data.Length == 0))
                {
                    throw new Exception("Bad format ...");
                }

                LogWindow.AddMessage(LogType.Info, string.Format("CheckSubHash({0})", fileInfo.SubtitleHash));
                var checkSubHashRes = _client.CheckSubHash(_loginToken, new[] { fileInfo.SubtitleHash });

                if (progress != null)
                {
                    progress(75);
                }

                var idSubtitleFile = int.Parse(checkSubHashRes.data[fileInfo.SubtitleHash].ToString());
                if (idSubtitleFile > 0)
                {
                    throw new Exception("Duplicate subHash, alreadyindb.");
                }

                LogWindow.AddMessage(LogType.Info, "PostData ...");
                //xml-rpc.net dll does not work here so, ...
                var post = PostXml.PostData(
                    ConfigSetGet.GetConfigData("OpensubtitlesOrgApiUri"),
                    UploadData.CreateUploadXml(_loginToken,
                                               new UploadBaseinfo
                {
                    idmovieimdb      = res.data != null ? res.data[0]["IDMovieImdb"].ToString() : userImdbId.ToString(),
                    sublanguageid    = subLanguageId,
                    movieaka         = string.Empty,
                    moviereleasename = fileInfo.MovieReleaseName,
                    subauthorcomment = string.Empty
                },
                                               new UploadCDsInfo
                {
                    moviebytesize = fileInfo.MovieFileLength.ToString(),
                    moviefilename = fileInfo.MovieFileName,
                    moviehash     = fileInfo.MovieHash,
                    subfilename   = fileInfo.SubFileName,
                    subhash       = fileInfo.SubtitleHash,
                    subcontent    = fileInfo.SubContentToUpload,
                    moviefps      = string.Empty,
                    movieframes   = string.Empty,
                    movietimems   = string.Empty
                }));

                LogWindow.AddMessage(LogType.Info, "Done!");
                finalUrl = RegexHelper.GetUploadUrl(post);
                LogWindow.AddMessage(LogType.Announcement, string.Format("Url: {0}", finalUrl));
            }
            else
            {
                throw new Exception("Duplicate file, alreadyindb");
            }

            if (progress != null)
            {
                progress(100);
            }
            return(finalUrl.Trim());
        }
Example #5
0
        public SubtitlesSearchResult GetListOfAllSubtitles(Action <int> progress, string subLanguageId = "all")
        {
            var fileInfo = new MovieFileInfo(_movieFileName, subFileName: string.Empty);
            //get file info
            var movieHash = fileInfo.MovieHash;

            LogWindow.AddMessage(LogType.Info, string.Format("MovieHash: {0}", movieHash));
            var fileLen = fileInfo.MovieFileLength;

            //login
            if (progress != null)
            {
                progress(25);
            }

            LogWindow.AddMessage(LogType.Info, "TryLogin ...");
            tryLogin();

            if (progress != null)
            {
                progress(50);
            }

            //has any subtitle?
            var token              = _loginToken;
            var hashInfo           = _client.CheckMovieHash2(token, new[] { movieHash });
            var tryConvertToObjArr = hashInfo.data as object[];

            if ((tryConvertToObjArr != null) && (tryConvertToObjArr.Length == 0))
            {
                throw new Exception("This movie has not any subtitle.");
            }

            if (progress != null)
            {
                progress(75);
            }

            LogWindow.AddMessage(LogType.Info, "SearchSubtitles ... ");

            //get more info
            SubtitlesSearchResult result;

            try
            {
                result = _client.SearchSubtitles(
                    token,
                    new[]
                {
                    new SearchInfo
                    {
                        moviehash     = movieHash,
                        sublanguageid = subLanguageId,
                        moviebytesize = fileLen
                    }
                }
                    );
            }
            catch (Exception ex)
            {
                ExceptionLogger.LogExceptionToFile(ex);
                LogWindow.AddMessage(LogType.Alert, "Found Nothing!");
                if (progress != null)
                {
                    progress(100);
                }
                return(null);
            }

            if (result != null && result.data != null && result.data.Length > 0)
            {
                LogWindow.AddMessage(LogType.Announcement, string.Format("Found {0} Subtitle(s).", result.data.Length));
            }
            else
            {
                LogWindow.AddMessage(LogType.Alert, "Found Nothing!");
            }

            if (progress != null)
            {
                progress(100);
            }

            return(result);
        }