diff --git a/src/Grafoscopio-Utils/GrafoscopioDocumentation.class.st b/src/Grafoscopio-Utils/GrafoscopioDocumentation.class.st index 5902ef5..b2acc4d 100644 --- a/src/Grafoscopio-Utils/GrafoscopioDocumentation.class.st +++ b/src/Grafoscopio-Utils/GrafoscopioDocumentation.class.st @@ -9,7 +9,8 @@ Class { #instVars : [ 'repository', 'documents', - 'localPlace' + 'localPlace', + 'name' ], #category : #'Grafoscopio-Utils' } @@ -45,21 +46,6 @@ GrafoscopioDocumentation class >> dataviz [ ^ gfcDocumentation ] -{ #category : #updating } -GrafoscopioDocumentation class >> download: fileNameWithRelativePath [ - | fileName relativePathFolders newPath parentFolder | - fileName := (fileNameWithRelativePath splitOn: $/) last. - relativePathFolders := (fileNameWithRelativePath splitOn: $/) allButLast. - newPath := self current localPlace path. - relativePathFolders do: [ :folder | newPath := newPath / folder ]. - parentFolder := newPath asFileReference. - parentFolder exists ifFalse: [ parentFolder ensureCreateDirectory ]. - GrafoscopioDockingBar - downloadingFrom: self current repository remote asString, '/doc/tip/', fileNameWithRelativePath - withMessage: 'Downloading ', fileName - into: parentFolder -] - { #category : #updating } GrafoscopioDocumentation class >> initialize [ self @@ -67,17 +53,6 @@ GrafoscopioDocumentation class >> initialize [ update: 'dataviz' ] -{ #category : #updating } -GrafoscopioDocumentation class >> isFileUpdatedFor: relativeFilePath [ - "I compare if the local and remote copies of a relativeFilePath are updated for the current - documentation and return true if they are and false in any other case" - | localFile | - localFile := self current localPlace / relativeFilePath. - localFile exists - ifFalse: [ ^ false ] - ifTrue: [ ^ ExternalApp compareHashFor: localFile with: (self current repository lastHashNumberFor: relativeFilePath) ] -] - { #category : #updating } GrafoscopioDocumentation class >> listOutdatedDocsIn: aDocumentsListName [ "I return the list of all documentent where the local copy and the remote copy doesn't match" @@ -192,16 +167,75 @@ GrafoscopioDocumentation >> documents: anObject [ documents := anObject ] -{ #category : #accessing } -GrafoscopioDocumentation >> localPlace [ - ^ localPlace ifNil: [ - localPlace := FileLocator workingDirectory asFileReference / 'Grafoscopio'. - self localPlace exists ifFalse: [ self localPlace ensureCreateDirectory ] ]. +{ #category : #updating } +GrafoscopioDocumentation >> download: fileNameWithRelativePath [ + | fileName relativePathFolders newPath parentFolder | + fileName := (fileNameWithRelativePath splitOn: $/) last. + relativePathFolders := (fileNameWithRelativePath splitOn: $/) allButLast. + newPath := self localPlace path. + relativePathFolders do: [ :folder | newPath := newPath / folder ]. + parentFolder := newPath asFileReference. + parentFolder exists ifFalse: [ parentFolder ensureCreateDirectory ]. + GrafoscopioUtils + downloadingFrom: self repository remote asString, '/doc/tip/', fileNameWithRelativePath + withMessage: 'Downloading ', fileName + into: parentFolder +] + +{ #category : #updating } +GrafoscopioDocumentation >> isFileUpdatedFor: relativeFilePath [ + "I compare if the local and remote copies of a relativeFilePath are updated for the current + documentation and return true if they are and false in any other case" + | localFile | + localFile := self localPlace / relativeFilePath. + localFile exists + ifFalse: [ ^ false ] + ifTrue: [ + ^ ExternalApp + compareHashFor: localFile + with: (self repository lastHashNumberFor: relativeFilePath) ] +] + +{ #category : #updating } +GrafoscopioDocumentation >> listOutdatedDocs [ + "I return the list of all documentent where the local copy and the remote copy doesn't match" + ^ self documents reject: [ :doc | (self isFileUpdatedFor: doc) ] ] { #category : #accessing } -GrafoscopioDocumentation >> localPlace: anObject [ - localPlace := anObject +GrafoscopioDocumentation >> localPlace [ + ^ localPlace ifNil: [ + localPlace := FileLocator workingDirectory asFileReference / 'Grafoscopio' ]. +] + +{ #category : #accessing } +GrafoscopioDocumentation >> localPlace: aFileDirectory [ + localPlace := aFileDirectory. + self localPlace exists ifFalse: [ self localPlace ensureCreateDirectory ]. + +] + +{ #category : #accessing } +GrafoscopioDocumentation >> name [ + ^ name +] + +{ #category : #accessing } +GrafoscopioDocumentation >> name: anObject [ + name := anObject +] + +{ #category : #accessing } +GrafoscopioDocumentation >> openNotebookAt: index [ + "I open a notebook included with the documentation, located at a given index (anInteger)" + | notebookTemp | + (index between: 1 and: self documents size) + ifFalse: [ ^ self ] + ifTrue: [ + notebookTemp := (self localPlace fullName, '/', (self documents at: index)) asFileReference. + notebookTemp exists + ifTrue: [GrafoscopioNotebook new openFromFile: notebookTemp] + ifFalse: [ self updateUI ]] ] { #category : #accessing } @@ -213,3 +247,24 @@ GrafoscopioDocumentation >> repository [ GrafoscopioDocumentation >> repository: anObject [ repository := anObject ] + +{ #category : #updating } +GrafoscopioDocumentation >> update [ + (self listOutdatedDocs) + ifEmpty: [ + self inform: 'All documents in the ', self name,' collection are already updated'. + ^ self ] + ifNotEmpty: [:outdatedDocs | + outdatedDocs do: [ :eachDoc | self download: eachDoc]. + self inform: 'Updating of ', self name,' documentation finished.' ] +] + +{ #category : #updating } +GrafoscopioDocumentation >> updateUI [ + "Updates documentation (manual, tutorials) from the official repository for a given documentation." + | update | + update := (UIManager default + confirm: 'Do you wish to update the ', self name,' documentation?' + label: 'Update ', self name, ' documentation'). + update ifTrue: [ self update ] +]