From 6a6232b6553d8a3bc7a21bf943e7f12fdae3d229 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sun, 28 Feb 2016 03:40:59 +0100 Subject: [PATCH] Mark inventory after item drops, #130 Mark is untested yet --- ArchiSteamFarm/ArchiHandler.cs | 27 ++++++++++++++++++++++++++- ArchiSteamFarm/ArchiWebHandler.cs | 18 ++++++++++++++++++ ArchiSteamFarm/Bot.cs | 12 ++++++++++-- 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/ArchiSteamFarm/ArchiHandler.cs b/ArchiSteamFarm/ArchiHandler.cs index 5fc6c7833..04851b2db 100644 --- a/ArchiSteamFarm/ArchiHandler.cs +++ b/ArchiSteamFarm/ArchiHandler.cs @@ -41,9 +41,11 @@ namespace ArchiSteamFarm { internal sealed class NotificationsCallback : CallbackMsg { internal sealed class Notification { - internal enum ENotificationType { + internal enum ENotificationType : uint { Unknown = 0, Trading = 1, + // Only custom below, different than ones available as user_notification_type + Items = 514 } internal ENotificationType NotificationType { get; set; } @@ -65,6 +67,17 @@ namespace ArchiSteamFarm { }); } } + + internal NotificationsCallback(JobID jobID, CMsgClientItemAnnouncements msg) { + JobID = jobID; + + if (msg == null) { + return; + } + + Notifications = new List(); + Notifications.Add(new Notification { NotificationType = Notification.ENotificationType.Items }); + } } internal sealed class OfflineMessageCallback : CallbackMsg { @@ -233,6 +246,9 @@ namespace ArchiSteamFarm { case EMsg.ClientFSOfflineMessageNotification: HandleFSOfflineMessageNotification(packetMsg); break; + case EMsg.ClientItemAnnouncements: + HandleItemAnnouncements(packetMsg); + break; case EMsg.ClientPurchaseResponse: HandlePurchaseResponse(packetMsg); break; @@ -251,6 +267,15 @@ namespace ArchiSteamFarm { Client.PostCallback(new OfflineMessageCallback(packetMsg.TargetJobID, response.Body)); } + private void HandleItemAnnouncements(IPacketMsg packetMsg) { + if (packetMsg == null) { + return; + } + + var response = new ClientMsgProtobuf(packetMsg); + Client.PostCallback(new NotificationsCallback(packetMsg.TargetJobID, response.Body)); + } + private void HandlePurchaseResponse(IPacketMsg packetMsg) { if (packetMsg == null) { return; diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index 13632b48a..8ff2d7fa6 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -419,6 +419,24 @@ namespace ArchiSteamFarm { return htmlDocument; } + internal async Task MarkInventory() { + if (SteamID == 0) { + return false; + } + + HttpResponseMessage response = null; + for (byte i = 0; i < WebBrowser.MaxRetries && response == null; i++) { + response = await WebBrowser.UrlGet("https://steamcommunity.com/profiles/" + SteamID + "/inventory/", Cookie).ConfigureAwait(false); + } + + if (response == null) { + Logging.LogGenericWTF("Request failed even after " + WebBrowser.MaxRetries + " tries", Bot.BotName); + return false; + } + + return true; + } + private async Task UnlockParentalAccount(string parentalPin) { if (string.IsNullOrEmpty(parentalPin) || parentalPin.Equals("0")) { return; diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 68a93bca7..f6f44f2b7 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -1260,14 +1260,18 @@ namespace ArchiSteamFarm { } } - private void OnNotifications(ArchiHandler.NotificationsCallback callback) { - if (callback == null) { + private async void OnNotifications(ArchiHandler.NotificationsCallback callback) { + if (callback == null || callback.Notifications == null) { return; } bool checkTrades = false; + bool markInventory = false; foreach (var notification in callback.Notifications) { switch (notification.NotificationType) { + case ArchiHandler.NotificationsCallback.Notification.ENotificationType.Items: + markInventory = true; + break; case ArchiHandler.NotificationsCallback.Notification.ENotificationType.Trading: checkTrades = true; break; @@ -1277,6 +1281,10 @@ namespace ArchiSteamFarm { if (checkTrades) { Trading.CheckTrades(); } + + if (markInventory) { + await ArchiWebHandler.MarkInventory().ConfigureAwait(false); + } } private void OnOfflineMessage(ArchiHandler.OfflineMessageCallback callback) {