[squeak-dev] The Trunk: SMLoader-ct.98.mcz

commits at source.squeak.org commits at source.squeak.org
Wed May 18 20:17:42 UTC 2022


Christoph Thiede uploaded a new version of SMLoader to project The Trunk:
http://source.squeak.org/trunk/SMLoader-ct.98.mcz

==================== Summary ====================

Name: SMLoader-ct.98
Author: ct
Time: 18 May 2022, 7:28:33.967874 pm
UUID: 86668f56-4011-d34c-bc66-a69a58e6898d
Ancestors: SMLoader-mt.97

Improves multilingual support and fixes broken link to swiki. Moves from UIManager default to Project uiManager.

=============== Diff against SMLoader-mt.97 ===============

Item was changed:
  ----- Method: SMClient>>ensurePassword (in category 'private') -----
  ensurePassword
+ 	self password isEmptyOrNil ifTrue: [ self password: (Project uiManager requestPassword: 'Please enter your SqueakMap password.' translated) ].
- 	self password isEmptyOrNil ifTrue: [ self password: (UIManager default requestPassword: 'Please enter your SqueakMap password.') ].
  	self password isEmptyOrNil ifTrue: [ self error: 'authentication failure' ]!

Item was changed:
  ----- Method: SMLoader>>cachePackageReleaseAndOfferToCopy (in category 'actions') -----
  cachePackageReleaseAndOfferToCopy
  	"Cache package release, then offer to copy it somewhere.
  	Answer the chosen file's location after copy,
  	or the cache location if no directory was chosen."
  
  	| release installer newDir newName newFile oldFile oldName |
  	release := self selectedPackageOrRelease.
  	release isPackageRelease ifFalse: [ self error: 'Should be a package release!!'].
  	installer := SMInstaller forPackageRelease: release.
  	[Cursor wait showWhile: [installer cache]] on: Error do: [:ex |
  		| msg |
  		msg := ex messageText ifNil: [ex asString].
+ 		self informException: ex msg: ('Error occurred during download:\\{1}' translated format: {msg}).
- 		self informException: ex msg: ('Error occurred during download:\', msg, '\') withCRs.
  		^nil ].
+ 	installer isCached ifFalse: [self inform: 'Download failed, see transcript for details' translated. ^nil].
- 	installer isCached ifFalse: [self inform: 'Download failed, see transcript for details'. ^nil].
  	oldName := installer fullFileName.
+ 	newDir := Project uiManager chooseDirectoryFrom: installer directory.
- 	newDir := UIManager default chooseDirectoryFrom: installer directory.
  	newDir ifNil: [ ^oldName ].
  	newDir = installer directory ifTrue: [ ^oldName ].
  	newName := newDir fullNameFor: installer fileName.
  	newFile := FileStream newFileNamed: newName.
  	newFile ifNil: [ ^oldName ].
  	newFile binary.
  	oldFile := FileStream readOnlyFileNamed: oldName.
  	oldFile ifNil: [ ^nil ].
  	oldFile binary.
  	[[ newDir copyFile: oldFile toFile: newFile ] ensure: [ oldFile close. newFile close ]] on: Error do: [ :ex | ^oldName ].
  	^newName!

Item was changed:
  ----- Method: SMLoaderCategoricalPlus>>defaultLabel (in category 'interface') -----
  defaultLabel
+ 	^ 'Categorical {1}' translated format: {super defaultLabel}!
- 	^ 'Categorical ' , super defaultLabel!

Item was changed:
  ----- Method: SMLoaderCategoricalPlus>>installButtonLabel (in category 'interface') -----
  installButtonLabel
  	^ self currentPackageList = #notInstalled
+ 		ifTrue: ['Install the above package' translated]
+ 		ifFalse: ['Remove the above package' translated]!
- 		ifTrue: ['Install the above package']
- 		ifFalse: ['Remove the above package']!

Item was changed:
  ----- Method: SMLoaderPlus>>addFiltersToMenu: (in category 'menus') -----
  addFiltersToMenu: aMenu
  	| filterSymbol help |
  	self filterSpecs do: [:filterArray | 
  		filterSymbol := filterArray second.
  		help := filterArray third.
  		aMenu addUpdating: #showFilterString: target: self selector: #toggleFilterState: argumentList: (Array with: filterSymbol).
  		aMenu balloonTextForLastItem: help].
  	aMenu addLine;
+ 		addTranslatedList: #(('Clear all filters' uncheckFilters 'Unchecks all filters to list all packages'))
- 		addList: #(('Clear all filters' uncheckFilters 'Unchecks all filters to list all packages'))
  	!

Item was changed:
  ----- Method: SMLoaderPlus>>buildPackagePaneWith: (in category 'interface') -----
  buildPackagePaneWith: aBuilder
  	"Create the text area to the right in the loader."
  
  	^ aBuilder pluggableTextSpec new
  		model: self;
  		getText: #itemDescription;
  		name: #packagePane;
+ 		help: 'Select a package to view its description.' translated;
- 		help: 'Select a package to view its description.';
  		yourself!

Item was changed:
  ----- Method: SMLoaderPlus>>buildSearchPaneWith: (in category 'interface') -----
  buildSearchPaneWith: aBuilder
  	^ aBuilder pluggableInputFieldSpec new model: self;
  		selection: #searchSelection;
  		setText: #findPackage:notifying:;
+ 		help: 'Search packages...' translated;
- 		help: 'Search packages...';
  		name: #search;
  		yourself!

Item was changed:
  ----- Method: SMLoaderPlus>>cachePackageReleaseAndOfferToCopy (in category 'actions') -----
  cachePackageReleaseAndOfferToCopy
  	"Cache package release, then offer to copy it somewhere.
  	Answer the chosen file's location after copy,
  	or the cache location if no directory was chosen."
  
  	| release installer newDir newName newFile oldFile oldName |
  	release := self selectedPackageOrRelease.
+ 	release isPackageRelease ifFalse: [ self error: 'Should be a package release!!' translated].
- 	release isPackageRelease ifFalse: [ self error: 'Should be a package release!!'].
  	installer := SMInstaller forPackageRelease: release.
+ 	[Project uiManager informUser: ('Caching {1}' translated format: {release}) during: [installer cache]] on: Error do: [:ex |
- 	[UIManager default informUser: 'Caching ' , release asString during: [installer cache]] on: Error do: [:ex |
  		| msg |
  		msg := ex messageText ifNil: [ex asString].
+ 		self informException: ex msg: ('Error occurred during download:\\{1}' withCRs translated format: {msg}).
- 		self informException: ex msg: ('Error occurred during download:\', msg, '\') withCRs.
  		^nil ].
+ 	installer isCached ifFalse: [self inform: 'Download failed, see transcript for details' translated. ^nil].
- 	installer isCached ifFalse: [self inform: 'Download failed, see transcript for details'. ^nil].
  	oldName := installer fullFileName.
+ 	newDir := Project uiManager chooseDirectoryFrom: installer directory.
- 	newDir := UIManager default chooseDirectoryFrom: installer directory.
  	newDir ifNil: [ ^oldName ].
  	newDir = installer directory ifTrue: [ ^oldName ].
  	newName := newDir fullNameFor: installer fileName.
  	newFile := FileStream newFileNamed: newName.
  	newFile ifNil: [ ^oldName ].
  	newFile binary.
  	oldFile := FileStream readOnlyFileNamed: oldName.
  	oldFile ifNil: [ ^nil ].
  	oldFile binary.
  	[[ newDir copyFile: oldFile toFile: newFile ] ensure: [ oldFile close. newFile close ]] on: Error do: [ :ex | ^oldName ].
  	^newName!

Item was changed:
  ----- Method: SMLoaderPlus>>defaultLabel (in category 'lists') -----
  defaultLabel
+ 	^ 'SqueakMap Package Loader' translated!
- 	^ 'SqueakMap Package Loader'!

Item was changed:
  ----- Method: SMLoaderPlus>>downloadPackageRelease (in category 'actions') -----
  downloadPackageRelease
  	"Force a download of the selected package release into the cache."
  
  	| release |
  	release := self selectedPackageOrRelease.
+ 	release isPackageRelease ifFalse: [ self error: 'Should be a package release!!' translated].
+ 	[Project uiManager informUser: ('Downloading {1}' translated format: {release}) during: [
- 	release isPackageRelease ifFalse: [ self error: 'Should be a package release!!'].
- 	[UIManager default informUser: 'Downloading ' , release asString during: [
  		(SMInstaller forPackageRelease: release) download]
  	] on: Error do: [:ex |
  		| msg | 
  		msg := ex messageText ifNil: [ex asString].
+ 		self informException: ex msg: ('Error occurred during download:\\{1}' translated format: {msg})]!
- 		self informException: ex msg: ('Error occurred during download:\', msg, '\') withCRs]!

Item was changed:
  ----- Method: SMLoaderPlus>>findPackage:notifying: (in category 'actions') -----
  findPackage: aString notifying: aView 
  	"Search and select a package with the given (sub) string in the name or
  	description. "
  	| index list match descriptions |
  	match := aString asString asLowercase.
  	index := self packagesListIndex.
  	list := self packageNameList.
  	list isEmpty
  		ifTrue: [^ self].
  	descriptions := self packageList collect: [:e | e description].
  	index + 1
  		to: list size
  		do: [:i | (((list at: i)
  						includesSubstring: match
  						caseSensitive: false)
  					or: [(descriptions at: i)
  							includesSubstring: match
  							caseSensitive: false])
  				ifTrue: [^ self packagesListIndex: i]].
  	"wrap around"
  	1
  		to: index
  		do: [:i | (((list at: i)
  						includesSubstring: match
  						caseSensitive: false)
  					or: [(descriptions at: i)
  							includesSubstring: match
  							caseSensitive: false])
  				ifTrue: [^ self packagesListIndex: i]].
+ 	self inform: ('No package matching {1}' translated format: {aString})!
- 	self inform: 'No package matching ' , aString asString!

Item was changed:
  ----- Method: SMLoaderPlus>>help (in category 'interface') -----
  help
  	"Present help text. If there is a web server available, offer to open it.
  	Use the WebBrowser registry if possible, or Scamper if available."
  	| message browserClass |
+ 	message := 'Welcome to the SqueakMap package loader. The names of packages are followed by versions: (installed -> latest). If there is no arrow, your installed version of the package is the latest. Bold packages and releases have been installed. The checkbox menu items modify which packages you''ll see.
+ Take a look at them - only some packages are shown initially. The options available for a package depend on how it was packaged. Comment on a package by emailing the author or the squeak list.' translated.
- 	message := 'Welcome to the SqueakMap package loader. 
- The names of packages are followed by versions: (installed -> latest).
- If there is no arrow, your installed version of the package is the latest.
- Bold packages and releases have been installed.
- The checkbox menu items modify which packages you''ll see.
- Take a look at them - only some packages are shown initially.
- The options available for a package depend on how it was packaged.
- Comment on a package by emailing the author or the squeak list.'.
  
  	browserClass := Smalltalk at: #WebBrowser ifPresent: [ :registry | registry default ].
  	browserClass := browserClass ifNil: [ Smalltalk at: #Scamper ifAbsent: [ ^self inform: message ]].
  
+ 	(self confirm: ('{1}\\Would you like to view more detailed help on the SqueakMap swiki page?' translated format: {message}))
+ 		ifTrue: [ browserClass openOnUrl: 'http://wiki.squeak.org/squeak/2726' asUrl]!
- 	(self confirm: message, '
- Would you like to view more detailed help on the SqueakMap swiki page?') 
- 	ifTrue: [ browserClass openOnUrl: 'http://wiki.squeak.org/2726' asUrl]!

Item was changed:
  ----- Method: SMLoaderPlus>>informException:msg: (in category 'private') -----
  informException: ex msg: msg 
  	"Tell the user that an error has occurred.
  	Offer to open debug notifier."
  
+ 	(self confirm: ('{1}\\Would you like to open a debugger?' translated format: {msg}))
- 	(self confirm: msg, 'Would you like to open a debugger?')
  		ifTrue: [ex pass]!

Item was changed:
  ----- Method: SMLoaderPlus>>installPackageRelease (in category 'actions') -----
  installPackageRelease
  	"Install selected package or release.
  	The cache is used."
  	| item release |
  	item := self selectedPackageOrRelease
  				ifNil: [^ nil].
  	item isPackageRelease
  		ifTrue: [^ self installPackageRelease: item]
  		ifFalse: [release := item lastReleaseForCurrentSystemVersion.
  			release
+ 				ifNil: [(self confirm: 'The package has no published release for your Squeak version, try releases for any Squeak version?' translated)
- 				ifNil: [(self confirm: 'The package has no published release for your Squeak version, try releases for any Squeak version?')
  						ifTrue: [release := item lastPublishedRelease.
  							release
+ 								ifNil: [(self confirm: 'The package has no published release at all, take the latest of the unpublished releases?' translated)
- 								ifNil: [(self confirm: 'The package has no published release at all, take the latest of the unpublished releases?')
  										ifTrue: [release := item lastRelease]]]].
  			release
  				ifNotNil: [^ self installPackageRelease: release]]!

Item was changed:
  ----- Method: SMLoaderPlus>>installPackageRelease: (in category 'private') -----
  installPackageRelease: aRelease
  	"Install a package release. The cache is used."
  
  	| myRelease installer |
  	aRelease isCompatibleWithCurrentSystemVersion ifFalse:
  		[(self confirm:
+ ('The package you are about to install is not listed as being compatible with your image version ({1}), so the package may not work properly.
+ 
+ Do you still want to proceed with the install?' translated format: {SystemVersion current majorMinorVersion}))
- 'The package you are about to install is not listed as
- being compatible with your image version (', SystemVersion current majorMinorVersion, '),
- so the package may not work properly.
- Do you still want to proceed with the install?')
  			ifFalse: [^ self]].
  	myRelease := self installedReleaseOfMe.
  	installer := SMInstaller forPackageRelease: aRelease.
+ 	[Project uiManager
+ 		informUser: ('Downloading {1}' translated format: {aRelease}) during:
+ 			[installer download];
+ 		informUser: ('Installing {1}' translated format: {aRelease}) during:
+ 			[installer install.
+ 			myRelease = self installedReleaseOfMe
+ 						ifFalse: [self reOpen]
+ 						ifTrue: [self noteChanged]]
- 	[UIManager default informUser: 'Downloading ' , aRelease asString during:
- 		[installer download].
- 	UIManager default informUser: 'Installing ' , aRelease asString during: [
- 		installer install.
- 		myRelease = self installedReleaseOfMe
- 					ifFalse: [self reOpen]
- 					ifTrue: [self noteChanged]]
  	] on: Error do: [:ex |
  		| msg |
  		msg := ex messageText ifNil:[ex asString].
+ 		self informException: ex msg: ('Error occurred during install:\\{1}' withCRs translated format: {msg})].!
- 		self informException: ex msg: ('Error occurred during install:\', msg, '\') withCRs].!

Item was changed:
  ----- Method: SMLoaderPlus>>labelForShown: (in category 'lists') -----
  labelForShown: packagesShown
  	"Update the label of the window."
+ 	^ (packagesShown size < map packages size
+ 		ifTrue: ['{1} ({2} shown out of {2} packages)' translated]
+ 		ifFalse: ['{1} ({3} packages)' translated])
+ 			format:
+ 				{self defaultLabel.
+ 				packagesShown size.
+ 				map packages size}!
- 	^ self defaultLabel , ' (',
- 		(packagesShown size < map packages size ifTrue: [packagesShown size printString,
- 		' shown out of '] ifFalse: ['']) , map packages size printString, ' packages)'!

Item was changed:
  ----- Method: SMLoaderPlus>>loadUpdates (in category 'actions') -----
  loadUpdates
+ 	[Project uiManager informUser: 'Loading updates' translated during: [
- 	[UIManager default informUser: 'Loading Updates' during: [
  		map loadUpdates.
  		self noteChanged ]
  	] on: Error do: [:ex |
+ 		self informException: ex msg: ('Error occurred when updating map:\\{1}' translated format: {ex messageText})]!
- 		self informException: ex msg: ('Error occurred when updating map:\', ex messageText, '\') withCRs]!

Item was changed:
  ----- Method: SMLoaderPlus>>reOpen (in category 'private') -----
  reOpen
  	"Close this package loader, probably because it has been updated,
  	and open a new one."
+ 	self inform: 'This package loader has been upgraded and will be closed and reopened to avoid strange side effects.' translated.
- 	self inform: 'This package loader has been upgraded and will be closed and reopened to avoid strange side effects.'.
  	window delete.
  	(Smalltalk at: self class name) open!

Item was changed:
  ----- Method: SMLoaderPlus>>upgradeInstalledPackages (in category 'actions') -----
  upgradeInstalledPackages
  	"Tries to upgrade all installed packages to the latest published release for this
  	version of Squeak. So this is a conservative approach."
  
  	| installed old myRelease toUpgrade info |
  	installed := map installedPackages.
  	old := map oldPackages.
  	old isEmpty ifTrue: [
+ 			^self inform: ('All {1} installed packages are up to date.' translated format: {installed size})].
- 			^self inform: 'All ', installed size printString, ' installed packages are up to date.'].
  	toUpgrade := map upgradeableAndOldPackages.
  	toUpgrade isEmpty ifTrue: [
+ 			^self inform: ('None of the {1} old packages of the {2} installed can be automatically upgraded. You need to upgrade them manually.' translated format: {old size. installed size})].
- 			^self inform: 'None of the ', old size printString, ' old packages of the ', installed size printString, ' installed can be automatically upgraded. You need to upgrade them manually.'].
  	info := old size < toUpgrade size ifTrue: [
+ 		'Of the {1} old packages only {2} can be upgraded. The following packages will not be upgraded:\\{3}' withCRs translated format: {old size. toUpgrade size. String streamContents: [:s | (old removeAll: toUpgrade; yourself)
+ 	do: [:p | s nextPutAll: p nameWithVersionLabel; cr]]}]
+ 		ifFalse: ['All old packages upgradeable.' translated].
+ 	(self confirm: ('{1}\\About to upgrade the following packages:\\{2}\\Proceed?' translated format: {info. String streamContents: [:s | toUpgrade do: [:p | s nextPutAll: p nameWithVersionLabel; cr]]})) ifTrue: [
- 		'Of the ', old size printString, ' old packages only ', toUpgrade size printString, ' can be upgraded.
- The following packages will not be upgraded:
- ',  (String streamContents: [:s | (old removeAll: toUpgrade; yourself)
- 	do: [:p | s nextPutAll: p nameWithVersionLabel; cr]])]
- 		ifFalse: ['All old packages upgradeable.'].
- 	(self confirm: info, '
- About to upgrade the following packages:
- ', (String streamContents: [:s | toUpgrade do: [:p | s nextPutAll: p nameWithVersionLabel; cr]]), 'Proceed?') ifTrue: [
  			myRelease := self installedReleaseOfMe.
+ 			[Project uiManager informUser: 'Upgrading installed packages' translated during: [
- 			[UIManager default informUser: 'Upgrading Installed Packages' during: [
  				map upgradeOldPackages.
+ 				self inform: ('{1} packages successfully upgraded.' translated format: {toUpgrade size}).
- 				self inform: toUpgrade size printString, ' packages successfully upgraded.'.
  				myRelease = self installedReleaseOfMe
  					ifFalse: [self reOpen]
  					ifTrue: [self noteChanged]]
  			] on: Error do: [:ex |
+ 				self informException: ex msg: ('Error occurred when upgrading old packages:\\{1}' withCRs translated format: {ex messageText})]]!
- 				self informException: ex msg: ('Error occurred when upgrading old packages:\', ex messageText, '\') withCRs]]!

Item was changed:
  ----- Method: SMLoaderPlus>>upgradeInstalledPackagesConfirm: (in category 'private') -----
  upgradeInstalledPackagesConfirm: confirmEach 
  	"Tries to upgrade all installed packages to the latest published release for
  	this version of Squeak. If confirmEach is true we ask for every
  	upgrade. "
  	| installed old myRelease toUpgrade info |
  	installed := map installedPackages.
  	old := map oldPackages.
  	old isEmpty
+ 		ifTrue: [^ self inform: ('All {1} installed packages are up to date.' translated format: {installed size})].
- 		ifTrue: [^ self inform: 'All ' , installed size printString , ' installed packages are up to date.'].
  	toUpgrade := map upgradeableAndOldPackages.
  	toUpgrade isEmpty
+ 		ifTrue: [^ self inform: ('None of the {1} old packages of the {1} installed can be automatically upgraded. You need to upgrade them manually.' translated format: {old size. installed size})].
- 		ifTrue: [^ self inform: 'None of the ' , old size printString , ' old packages of the ' , installed size printString , ' installed can be automatically upgraded. You need to upgrade them manually.'].
  	info := old size < toUpgrade size
+ 		ifTrue: [('Of the {1} old packages only {2} can be upgraded.\\The following packages will not be upgraded:\\{3}' withCRs translated format: {old size. toUpgrade size. String
- 		ifTrue: ['Of the ' , old size printString , ' old packages only ' , toUpgrade size printString , ' can be upgraded.
- The following packages will not be upgraded:
- '
- 						, (String
  								streamContents: [:s | (old removeAll: toUpgrade;
  										 yourself)
  										do: [:p | s nextPutAll: p nameWithVersionLabel;
+ 												 cr]]})]
+ 		ifFalse: ['All old packages upgradeable.' translated].
+ 	(self confirm: ('{1}\\About to upgrade the following packages:\\{2}\\Proceed?' withCRs translated format: {info. String
- 												 cr]])]
- 		ifFalse: ['All old packages upgradeable.'].
- 	(self confirm: info , '
- About to upgrade the following packages:
- '
- 				, (String
  						streamContents: [:s | toUpgrade
  								do: [:p | s nextPutAll: p nameWithVersionLabel;
+ 										 cr]]}))
- 										 cr]]) , 'Proceed?')
  		ifTrue: [myRelease := self installedReleaseOfMe.
+ 			[Project uiManager informUser: 'Upgrading installed packages' translated during:
- 			[UIManager default informUser: 'Upgrading Installed Packages' during:
  					[confirmEach
  						ifTrue: [map
+ 								upgradeOldPackagesConfirmBlock: [:p | self confirm: ('Upgrade {1} to {2}?' translated format: {p installedRelease packageNameWithVersion. (p lastPublishedReleaseForCurrentSystemVersionNewerThan: p installedRelease) listName})]]
- 								upgradeOldPackagesConfirmBlock: [:p | self confirm: 'Upgrade ' , p installedRelease packageNameWithVersion , ' to ' , (p lastPublishedReleaseForCurrentSystemVersionNewerThan: p installedRelease) listName , '?']]
  						ifFalse: [map upgradeOldPackages].
+ 					self inform: ('{1} packages successfully processed.' translated format: {toUpgrade size}).
- 					self inform: toUpgrade size printString , ' packages successfully processed.'.
  					myRelease = self installedReleaseOfMe
  						ifTrue: [self noteChanged]
  						ifFalse: [self reOpen]]]
  				on: Error
+ 				do: [:ex | self informException: ex msg: ('Error occurred when upgrading old packages:\\{1}' withCRs translated format: {ex messageText})]]!
- 				do: [:ex | self informException: ex msg: ('Error occurred when upgrading old packages:\' , ex messageText , '\') withCRs]]!

Item was changed:
  ----- Method: SMReleaseBrowser>>userError: (in category 'private') -----
  userError: aString
+ 	Project uiManager inform: aString!
- 	UIManager default inform: aString!



More information about the Squeak-dev mailing list