Beispiel #1
0
 ///<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 ?? "",
         }
     });
 }
Beispiel #2
0
    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;
        }
    }
Beispiel #3
0
        ///<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);
            }
        }
Beispiel #4
0
        ///<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);
            }
        }