2021-02-23 16:55:45 +00:00
"
I provide support for external helper apps for Grafoscopio , publishing , collaboration
and data management .
"
Class {
#name : # ExternalApp ,
#superclass : # Object ,
#instVars : [
'name' ,
'url' ,
'downloadUrl' ,
'description' ,
'sha1' ,
'md5' ,
'binaryLocation'
],
#category : # ' Grafoscopio - Utils '
}
{ #category : # installation }
ExternalApp class >> compareHashFor: aFileName with: aSHAString [
aSHAString = (SHA1 new hashMessage: aFileName asFileReference binaryReadStream contents ) hex
i f F a l s e : [ ^ false ]
i f T r u e : [ ^ true ].
]
{ #category : # configuration }
ExternalApp class >> configureFossil [
"Stablish where is located fossil according to the operative system and/or the input of the user"
| fileStream fossil |
fileStream := UIManager default fileOpen: 'Path to the fossil program binary' .
fileStream isNil ifTrue: [ ^ nil ].
fossil := fileStream name asFileReference fullName .
]
{ #category : # configuration }
ExternalApp class >> configurePandoc [
"Stablish where is located pandoc according to the operative system and/or the input of the user"
| fileStream pandoc |
fileStream := UIManager default fileOpen: 'Path to pandoc program binary' .
fileStream isNil ifTrue: [ ^ nil ].
pandoc := fileStream name asFileReference fullName .
]
{ #category : # installation }
ExternalApp class >> installSQLite32Bits [
" I dowload the SQLite binary for the hosting platform , uncompress it and made it available as with the name
NBSQLite is wating for "
| packageUrl sha1 localPath packageZipName unzippedFolder |
localPath := FileSystem disk workingDirectory parent / 'bin' .
Smalltalk platform name = 'unix'
i f T r u e : [
packageUrl := 'http://sqlite.org/2016/sqlite-tools-linux-x86-3110100.zip' .
sha1 := '21a80cefa91d5de50256996fc55990a027c350fd' ].
Smalltalk platform name = 'Win32'
i f T r u e : [
packageUrl := 'http://sqlite.org/2016/sqlite-dll-win32-x86-3110100.zip' .
sha1 := 'cfd6f64ba1fb5de1ccf8321e29764c690c25e0a0' ].
Smalltalk platform name = 'Mac OS'
i f T r u e : [
packageUrl := 'http://sqlite.org/2016/sqlite-tools-osx-x86-3110100.zip' .
sha1 := 'c78b3b92bd37554694d2f73dbecfef1902c15ba7' ].
self isSQLite32BitsInstalled
i f T r u e : [ self inform: 'SQLite ya está instalado en el sistema' ]
i f F a l s e : [
GrafoscopioBrowser
downloadingFrom: packageUrl
w i t h M e s s a g e : 'Descargando SQLite...'
into: localPath asFileReference .
packageZipName := (packageUrl splitOn: '/' ) last .
sha1 = (SHA1 new hashMessage: (localPath / packageZipName ) asFileReference binaryReadStream contents ) hex
i f F a l s e : [ self inform: ' SQLite: Descarga no exitosa .
Por favor intente el procedimiento de nuevo o manualmente ' ]
i f T r u e : [
ZipArchive new
r e a d F r o m : (localPath / packageZipName );
extractAllTo: localPath asFileReference .
unzippedFolder := packageZipName copyReplaceAll: '.zip' with: '' .
(localPath / unzippedFolder ) children do:
[: file | file moveTo: (localPath / file basenameWithIndicator )].
(localPath / 'sqlite3' ) copyTo: (localPath / 'libsqlite3.so' ).
(localPath / unzippedFolder ) deleteAll .
self inform: 'SQLite instalado existosammente!'
].
"Cleaning leftovers"
(localPath / packageZipName ) delete
]
]
{ #category : # configuration }
ExternalApp class >> installSQLite32BitsUI [
" I verify if SQLite for 32 bits is installed in the proper location . If yes , I inform that . If not ,
I made the installation "
| install |
install := (UIManager default
c o n f i r m : '¿Desea instalar el motor de base de datos (SQLite)?'
l a b e l : 'Instalar base de datos?' ).
install ifTrue: [self installSQLite32Bits ]
]
{ #category : # installation }
ExternalApp class >> isSQLite32BitsInstalled [
"I verify if the SQLite binary for the hosting platform is installed"
^ (FileSystem disk workingDirectory parent / 'bin' / 'libsqlite3.so' ) asFileReference exists
]
{ #category : # configuration }
ExternalApp class >> pandoc [
"I define where the pandoc external app is located"
| app |
app := ExternalApp new
n a m e : 'pandoc' ;
u r l : 'http://pandoc.org' ;
d e s c r i p t i o n : 'Pandoc is a free and open-source software document converter, widely used as a writing tool (especially by scholars) and as a basis for publishing workflows. It was originally created by John MacFarlane, a philosophy professor at the University of California, Berkeley. (from https://en.wikipedia.org/wiki/Pandoc)' .
app binaryLocation: '/usr/bin/pandoc' asFileReference .
^ app
]
{ #category : # accessing }
ExternalApp >> binaryLocation [
^ binaryLocation
]
{ #category : # accessing }
ExternalApp >> binaryLocation: anObject [
binaryLocation := anObject
]
{ #category : # accessing }
ExternalApp >> description [
^ description
]
{ #category : # accessing }
ExternalApp >> description: anObject [
description := anObject
]
{ #category : # accessing }
ExternalApp >> downloadUrl [
^ downloadUrl
]
{ #category : # accessing }
ExternalApp >> downloadUrl: anObject [
downloadUrl := anObject
]
{ #category : # accessing }
ExternalApp >> md5 [
^ md5
]
{ #category : # accessing }
ExternalApp >> md5: anObject [
md5 := anObject
]
{ #category : # accessing }
ExternalApp >> name [
^ name
]
{ #category : # accessing }
ExternalApp >> name: anObject [
name := anObject
]
{ #category : # accessing }
ExternalApp >> sha1 [
^ sha1
]
{ #category : # accessing }
ExternalApp >> sha1: anObject [
sha1 := anObject
]
{ #category : # accessing }
ExternalApp >> url [
^ url
]
{ #category : # accessing }
ExternalApp >> url: anObject [
url := anObject
]