First wave of family sharing bugfixes

This commit is contained in:
JustArchi
2016-09-30 02:41:27 +02:00
parent d0e8cc869b
commit 629c40b807
3 changed files with 51 additions and 46 deletions

View File

@@ -179,7 +179,7 @@ namespace ArchiSteamFarm {
}
internal sealed class SharedLibraryLockStatusCallback : CallbackMsg {
internal readonly bool LibraryLocked;
internal readonly ulong LibraryLockedBySteamID;
internal SharedLibraryLockStatusCallback(JobID jobID, CMsgClientSharedLibraryLockStatus msg) {
if ((jobID == null) || (msg == null)) {
@@ -187,7 +187,12 @@ namespace ArchiSteamFarm {
}
JobID = jobID;
LibraryLocked = msg.own_library_locked_by != 0;
if (msg.own_library_locked_by == 0) {
return;
}
LibraryLockedBySteamID = new SteamID(msg.own_library_locked_by, EUniverse.Public, EAccountType.Individual);
}
}

View File

@@ -587,12 +587,13 @@ namespace ArchiSteamFarm {
}
private void CheckOccupationStatus() {
if (IsFarmingPossible) {
Logging.LogGenericInfo("Account is no longer occupied, farming process resumed!", BotName);
CardsFarmer.StartFarming().Forget();
} else {
if (!IsFarmingPossible) {
Logging.LogGenericInfo("Account is currently being used, ASF will resume farming when it's free...", BotName);
return;
}
Logging.LogGenericInfo("Account is no longer occupied, farming process resumed!", BotName);
CardsFarmer.Resume();
}
private async Task InitializeFamilySharing() {
@@ -693,20 +694,20 @@ namespace ArchiSteamFarm {
}
if (pause) {
if (CardsFarmer.ManualMode) {
return "Automatic farming is stopped already!";
if (CardsFarmer.Paused) {
return "Automatic farming is paused already!";
}
await CardsFarmer.SwitchToManualMode(true).ConfigureAwait(false);
return "Automatic farming is now stopped!";
await CardsFarmer.Pause().ConfigureAwait(false);
return "Automatic farming is now paused!";
}
if (!CardsFarmer.ManualMode) {
return "Automatic farming is enabled already!";
if (!CardsFarmer.Paused) {
return "Automatic farming is resumed already!";
}
await CardsFarmer.SwitchToManualMode(false).ConfigureAwait(false);
return "Automatic farming is now enabled!";
CardsFarmer.Resume();
return "Automatic farming is now resumed!";
}
private static async Task<string> ResponsePause(ulong steamID, string botName, bool pause) {
@@ -749,8 +750,8 @@ namespace ArchiSteamFarm {
return "Bot " + BotName + " is currently being used.";
}
if (CardsFarmer.ManualMode) {
return "Bot " + BotName + " is running in manual mode.";
if (CardsFarmer.Paused) {
return "Bot " + BotName + " is paused or running in manual mode.";
}
if (CardsFarmer.CurrentGamesFarming.Count == 0) {
@@ -1374,20 +1375,11 @@ namespace ArchiSteamFarm {
return "This bot instance is not connected!";
}
if (gameIDs.Contains(0)) {
if (!CardsFarmer.ManualMode) {
return "Done!";
}
await CardsFarmer.SwitchToManualMode(false).ConfigureAwait(false);
} else {
if (!CardsFarmer.ManualMode) {
await CardsFarmer.SwitchToManualMode(true).ConfigureAwait(false);
}
ArchiHandler.PlayGames(gameIDs);
if (!CardsFarmer.Paused) {
await CardsFarmer.Pause().ConfigureAwait(false);
}
ArchiHandler.PlayGames(gameIDs);
return "Done!";
}
@@ -2164,11 +2156,21 @@ namespace ArchiSteamFarm {
return;
}
if (callback.LibraryLocked == LibraryLocked) {
return; // No status update, we're not interested
// Ignore no status updates
if (!LibraryLocked) {
if (callback.LibraryLockedBySteamID == 0 || callback.LibraryLockedBySteamID == SteamClient.SteamID) {
return;
}
LibraryLocked = true;
} else {
if (callback.LibraryLockedBySteamID != 0 && callback.LibraryLockedBySteamID != SteamClient.SteamID) {
return;
}
LibraryLocked = false;
}
LibraryLocked = callback.LibraryLocked;
CheckOccupationStatus();
}
}

View File

@@ -92,7 +92,7 @@ namespace ArchiSteamFarm {
private readonly Timer IdleFarmingTimer;
[JsonProperty]
internal bool ManualMode { get; private set; }
internal bool Paused { get; private set; }
private bool KeepFarming, NowFarming;
@@ -124,31 +124,29 @@ namespace ArchiSteamFarm {
IdleFarmingTimer?.Dispose();
}
internal async Task SwitchToManualMode(bool manualMode) {
if (ManualMode == manualMode) {
return;
}
ManualMode = manualMode;
if (ManualMode) {
Logging.LogGenericInfo("Now running in Manual Farming mode", Bot.BotName);
internal async Task Pause() {
Paused = true;
if (NowFarming) {
await StopFarming().ConfigureAwait(false);
} else {
Logging.LogGenericInfo("Now running in Automatic Farming mode", Bot.BotName);
}
}
internal void Resume() {
Paused = false;
if (!NowFarming) {
StartFarming().Forget();
}
}
internal async Task StartFarming() {
if (NowFarming || ManualMode || !Bot.IsFarmingPossible) {
if (NowFarming || Paused || !Bot.IsFarmingPossible) {
return;
}
await FarmingSemaphore.WaitAsync().ConfigureAwait(false);
try {
if (NowFarming || ManualMode || !Bot.IsFarmingPossible) {
if (NowFarming || Paused || !Bot.IsFarmingPossible) {
return;
}
@@ -506,7 +504,7 @@ namespace ArchiSteamFarm {
}
private void CheckGamesForFarming() {
if (NowFarming || ManualMode || !Bot.IsConnectedAndLoggedOn) {
if (NowFarming || Paused || !Bot.IsConnectedAndLoggedOn) {
return;
}