Skip to content

Commit e9112fc

Browse files
committed
Fix inability to load old queues with incompatible ChannelLayout
1 parent ed6cfbd commit e9112fc

2 files changed

Lines changed: 61 additions & 1 deletion

File tree

VidCoder/Model/Database.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.IO;
88
using System.Linq;
99
using System.Text;
10+
using System.Text.Json.Nodes;
1011
using System.Text.RegularExpressions;
1112
using System.Threading;
1213
using System.Windows;
@@ -86,6 +87,11 @@ public static void Initialize()
8687
UpgradeDatabaseTo50();
8788
}
8889

90+
if (databaseVersion < 51)
91+
{
92+
UpgradeDatabaseTo51();
93+
}
94+
8995
// Update encoding profiles if we need to. Everything is at least 28 now from the JSON upgrade.
9096
int oldDatabaseVersion = Math.Max(databaseVersion, 28);
9197
if (oldDatabaseVersion < Utilities.LastUpdatedEncodingProfileDatabaseVersion)
@@ -366,6 +372,60 @@ private static void UpgradeDatabaseTo50()
366372
}
367373
}
368374

375+
private static void UpgradeDatabaseTo51()
376+
{
377+
// Update ChannelLayout on video sources
378+
string oldEncodeJobs = DatabaseConfig.Get<string>("EncodeJobs2", "[]", Connection);
379+
380+
string upgradedEncodeJobs;
381+
try
382+
{
383+
JsonNode? root = JsonNode.Parse(oldEncodeJobs);
384+
if (root is JsonArray jobsArray)
385+
{
386+
foreach (JsonNode? jobNode in jobsArray)
387+
{
388+
if (jobNode is JsonObject jobObj)
389+
{
390+
if (jobObj["VideoSource"] is JsonObject videoSource)
391+
{
392+
if (videoSource["Titles"] is JsonArray titles)
393+
{
394+
foreach (JsonNode? titleNode in titles)
395+
{
396+
if (titleNode is JsonObject titleObj && titleObj["AudioList"] is JsonArray audioList)
397+
{
398+
foreach (JsonNode? audioNode in audioList)
399+
{
400+
if (audioNode is JsonObject audioObj)
401+
{
402+
JsonNode? layoutNameNode = audioObj["ChannelLayoutName"];
403+
if (layoutNameNode != null)
404+
{
405+
audioObj["ChannelLayout"] = JsonNode.Parse(layoutNameNode.ToJsonString());
406+
audioObj.Remove("ChannelLayoutName");
407+
}
408+
}
409+
}
410+
}
411+
}
412+
}
413+
}
414+
}
415+
}
416+
}
417+
418+
upgradedEncodeJobs = root?.ToJsonString() ?? oldEncodeJobs;
419+
}
420+
catch
421+
{
422+
// If parsing fails, leave as-is.
423+
upgradedEncodeJobs = oldEncodeJobs;
424+
}
425+
426+
DatabaseConfig.Set<string>("EncodeJobs2", upgradedEncodeJobs, Connection);
427+
}
428+
369429
#pragma warning restore CS0618 // Type or member is obsolete
370430

371431
private static void UpgradeEncodingProfiles(int databaseVersion)

VidCoder/Utilities/Utilities.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace VidCoder;
2828

2929
public static class Utilities
3030
{
31-
public const int CurrentDatabaseVersion = 50;
31+
public const int CurrentDatabaseVersion = 51;
3232
public const int LastUpdatedEncodingProfileDatabaseVersion = 48;
3333
public const int LastUpdatedPickerDatabaseVersion = 47;
3434

0 commit comments

Comments
 (0)