'From etoys3.0 of 7 March 2008 [latest update: #2152] on 18 September 2008 at 5:36:10 pm'! "Change Set: metaData-bf Date: 18 September 2008 Author: Bert Freudenberg Keep meta data set in Journal (#8550)"! !SugarDataStore methodsFor: 'org.laptop.sugar.DataStore' stamp: 'bf 9/18/2008 16:22'! onCreatedSend: aSelector to: anObject "Automatically generated" ^self onDBusSignal: 'Created' interface: 'org.laptop.sugar.DataStore' signature: 's' send: aSelector to: anObject! ! !SugarDataStore methodsFor: 'org.laptop.sugar.DataStore' stamp: 'bf 9/18/2008 16:22'! onDeletedSend: aSelector to: anObject "Automatically generated" ^self onDBusSignal: 'Deleted' interface: 'org.laptop.sugar.DataStore' signature: 's' send: aSelector to: anObject! ! !SugarDataStore methodsFor: 'org.laptop.sugar.DataStore' stamp: 'bf 9/18/2008 16:22'! onMountedSend: aSelector to: anObject "Automatically generated" ^self onDBusSignal: 'Mounted' interface: 'org.laptop.sugar.DataStore' signature: 'a{sv}' send: aSelector to: anObject! ! !SugarDataStore methodsFor: 'org.laptop.sugar.DataStore' stamp: 'bf 9/18/2008 16:22'! onStoppedSend: aSelector to: anObject "Automatically generated" ^self onDBusSignal: 'Stopped' interface: 'org.laptop.sugar.DataStore' signature: '' send: aSelector to: anObject! ! !SugarDataStore methodsFor: 'org.laptop.sugar.DataStore' stamp: 'bf 9/18/2008 16:22'! onUnmountedSend: aSelector to: anObject "Automatically generated" ^self onDBusSignal: 'Unmounted' interface: 'org.laptop.sugar.DataStore' signature: 'a{sv}' send: aSelector to: anObject! ! !SugarDataStore methodsFor: 'org.laptop.sugar.DataStore' stamp: 'bf 9/18/2008 16:22'! onUpdatedSend: aSelector to: anObject "Automatically generated" ^self onDBusSignal: 'Updated' interface: 'org.laptop.sugar.DataStore' signature: 's' send: aSelector to: anObject! ! !SugarDataStore methodsFor: 'matching' stamp: 'bf 9/18/2008 16:24'! onUpdated: objectId send: aSelector to: anObject ^self onDBusSignal: 'Updated' interface: 'org.laptop.sugar.DataStore' arguments: {0 -> objectId} send: aSelector to: anObject ! ! !SugarLauncher methodsFor: 'datastore' stamp: 'bf 9/18/2008 17:21'! keepProperties: aDictionary for: aProject | dontKeep props | dontKeep := #('activity' 'activity_id' 'title' 'title_set_by_user' 'keep' 'mtime' 'timestamp' 'preview' 'icon-color' 'mime_type') asSet. props := Dictionary new: aDictionary size. aDictionary keysAndValuesDo: [:key :value | (dontKeep includes: key) ifFalse: [props at: key put: value]]. aProject projectParameterAt: #sugarProperties put: props.! ! !SugarLauncher methodsFor: 'datastore' stamp: 'bf 9/18/2008 16:39'! makeJournalEntryFor: aProject filename: aFilename mimetype: mimetypeString | id | (id := parameters at: 'OBJECT_ID' ifAbsent: [nil]) ifNil: [ id := self createJournalEntryFor: aProject filename: aFilename mimetype: mimetypeString. parameters at: 'OBJECT_ID' put: id. self monitorJournalEntry] ifNotNil: [ (aProject projectParameterAt: #sugarAutoSave ifAbsent: [true]) ifTrue: [self updateJournalEntry: id for: aProject filename: aFilename mimetype: mimetypeString] ifFalse: [self createJournalEntryFor: aProject filename: aFilename mimetype: mimetypeString]]! ! !SugarLauncher methodsFor: 'datastore' stamp: 'bf 9/18/2008 16:48'! monitorJournalEntry | objectId | objectId := self parameterAt: 'OBJECT_ID' ifAbsent: [^self]. self dataStore onUpdated: objectId send: #updatedJournalEntry: to: self.! ! !SugarLauncher methodsFor: 'datastore' stamp: 'bf 9/18/2008 17:14'! propertiesFrom: aProject | preview autoSave props | preview := [ByteArray streamContents: [:s | PNGReadWriter putForm: (aProject thumbnail asFormOfDepth: 16) onStream: s]] ifError: ['']. autoSave := aProject projectParameterAt: #sugarAutoSave ifAbsent: [true]. props := (aProject projectParameterAt: #sugarProperties ifAbsent: [Dictionary new]) copy. { 'activity' -> self bundleId. 'activity_id' -> (autoSave ifTrue: [self activityId] ifFalse: ['']). "temp hack for trial-3" 'title:text' -> (self titleFromProject: aProject) squeakToUtf8. 'title_set_by_user' -> (aProject currentVersionNumber>0 ifTrue: ['1'] ifFalse: ['0']). 'keep' -> (autoSave ifTrue: ['0'] ifFalse: ['1']). 'mtime' -> (DateAndTime now asString first: 19). 'timestamp' -> (DateAndTime now asUnixTime). 'preview' -> preview. 'icon-color' -> self ownerBuddy colors. } do: [:each | props add: each]. ^props ! ! !SugarLauncher methodsFor: 'datastore' stamp: 'bf 9/18/2008 17:05'! resumeJournalEntry: id | props file title project mimetype | props := self dataStore getProperties: id. title := (props at: 'title' ifAbsent: ['untitled' translated]) utf8ToSqueak. mimetype := props at: 'mime_type' ifAbsent: ['']. mimetype isEmpty ifTrue: [^self welcome: '']. mimetype = 'application/x-squeak-project' ifFalse: [ "Do not modify original non-project journal entry when later saving this project" parameters removeKey: 'OBJECT_ID' ifAbsent: []. "reuse drop code" WorldState addDeferredUIMessage: [ self open: id title: title mimetype: mimetype]. ^Project enterNew]. ProjectLoading showProgressBarDuring: [ Display fillWhite;forceToScreen. file := self getFile: id. "load project and close temp file (which will thus be deleted)" project := ProjectLoading loadName: ((title copyReplaceAll: '/' with: '\') contractTo: 64) stream: file fromDirectory: nil withProjectView: nil. file close. self monitorJournalEntry. self keepProperties: props for: project. project name: title. project projectParameterAt: #sugarAutoSave put: true. project enter]. ! ! !SugarLauncher methodsFor: 'datastore' stamp: 'bf 9/18/2008 17:12'! updatedJournalEntry: objectId "sent from DBus in background process" | props title | (self parameterAt: 'OBJECT_ID' ifAbsent: [^self]) = objectId ifTrue: [ props := [self dataStore getProperties: objectId] on: DBusError do: [^self]. title := (props at: 'title' ifAbsent: [^self]) utf8ToSqueak. Project current name: title. self keepProperties: props for: Project current] ! !