The Trunk: EToys-tfel.260.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: EToys-tfel.260.mcz

commits-2
Tim Felgentreff uploaded a new version of EToys to project The Trunk:
http://source.squeak.org/trunk/EToys-tfel.260.mcz

==================== Summary ====================

Name: EToys-tfel.260
Author: tfel
Time: 29 September 2016, 12:10:17.056594 pm
UUID: eddd1b98-0a8e-4a23-b671-287897615d1b
Ancestors: EToys-tfel.259

for performance, write sexp on DataStream

=============== Diff against EToys-tfel.259 ===============

Item was changed:
  ----- Method: Project>>writeForExportInSexp:withSources:inDirectory:changeSet: (in category '*Etoys-Squeakland-file in/out') -----
  writeForExportInSexp: sexp withSources: actualName inDirectory: aDirectory changeSet:
  aChangeSetOrNil
 
  | fileStream tempFileName zipper |
 
  tempFileName := aDirectory nextNameFor: 'SqProject' extension: 'temp'.
  zipper := [
  aDirectory rename: tempFileName toBe: actualName.
  aDirectory deleteFileNamed: tempFileName ifAbsent: []
  ].
+ aDirectory forceNewFileNamed: tempFileName do: [:f |
+ f binary;
+  nextPutAll: ((DataStream on: (WriteStream on: (ByteArray new: sexp elements size * 50)))
+ nextPut: sexp;
+ contents)].
- fileStream := aDirectory newFileNamed: tempFileName.
- sexp printOn: fileStream.
- fileStream close.
  fileStream := aDirectory newFileNamed: 'changes.cs'.
  aChangeSetOrNil ifNotNil: [aChangeSetOrNil fileOutOn: fileStream].
  fileStream close.
 
  zipper value.!

Item was changed:
  ----- Method: ProjectLoading class>>loadSexpProjectDict:stream:fromDirectory:withProjectView: (in category '*etoys') -----
  loadSexpProjectDict: dict stream: preStream fromDirectory: aDirectoryOrNil withProjectView: existingView
 
+     | archive anObject newProj d member memberStream members newSet allNames realName oldSet s |
-     | archive anObject newProj d member b s memberStream members newSet allNames realName oldSet |
  (self checkStream: preStream) ifTrue: [^ nil].
  ProgressNotification signal: '0.2'.
  preStream reset.
  archive := preStream isZipArchive
  ifTrue:[ZipArchive new readFrom: preStream]
  ifFalse:[nil].
 
  members := archive  membersMatching: '*.cs'.
  members do: [:e | newSet := ChangeSorter newChangesFromStream: e contentStream named: 'zzTemp', Time totalSeconds printString].
 
  member := (archive membersMatching: '*.sexp') first.
  memberStream := member contentStream.
  (self checkSecurity: member name preStream: preStream projStream: memberStream)
  ifFalse: [^nil].
+ self flag: #tfel. "load all projects and save them again in the new format, then get rid of the error block!!"
- b := String new: member uncompressedSize.
  s := memberStream basicUpToEnd.
+ d := [(DataStream on: memberStream) next] on: Error do: [:e |
+ (Smalltalk at: #MSExpParser) parse: s with: #ksexp].
- d := (Smalltalk at: #MSExpParser) parse: s with: #ksexp.
  anObject := d sissReadObjectsAsEtoysProject.
  preStream close.
 
  "anObject := (MSExpParser parse: (archive membersMatching: '*.sexp') first contents with: #ksexp) sissReadObjects."
  anObject ifNil: [^ nil].
  (anObject isKindOf: PasteUpMorph) ifFalse: [^ World addMorph: anObject].
  ProgressNotification  signal: '0.7'.
  newProj := MorphicProject new.
  newProj installPasteUpAsWorld: anObject.
  newSet ifNotNil: [oldSet := newProj changeSet.  newProj setChangeSet: newSet. ChangeSorter removeChangeSet: oldSet].
  dict at: 'projectname' ifPresent: [:n |
  allNames := Project allNames.
  realName := Utilities keyLike: n  satisfying:
  [:nn | (allNames includes: nn) not].
  newProj renameTo: realName.
  ].
  anObject valueOfProperty: #projectVersion ifPresentDo: [:v | newProj version: v].
  newProj  noteManifestDetailsIn: dict.
  ProgressNotification  signal: '0.8'.
  ^ newProj.!

Item was changed:
  ----- Method: SugarNavigatorBar>>loadASexp (in category 'button actions') -----
  loadASexp
 
  | file siss sexp |
  file := FileList2 modalFileSelectorForSuffixes: #('sexp').
  file ifNil: [^ self].
+ file binary.
  siss := file contents.
+ sexp := [(DataStream on: (file reset; yourself)) next] on: Error do: [:e |
+ (Smalltalk at: #MSExpParser) parse: siss with: #ksexp].
- file close.
- sexp := (Smalltalk at: #MSExpParser) parse: siss with: #ksexp.
  sexp sissReadObjectsAsEtoysProject submorphs do: #openInWorld.
  !

Item was changed:
  ----- Method: SugarNavigatorBar>>publishSexp (in category 'button actions') -----
  publishSexp
 
  | morphs siss tempPasteUp directory fileModel window prevSubmorphs |
  self world paintBoxOrNil ifNotNil: [
  self inform: 'You seem to be painting a sketch. You should finish or cancel your painting first' translated.
  ^ self].
  tempPasteUp := PasteUpMorph new
  bounds: (self world bounds);
  openInWorld;
  yourself.
  morphs := self world submorphs
  select: [:m |
  (m player notNil and: [m player externalName ~= 'dot'])
  or: [m isKindOf: ScriptEditorMorph]].
  prevSubmorphs := self world submorphs.
  tempPasteUp addAllMorphs: morphs.
  siss := tempPasteUp sissScanObjectsAsEtoysProject.
  tempPasteUp delete.
  self world addAllMorphs: prevSubmorphs.
 
  window := FileList2 morphicViewProjectSaverFor: Project current.
  (window findDeepSubmorphThat: [:m |
  m eventHandler notNil and: [m eventHandler mouseUpSelector = #saveLocalOnlyHit]] ifAbsent: [])
  ifNotNil: [:m | m delete].
  fileModel := window valueOfProperty: #FileList.
  self world addMorphInLayer: window.
  self world startSteppingSubmorphsOf: window.
  FileList2 modalLoopOn: window.
  directory := fileModel getSelectedDirectory withoutListWrapper.
  directory ifNil: [^ self].
+ directory forceNewFileNamed: (Project current name, '.sexp') do: [:f |
+ f binary;
+  nextPutAll: ((DataStream on: (WriteStream on: (ByteArray new: siss elements size * 50)))
+ nextPut: siss;
+ contents)].
- directory forceNewFileNamed: (Project current name, '.sexp') do: [:f | siss printOn: f].
  !