MiniDocs/src/MiniDocs/LeDatabase.extension.st

64 lines
2.0 KiB
Smalltalk
Raw Normal View History

2022-09-21 18:57:52 +00:00
Extension { #name : #LeDatabase }
{ #category : #'*MiniDocs' }
2022-09-29 13:20:56 +00:00
LeDatabase >> addPageFromMarkdeep: markdeepDocTree [
2022-09-22 02:15:11 +00:00
| remoteMetadata page |
remoteMetadata := Markdeep new metadataFromXML: markdeepDocTree.
page := LePage new
title: (remoteMetadata at: 'title');
2022-09-29 13:20:56 +00:00
basicUid: (remoteMetadata at: 'id');
createTime: (remoteMetadata at: 'created');
editTime: ("ZTimestamp fromString:" (remoteMetadata at: 'modified'));
createEmail: (remoteMetadata at: 'creator');
editEmail: (remoteMetadata at: 'modifier').
^ {markdeepDocTree . page }
2022-09-21 21:15:13 +00:00
2022-09-21 18:57:52 +00:00
]
2022-09-29 13:20:56 +00:00
{ #category : #'*MiniDocs' }
LeDatabase >> addPageFromMarkdeepUrl: aString [
| page |
page := self detectLocalPageForRemote: aString.
page ifNotNil: [ :arg | ^ self importErrorMessage: page ].
^ self addPageFromMarkdeep: (self docTreeForLink: aString)
]
2022-09-21 18:57:52 +00:00
{ #category : #'*MiniDocs' }
LeDatabase >> detectLocalPageForRemote: markdeepDocUrl [
| markdeepHelper id remoteMetadata docTree |
markdeepHelper := Markdeep new.
2022-09-21 21:15:13 +00:00
docTree := self docTreeForLink: markdeepDocUrl.
2022-09-21 18:57:52 +00:00
remoteMetadata := markdeepHelper metadataFromXML: docTree.
2022-09-21 21:15:13 +00:00
id := remoteMetadata at: 'id' ifAbsent: [ nil ].
^ self pageWithID: id ifAbsent: [ ^ nil ].
]
{ #category : #'*MiniDocs' }
LeDatabase >> docTreeForLink: aString [
2022-09-22 02:15:11 +00:00
^ (XMLHTMLParser on: aString asUrl retrieveContents) parseDocument
2022-09-21 18:57:52 +00:00
]
{ #category : #'*MiniDocs' }
LeDatabase >> importErrorMessage: page [
^ String streamContents: [ :stream |
stream
nextPutAll: 'IMPORTATION ERROR: a page with';
nextPut: Character lf;
nextPut: Character lf;
nextPutAll: ' id: ' , page uidString;
nextPut: Character lf;
nextPutAll: ' title: ' , page contentAsString;
nextPut: Character lf;
nextPut: Character lf;
nextPutAll: 'already exists in this database.';
nextPut: Character lf;
nextPut: Character lf;
nextPutAll:
'Please do one of those before retrying this procedure:
1) Move the existing page files (.lepiter and .bak) to another (sub)folder.
2) Import the page url to another database.' ]
]