Esempio n. 1
0
        public static void Main(List <NZEDBRelease> releases, IDbConnection db)
        {
            var client = new JsonServiceClient(appSettings.GetString("BaseUrl"));
            var folder = appSettings.GetString("FSPath");
            var apiKey = appSettings.GetString("ApiKey");

            foreach (var release in releases)
            {
                if (release.guid == null || release.guid.Length < 5)
                {
                    Console.WriteLine("Invalid Guid");
                    continue;
                }

                var filename = String.Format("/{5}/{0}/{1}/{2}/{3}/{4}.nzb.gz",
                                             release.guid[0],
                                             release.guid[1],
                                             release.guid[2],
                                             release.guid[3],
                                             release.guid, folder);

                var success    = false;
                var nzb        = new ImportNZB();
                var fileExists = true;

                if (File.Exists((filename)))
                {
                    NZEDBTVEpisode episode = null;

                    if (release.tv_episodes_id != 0)
                    {
                        episode = db.SingleById <NZEDBTVEpisode>(release.tv_episodes_id);
                        if (episode != null)
                        {
                            episode.Summary = String.Empty;                 // System.Net.WebUtility.UrlEncode(episode.Summary);
                        }
                    }

                    NZEDBVideo video = null;

                    if (release.videos_id != 0)
                    {
                        video = db.SingleById <NZEDBVideo>(release.videos_id);
                    }

                    nzb = new ImportNZB()
                    {
                        Key         = apiKey,
                        Name        = release.searchname,
                        Name1       = String.IsNullOrEmpty(release.movie_title) ? release.tv_title : release.movie_title,
                        Name2       = String.IsNullOrEmpty(release.se_complete) ? String.Empty : release.se_complete,
                        Parts       = release.totalpart,
                        GroupId     = release.groups_id,
                        Size        = release.size,
                        Guid        = release.guid,
                        ImdbId      = release.imdbid,
                        VideoId     = release.videos_id,
                        ReleaseId   = release.id,
                        TVEpisodeId = release.tv_episodes_id,
                        PostDate    = release.postdate,
                        TVEpisode   = new TVEpisode().PopulateWith(episode),
                        Video       = new Video().PopulateWith(video),
                        CategoryId  = release.categories_id,
                        AddDate     = release.adddate
                    };

                    try
                    {
                        client.PostFileWithRequest <bool>(File.OpenRead(filename), String.Format("{0}.nzb.gz", release.guid), nzb);

                        success = true;
                    }
                    catch (WebServiceException e)
                    {
                        Console.WriteLine("Web Exception: {0}", e.Message);

                        if (e.Message == "NZB already imported")
                        {
                            success = true;
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
                else
                {
                    Console.WriteLine("File does not exists");
                    fileExists = false;
                    success    = false;
                }

                // try one more time with base64
                if (success == false && fileExists)
                {
                    try
                    {
                        Console.WriteLine("\tRetrying...");

                        nzb.Data = File.Exists(filename) ? Convert.ToBase64String(File.ReadAllBytes(filename)) : String.Empty;
                        client.Post(nzb);
                        success = true;
                    }
                    catch (WebServiceException e)
                    {
                        Console.WriteLine("\tWeb Exception: {0}", e.Message);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("\t{0}", e.Message);
                    }
                }

                if (success)
                {
                    db.Update <NZEDBRelease>(new { exported = true }, q => q.id == release.id);
                }
                else
                {
                    db.Update <NZEDBRelease>(new { failedexport = (release.failedexport + 1) }, q => q.id == release.id);
                }
            }
        }
Esempio n. 2
0
        public object Post(ImportNZB nzb)
        {
            if (nzb.Key != _settings.GetString("ApiKey"))
            {
                throw new HttpError(401, "Unauthorized");
            }

            if (Db.Exists <NZB>(new { ReleaseId = nzb.ReleaseId }))
            {
                throw new HttpError(500, "NZB already imported");
            }

            if (Request.Files.Length == 0 && !String.IsNullOrEmpty(nzb.Data))
            {
                throw new HttpError(500, "No file present");
            }

            if (Request.Files.Length == 0 && !String.IsNullOrEmpty(nzb.Data))
            {
                byte[] data = Convert.FromBase64String(nzb.Data);

                using (var stream = new MemoryStream(data))
                {
                    var file = String.Format("nzb/{0}/{1}/{2}/{3}/{4}.nzb.gz",
                                             nzb.Guid[0],
                                             nzb.Guid[1],
                                             nzb.Guid[2],
                                             nzb.Guid[3],
                                             nzb.Guid);

                    VirtualFiles.WriteFile(file, stream);
                }
            }

            Title title;

            var catCount = Db.Single <Count>(q => q.CategoryId == nzb.CategoryId);

            bool titleExists =
                (nzb.TVEpisodeId != 0 && Db.Exists <Title>(q => q.TVEpisodeId == nzb.TVEpisodeId)) ||
                (nzb.ImdbId != 0 && Db.Exists <Title>(q => q.ImdbId == nzb.ImdbId));

            using (var db = ConnectionFactory.OpenDbConnection()) {
                if (nzb.TVEpisodeId != 0 && !titleExists)
                {
                    db.Save <Title>(new Title()
                    {
                        TVEpisodeId = nzb.TVEpisodeId,
                        VideoId     = nzb.VideoId,
                        Name        = nzb.Name1 + " " + nzb.Name2,
                        Name1       = nzb.Name1,
                        Name2       = nzb.Name2,
                    });
                }
                else if (nzb.ImdbId != 0 && !titleExists)
                {
                    db.Save <Title>(new Title()
                    {
                        ImdbId = nzb.ImdbId,
                        Name   = nzb.Name1,
                        Name1  = nzb.Name1,
                    });
                }

                if (nzb.ImdbId != 0)
                {
                    title = db.Single <Title>(q => q.ImdbId == nzb.ImdbId);
                }
                else
                {
                    title = db.Single <Title>(q => q.TVEpisodeId == nzb.TVEpisodeId);
                }

                bool saveVideo   = nzb.Video != null && !db.Exists <Video>(q => q.Id == nzb.VideoId);
                bool saveEpisode = nzb.TVEpisode != null && !db.Exists <TVEpisode>(q => q.Id == nzb.TVEpisodeId);

                //if (saveEpisode)
                //nzb.TVEpisode.Summary = "";//System.Net.WebUtility.UrlDecode(nzb.TVEpisode.Summary);

                using (var trans = db.OpenTransaction(IsolationLevel.ReadCommitted)) {
                    try {
                        var n = new NZB()
                        {
                            TitleId = title.Id,
                            ImdbId  = nzb.ImdbId,
                            VideoId = nzb.VideoId,
                            Name    = nzb.Name,
                            Parts   = nzb.Parts,
                            Size    = nzb.Size,
                            GroupId = nzb.GroupId,
                            Guid    = nzb.Guid,
                            //NzbGuid = nzb.NzbGuid,
                            ReleaseId   = nzb.ReleaseId,
                            TVEpisodeId = nzb.TVEpisodeId,
                            PostDate    = nzb.PostDate,
                            ImportDate  = DateTime.Now,
                            CategoryId  = nzb.CategoryId,
                            Added       = nzb.AddDate
                        };

                        if (saveVideo)
                        {
                            nzb.Video.Id = nzb.VideoId;
                            db.Save <Video>(nzb.Video);
                        }

                        if (saveEpisode)
                        {
                            nzb.TVEpisode.Id = nzb.TVEpisodeId;
                            db.Save <TVEpisode>(nzb.TVEpisode);
                        }

                        db.Save <NZB>(n);

                        catCount.Total++;
                        db.Save <Count>(catCount);

                        trans.Commit();
                    } catch (Exception e) {
                        trans.Rollback();
                        throw new HttpError(500, "Database error: " + e.Message);
                    } // catch
                }     // trans
            }         // db

            foreach (var file in Request.Files)
            {
                var filename = String.Format("nzb/{0}/{1}/{2}/{3}/{4}",
                                             file.FileName[0],
                                             file.FileName[1],
                                             file.FileName[2],
                                             file.FileName[3],
                                             file.FileName);

                file.SaveTo(VirtualFiles, filename);
            }

            return(true);
        }