Exemple #1
0
        Api(ISession session)
            : base("/api")
        {
            Post["/downloaded"] = parameters =>
            {
                if (!Request.Form.ApiKey.HasValue)
                {
                    return new Response {StatusCode = HttpStatusCode.Unauthorized};
                }

                if (!Request.Form.Title.HasValue)
                {
                    return new Response { StatusCode = HttpStatusCode.ExpectationFailed };
                }

                string apiKey = Request.Form.ApiKey.Value;
                //string title = Request.Form.Title.Value;

                using (var db = session.SessionFactory(""))
                {
                    using (var s = db.OpenSession())
                    {
                        using (s.BeginTransaction())
                        {
                            var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                            if (apiKey != userSettings.ApiKey)
                            {
                                return new Response { StatusCode = HttpStatusCode.Forbidden };
                            }

                            return new Response { StatusCode = HttpStatusCode.OK };
                        }
                    }
                }
            };
        }
Exemple #2
0
        public Settings(ISession session)
            : base("/settings")
        {
            string dbFile = ConfigurationManager.AppSettings["DBFile"];

            Get["/"] = parameters =>
                           {
                               var args = Environment.GetCommandLineArgs();
                               var model = new
                                               {
                                                   AppPath = args[0],
                                                   Args = String.Join(",", args.Skip(1).Take(args.Count())),
                                                   OS = Environment.OSVersion.ToString(),
                                                   Runtime = Environment.Version.ToString()
                                               };

                               return View["Settings/Index", model];
                           };

            Get["/general"] = parameters =>
                {
                    using (var db = session.SessionFactory(dbFile))
                    {
                        using (var s = db.OpenSession())
                        {
                            var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                            return View["Settings/General", new { userSettings.ApiKey, userSettings.C2CPreference, userSettings.SearchInterval }];

                        }
                    }
                };

            Post["/general"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                            string covertocoverStr = Request.Form.C2CPreference.Value;
                            C2CPreference covertocover;

                            if (!Enum.TryParse(covertocoverStr, false, out covertocover))
                            {
                                throw new ArgumentException("Unknown download provider {0}", covertocoverStr);
                            }

                            userSettings.ApiKey = Request.Form.ApiKey;
                            userSettings.Enabled = true;
                            userSettings.C2CPreference = covertocover;
                            userSettings.SearchInterval = int.Parse(Request.Form.SearchInterval);

                            s.SaveOrUpdate(userSettings);
                            transaction.Commit();

                            return Response.AsRedirect("/settings/general");
                        }
                    }
                }
            };

            Get["/search"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        var searchSettings = s.QueryOver<SearchProviderSettings>().List<SearchProviderSettings>();

                        if (searchSettings.Count == 0)
                        {
                            using (var transaction = s.BeginTransaction())
                            {

                                var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                                var searchSettingsDefault = new SearchProviderSettings
                                                                {
                                                                    ApiKey = "",
                                                                    Type = SearchProviders.NZBINDEXdotNL,
                                                                    Enabled = true,
                                                                    UserSettings = userSettings,
                                                                };

                                transaction.Commit();
                                s.SaveOrUpdate(searchSettingsDefault);
                                searchSettings.Add(searchSettingsDefault);
                            }
                        }

                        return View["Settings/Search",
                            new {
                                Search = searchSettings,
                            }];
                    }
                }
            };

            Post["/search"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            if (Request.Form.id.HasValue)
                            {
                                int id = int.Parse(Request.Form.id.Value);

                                var searchSettings =
                                    s.QueryOver<SearchProviderSettings>().Where(se => se.Id == id).SingleOrDefault
                                        <SearchProviderSettings>();

                                if (Request.Form.ApiKey.HasValue)
                                {
                                    searchSettings.ApiKey = Request.Form.ApiKey;
                                }

                                if (Request.Form.Host.HasValue)
                                {
                                    searchSettings.Host = Request.Form.Host;
                                }

                                if (Request.Form.Port.HasValue)
                                {
                                    searchSettings.Port = Request.Form.Port;
                                }

                                if (Request.Form.Path.HasValue)
                                {
                                    searchSettings.Path = Request.Form.Path;
                                }

                                searchSettings.SSL = Request.Form.SSL.HasValue;
                                searchSettings.Enabled = Request.Form.Enabled.HasValue;

                                s.SaveOrUpdate(searchSettings);
                            }
                            else
                            {
                                var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                                string typeStr = Request.Form.Type.Value;
                                SearchProviders type;
                                bool enabled = Request.Form.Enabled.HasValue;
                                bool ssl = Request.Form.SSL.HasValue;
                                string host = Request.Form.Host.Value;
                                string port = Request.Form.Port.Value;
                                string path = Request.Form.Path.Value;

                                if (!Enum.TryParse(typeStr, false, out type))
                                {
                                    throw new ArgumentException("Unknown search provider {0}", typeStr);
                                }

                                var searchSettings = new SearchProviderSettings
                                                                {
                                                                    ApiKey = Request.Form.ApiKey,
                                                                    Type = type,
                                                                    Enabled = enabled,
                                                                    UserSettings = userSettings,
                                                                    Host = host,
                                                                    Port = port,
                                                                    Path = path,
                                                                    SSL = ssl,
                                                                };

                                s.SaveOrUpdate(searchSettings);
                            }

                            transaction.Commit();

                            return Response.AsRedirect("/settings/search");
                        }
                    }
                }
            };

            Get["/download"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            var destinationSettings = s.QueryOver<DownloadProviderSettings>().List<DownloadProviderSettings>();

                            if (destinationSettings.Count == 0)
                            {
                                var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                                /*
                                var searchSettingsDefaultSave = new DownloadProviderSettings
                                {
                                    ApiKey = "",
                                    Host = "",
                                    Port = "",
                                    Type = DownloadProviders.SaveFile,
                                    Enabled = false,
                                    Path = "./",
                                    UserSettings = userSettings,
                                    Category = "",
                                    Username = "",
                                    Password = "",
                                };

                                s.SaveOrUpdate(searchSettingsDefaultSave);
                                destinationSettings.Add(searchSettingsDefaultSave);
                                */

                                var searchSettingsDefaultSABnzbd = new DownloadProviderSettings
                                {
                                    ApiKey = "FIXME",
                                    Host = "localhost",
                                    Port = "9090",
                                    Type = DownloadProviders.SABnzbd,
                                    Enabled = false,
                                    Path = "sabnzbd",
                                    UserSettings = userSettings,
                                    Category = "books",
                                    Username = "",
                                    Password = "",
                                };

                                s.SaveOrUpdate(searchSettingsDefaultSABnzbd);
                                destinationSettings.Add(searchSettingsDefaultSABnzbd);
                            }

                            transaction.Commit();

                            return View["Settings/Download",
                                new
                                {
                                    Destination = destinationSettings,
                                }];
                        }
                    }
                }
            };

            Post["/download"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            if (Request.Form.id.HasValue)
                            {
                                int id = int.Parse(Request.Form.id.Value);

                                var destinationSettings =
                                    s.QueryOver<DownloadProviderSettings>().Where(d => d.Id == id).SingleOrDefault
                                        <DownloadProviderSettings>();

                                if (Request.Form.ApiKey.HasValue)
                                {
                                    destinationSettings.ApiKey = Request.Form.ApiKey;
                                    destinationSettings.Host = Request.Form.Host;
                                    destinationSettings.Port = Request.Form.Port;
                                    destinationSettings.Enabled = Request.Form.Enabled.HasValue;
                                    destinationSettings.Path = Request.Form.Path;
                                    destinationSettings.Category = Request.Form.Category;
                                    destinationSettings.Username = Request.Form.Username;
                                    destinationSettings.Password = Request.Form.Password;
                                }
                            }
                            else
                            {
                                var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                                string typeStr = Request.Form.Type;
                                DownloadProviders type;

                                if (!Enum.TryParse(typeStr, false, out type))
                                {
                                    throw new ArgumentException("Unknown download provider {0}", typeStr);
                                }

                                var destinationSettings = new DownloadProviderSettings
                                {
                                    ApiKey = Request.Form.ApiKey.Value,
                                    Host = Request.Form.Host.Value,
                                    Port = Request.Form.Port.Value,
                                    Type = type,
                                    Enabled = Request.Form.Enabled.HasValue,
                                    Path = Request.Form.Path.Value,
                                    UserSettings = userSettings,
                                    Category = Request.Form.Category.Value,
                                    Username = Request.Form.Username.Value,
                                    Password = Request.Form.Password.Value,
                                };

                                s.SaveOrUpdate(destinationSettings);
                            }

                            transaction.Commit();

                            return Response.AsRedirect("/settings/download");
                        }
                    }
                }
            };

            Get["/wizard"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>() ??
                                               new UserSettings
                                                {
                                                    ApiKey = "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh".Randomise(),
                                                    Enabled = false,
                                                };

                            s.SaveOrUpdate(userSettings);

                            /*
                            var destinationSettings = s.QueryOver<DownloadProviderSettings>().List<DownloadProviderSettings>();

                            if (destinationSettings.Count == 0)
                            {
                                var searchSettingsDefaultSABnzbd = new DownloadProviderSettings
                                {
                                    ApiKey = "FIXME",
                                    Host = "localhost",
                                    Port = "9090",
                                    Type = DownloadProviders.SABnzbd,
                                    Enabled = false,
                                    Path = "sabnzbd",
                                    UserSettings = userSettings,
                                    Category = "books",
                                    Username = "",
                                    Password = "",
                                };

                                s.SaveOrUpdate(searchSettingsDefaultSABnzbd);
                                destinationSettings.Add(searchSettingsDefaultSABnzbd);
                            }

                            var searchSettings = s.QueryOver<SearchProviderSettings>().List<SearchProviderSettings>();

                            if (searchSettings.Count == 0)
                            {
                                var searchSettingsDefault = new SearchProviderSettings
                                {
                                    ApiKey = "",
                                    Type = SearchProviders.NZBINDEXdotNL,
                                    Enabled = true,
                                    UserSettings = userSettings
                                };

                                s.SaveOrUpdate(searchSettingsDefault);

                                searchSettings.Add(searchSettingsDefault);
                            }
                            */

                            transaction.Commit();

                            return View["Settings/Wizard",
                                new
                                {
                                    //Search = searchSettings,
                                    //Destination = destinationSettings,
                                    userSettings.ApiKey,
                                }];
                        }
                    }
                }
            };

            Post["/wizard"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {

                            string covertocoverStr = Request.Form.C2CPreference.Value;
                            C2CPreference covertocover;

                            if (!Enum.TryParse(covertocoverStr, false, out covertocover))
                            {
                                throw new ArgumentException("Unknown download provider {0}", covertocoverStr);
                            }

                            var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();
                            userSettings.ApiKey = Request.Form.AppApiKey;
                            userSettings.Enabled = true;
                            userSettings.C2CPreference = covertocover;
                            userSettings.SearchInterval = int.Parse(Request.Form.SearchInterval);
                            s.SaveOrUpdate(userSettings);

                            ScheduleUpdater.AddReleaseURL(int.Parse(Request.Form.Weeks));

                            string downloadTypeStr = Request.Form.DownloadType.Value;
                            DownloadProviders downloadType;

                            if (!Enum.TryParse(downloadTypeStr, false, out downloadType))
                            {
                                throw new ArgumentException("Unknown download provider {0}", downloadTypeStr);
                            }

                            var destinationSettings = new DownloadProviderSettings
                            {
                                ApiKey = Request.Form.DownloadApiKey,
                                Host = Request.Form.DownloadHost,
                                Port = Request.Form.DownloadPort,
                                Type = downloadType,
                                Enabled = Request.Form.DownloadEnabled.HasValue,
                                Path = Request.Form.DownloadPath,
                                UserSettings = userSettings,
                                Category = Request.Form.DownloadCategory,
                                Username = Request.Form.DownloadUsername,
                                Password = Request.Form.DownloadPassword,
                            };

                            s.SaveOrUpdate(destinationSettings);

                            string searchTypeStr = Request.Form.SearchType.Value;
                            SearchProviders searchType;

                            if (!Enum.TryParse(searchTypeStr, false, out searchType))
                            {
                                throw new ArgumentException("Unknown search provider {0}", searchTypeStr);
                            }

                            var searchSettings = new SearchProviderSettings
                            {
                                ApiKey = Request.Form.SearchApiKey,
                                Type = searchType,
                                Enabled = Request.Form.SearchEnabled.HasValue,
                                UserSettings = userSettings,
                                Host = Request.Form.SearchHost,
                                Port = Request.Form.SearchPort,
                                Path = Request.Form.SearchPath,
                                SSL = Request.Form.SearchSSL.HasValue,
                            };

                            s.SaveOrUpdate(searchSettings);

                            transaction.Commit();

                            return Response.AsRedirect("/");
                        }
                    }
                }
            };
        }
