sclass JVideoLibDownloader is Swingable { transient SingleComponentPanel scp = singleComponentPanel(); S libID() { ret ffmpegLibraryIDForPlatform(); } bool videoSupported() { ret libID() != null; } bool libDownloaded() { ret fileExists(DiskSnippetCache_getLibrary(libID())); } bool hasLib() { ret currentProgramHasLibrary(libID()); } void addLib() { if (videoSupported()) addLibraryToCurrentProgram(libID()); } swappable JComponent forward() { ret jcenteredlabel("Video extensions enabled"); } visualize { scp.setComponent(makeComponent()); ret scp; } JComponent makeComponent() { if (!videoSupported()) ret jcenteredlabel("Video playback is not yet supported on your platform"); else { if (libDownloaded()) { addLib(); ret forward(); } else ret jfullcenter(centerAndEastWithMargin( jcenteredlabel("Download video player (ca. 20 MB)?"), btnOK = jbuttonWithDisable("OK", r addLibWithProgressBar))); } void addLibWithProgressBar { scp.setComponent(jcenteredlabel("Downloading extension...")); try { addLib(); scp.setComponent(forward()); } catch print e { scp.setComponent(jErrorView(e)); } } }