diff --git a/extractMimeTypes.ps1 b/extractMimeTypes.ps1 new file mode 100644 index 0000000..462f18a --- /dev/null +++ b/extractMimeTypes.ps1 @@ -0,0 +1,115 @@ +# Script to extract MIME types and suffixes from "About Plugins.htm" +# generated from Flashpoint Navigator +# and compare them with existing entries in proxySettings.json +# Usage: +# open flashpoint-navigator, navigate to about:plugins +# save the page as "About Plugins.htm" +# place this script, the HTML file, and proxySettings.json in the same folder +# run the script in PowerShell + +$htmlFile = "About Plugins.htm" +$jsonFile = "proxySettings.json" + +$html = Get-Content $htmlFile -Raw + +$proxySettings = Get-Content $jsonFile -Raw | ConvertFrom-Json +$existingMimeTypes = $proxySettings.extMimeTypes + +# Extract all MIME type entries from HTML tables +# Pattern: MIME_TYPEDESCRIPTIONSUFFIXES +$pattern = '([^<]+)\s*[^<]*\s*([^<]*)' +$matches = [regex]::Matches($html, $pattern) + +$mimeTypeMap = @{} + +Write-Host "Extracting MIME types and suffixes from $htmlFile..." +Write-Host "" + +foreach ($match in $matches) { + $mimeType = $match.Groups[1].Value + $suffixes = $match.Groups[2].Value + + if ($suffixes) { + $suffixList = $suffixes -split ',' | ForEach-Object { $_.Trim() } + + foreach ($suffix in $suffixList) { + if ($suffix -and $suffix -ne '') { + if (-not $mimeTypeMap.ContainsKey($suffix)) { + $mimeTypeMap[$suffix] = $mimeType + } + } + } + } +} + +Write-Host "Found $($mimeTypeMap.Count) unique suffix-to-MIME-type mappings" +Write-Host "" + +$missingEntries = @{} +$existingEntries = @{} +$differentEntries = @{} + +foreach ($suffix in $mimeTypeMap.Keys | Sort-Object) { + $newMimeType = $mimeTypeMap[$suffix] + + if ($existingMimeTypes.PSObject.Properties.Name -contains $suffix) { + $existingMimeType = $existingMimeTypes.$suffix + if ($existingMimeType -ne $newMimeType) { + $differentEntries[$suffix] = @{ + existing = $existingMimeType + new = $newMimeType + } + } else { + $existingEntries[$suffix] = $newMimeType + } + } else { + $missingEntries[$suffix] = $newMimeType + } +} + +Write-Host "============================================" +Write-Host "MISSING ENTRIES (need to be added):" +Write-Host "============================================" +if ($missingEntries.Count -eq 0) { + Write-Host " None - all suffixes are already in proxySettings.json" +} else { + foreach ($suffix in $missingEntries.Keys | Sort-Object) { + Write-Host " `"$suffix`": `"$($missingEntries[$suffix])`"," + } +} +Write-Host "" + +Write-Host "============================================" +Write-Host "DIFFERENT ENTRIES (same suffix, different MIME type):" +Write-Host "============================================" +if ($differentEntries.Count -eq 0) { + Write-Host " None" +} else { + foreach ($suffix in $differentEntries.Keys | Sort-Object) { + Write-Host " $suffix" + Write-Host " Existing: $($differentEntries[$suffix].existing)" + Write-Host " From HTML: $($differentEntries[$suffix].new)" + } +} +Write-Host "" + +Write-Host "============================================" +Write-Host "SUMMARY:" +Write-Host "============================================" +Write-Host " Total suffixes in HTML: $($mimeTypeMap.Count)" +Write-Host " Already in proxySettings.json: $($existingEntries.Count)" +Write-Host " Missing from proxySettings.json: $($missingEntries.Count)" +Write-Host " Different MIME type: $($differentEntries.Count)" +Write-Host "" + +if ($missingEntries.Count -gt 0) { + Write-Host "============================================" + Write-Host "JSON FORMAT (for easy copy-paste):" + Write-Host "============================================" + $jsonOutput = @() + foreach ($suffix in $missingEntries.Keys | Sort-Object) { + $jsonOutput += " `"$suffix`": `"$($missingEntries[$suffix])`"" + } + Write-Host ($jsonOutput -join ",`n") + Write-Host "" +} diff --git a/proxySettings.json b/proxySettings.json index 37d1ec8..dcf1de3 100644 --- a/proxySettings.json +++ b/proxySettings.json @@ -47,16 +47,21 @@ "svgz" ], "extMimeTypes": { + "3dm": "x-world/x-3dmf", + "3dmf": "x-world/x-3dmf", "aab": "application/x-authorware-bin", "aam": "application/x-authorware-map", "aas": "application/x-authorware-seg", + "aco": "application/x-o2c-object", "afl": "video/animaflex", "aif": "audio/aiff", "aifc": "audio/aiff", "aiff": "audio/aiff", + "ali": "application/x-alice-plugin", "asd": "application/astound", "asmx": "text/xml", "asn": "application/astound", + "aso": "application/x-o2c-object", "au": "audio/basic", "aut": "application/pbautomation", "aw3": "application/x-awingsoft-winds3d", @@ -70,6 +75,7 @@ "ccn": "application/x-cnc", "cct": "application/x-director", "cdx": "chemical/x-cdx", + "cge": "application/x-cge_3d_viewer", "cgm": "image/cgm", "chm": "chemical/x-chemdraw", "cit": "image/cit", @@ -98,6 +104,7 @@ "dvl": "application/x-devalvrx", "dx": "chemical/x-jcamp-dx", "dxr": "application/x-director", + "e3d": "application/x-o2c-object", "elec": "application/x-electrifier", "emb": "chemical/x-pdb", "embl": "chemical/x-pdb", @@ -111,6 +118,7 @@ "gz": "application/x-gzip-compressed", "htm": "text/html", "html": "text/html", + "iba": "video/x-ibmbamba", "ips": "application/x-ipscript", "ipx": "application/x-ipix", "it": "audio/it", @@ -124,6 +132,7 @@ "mcf": "image/vasa", "mdz": "audio/x-zipped-mod", "med": "audio/x-mod", + "mfg": "mforge/x-mirage", "mid": "audio/mid", "midi": "audio/midi", "mjs": "text/javascript", @@ -136,7 +145,9 @@ "mwf": "application/x-mwf", "nmo": "application/x-virtools", "nms": "application/x-virtools", + "o2c": "application/x-o2c-object", "p3d": "application/x-p3d", + "pan": "world/x-panoramix", "pdb": "chemical/x-pdb", "pqf": "application/x-cprplayer", "pqi": "application/cprplayer", @@ -144,6 +155,9 @@ "pwc": "application/x-pulse-player", "pwn": "application/x-pulse-download", "pws": "application/x-pulse-stream", + "pxd": "audio/pixound", + "qd3d": "x-world/x-3dmf", + "qd3": "x-world/x-3dmf", "qdgx": "image/x-qdgx", "rbs": "x-world/realibase", "rle": "image/rle", @@ -156,10 +170,14 @@ "skc": "chemical/x-mdl-tgf", "smp": "application/studiom", "spl": "application/futuresplash", + "spr": "application/x-sprite", + "sprite": "application/x-sprite", "sts": "application/x-squeak-source", "svf": "vector/x-svf", "svg": "image/svg+xml", "svgz": "image/svg+xml", + "svh": "image/svh", + "svj": "application/x-mssurround", "svr": "x-world/x-svr", "swa": "application/x-director", "swf": "application/x-shockwave-flash", @@ -178,10 +196,13 @@ "vec": "image/vec", "vmo": "application/x-virtools", "vobj": "application/x-netscape-vae-plugin-vae", + "vpg": "application/x-vpeg", "vrt": "x-world/x-vrt", "w3d": "application/x-director", "wasm": "application/wasm", "wav": "audio/wav", + "waf": "plugin/wanimate", + "wan": "plugin/uwanimate", "web": "application/vnd.xara", "wrl": "model/vrml", "wrz": "application/x-gzip-compressed",