From 7bf281a5a6eedc779d06ce486158b58d706c29f1 Mon Sep 17 00:00:00 2001 From: Offray Luna Date: Wed, 3 Jul 2024 06:42:22 -0500 Subject: [PATCH] Relinking external media files as local files. --- repository/TiddlyWiki/Tiddler.class.st | 62 ++++++++++++++++++----- repository/TiddlyWiki/TiddlyWiki.class.st | 9 +++- 2 files changed, 57 insertions(+), 14 deletions(-) diff --git a/repository/TiddlyWiki/Tiddler.class.st b/repository/TiddlyWiki/Tiddler.class.st index 06fc91e..33e2be4 100644 --- a/repository/TiddlyWiki/Tiddler.class.st +++ b/repository/TiddlyWiki/Tiddler.class.st @@ -193,18 +193,56 @@ Tiddler >> deleteUid [ { #category : #accessing } Tiddler >> downloadAndRelinkExternalMedia [ - self customFieldsWithMediaLinks - keysAndValuesDo: [:k :v | - (v endsWithAnyOf: #('mp4')) - ifTrue: [ | fileName filePath | - fileName := v asUrl segments last. - filePath := (FileLocator temp / fileName) fullName. - GtSubprocessWithInMemoryOutput new - shellCommand: 'curl -# ', v, ' -o ', filePath; - runAndWait; - stdout - ] - ] + | mediaExtensions| + mediaExtensions := Dictionary new + at: 'audio' put: #('wav'); + at: 'video' put: #('mp4'); + at: 'image' put: #('jpg' 'jpeg' 'png'); + yourself. + self customFieldsWithMediaLinks + keysAndValuesDo: [ :k :v | + mediaExtensions keysAndValuesDo: [:kind :extensions | + (v asLowercase endsWithAnyOf: extensions) + ifTrue: [ | localFile| + self downloadLink: v for: k into: 'external/', kind , '/'. + localFile := (self wiki substitutions at: self title at: k) second. + self customFields at: k put: localFile. + ] + ] + ]. + ^ self wiki substitutions +] + +{ #category : #accessing } +Tiddler >> downloadLink: v for: k [ + | filePath fileName semiFilePath | + fileName := v asUrl segments last. + semiFilePath := 'external/video/' , fileName. + filePath := (self wiki folder / semiFilePath) fullName. + GtSubprocessWithInMemoryOutput new + shellCommand: 'curl -L -# ' , v , ' -o ' , filePath; + runAndWait; + stdout. + ^ Dictionary new + at: k + put: {v. + semiFilePath}; + yourself +] + +{ #category : #accessing } +Tiddler >> downloadLink: v for: k into: subfolder [ + | filePath fileName semiFilePath | + fileName := v asUrl segments last. + semiFilePath := subfolder , fileName. + filePath := (self wiki folder / semiFilePath) fullName. + GtSubprocessWithInMemoryOutput new + shellCommand: 'curl -L -# ' , v , ' -o ' , filePath; + runAndWait; + stdout. + ^ self wiki substitutions + at: self title at: k put: {v. semiFilePath}; + yourself ] { #category : #accessing } diff --git a/repository/TiddlyWiki/TiddlyWiki.class.st b/repository/TiddlyWiki/TiddlyWiki.class.st index 1830e8b..93be0b1 100644 --- a/repository/TiddlyWiki/TiddlyWiki.class.st +++ b/repository/TiddlyWiki/TiddlyWiki.class.st @@ -516,8 +516,8 @@ TiddlyWiki >> importJSONLink [ { #category : #accessing } TiddlyWiki >> importSTONFilesFrom: aFolder [ | tiddlerFiles | - self folder: aFolder parent. - tiddlerFiles := aFolder children + self folder: aFolder. + tiddlerFiles := (aFolder / 'tiddlers') children select: [ :localFile | localFile basename endsWith: '.ston' ]. self tiddlers: (tiddlerFiles collect: [ :each | | tempTiddler| tempTiddler := STON fromString: each contents. @@ -912,6 +912,11 @@ TiddlyWiki >> shadow [ ^ self tiddlers select: [:tiddler | tiddler title beginsWith: '$:/'] ] +{ #category : #'as yet unclassified' } +TiddlyWiki >> substitutions [ + ^ self config at: 'substitutions' ifAbsentPut: [ Dictionary new]. +] + { #category : #accessing } TiddlyWiki >> syncRemoteLocalDestructive [