Exemple #3
0
        public Publishers(ISession session)
            : base("/publishers")
        {
            Get["/"] = parameters =>
                           {
                               using (var db = session.SessionFactory(dbFile))
                               {
                                   using (var s = db.OpenSession())
                                   {
                                       var publishers =
                                           s.QueryOver<Publisher>().OrderBy(p => p.Name).Asc.List<Publisher>();
                                       IList list = new ArrayList();

                                       foreach (var publisher in publishers)
                                       {
                                           list.Add(new {publisher.Id, publisher.Name, Titles = publisher.Titles.Count});
                                       }

                                       return View["Publishers/Index", new {Publishers = list}];
                                   }
                               }
                           };

            Get["/titles"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        var titles = s.QueryOver<Title>().Where(t => t.Subscribed == false).OrderBy(t => t.Publisher).Asc.ThenBy(t => t.Name).Asc.List<Title>();
                        IList list = new ArrayList();

                        foreach (var title in titles)
                        {
                            list.Add(new { LatestNum = title.LatestIssue().Num, Latest = title.LatestIssue().Release.Date.NiceDate(), title.Limited, title.Subscribed, title.Name, title.Id, Publisher = new { title.Publisher.Name, title.Publisher.Id }, });
                        }

                        var model = new { titles = list };
                        return View["Publishers/Titles", model];
                    }
                }
            };

            Post["/titles"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            string titles = Request.Form.title;

                            var titlelist = titles.Split(',');

                            foreach (var t in titlelist)
                            {
                                int titleid = int.Parse(t);

                                var title = s.QueryOver<Title>().Where(ti => ti.Id == titleid).SingleOrDefault<Title>();

                                if (title != null)
                                {
                                    title.Subscribed = true;

                                    foreach (var i in title.Issues)
                                    {
                                        if (i.Status == IssueStatus.New)
                                        {
                                            i.Status = IssueStatus.Wanted;
                                            s.SaveOrUpdate(i);
                                        }
                                    }
                                }

                                s.SaveOrUpdate(title);
                            }

                            transaction.Commit();
                            return Response.AsRedirect("/");
                        }
                    }
                }
            };

            Get["/single/{id}"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        int id = int.Parse(parameters.id);
                        var publisher =
                            s.QueryOver<Publisher>().Where(p => p.Id == id).SingleOrDefault<Publisher>();
                        IList list = new ArrayList();

                        foreach (var title in publisher.Titles.OrderBy(t => t.Name))
                        {
                            list.Add(
                                new
                                    {
                                        title.Id,
                                        title.Name,
                                        title.Limited,
                                        Have = title.Have(),
                                        Total = title.Total(),
                                        title.Mature,
                                        title.OneShot,
                                        title.GraphicNovel,
                                        title.HardCover,
                                        Latest = title.LatestIssue().Release.Date.NiceDate(),
                                    });
                        }

                        var model = new
                                        {
                                            Titles = list,
                                            Publisher = new
                                            {
                                                publisher.Id,
                                                publisher.Name,
                                            }
                                        };

                        return View["Publishers/Single", model];

                    }
                }
            };
        }
