mirror of
https://github.com/Facepunch/Facepunch.Steamworks.git
synced 2025-05-07 12:19:40 +03:00
Workshop publish fixes
This commit is contained in:
parent
e668b7ff04
commit
80946d60ca
@ -286,7 +286,8 @@ namespace Facepunch.Steamworks.Test
|
|||||||
var item = client.Workshop.CreateItem( Workshop.ItemType.Microtransaction );
|
var item = client.Workshop.CreateItem( Workshop.ItemType.Microtransaction );
|
||||||
|
|
||||||
item.Title = "Facepunch.Steamworks Unit test";
|
item.Title = "Facepunch.Steamworks Unit test";
|
||||||
|
item.Tags.Add( "Apple" );
|
||||||
|
item.Tags.Add( "Banana" );
|
||||||
item.Publish();
|
item.Publish();
|
||||||
|
|
||||||
while ( item.Publishing )
|
while ( item.Publishing )
|
||||||
@ -297,6 +298,7 @@ namespace Facepunch.Steamworks.Test
|
|||||||
|
|
||||||
Assert.IsFalse( item.Publishing );
|
Assert.IsFalse( item.Publishing );
|
||||||
Assert.AreNotEqual( 0, item.Id );
|
Assert.AreNotEqual( 0, item.Id );
|
||||||
|
Assert.IsNull( item.Error );
|
||||||
|
|
||||||
Console.WriteLine( "item.Id: {0}", item.Id );
|
Console.WriteLine( "item.Id: {0}", item.Id );
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Facepunch.Steamworks.Callbacks.Workshop;
|
using Facepunch.Steamworks.Callbacks.Workshop;
|
||||||
|
|
||||||
namespace Facepunch.Steamworks
|
namespace Facepunch.Steamworks
|
||||||
@ -13,18 +14,84 @@ namespace Facepunch.Steamworks
|
|||||||
internal SubmitItemUpdate SubmitItemUpdate;
|
internal SubmitItemUpdate SubmitItemUpdate;
|
||||||
|
|
||||||
public ulong Id { get; internal set; }
|
public ulong Id { get; internal set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; } = null;
|
||||||
public string Description { get; set; }
|
public string Description { get; set; } = null;
|
||||||
|
public string Folder { get; set; } = null;
|
||||||
|
public List<string> Tags { get; set; } = new List<string>();
|
||||||
public bool Publishing { get; internal set; }
|
public bool Publishing { get; internal set; }
|
||||||
public ItemType? Type { get; set; }
|
public ItemType? Type { get; set; }
|
||||||
|
public string Error { get; internal set; } = null;
|
||||||
public string ChangeNote { get; set; } = "";
|
public string ChangeNote { get; set; } = "";
|
||||||
|
|
||||||
|
public enum VisibilityType : int
|
||||||
|
{
|
||||||
|
Public = 0,
|
||||||
|
FriendsOnly = 1,
|
||||||
|
Private = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
public VisibilityType ? Visibility { get; set; }
|
||||||
|
|
||||||
public bool NeedToAgreeToWorkshopLegal { get; internal set; }
|
public bool NeedToAgreeToWorkshopLegal { get; internal set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public double Progress
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( !Publishing ) return 1.0;
|
||||||
|
if ( CreateItem != null ) return 0.0;
|
||||||
|
if ( SubmitItemUpdate == null ) return 1.0;
|
||||||
|
|
||||||
|
ulong b = 0;
|
||||||
|
ulong t = 0;
|
||||||
|
|
||||||
|
workshop.steamworks.native.ugc.GetItemUpdateProgress( SubmitItemUpdate.Handle, ref b, ref t );
|
||||||
|
|
||||||
|
if ( t == 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return (double)b / (double) t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int BytesUploaded
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( !Publishing ) return 0;
|
||||||
|
if ( CreateItem != null ) return 0;
|
||||||
|
if ( SubmitItemUpdate == null ) return 0;
|
||||||
|
|
||||||
|
ulong b = 0;
|
||||||
|
ulong t = 0;
|
||||||
|
|
||||||
|
workshop.steamworks.native.ugc.GetItemUpdateProgress( SubmitItemUpdate.Handle, ref b, ref t );
|
||||||
|
return (int) b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int BytesTotal
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( !Publishing ) return 0;
|
||||||
|
if ( CreateItem != null ) return 0;
|
||||||
|
if ( SubmitItemUpdate == null ) return 0;
|
||||||
|
|
||||||
|
ulong b = 0;
|
||||||
|
ulong t = 0;
|
||||||
|
|
||||||
|
workshop.steamworks.native.ugc.GetItemUpdateProgress( SubmitItemUpdate.Handle, ref b, ref t );
|
||||||
|
return (int)t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Publish()
|
public void Publish()
|
||||||
{
|
{
|
||||||
Publishing = true;
|
Publishing = true;
|
||||||
|
Error = null;
|
||||||
|
|
||||||
if ( Id == 0 )
|
if ( Id == 0 )
|
||||||
{
|
{
|
||||||
@ -58,14 +125,12 @@ namespace Facepunch.Steamworks
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine( "File publish error: " + obj );
|
Error = "Error creating new file: " + obj.Result.ToString();
|
||||||
Publishing = false;
|
Publishing = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PublishChanges()
|
private void PublishChanges()
|
||||||
{
|
{
|
||||||
Publishing = false;
|
|
||||||
|
|
||||||
ulong UpdateId = workshop.ugc.StartItemUpdate( workshop.steamworks.AppId, Id );
|
ulong UpdateId = workshop.ugc.StartItemUpdate( workshop.steamworks.AppId, Id );
|
||||||
|
|
||||||
if ( Title != null )
|
if ( Title != null )
|
||||||
@ -74,12 +139,18 @@ namespace Facepunch.Steamworks
|
|||||||
if ( Description != null )
|
if ( Description != null )
|
||||||
workshop.ugc.SetItemDescription( UpdateId, Description );
|
workshop.ugc.SetItemDescription( UpdateId, Description );
|
||||||
|
|
||||||
|
if ( Folder != null )
|
||||||
|
workshop.ugc.SetItemContent( UpdateId, Folder );
|
||||||
|
|
||||||
|
if ( Tags != null && Tags.Count > 0 )
|
||||||
|
workshop.ugc.SetItemTags( UpdateId, Tags.ToArray() );
|
||||||
|
|
||||||
|
if ( Visibility.HasValue )
|
||||||
|
workshop.ugc.SetItemVisibility( UpdateId, (uint)Visibility.Value );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
workshop.ugc.SetItemUpdateLanguage( UpdateId, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
|
workshop.ugc.SetItemUpdateLanguage( UpdateId, const char *pchLanguage ) = 0; // specify the language of the title or description that will be set
|
||||||
workshop.ugc.SetItemMetadata( UpdateId, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
|
workshop.ugc.SetItemMetadata( UpdateId, const char *pchMetaData ) = 0; // change the metadata of an UGC item (max = k_cchDeveloperMetadataMax)
|
||||||
workshop.ugc.SetItemVisibility( UpdateId, ERemoteStoragePublishedFileVisibility eVisibility ) = 0; // change the visibility of an UGC item
|
|
||||||
workshop.ugc.SetItemTags( UpdateId, const SteamParamStringArray_t *pTags ) = 0; // change the tags of an UGC item
|
|
||||||
workshop.ugc.SetItemContent( UpdateId, const char *pszContentFolder ) = 0; // update item content from this local folder
|
|
||||||
workshop.ugc.SetItemPreview( UpdateId, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
|
workshop.ugc.SetItemPreview( UpdateId, const char *pszPreviewFile ) = 0; // change preview image file for this item. pszPreviewFile points to local image file, which must be under 1MB in size
|
||||||
workshop.ugc.RemoveItemKeyValueTags( UpdateId, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
|
workshop.ugc.RemoveItemKeyValueTags( UpdateId, const char *pchKey ) = 0; // remove any existing key-value tags with the specified key
|
||||||
workshop.ugc.AddItemKeyValueTag( UpdateId, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
|
workshop.ugc.AddItemKeyValueTag( UpdateId, const char *pchKey, const char *pchValue ) = 0; // add new key-value tags for the item. Note that there can be multiple values for a tag.
|
||||||
@ -88,7 +159,6 @@ namespace Facepunch.Steamworks
|
|||||||
workshop.ugc.UpdateItemPreviewFile( UpdateId, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
|
workshop.ugc.UpdateItemPreviewFile( UpdateId, uint32 index, const char *pszPreviewFile ) = 0; // updates an existing preview file for this item. pszPreviewFile points to local file, which must be under 1MB in size
|
||||||
workshop.ugc.UpdateItemPreviewVideo( UpdateId, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
|
workshop.ugc.UpdateItemPreviewVideo( UpdateId, uint32 index, const char *pszVideoID ) = 0; // updates an existing preview video for this item
|
||||||
workshop.ugc.RemoveItemPreview( UpdateId, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
|
workshop.ugc.RemoveItemPreview( UpdateId, uint32 index ) = 0; // remove a preview by index starting at 0 (previews are sorted)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SubmitItemUpdate = new SubmitItemUpdate();
|
SubmitItemUpdate = new SubmitItemUpdate();
|
||||||
@ -100,14 +170,15 @@ namespace Facepunch.Steamworks
|
|||||||
private void OnChangesSubmitted( SubmitItemUpdate.Data obj )
|
private void OnChangesSubmitted( SubmitItemUpdate.Data obj )
|
||||||
{
|
{
|
||||||
SubmitItemUpdate = null;
|
SubmitItemUpdate = null;
|
||||||
|
|
||||||
NeedToAgreeToWorkshopLegal = obj.NeedsLegalAgreement;
|
NeedToAgreeToWorkshopLegal = obj.NeedsLegalAgreement;
|
||||||
|
Publishing = false;
|
||||||
|
|
||||||
if ( obj.Result == Callbacks.Result.OK )
|
if ( obj.Result == Callbacks.Result.OK )
|
||||||
{
|
{
|
||||||
Publishing = false;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error = "Error publishing changes: " + obj.Result.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Delete()
|
public void Delete()
|
||||||
|
@ -2208,7 +2208,7 @@ namespace Valve.Steamworks
|
|||||||
internal abstract bool SetItemUpdateLanguage( ulong handle, string pchLanguage );
|
internal abstract bool SetItemUpdateLanguage( ulong handle, string pchLanguage );
|
||||||
internal abstract bool SetItemMetadata( ulong handle, string pchMetaData );
|
internal abstract bool SetItemMetadata( ulong handle, string pchMetaData );
|
||||||
internal abstract bool SetItemVisibility( ulong handle, uint eVisibility );
|
internal abstract bool SetItemVisibility( ulong handle, uint eVisibility );
|
||||||
internal abstract bool SetItemTags( ulong updateHandle, ref SteamParamStringArray_t pTags );
|
internal abstract bool SetItemTags( ulong updateHandle, string[] pTags );
|
||||||
internal abstract bool SetItemContent( ulong handle, string pszContentFolder );
|
internal abstract bool SetItemContent( ulong handle, string pszContentFolder );
|
||||||
internal abstract bool SetItemPreview( ulong handle, string pszPreviewFile );
|
internal abstract bool SetItemPreview( ulong handle, string pszPreviewFile );
|
||||||
internal abstract bool RemoveItemKeyValueTags( ulong handle, string pchKey );
|
internal abstract bool RemoveItemKeyValueTags( ulong handle, string pchKey );
|
||||||
@ -5856,10 +5856,33 @@ namespace Valve.Steamworks
|
|||||||
bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemVisibility(m_pSteamUGC,handle,eVisibility);
|
bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemVisibility(m_pSteamUGC,handle,eVisibility);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
internal override bool SetItemTags( ulong updateHandle, ref SteamParamStringArray_t pTags )
|
internal override bool SetItemTags( ulong updateHandle, string[] pTags )
|
||||||
{
|
{
|
||||||
CheckIfUsable();
|
CheckIfUsable();
|
||||||
bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemTags(m_pSteamUGC,updateHandle,ref pTags);
|
|
||||||
|
var nativeStrings = new IntPtr[pTags.Length];
|
||||||
|
for ( int i = 0; i < pTags.Length; i++ )
|
||||||
|
{
|
||||||
|
nativeStrings[i] = Marshal.StringToHGlobalAnsi( pTags[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
var size = Marshal.SizeOf( typeof( IntPtr ) ) * nativeStrings.Length;
|
||||||
|
var nativeArray = Marshal.AllocHGlobal( size );
|
||||||
|
Marshal.Copy( nativeStrings, 0, nativeArray, nativeStrings.Length );
|
||||||
|
|
||||||
|
var tags = new SteamParamStringArray_t();
|
||||||
|
tags.m_ppStrings = nativeArray;
|
||||||
|
tags.m_nNumStrings = pTags.Length;
|
||||||
|
|
||||||
|
bool result = NativeEntrypoints.SteamAPI_ISteamUGC_SetItemTags(m_pSteamUGC,updateHandle,ref tags);
|
||||||
|
|
||||||
|
Marshal.FreeHGlobal( nativeArray );
|
||||||
|
|
||||||
|
foreach ( var item in nativeStrings )
|
||||||
|
{
|
||||||
|
Marshal.FreeHGlobal( item );
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
internal override bool SetItemContent( ulong handle, string pszContentFolder )
|
internal override bool SetItemContent( ulong handle, string pszContentFolder )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user