public AdminModule( IMtgStore mtgStore, ILoggingService loggingService, ICardPriceStore priceStore, IHttpClient httpClient, IMtgDataReader mtgDataReader, IImporter importer) : base("/admin") { Get["/"] = parameters => { if (this.Context.CurrentUser == null) { return(this.Context.GetRedirect("/admin/login")); } else { return(View["admin.html"]); } }; Get["/login"] = parameters => { return(View["login.html"]); }; Get["/logout"] = parameters => { return(this.LogoutAndRedirect("/admin/login/")); }; Post["/login"] = args => { var userGuid = UserMapper.ValidateUser((string)this.Request.Form.Username, (string)this.Request.Form.Password); if (userGuid == null) { return(this.Context.GetRedirect("/admin/login")); } DateTime?expiry = null; if (this.Request.Form.RememberMe.HasValue) { expiry = DateTime.Now.AddDays(7); } return(this.LoginAndRedirect(userGuid.Value, expiry, "/admin")); }; #region Sets Get["/sets", true] = async(parameters, ct) => { this.RequiresAuthentication(); var sets = await mtgStore.GetSets(); return(View["listSets.html", new { Sets = sets.Select(s => new { Name = s.Name, Code = s.Code, Block = s.Block, Type = s.Type, ReleasedOn = s.ReleasedOn.ToShortDateString(), ReleasedOnSort = s.ReleasedOn, Symbol = s.SetAsKeyRuneIcon }).OrderByDescending(s => s.ReleasedOnSort) }]); }; Get["/set/{set}", true] = async(parameters, ct) => { this.RequiresAuthentication(); string setCode = parameters.set; var set = await mtgStore.GetSetByCode(setCode); var db_cards = await mtgStore.GetCardsBySet(set.Name); // Get price information var cards = db_cards.Select(c => new { Name = c.Name, Code = c.SetId, Set = c.SetName, Cost = c.Cost, CostSymbols = c.CostWithSymbols, Type = c.FullType, Rarity = c.Rarity, Img = c.Img, MultiverseId = c.MultiverseId, SearchName = c.SearchName, Symbol = c.SetAsKeyRuneIcon, Desc = c.Desc, DescSymbols = c.DescWithSymbols, ConvertedManaCost = c.Cmc, SetSymbol = c.SetAsKeyRuneIcon, Prices = GetCardPrice(priceStore, c.MultiverseId) }).OrderByDescending(c => c.SearchName); return(View["set.html", new { Set = set, Cards = cards }]); }; #endregion #region Add Set Get["/addset"] = parameters => { this.RequiresAuthentication(); return(View["addSet.html"]); }; Post["/addset", true] = async(parameters, ct) => { this.RequiresAuthentication(); var setData = this.Bind <SetAddData>(); if (string.IsNullOrEmpty(setData.url)) { return(Response.AsJson(new { Error = "No url provided.", Status = "Error" }).StatusCode = HttpStatusCode.BadRequest); } string data = await httpClient.GetAsJson(setData.url); if (string.IsNullOrEmpty(data)) { return(Response.AsJson(new { Error = "Url contains invalid data or no data.", Status = "Error" }).StatusCode = HttpStatusCode.BadRequest); } var set = mtgDataReader.ReadSet(data); if (set == null) { return(Response.AsJson(new { Error = "No set defined", Status = "Error" }).StatusCode = HttpStatusCode.BadRequest); } if (set.Type.ToLower() == "promo") { return(Response.AsJson(new { Error = "Set is promo, skipping", Status = "Error" }).StatusCode = HttpStatusCode.BadRequest); } var cards = mtgDataReader.ReadCards(data); var status = await importer.Import(set, cards); if (status != null) { return(Response.AsJson(new { Status = "Success", CardsInserted = status.ImportedCards.Select( c => new { Name = c.Name, MultiverseId = c.MultiverseId, Cost = c.Cost, Type = c.FullType, Img = c.Img, Set = c.SetId }).ToList(), CardsFailed = status.FailedCards.Select( c => new { Name = c.Name, MultiverseId = c.MultiverseId, Cost = c.Cost, Type = c.FullType, Img = c.Img, Set = c.SetId }).ToList() })); } else { return(Response.AsText("Import failed").StatusCode = HttpStatusCode.BadRequest); } }; #endregion }
static void Main(string[] args) { Bootstrapper.Register(); var p = new FluentCommandLineParser(); string inputName = null; // Parse command line arguments bool isMtgDbInfo = false; string mtgDbInfoSet = null; bool isMtgJson = false; string mtgJsonFilename = null; bool skipTokens = true; string mtgJsonDirectory = null; bool importByFile = true; try { mStopwatch = Stopwatch.StartNew(); mLoggingService = TinyIoCContainer.Current.Resolve <ILoggingService>(); mMtgStore = TinyIoCContainer.Current.Resolve <IMtgStore>(); mFileSystem = TinyIoCContainer.Current.Resolve <IFileSystem>(); mImporter = TinyIoCContainer.Current.Resolve <IImporter>(); p.Setup <string>("set") .Callback(value => mtgDbInfoSet = value) .Required(); p.Setup <bool>("mtgjson") .Callback(value => isMtgJson = value) .SetDefault(true); p.Setup <string>("file") .Callback(value => mtgJsonFilename = value); p.Setup <string>("dir") .Callback(value => mtgJsonDirectory = value); p.Setup <bool>("skiptokens") .Callback(value => skipTokens = value) .SetDefault(true); p.Setup <bool>("skippromos") .Callback(value => mSkipPromos = value) .SetDefault(true); p.Parse(args); // Make sure we have either --file or --dir if (string.IsNullOrEmpty(mtgJsonDirectory) && string.IsNullOrEmpty(mtgJsonFilename)) { throw new Exception("You must either use --file or --dir."); } if (!string.IsNullOrEmpty(mtgJsonDirectory)) { importByFile = false; } if (isMtgJson && importByFile) { inputName = mtgJsonFilename; } else if (isMtgJson && !importByFile) { inputName = mtgJsonDirectory; if (!Directory.Exists(inputName)) { throw new DirectoryNotFoundException(inputName); } } else { throw new Exception("Please provide either --mtgdbinfo or --mtgjson arguments."); } mDataReader = new MtgJsonReader( TinyIoCContainer.Current.Resolve <IMtgDataMapper <MtgJsonCard, MtgJsonSet> >("MtgJson"), mLoggingService); mDataReader.SkipTokens = skipTokens; // Setup worker mUpdaterBackgroundWorker = new BackgroundWorker(); mUpdaterBackgroundWorker.WorkerReportsProgress = true; mUpdaterBackgroundWorker.WorkerSupportsCancellation = true; mUpdaterBackgroundWorker.DoWork += new DoWorkEventHandler(bw_UpdaterDoWork); mUpdaterBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_Completed); mUpdaterBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); Console.WriteLine("Running worker thread..."); mUpdaterBackgroundWorker.RunWorkerAsync(new WorkArgs { ImportByFile = importByFile, InputName = inputName }); } catch (Exception er) { string msg = string.Format("Error: {0}", er.Message); mLoggingService.Fatal(er, msg); Console.WriteLine(msg); } while (mUpdaterBackgroundWorker.IsBusy) { Thread.Sleep(100); } }