Mark inventory after item drops, #130

Mark is untested yet
This commit is contained in:
JustArchi
2016-02-28 03:40:59 +01:00
parent 75ff6b4f11
commit 6a6232b655
3 changed files with 54 additions and 3 deletions

View File

@@ -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<Notification>();
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<CMsgClientItemAnnouncements>(packetMsg);
Client.PostCallback(new NotificationsCallback(packetMsg.TargetJobID, response.Body));
}
private void HandlePurchaseResponse(IPacketMsg packetMsg) {
if (packetMsg == null) {
return;

View File

@@ -419,6 +419,24 @@ namespace ArchiSteamFarm {
return htmlDocument;
}
internal async Task<bool> 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;

View File

@@ -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) {