From a4af9071a5874c78651a2e0e89df89ef0d47f322 Mon Sep 17 00:00:00 2001 From: Offray Luna Date: Mon, 3 Jul 2017 22:12:09 +0000 Subject: [PATCH] First public commit to modularize Grafoscopio. Now GrafoscopioDocumentation can be downloaded by several related projects without having to download the full Grafoscopio Package, only the Utilities. Maybe here we can put also the ones that deals with installation of simple software (Fossil, SQLite)... time will tell. --- .project | 3 + repository/.properties | 3 + .../GrafoscopioDocumentation.class.st | 215 ++++++++++++++++++ .../GrafoscopioUtils.class.st | 29 +++ repository/Grafoscopio-Utils/package.st | 1 + 5 files changed, 251 insertions(+) create mode 100644 .project create mode 100644 repository/.properties create mode 100644 repository/Grafoscopio-Utils/GrafoscopioDocumentation.class.st create mode 100644 repository/Grafoscopio-Utils/GrafoscopioUtils.class.st create mode 100644 repository/Grafoscopio-Utils/package.st diff --git a/.project b/.project new file mode 100644 index 0000000..46c7795 --- /dev/null +++ b/.project @@ -0,0 +1,3 @@ +{ + 'srcDirectory' : 'repository' +} \ No newline at end of file diff --git a/repository/.properties b/repository/.properties new file mode 100644 index 0000000..ad0471d --- /dev/null +++ b/repository/.properties @@ -0,0 +1,3 @@ +{ + #format : #tonel +} \ No newline at end of file diff --git a/repository/Grafoscopio-Utils/GrafoscopioDocumentation.class.st b/repository/Grafoscopio-Utils/GrafoscopioDocumentation.class.st new file mode 100644 index 0000000..5902ef5 --- /dev/null +++ b/repository/Grafoscopio-Utils/GrafoscopioDocumentation.class.st @@ -0,0 +1,215 @@ +" +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 +] diff --git a/repository/Grafoscopio-Utils/GrafoscopioUtils.class.st b/repository/Grafoscopio-Utils/GrafoscopioUtils.class.st new file mode 100644 index 0000000..e35d89c --- /dev/null +++ b/repository/Grafoscopio-Utils/GrafoscopioUtils.class.st @@ -0,0 +1,29 @@ +" +I contain simple functionality used by Grafoscopio, Datavis or other + related projects. +" +Class { + #name : #GrafoscopioUtils, + #superclass : #Object, + #category : #'Grafoscopio-Utils' +} + +{ #category : #'graphical interface' } +GrafoscopioUtils class >> downloadingFrom: downloadUrl withMessage: aString into: location [ + | fileName | + fileName := (downloadUrl splitOn: $/) last. + (location / fileName) exists ifTrue: [ (location / fileName) ensureDelete ]. + [: bar | + bar title: aString. + [ZnClient new + enforceHttpSuccess: true; + url: downloadUrl; + downloadTo: location; + signalProgress: true + ] + on: HTTPProgress + do: [ :progress | + progress isEmpty ifFalse: [ bar current: progress percentage ]. + progress resume ]. + ] asJob run. +] diff --git a/repository/Grafoscopio-Utils/package.st b/repository/Grafoscopio-Utils/package.st new file mode 100644 index 0000000..5f58ad1 --- /dev/null +++ b/repository/Grafoscopio-Utils/package.st @@ -0,0 +1 @@ +Package { #name : #'Grafoscopio-Utils' }