GrafoscopioUtils/repository/Grafoscopio-Utils/GrafoscopioDocumentation.cl...

216 lines
7.1 KiB
Smalltalk

"
I model a documentation object for Grafoscopio.
Documents are stored in a fossil repository and have
relative paths to it.
"
Class {
#name : #GrafoscopioDocumentation,
#superclass : #Object,
#instVars : [
'repository',
'documents',
'localPlace'
],
#category : #'Grafoscopio-Utils'
}
{ #category : #queries }
GrafoscopioDocumentation class >> current [
"I model the important documents that belong to the Grafoscopio documentation.
When more documents become more mature and usable, I will include them."
| gfcDocumentation |
gfcDocumentation := self new.
gfcDocumentation repository: (FossilRepo new remote: 'http://mutabit.com/repos.fossil/grafoscopio').
gfcDocumentation documents
add: 'Docs/Es/Tutoriales/tutorial.ston';
add: 'Docs/En/Books/Manual/manual.ston';
add: 'Docs/En/dev-notes.ston';
add: 'Docs/En/Books/Manual/manual.pdf'.
gfcDocumentation localPlace.
^ gfcDocumentation
]
{ #category : #operation }
GrafoscopioDocumentation class >> dataviz [
"I model the important documents that belong to the Grafoscopio documentation.
When more documents become more mature and usable, I will include them."
| gfcDocumentation |
gfcDocumentation := self new.
gfcDocumentation repository: (FossilRepo new remote: 'http://mutabit.com/repos.fossil/grafoscopio').
gfcDocumentation documents
add: 'Packages/Dataviz/dataviz.ston'.
gfcDocumentation localPlace.
^ 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
update: 'current';
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"
aDocumentsListName ifNil: [ ^ self ].
aDocumentsListName ifEmpty: [ ^ self ].
^ (self perform: aDocumentsListName asSymbol) documents reject: [ :doc | (self isFileUpdatedFor: doc) ]
]
{ #category : #updating }
GrafoscopioDocumentation class >> listOutdatedIn: aGrafoscopioDocumentation [
"I return the list of all documentent where the local copy and the remote copy doesn't match"
self listOutdatedDocsIn: (self perform: aGrafoscopioDocumentation) documents
]
{ #category : #operation }
GrafoscopioDocumentation class >> openDatavizIntro [
self openNotebookFrom: 'dataviz' At: 1
]
{ #category : #operation }
GrafoscopioDocumentation class >> openDevNotes [
self openNotebookFrom: 'current' At: 3
]
{ #category : #operation }
GrafoscopioDocumentation class >> openManual [
"I open the proper notebook in the adecuate documentation."
self openNotebookFrom: 'current' At: 2
]
{ #category : #operation }
GrafoscopioDocumentation class >> openNotebookFrom: aDocumentation At: index [
"I open a notebook included with the documentation, located at a given index"
| notebookTemp gfcDocs |
gfcDocs := self perform: aDocumentation asSymbol.
(index between: 1 and: gfcDocs documents size)
ifFalse: [ ^ self ]
ifTrue: [
notebookTemp := (gfcDocs localPlace fullName, '/', (gfcDocs documents at: index)) asFileReference.
notebookTemp exists
ifTrue: [GrafoscopioNotebook new openFromFile: notebookTemp]
ifFalse: [ self updateUIFor: aDocumentation ]]
]
{ #category : #operation }
GrafoscopioDocumentation class >> openPDFManual [
"I open the documentation in PDF format. I only work on Unix right now, but in the future my creator hopes to be able
to have truly multiplatform support"
| pdfManual docs |
docs := self current.
pdfManual := docs documents at: 4.
WebBrowser openOn: (docs localPlace / pdfManual) fullName.
]
{ #category : #operation }
GrafoscopioDocumentation class >> openTutorial [
"I open the proper notebook in the adecuate documentation."
self openNotebookFrom: 'current' At: 1
]
{ #category : #updating }
GrafoscopioDocumentation class >> update: aDocumentationName [
(self listOutdatedDocsIn: aDocumentationName)
ifEmpty: [
self inform: 'All documents in the ', aDocumentationName,' collection are already updated'.
^ self ]
ifNotEmpty: [:outdatedDocs |
outdatedDocs do: [ :eachDoc | self download: eachDoc].
self inform: 'Updating of ', aDocumentationName,' documentation finished.' ]
]
{ #category : #operation }
GrafoscopioDocumentation class >> updateAll [
self
update: 'current';
update: 'dataviz'
]
{ #category : #updating }
GrafoscopioDocumentation class >> updateAllUI [
"Updates documentation (manual, tutorials) from the official repository for a given documentation."
| update |
update := (UIManager default
confirm: 'Do you wish to update the documentation?'
label: 'Update documentation').
update
ifTrue: [ self updateAll ]
]
{ #category : #updating }
GrafoscopioDocumentation class >> updateDocsPlaceUI [
self current localPlace: (UIManager default chooseDirectory: 'Path to the documentation folder')
]
{ #category : #updating }
GrafoscopioDocumentation class >> updateUIFor: aDocumentationName [
"Updates documentation (manual, tutorials) from the official repository for a given documentation."
| update |
update := (UIManager default
confirm: 'Do you wish to update the ', aDocumentationName,' documentation?'
label: 'Update ', aDocumentationName, ' documentation').
update ifTrue: [ self update: aDocumentationName ]
]
{ #category : #accessing }
GrafoscopioDocumentation >> documents [
^ documents ifNil: [ documents := OrderedCollection new ]
]
{ #category : #accessing }
GrafoscopioDocumentation >> documents: anObject [
documents := anObject
]
{ #category : #accessing }
GrafoscopioDocumentation >> localPlace [
^ localPlace ifNil: [
localPlace := FileLocator workingDirectory asFileReference / 'Grafoscopio'.
self localPlace exists ifFalse: [ self localPlace ensureCreateDirectory ] ].
]
{ #category : #accessing }
GrafoscopioDocumentation >> localPlace: anObject [
localPlace := anObject
]
{ #category : #accessing }
GrafoscopioDocumentation >> repository [
^ repository
]
{ #category : #accessing }
GrafoscopioDocumentation >> repository: anObject [
repository := anObject
]