'From Squeakland 3.1.3905 [latest update: #23] on 1 May 2001 at 5:50:35 pm'! "Change Set: pluginUpdate Date: 30 April 2001 Author: Michael Rueger Adds the ability for Squeak to check for a newer plugin version. The required version information needs to be supplied in the plugin embed tags."! !AutoStart class methodsFor: 'class initialization' stamp: 'mir 4/30/2001 19:52'! startUp | startupParameters launchers | self checkForUpdates ifTrue: [^self]. self checkForPluginUpdate. startupParameters _ AbstractLauncher extractParameters. launchers _ self installedLaunchers collect: [:launcher | launcher new]. launchers do: [:launcher | launcher parameters: startupParameters]. launchers do: [:launcher | Smalltalk at: #WorldState ifPresent: [ :ws | ws addDeferredUIMessage: [launcher startUp]]]! ! !AutoStart class methodsFor: 'updating' stamp: 'mir 4/30/2001 18:22'! checkForPluginUpdate | pluginVersion updateURL | World ifNotNil: [World install]. HTTPClient determineIfRunningInBrowser. HTTPClient isRunningInBrowser ifFalse: [^false]. pluginVersion _ AbstractLauncher extractParameters at: (Smalltalk platformName copyWithout: Character space) asUppercase ifAbsent: [^false]. updateURL _ AbstractLauncher extractParameters at: 'UPDATE_URL' ifAbsent: [^false]. ^SystemVersion check: pluginVersion andRequestPluginUpdate: updateURL! ! !FileStream class methodsFor: 'browser requests' stamp: 'mir 4/30/2001 18:32'! requestURL: url target: target "FileStream requestURL:'http://isgwww.cs.uni-magdeburg.de/~raab' target: '_blank' " ^self concreteStream new requestURL: url target: target! ! !HTTPClient class methodsFor: 'utilities' stamp: 'mir 5/1/2001 12:51'! mailTo: address message: aString HTTPClient shouldUsePluginAPI ifFalse: [^self error: 'You need to run inside a web browser.']. FileStream post: aString url: 'mailto:' , address ifError: [self error: 'Can not send mail']! ! !HTTPClient class methodsFor: 'testing' stamp: 'mir 5/1/2001 12:51'! shouldUsePluginAPI "HTTPClient shouldUsePluginAPI" ^self isRunningInBrowser and: [((Smalltalk platformName = 'Mac OS') and: [ScreenController lastScreenModeSelected]) not]! ! !HTTPClient class methodsFor: 'post/get' stamp: 'mir 5/1/2001 12:51'! httpGetDocument: url | stream content | ^self shouldUsePluginAPI ifTrue: [ stream _ FileStream requestURLStream: url ifError: [self error: 'Error in get from ' , url printString]. stream position: 0. content _ stream upToEnd. stream close. MIMEDocument content: content] ifFalse: [HTTPSocket httpGetDocument: url]! ! !HTTPClient class methodsFor: 'post/get' stamp: 'mir 5/1/2001 15:04'! httpPostDocument: url args: argsDict ^self httpPostDocument: url target: nil args: argsDict! ! !HTTPClient class methodsFor: 'post/get' stamp: 'mir 5/1/2001 15:06'! httpPostDocument: url target: target args: argsDict | argString stream content | ^self shouldUsePluginAPI ifTrue: [ argString _ argsDict ifNotNil: [argString _ HTTPSocket argString: argsDict] ifNil: ['']. stream _ FileStream post: argString , ' ' target: target url: url , argString ifError: [self error: 'Error in post to ' , url printString]. stream position: 0. content _ stream upToEnd. stream close. MIMEDocument content: content] ifFalse: [HTTPSocket httpPostDocument: url args: argsDict]! ! !HTTPClient class methodsFor: 'post/get' stamp: 'mir 5/1/2001 12:51'! httpPostMultipart: url args: argsDict " do multipart/form-data encoding rather than x-www-urlencoded " ^self shouldUsePluginAPI ifTrue: [self pluginHttpPostMultipart: url args: argsDict] ifFalse: [HTTPSocket httpPostMultipart: url args: argsDict accept: nil request: '']! ! !HTTPClient class methodsFor: 'post/get' stamp: 'mir 5/1/2001 12:52'! requestURL: url target: target ^self shouldUsePluginAPI ifTrue: [FileStream requestURL: url target: target] ifFalse: [self error: 'Requesting a new URL target is not supported in a standalone Squeak.']! ! !HTTPLoader class methodsFor: 'accessing' stamp: 'mir 5/1/2001 12:52'! httpRequestClass ^HTTPClient shouldUsePluginAPI ifTrue: [PluginHTTPRequest] ifFalse: [HTTPRequest]! ! !ResourceManager class methodsFor: 'resource caching' stamp: 'mir 5/1/2001 12:52'! cacheResource: urlString stream: aStream | fd localName file buf | HTTPClient shouldUsePluginAPI ifTrue:[^self]. "use browser cache" fd _ Project squeakletDirectory. localName _ fd nextNameFor: 'resource' extension:'cache'. file _ fd forceNewFileNamed: localName. buf _ String new: 10000. [aStream atEnd] whileFalse:[ buf _ aStream next: buf size into: buf. file nextPutAll: buf. ]. file close. "update cache" file _ [fd oldFileNamed: self resourceCacheName] on: FileDoesNotExistException do:[:ex| fd forceNewFileNamed: self resourceCacheName]. file setToEnd. file nextPutAll: urlString; cr. file nextPutAll: localName; cr. file close. CachedResources at: urlString put: (fd fullNameFor: localName). aStream position: 0. ! ! !ResourceManager class methodsFor: 'resource caching' stamp: 'mir 5/1/2001 12:52'! reloadCachedResources "ResourceManager reloadCachedResources" "Reload cached resources from the disk" | fd files stream url localName storeBack | HTTPClient shouldUsePluginAPI ifTrue:[^CachedResources _ nil]. "use browser cache" CachedResources _ Dictionary new. fd _ Project squeakletDirectory. files _ fd fileNames asSet. stream _ [fd readOnlyFileNamed: self resourceCacheName] on: FileDoesNotExistException do:[:ex| fd forceNewFileNamed: self resourceCacheName]. stream size < 50000 ifTrue:[stream _ ReadStream on: stream contentsOfEntireFile]. storeBack _ false. [stream atEnd] whileFalse:[ url _ stream upTo: Character cr. localName _ stream upTo: Character cr. (files includes: localName) ifTrue:[CachedResources at: url put: (fd fullNameFor: localName)] ifFalse:[storeBack _ true]]. (stream respondsTo: #close) ifTrue:[stream close]. storeBack ifTrue:[ stream _ fd forceNewFileNamed: self resourceCacheName. CachedResources keysAndValuesDo:[:urlString :fullName| stream nextPutAll: urlString; cr. stream nextPutAll: (fd localNameFor: fullName); cr. ]. stream close. ].! ! !SystemVersion class methodsFor: 'updating' stamp: 'mir 4/30/2001 19:36'! check: pluginVersion andRequestPluginUpdate: updateURL "SystemVersion check: 'zzz' andRequestPluginUpdate: 'http://www.squeakland.org/installers/update.html' " "We don't have a decent versioning scheme yet, so we are basically checking for a nil VM version on the mac." (self currentPluginVersion isNil or: [self currentPluginVersion ~= pluginVersion]) ifFalse: [^true]. (self confirm: 'There is a newer plugin version available. Do you want to install it now?') ifFalse: [^false]. HTTPClient requestURL: updateURL , (Smalltalk platformName copyWithout: Character space) asLowercase , '.html' target: '_top'. ^false! ! !SystemVersion class methodsFor: 'updating' stamp: 'mir 4/30/2001 17:19'! currentPluginVersion ^Smalltalk vmVersion! !