diff --git a/PalworldModUploader/MainWindow.xaml b/PalworldModUploader/MainWindow.xaml
index 85320d1..1e36232 100644
--- a/PalworldModUploader/MainWindow.xaml
+++ b/PalworldModUploader/MainWindow.xaml
@@ -170,9 +170,9 @@
-
+
diff --git a/PalworldModUploader/MainWindow.xaml.cs b/PalworldModUploader/MainWindow.xaml.cs
index 8d15be7..3ec7177 100644
--- a/PalworldModUploader/MainWindow.xaml.cs
+++ b/PalworldModUploader/MainWindow.xaml.cs
@@ -48,7 +48,7 @@ public partial class MainWindow : Window
private const string WorkshopAgreementUrl = "https://steamcommunity.com/sharedfiles/workshoplegalagreement";
private readonly ObservableCollection _modEntries = new();
- private ulong[] _subscribedItemIds = Array.Empty();
+ private Dictionary _subscribedItemIds = new();
private readonly JsonSerializerOptions _jsonOptions = new()
{
AllowTrailingCommas = true,
@@ -116,7 +116,7 @@ private async void OnLoaded(object? sender, RoutedEventArgs e)
WorkshopDirTextBox.Text = _workshopContentDirectory;
LoadModsFromDirectory(_workshopContentDirectory);
- if (!foundSubscribed && _subscribedItemIds.Length == 0)
+ if (!foundSubscribed && _subscribedItemIds.Count == 0)
{
StatusTextBlock.Text = "No workshop subscriptions were detected via Steam. Using the configured directory.";
}
@@ -156,9 +156,9 @@ private async Task DiscoverWorkshopContentDirectoryAsync()
private async Task RefreshSubscribedItemsAsync()
{
- _subscribedItemIds = Array.Empty();
+ _subscribedItemIds = new Dictionary();
- var subscribedItemIds = new List();
+ var subscribedItemIds = new Dictionary();
uint pageNumber = 1;
uint processedResults = 0;
@@ -207,9 +207,9 @@ private async Task RefreshSubscribedItemsAsync()
}
}
- _subscribedItemIds = subscribedItemIds.ToArray();
+ _subscribedItemIds = subscribedItemIds;
- return receivedAnyResult && _subscribedItemIds.Length > 0;
+ return receivedAnyResult && _subscribedItemIds.Count > 0;
}
private async Task<(SteamUGCQueryCompleted_t Data, bool IoFailure)?> SendSubscribedItemsQueryAsync(uint pageNumber)
@@ -255,7 +255,7 @@ private async Task RefreshSubscribedItemsAsync()
}
}
- private void ProcessSubscriptionResults(SteamUGCQueryCompleted_t data, ICollection subscribedItemIds)
+ private void ProcessSubscriptionResults(SteamUGCQueryCompleted_t data, IDictionary subscribedItemIds)
{
for (uint i = 0; i < data.m_unNumResultsReturned; i++)
{
@@ -265,7 +265,8 @@ private void ProcessSubscriptionResults(SteamUGCQueryCompleted_t data, ICollecti
}
var publishedFileId = details.m_nPublishedFileId;
- subscribedItemIds.Add(publishedFileId.m_PublishedFileId);
+ var isOwnedByUser = details.m_ulSteamIDOwner == SteamUser.GetSteamID().m_SteamID;
+ subscribedItemIds[publishedFileId.m_PublishedFileId] = isOwnedByUser;
}
}
@@ -364,14 +365,16 @@ private void LoadModsFromDirectory(string baseDirectory)
var dirInfo = new DirectoryInfo(directory);
var entry = new ModDirectoryEntry(dirInfo.Name, dirInfo.FullName);
- if (ulong.TryParse(dirInfo.Name, out var directoryId) && _subscribedItemIds.Contains(directoryId))
+ if (ulong.TryParse(dirInfo.Name, out var directoryId) && _subscribedItemIds.TryGetValue(directoryId, out var isOwnedByUser))
{
entry.IsSubscribed = true;
entry.SubscribedPublishedFileId = directoryId;
+ entry.IsOwnedByUser = isOwnedByUser;
}
else
{
entry.Metadata = LoadMetadata(dirInfo.FullName);
+ entry.IsOwnedByUser = false;
}
var infoPath = Path.Combine(dirInfo.FullName, "Info.json");
@@ -532,7 +535,7 @@ private void UpdateModDetails()
PalSchemaTypeCheckBox.IsEnabled = canEditInstallRules;
InstallRuleManualWarning.Visibility = (canEdit && !isInstallRuleStandard) ? Visibility.Visible : Visibility.Collapsed;
- UploadButton.IsEnabled = !_selectedEntry.IsSubscribed;
+ //UploadButton.IsEnabled = _selectedEntry.IsOwnedByUser;
OpenModDirectoryButton.IsEnabled = true;
OpenInSteamButton.IsEnabled = true;
SaveModInfoButton.IsEnabled = false;
@@ -642,7 +645,7 @@ private async void ReloadButton_Click(object sender, RoutedEventArgs e)
PersistWorkshopDirectory(_workshopContentDirectory);
LoadModsFromDirectory(_workshopContentDirectory);
- if (!foundSubscribed && _subscribedItemIds.Length == 0)
+ if (!foundSubscribed && _subscribedItemIds.Count == 0)
{
StatusTextBlock.Text = "No workshop subscriptions were detected via Steam. Loaded the configured directory.";
}
diff --git a/PalworldModUploader/ViewModels/ModDirectoryEntry.cs b/PalworldModUploader/ViewModels/ModDirectoryEntry.cs
index 8b22e1d..1dec878 100644
--- a/PalworldModUploader/ViewModels/ModDirectoryEntry.cs
+++ b/PalworldModUploader/ViewModels/ModDirectoryEntry.cs
@@ -12,6 +12,7 @@ public sealed class ModDirectoryEntry : INotifyPropertyChanged
private ModInfo? _info;
private WorkshopMetadata? _metadata;
private bool _isSubscribed;
+ private bool _isOwnedByUser;
private string? _infoLoadError;
private ulong? _subscribedPublishedFileId;
@@ -93,6 +94,21 @@ public bool IsSubscribed
}
}
+ public bool IsOwnedByUser
+ {
+ get => _isOwnedByUser;
+ set
+ {
+ if (_isOwnedByUser == value)
+ {
+ return;
+ }
+
+ _isOwnedByUser = value;
+ OnPropertyChanged(nameof(IsOwnedByUser));
+ }
+ }
+
public string? InfoLoadError
{
get => _infoLoadError;