Exemple #4
0
        public Titles(ISession session)
            : base("/titles")
        {
            string dbFile = ConfigurationManager.AppSettings["DBFile"];

            Get["/"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        var titles = s.QueryOver<Title>().Where(t => t.Subscribed == false).OrderBy(t => t.Name).Asc.List<Title>();
                        IList list = new ArrayList();

                        foreach (var title in titles)
                        {
                            list.Add(new { LatestNum = title.LatestIssue().Num, Latest = title.LatestIssue().Release.Date.NiceDate(), title.Limited, title.Subscribed, title.Name, title.Id, Publisher = new { title.Publisher.Name, title.Publisher.Id }, });
                        }

                        var model = new { titles = list };
                        return View["Titles/Index", model];
                    }
                }
            };

            Post["/"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            string titles = Request.Form.title;

                            var titlelist = titles.Split(',');

                            foreach (var t in titlelist)
                            {
                                int titleid = int.Parse(t);

                                var title = s.QueryOver<Title>().Where(ti => ti.Id == titleid).SingleOrDefault<Title>();

                                if (title != null)
                                {
                                    title.Subscribed = true;

                                    foreach (var i in title.Issues)
                                    {
                                        if (i.Status == IssueStatus.New)
                                        {
                                            i.Status = IssueStatus.Wanted;
                                            s.SaveOrUpdate(i);
                                        }
                                    }
                                }

                                s.SaveOrUpdate(title);
                            }

                            transaction.Commit();
                            return Response.AsRedirect("/");
                        }
                    }
                }
            };

            Get["/search"] = parameters =>
            {
                return View["Titles/Search", new { Count = 0, Results = new ArrayList(), SearchTerm = "" }];
            };

            Post["/search"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {

                        string search = Request.Form.search;

                        var titles =
                            s.QueryOver<Title>().Where(t => t.Name.IsInsensitiveLike(search, MatchMode.Anywhere)).OrderBy(t => t.Name).Asc.List<Title>();
                        IList results = new ArrayList();

                        foreach (var title in titles)
                        {
                            results.Add(new { title.Limited, title.Subscribed, title.Name, title.Id, Publisher = new {title.Publisher.Name, title.Publisher.Id} });
                        }

                        return View["Titles/Search", new { Results = results, SearchTerm = search }];

                    }
                }
            };

            Get["/single/{id}"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        int id = int.Parse(parameters.id);
                        var title = s.QueryOver<Title>().Where(t => t.Id == id).SingleOrDefault<Title>();
                        IList list = new ArrayList();

                        foreach (var issue in title.Issues.OrderBy(i => i.Num).Reverse())
                        {
                            list.Add(new { issue.Id, issue.Num, issue.Status, issue.Variant, issue.Code, Released = issue.Release.Date.NiceDate() });
                        }

                        var model = new
                                        {
                                            issues = list,
                                            Title = new
                                                        {
                                                            title.Limited,
                                                            title.Id,
                                                            title.Name,
                                                            Have = title.Have(),
                                                            Total = title.Total(),
                                                            title.Mature,
                                                            title.SearchTitle,
                                                            title.SearchYear,
                                                            title.OneShot,
                                                            title.GraphicNovel,
                                                            title.HardCover,
                                                            Latest = title.LatestIssue().Release.Date.NiceDate(),
                                                            title.Subscribed,
                                                            MatchTitle = title.MatchTitle.ToString(),
                                                            Publisher = new
                                                                            {
                                                                                title.Publisher.Name,
                                                                                title.Publisher.Id
                                                                            }
                                                        }
                                        };

                        return View["Titles/Single", model];

                    }
                }
            };

            Post["/single/{id}"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            int titleid = int.Parse(Request.Form.titleid);

                            if (Request.Form.issue.HasValue && Request.Form.Status.HasValue)
                            {
                                string statusStr = Request.Form.Status;
                                string issues = Request.Form.issue;

                                IssueStatus status;

                                if (!Enum.TryParse(statusStr, false, out status))
                                {
                                    throw new ArgumentException("Unknown issue status {0}", statusStr);
                                }

                                var issuelist = issues.Split(',');

                                foreach (var idstr in issuelist)
                                {
                                    var id = int.Parse(idstr);

                                    var issue = s.QueryOver<Issue>().Where(i => i.Id == id).SingleOrDefault<Issue>();

                                    if (issue.Status != status)
                                    {
                                        issue.Status = status;
                                        s.SaveOrUpdate(issue);
                                    }
                                }
                            }

                            if (Request.Form.MatchTitle.HasValue)
                            {
                                string matchTitleStr = Request.Form.MatchTitle;
                                bool subscribed = Request.Form.Subscribed.HasValue;

                                MatchTitle matchTitle;

                                if (!Enum.TryParse(matchTitleStr, false, out matchTitle))
                                {
                                    throw new ArgumentException("Unknown title match {0}", matchTitleStr);
                                }

                                var title = s.QueryOver<Title>().Where(i => i.Id == titleid).SingleOrDefault<Title>();

                                if (subscribed)
                                {
                                    foreach (var issue in title.Issues.Where(i => i.Status == IssueStatus.New).ToList())
                                    {
                                        issue.Status = IssueStatus.Skipped;
                                        s.SaveOrUpdate(issue);
                                    }
                                }

                                title.Subscribed = subscribed;
                                title.MatchTitle = matchTitle;

                                s.SaveOrUpdate(title);
                            }

                            if (Request.Form.SearchTitle.HasValue)
                            {
                                string searchTitle = Request.Form.SearchTitle;

                                var title = s.QueryOver<Title>().Where(i => i.Id == titleid).SingleOrDefault<Title>();
                                title.SearchTitle = searchTitle;
                                title.SearchYear = Request.Form.SearchYear.HasValue;

                                s.SaveOrUpdate(title);
                            }

                            if (Request.Form.Action.HasValue)
                            {
                                if (Request.Form.Action.Value == "force-search")
                                {
                                    var title = s.QueryOver<Title>().Where(i => i.Id == titleid).SingleOrDefault<Title>();
                                    title.LastSearch = DateTime.MinValue;
                                    s.SaveOrUpdate(title);
                                }
                            }

                            transaction.Commit();

                            return Response.AsRedirect(string.Format("/titles/single/{0}", titleid));
                        }
                    }
                }
            };
        }
