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); } } }
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); }