From d06f662e6c7489f3a566b954dadb764ff3b329bf Mon Sep 17 00:00:00 2001 From: Garry Newman Date: Wed, 18 Jan 2017 15:15:41 +0000 Subject: [PATCH] Cleaning Workshop.Item --- Facepunch.Steamworks.Test/Client/Workshop.cs | 4 +- .../Interfaces/Workshop.Item.cs | 93 ++++++++----------- 2 files changed, 42 insertions(+), 55 deletions(-) diff --git a/Facepunch.Steamworks.Test/Client/Workshop.cs b/Facepunch.Steamworks.Test/Client/Workshop.cs index 9ff7769..0849d6d 100644 --- a/Facepunch.Steamworks.Test/Client/Workshop.cs +++ b/Facepunch.Steamworks.Test/Client/Workshop.cs @@ -394,13 +394,13 @@ public void DownloadFile() { Assert.IsTrue( client.IsValid ); - var item = client.Workshop.GetItem( 787387588 ); + var item = client.Workshop.GetItem( 844466101 ); if ( !item.Installed ) { item.Download(); - while ( item.Downloading ) + while ( !item.Installed ) { Thread.Sleep( 500 ); client.Update(); diff --git a/Facepunch.Steamworks/Interfaces/Workshop.Item.cs b/Facepunch.Steamworks/Interfaces/Workshop.Item.cs index 660eeb6..66a0ac7 100644 --- a/Facepunch.Steamworks/Interfaces/Workshop.Item.cs +++ b/Facepunch.Steamworks/Interfaces/Workshop.Item.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Runtime.InteropServices; using System.Text; +using SteamNative; namespace Facepunch.Steamworks { @@ -43,15 +44,12 @@ internal static Item From( SteamNative.SteamUGCDetails_t details, Workshop works item.VotesDown = details.VotesDown; item.Modified = new DateTime( details.TimeUpdated ); item.Created = new DateTime( details.TimeCreated ); - item.UpdateState(); return item; } public void Download( bool highPriority = true ) { - UpdateState(); - if ( Installed ) return; if ( Downloading ) return; @@ -63,8 +61,6 @@ public void Download( bool highPriority = true ) workshop.OnFileDownloaded += OnFileDownloaded; workshop.OnItemInstalled += OnItemInstalled; - UpdateState(); - Downloading = true; } private void OnFileDownloaded( ulong fileid, Callbacks.Result result ) @@ -72,10 +68,6 @@ private void OnFileDownloaded( ulong fileid, Callbacks.Result result ) if ( fileid != Id ) return; workshop.OnFileDownloaded -= OnFileDownloaded; - UpdateState(); - - if ( result == Callbacks.Result.OK ) - Downloading = false; } private void OnItemInstalled( ulong fileid ) @@ -83,10 +75,6 @@ private void OnItemInstalled( ulong fileid ) if ( fileid != Id ) return; workshop.OnItemInstalled -= OnItemInstalled; - UpdateState(); - - Downloading = false; - Installed = true; } public ulong BytesDownloaded { get { UpdateDownloadProgress(); return _BytesDownloaded; } } @@ -102,13 +90,46 @@ public double DownloadProgress } } - public bool Installed { get; private set; } - public bool Downloading { get; private set; } - public bool DownloadPending { get; private set; } - public bool Subscribed { get; private set; } - public bool NeedsUpdate { get; private set; } + public bool Installed { get { return ( State & ItemState.Installed ) != 0; } } + public bool Downloading { get { return ( State & ItemState.Downloading ) != 0; } } + public bool DownloadPending { get { return ( State & ItemState.DownloadPending ) != 0; } } + public bool Subscribed { get { return ( State & ItemState.Subscribed ) != 0; } } + public bool NeedsUpdate { get { return ( State & ItemState.NeedsUpdate ) != 0; } } - public DirectoryInfo Directory { get; private set; } + private SteamNative.ItemState State { get { return ( SteamNative.ItemState) workshop.ugc.GetItemState( Id ); } } + + + private DirectoryInfo _directory; + + public DirectoryInfo Directory + { + get + { + if ( _directory != null ) + return _directory; + + if ( !Installed ) + return null; + + ulong sizeOnDisk; + string folder; + uint timestamp; + + if ( workshop.ugc.GetItemInstallInfo( Id, out sizeOnDisk, out folder, out timestamp ) ) + { + _directory = new DirectoryInfo( folder ); + Size = sizeOnDisk; + + if ( !_directory.Exists ) + { + // Size = 0; + // _directory = null; + } + } + + return _directory; + } + } public ulong Size { get; private set; } @@ -119,40 +140,6 @@ internal void UpdateDownloadProgress() workshop.ugc.GetItemDownloadInfo( Id, out _BytesDownloaded, out _BytesTotal ); } - internal void UpdateState() - { - var state = workshop.ugc.GetItemState( Id ); - - Installed = ( state & (uint)SteamNative.ItemState.Installed ) != 0; - Downloading = ( state & (uint)SteamNative.ItemState.Downloading ) != 0; - DownloadPending = ( state & (uint)SteamNative.ItemState.DownloadPending ) != 0; - Subscribed = ( state & (uint)SteamNative.ItemState.Subscribed ) != 0; - NeedsUpdate = ( state & (uint)SteamNative.ItemState.NeedsUpdate ) != 0; - - if ( Installed && Directory == null ) - { - Size = 0; - Directory = null; - - ulong sizeOnDisk; - string folder; - uint timestamp; - if ( workshop.ugc.GetItemInstallInfo( Id, out sizeOnDisk, out folder, out timestamp ) ) - { - Directory = new DirectoryInfo( folder ); - Size = sizeOnDisk; - - if ( !Directory.Exists ) - { - Size = 0; - Directory = null; - Installed = false; - } - } - } - } - - private int YourVote = 0;