Exemple #5
0
        public bool Insert(ISession session)
        {
            using (var db = session.SessionFactory("test"))
            {
                using (var s = db.OpenSession())
                {
                    using (var transaction = s.BeginTransaction())
                    {
                        var publisher = s.QueryOver<Publisher>().Where(p => p.Name == Publisher).SingleOrDefault<Publisher>();
                        if (publisher == null)
                        {
                            publisher = new Publisher {Name = Publisher};
                            s.SaveOrUpdate(publisher);
                        }

                        var release = s.QueryOver<Release>().Where(r => r.Date == Released).SingleOrDefault<Release>();
                        if (release == null)
                        {
                            release = new Release {Created = DateTime.Now, Date = Released};
                            s.SaveOrUpdate(release);
                        }

                        var title =
                            s.QueryOver<Title>().Where(
                                t => t.Name == Name && t.Publisher == publisher && t.Limited == Limited).SingleOrDefault();

                        if (title == null)
                        {
                            title = new Title
                                        {
                                            Name = Name,
                                            SearchTitle = Name,
                                            GraphicNovel = GraphicNovel,
                                            HardCover = HardCover,
                                            Hidden = false,
                                            Limited = Limited,
                                            Mature = Mature,
                                            OneShot = OneShot,
                                            Publisher = publisher
                                        };
                            s.SaveOrUpdate(title);
                        }

                        var issue = s.QueryOver<Issue>().Where(i => i.Code == Code).SingleOrDefault<Issue>();

                        if (issue == null)
                        {
                            var status = IssueStatus.New;

                            if (title.Subscribed)
                            {
                                status = IssueStatus.Wanted;
                            }

                            issue = new Issue
                                            {
                                                Code = Code,
                                                Num = Num,
                                                Title = title,
                                                Release = release,
                                                Status = status,
                                                Variant = Variant
                                            };

                            s.SaveOrUpdate(issue);
                        }

                        transaction.Commit();

                    }
                }
            }

            return true;
        }
