[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
|