///<summary>Returns a library item from the given bib (the JSON from the libraries web call).</summary> private LibraryItem GetItemFromBib(Bib bib) { if (bib == null) { return(null); } Enum.TryParse(bib.briefInfo.format ?? "", true, out ItemFormat format); return(new LibraryItem { Id = bib.id, Edition = bib.briefInfo.edition, AverageRating = bib.briefInfo.rating?.averageRating ?? 0, TotalCount = bib.briefInfo.rating?.totalCount ?? 0, CallNumber = bib.briefInfo.callNumber, ContentType = bib.briefInfo.contentType, Description = bib.briefInfo.description, PublicationDate = bib.briefInfo.publicationDate, ListAuthors = bib.briefInfo.authors?.ToList(), SourceLibrary = LibraryItemParser.GetLibaryByCode(bib.sourceLibId.ToString()), Format = format, Subtitle = bib.briefInfo.subtitle, Title = bib.briefInfo.title, ListISBNs = bib.briefInfo.isbns?.ToList(), ImageResources = new ItemResources { SmallUrl = bib.briefInfo.jacket?.small ?? "", MediumUrl = bib.briefInfo.jacket?.medium ?? "", LargeUrl = bib.briefInfo.jacket?.large ?? "", } }); }
public void SpawnItem() { var chance = 0; chance = random.Next(0, 6); switch (chance) { case 0: Sword sword = new Sword(); sword.Initialization(); inventory.Add(sword); break; case 1: Stick stick = new Stick(); stick.Initialization(); inventory.Add(stick); break; case 2: Hat hat = new Hat(); hat.Initialization(); inventory.Add(hat); break; case 3: Bib bib = new Bib(); bib.Initialization(); inventory.Add(bib); break; case 4: Trousers trousers = new Trousers(); trousers.Initialization(); inventory.Add(trousers); break; case 5: Boots boots = new Boots(); boots.Initialization(); inventory.Add(boots); break; } }
///<summary>Returns all of the items currently checked out to the user.</summary> public async Task <CheckedOutResult> GetCheckedOut(long userId) { if (userId <= 0) { throw new ArgumentException(nameof(userId)); } HttpResponseMessage response = await _client.GetAsync($"{CHECKED_OUT_URL}?accountId={userId}&size=25&locale=en-US"); if (!response.IsSuccessStatusCode) { return(null); } Dictionary <T, V> CreateAnonymousDictionary <T, V>(T firstType, V anonymousType) { return(new Dictionary <T, V>()); } try { string json = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeAnonymousType(json, new { entities = new { bibs = new Dictionary <string, Bib>(), checkouts = CreateAnonymousDictionary("", new { actions = new string[0], checkoutId = "", metadataId = "", status = "", timesRenewed = 0, fines = (double)0, barcode = "", dueDate = "", callNumber = "", }), }, borrowing = new { checkouts = new { pagination = new { count = 0, page = 0, limit = 0, pages = 0, } }, summaries = new { checkedout = new { nextDue = new { date = "", }, total = 0, } }, }, }); List <CheckedOutItem> listItems = new List <CheckedOutItem>(); foreach (var checkout in result.entities.checkouts) { if (!result.entities.bibs.ContainsKey(checkout.Value.metadataId)) { continue; } Bib bib = result.entities.bibs[checkout.Value.metadataId]; Enum.TryParse(checkout.Value.status, out CheckoutStatus checkoutStatus); DateTime.TryParse(checkout.Value.dueDate, out DateTime dueDate); CheckedOutItem checkedOut = new CheckedOutItem { Fines = checkout.Value.fines, DueDate = dueDate, Id = checkout.Value.checkoutId, ListActions = checkout.Value.actions.Select(x => { Enum.TryParse(x, true, out ItemAction action); return(action); }).Where(x => x != ItemAction.Unknown).ToList(), Status = checkoutStatus, TimesRenewed = checkout.Value.timesRenewed, CallNumber = checkout.Value.callNumber, LibraryItem = GetItemFromBib(bib), }; listItems.Add(checkedOut); } DateTime.TryParse(result?.borrowing?.summaries?.checkedout?.nextDue?.date ?? "", out DateTime nextDue); return(new CheckedOutResult { NextDueDate = nextDue == DateTime.MinValue ? (DateTime?)null : nextDue, TotalCheckedOut = result?.borrowing?.summaries?.checkedout?.total ?? 0, ListCheckedOutItems = listItems, }); } catch (Exception e) { return(null); } }
///<summary>Returns all hold information for the given account.</summary> ///<param name="userId">The account ID.</param> ///<returns>The hold information. If null, something went wrong.</returns> public async Task <HoldsResult> GetHolds(long userId) { HttpResponseMessage response = await _client.GetAsync($"{HOLDS_URL}?accountId={userId}&size=25&locale=en-US"); string json = await response.Content.ReadAsStringAsync(); Dictionary <T, V> CreateAnonymousDictionary <T, V>(T firstType, V anonymousType) { return(new Dictionary <T, V>()); } try { #region DeserializeObject var result = JsonConvert.DeserializeAnonymousType(json, new { entities = new { bibs = new Dictionary <string, Bib>(), holds = CreateAnonymousDictionary("", new { actions = new string[0], metadataId = "", holdsId = "", bibTitle = "", autoCheckout = false, holdsPosition = 0, status = "", materialType = "", pickupLocation = new { code = "", name = "", ips = new string[0], }, expiryDate = (DateTime?)new DateTime(), suspendEndDate = (DateTime?)new DateTime(), holdPlacedDate = (DateTime?)new DateTime(), }), }, borrowing = new { holds = new { pagination = new { count = 0, page = 0, limit = 0, pages = 0, } }, summaries = new { inactiveHolds = new { totalOperative = 0, }, holds = new { totalOperative = 0, }, }, }, }); #endregion List <Hold> listHolds = new List <Hold>(); foreach (var holdData in result.entities.holds) { if (!result.entities.bibs.ContainsKey(holdData.Value.metadataId)) { continue; } Bib bib = result.entities.bibs[holdData.Value.metadataId]; Enum.TryParse(holdData.Value.status, true, out HoldStatus holdStatus); Hold hold = new Hold { HoldId = holdData.Value.holdsId, ExpiryDate = holdData.Value.expiryDate, HoldPosition = holdData.Value.holdsPosition, StatusStr = holdData.Value.status, Status = holdStatus, AvailableCopies = bib.availability.availableCopies ?? 0, TotalCopies = bib.availability.totalCopies ?? 0, ListActions = holdData.Value.actions.Select(x => { Enum.TryParse(x ?? "", true, out ItemAction ac); return(ac); }).Where(x => x != ItemAction.Unknown).ToList(), HoldPlacedDate = holdData.Value.holdPlacedDate, SuspendEndDate = holdData.Value.suspendEndDate, PickupLocation = LibraryItemParser.GetLibaryByCode(holdData.Value.pickupLocation?.code), Item = GetItemFromBib(bib), }; listHolds.Add(hold); } return(new HoldsResult { ListHolds = listHolds, ActiveHolds = listHolds.Count(x => x.Status == HoldStatus.In_Transit || x.Status == HoldStatus.Not_Yet_Available), PausedHolds = listHolds.Count(x => x.Status == HoldStatus.Suspended), ReadyForPickup = listHolds.Count(x => x.Status == HoldStatus.Ready_For_Pickup), }); } catch (Exception e) { return(null); } }