Exemple #6
0
        public Main(ISession session)
        {
            string dbFile = ConfigurationManager.AppSettings["DBFile"];

            Get["/"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                        if (userSettings == null || !userSettings.IsConfigured())
                        {
                            return Response.AsRedirect("/settings/wizard");
                        }

                        var titles =
                            s.QueryOver<Title>().Where(t => t.Subscribed).OrderBy(t => t.Name).Asc.List<Title>();
                        IList list = new ArrayList();

                        foreach (var title in titles)
                        {
                            list.Add(new { Latest = title.LatestIssue().Release.Date.NiceDate(), title.Limited, title.Subscribed, title.Name, title.Id, Publisher = new {title.Publisher.Name, title.Publisher.Id }, Have = title.Have(), Total = title.Total()});
                        }

                        var model = new { titles = list };
                        return View["Index", model];

                    }
                }
            };

            Get["/add"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        var userSettings = s.QueryOver<UserSettings>().SingleOrDefault<UserSettings>();

                        if (userSettings == null || !userSettings.IsConfigured())
                        {
                            return Response.AsRedirect("/settings/wizard");
                        }

                        var titles =
                            s.QueryOver<Title>().Where(t => t.Subscribed == false).OrderBy(t => t.Name).Asc.List<Title>();
                        var list = new List<string>();

                        foreach (var title in titles)
                        {
                            list.Add(title.Name);
                        }

                        var serialiser = new JavaScriptSerializer();
                        var model = new { titles = serialiser.Serialize(list) };
                        return View["Add", model];

                    }
                }
            };

            Post["/add"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            string titleName = Request.Form.TitleName;
                            string matchTitleStr = Request.Form.MatchTitle;
                            string issueStatusStr = Request.Form.IssueStatus;

                            MatchTitle matchTitle;
                            IssueStatus issueStatus;

                            if (!Enum.TryParse(matchTitleStr, false, out matchTitle))
                            {
                                throw new ArgumentException("Unknown match title {0}", matchTitleStr);
                            }

                            if (!Enum.TryParse(issueStatusStr, false, out issueStatus))
                            {
                                throw new ArgumentException("Unknown match title {0}", matchTitleStr);
                            }

                            var title = s.QueryOver<Title>().Where(ti => ti.Name == titleName).SingleOrDefault<Title>();

                            if (title != null)
                            {
                                title.Subscribed = true;
                                title.MatchTitle = matchTitle;

                                foreach (var i in title.Issues)
                                {
                                    if (i.Status == IssueStatus.New)
                                    {
                                        i.Status = issueStatus;
                                        s.SaveOrUpdate(i);
                                    }
                                }

                                s.SaveOrUpdate(title);

                                transaction.Commit();
                            }

                            return Response.AsRedirect("/");
                        }
                    }
                }
            };
        }
