Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions extractMimeTypes.ps1
Original file line number Diff line number Diff line change
@@ -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: <td>MIME_TYPE</td><td>DESCRIPTION</td><td>SUFFIXES</td>
$pattern = '<td>([^<]+)</td>\s*<td>[^<]*</td>\s*<td>([^<]*)</td>'
$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 ""
}
21 changes: 21 additions & 0 deletions proxySettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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",
Expand Down Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand All @@ -136,14 +145,19 @@
"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",
"pw3": "application/x-pulse-player-32",
"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",
Expand All @@ -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",
Expand All @@ -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",
Expand Down