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_TYPE | DESCRIPTION | SUFFIXES |
+$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",