Exemple #7
0
        public Releases(ISession session)
            : base("/releases")
        {
            string dbFile = ConfigurationManager.AppSettings["DBFile"];

            Get["/"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        var issues = s.QueryOver<Issue>().Where(i => i.Status == IssueStatus.Wanted).OrderBy(i => i.Release).Asc.List<Issue>();
                        IList list = new ArrayList();

                        foreach (var issue in issues)
                        {
                            list.Add(new {issue.Id, issue.Num, Released = issue.Release.Date.NiceDate(), Title = new {issue.Title.Id, issue.Title.Name}, Publisher = new {issue.Title.Publisher.Name, issue.Title.Publisher.Id}});
                        }

                        return View["Releases/Index", new {Pending = list}];
                    }
                }
            };

            Get["/history"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        var releases = s.QueryOver<Release>().OrderBy(r => r.Date).Desc.List<Release>();
                        IList list = new ArrayList();

                        foreach (var release in releases)
                        {
                            list.Add(new { release.Id, Grabbed = release.Created.NiceDate(), Released = release.Date.NiceDate(), Issues = release.Issues.Count });
                        }

                        return View["Releases/History", new { Releases = list }];
                    }
                }
            };

            Get["/upload"] = parameters =>
            {
                return View["Releases/Upload"];
            };

            Post["/upload"] = parameters =>
            {
                string weeks = Request.Form.Weeks.Value;
                string url = Request.Form.Url.Value;

                if (weeks.Length > 0)
                {
                    ScheduleUpdater.AddReleaseURL(int.Parse(weeks));
                }

                if (url.Length > 0)
                {
                    ScheduleUpdater.AddReleaseURL(new Uri(url));
                }

                return View["Releases/Upload"];
            };

            Get["/single/{id}"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        int id = int.Parse(parameters.id);
                        //var issues = s.QueryOver<Issue>().Where(i => i.Release.Id == id).OrderBy(i => i.Title.Name).Asc.List<Issue>();
                        var release = s.QueryOver<Release>().Where(i => i.Id == id).SingleOrDefault<Release>();
                        IList list = new ArrayList();

                        var issues =
                            release.Issues.OrderBy(i => i.Title.Name).ThenBy(i => i.Num).ThenBy(i => i.Variant.Length);

                        foreach (var issue in issues)
                        {
                            list.Add(new { issue.Id, issue.Num, issue.Status, issue.Variant, issue.Code, Title = new { issue.Title.Id, issue.Title.Name, Publisher = new { issue.Title.Publisher.Name, issue.Title.Publisher.Id } } });
                        }

                        var model = new { Issues = list, Release = release };

                        return View["Releases/Single", model];

                    }
                }
            };

            Post["/single/{id}"] = parameters =>
            {
                using (var db = session.SessionFactory(dbFile))
                {
                    using (var s = db.OpenSession())
                    {
                        using (var transaction = s.BeginTransaction())
                        {
                            string statusStr = Request.Form.Status;
                            string titleid = Request.Form.titleid;
                            IssueStatus status;

                            if (!Enum.TryParse(statusStr, false, out status))
                            {
                                throw new ArgumentException("Unknown issue status {0}", statusStr);
                            }

                            string issues = Request.Form.issue;

                            var issuelist = issues.Split(',');

                            foreach (var idstr in issuelist)
                            {
                                var id = int.Parse(idstr);

                                var issue = s.QueryOver<Issue>().Where(i => i.Id == id).SingleOrDefault<Issue>();

                                if (issue.Status != status)
                                {
                                    issue.Status = status;
                                    s.SaveOrUpdate(issue);
                                }
                            }

                            transaction.Commit();

                            return Response.AsRedirect(string.Format("/titles/single/{0}", titleid));
                        }
                    }
                }
            };
        }