@@ -135,7 +135,7 @@ public Flipnote(string filename)
135135 SoundHeader . SE2TrackSize = r . ReadUInt32 ( ) ;
136136 SoundHeader . SE3TrackSize = r . ReadUInt32 ( ) ;
137137 SoundHeader . CurrentFramespeed = r . ReadByte ( ) ;
138- SoundHeader . RecordedBGMFramespeed = r . ReadByte ( ) ;
138+ SoundHeader . RecordingBGMFramespeed = r . ReadByte ( ) ;
139139 r . ReadBytes ( 14 ) ;
140140
141141 SoundData . RawBGM = r . ReadBytes ( ( int ) SoundHeader . BGMTrackSize ) ;
@@ -285,73 +285,75 @@ public WriteableBitmap RenderFrame(int index)
285285
286286 public string Filename ;
287287
288- public static Flipnote New ( string authorName , byte [ ] authorId , List < DecodedFrame > frames )
288+ public static Flipnote New ( string authorName , byte [ ] authorId , List < DecodedFrame > frames , bool ignoreMetadata = false )
289289 {
290290 var f = new Flipnote ( ) ;
291291 f . FrameCount = ( ushort ) ( frames . Count - 1 ) ;
292292 f . FormatVersion = 0x24 ;
293293
294- f . Metadata . RootAuthorId = new byte [ 8 ] ;
295- f . Metadata . ParentAuthorId = new byte [ 8 ] ;
296- f . Metadata . CurrentAuthorId = new byte [ 8 ] ;
297- Array . Copy ( authorId , f . Metadata . RootAuthorId , 8 ) ;
298- Array . Copy ( authorId , f . Metadata . ParentAuthorId , 8 ) ;
299- Array . Copy ( authorId , f . Metadata . CurrentAuthorId , 8 ) ;
300- f . Metadata . RootAuthorName = authorName ;
301- f . Metadata . ParentAuthorName = authorName ;
302- f . Metadata . CurrentAuthorName = authorName ;
303-
304- string mac6 = string . Join ( "" , authorId . Take ( 3 ) . Reverse ( ) . Select ( t => t . ToString ( "X2" ) ) ) ;
305- var asm = Assembly . GetEntryAssembly ( ) . GetName ( ) . Version ;
306- var dt = DateTime . UtcNow ;
307- var fnVM = ( ( byte ) asm . Major ) . ToString ( "X2" ) ;
308- var fnVm = ( ( byte ) asm . Minor ) . ToString ( "X2" ) ;
309- var fnYY = ( byte ) ( dt . Year - 2009 ) ;
310- var fnMD = dt . Month * 32 + dt . Day ;
311- var fnTi = ( ( ( dt . Hour * 3600 + dt . Minute * 60 + dt . Second ) % 4096 ) >> 1 ) + ( fnMD > 255 ? 1 : 0 ) ;
312- fnMD = ( byte ) fnMD ;
313- var fnYMD = ( fnYY << 9 ) + fnMD ;
314- var H6_9 = fnYMD . ToString ( "X4" ) ;
315- var H89 = ( ( byte ) fnMD ) . ToString ( "X2" ) ;
316- var HABC = fnTi . ToString ( "X3" ) ;
317-
318- string _13str = $ "80{ fnVM } { fnVm } { H6_9 } { HABC } ";
319- string nEdited = 0 . ToString ( ) . PadLeft ( 3 , '0' ) ;
320- var filename = $ "{ mac6 } _{ _13str } _{ nEdited } .ppm";
321- f . Filename = FilenameChecksumDigit ( filename ) + filename . Remove ( 0 , 1 ) ;
322-
323- var rawfn = new byte [ 18 ] ;
324- for ( int i = 0 ; i < 3 ; i ++ )
294+ if ( ! ignoreMetadata )
325295 {
326- rawfn [ i ] = byte . Parse ( "" + mac6 [ 2 * i ] + mac6 [ 2 * i + 1 ] , System . Globalization . NumberStyles . HexNumber ) ;
327- }
328- for ( int i = 3 ; i < 16 ; i ++ )
329- {
330- rawfn [ i ] = ( byte ) _13str [ i - 3 ] ;
331- }
332- rawfn [ 16 ] = rawfn [ 17 ] = 0 ;
296+ f . Metadata . RootAuthorId = new byte [ 8 ] ;
297+ f . Metadata . ParentAuthorId = new byte [ 8 ] ;
298+ f . Metadata . CurrentAuthorId = new byte [ 8 ] ;
299+ Array . Copy ( authorId , f . Metadata . RootAuthorId , 8 ) ;
300+ Array . Copy ( authorId , f . Metadata . ParentAuthorId , 8 ) ;
301+ Array . Copy ( authorId , f . Metadata . CurrentAuthorId , 8 ) ;
302+ f . Metadata . RootAuthorName = authorName ;
303+ f . Metadata . ParentAuthorName = authorName ;
304+ f . Metadata . CurrentAuthorName = authorName ;
305+
306+ string mac6 = string . Join ( "" , authorId . Take ( 3 ) . Reverse ( ) . Select ( t => t . ToString ( "X2" ) ) ) ;
307+ var asm = Assembly . GetEntryAssembly ( ) . GetName ( ) . Version ;
308+ var dt = DateTime . UtcNow ;
309+ var fnVM = ( ( byte ) asm . Major ) . ToString ( "X2" ) ;
310+ var fnVm = ( ( byte ) asm . Minor ) . ToString ( "X2" ) ;
311+ var fnYY = ( byte ) ( dt . Year - 2009 ) ;
312+ var fnMD = dt . Month * 32 + dt . Day ;
313+ var fnTi = ( ( ( dt . Hour * 3600 + dt . Minute * 60 + dt . Second ) % 4096 ) >> 1 ) + ( fnMD > 255 ? 1 : 0 ) ;
314+ fnMD = ( byte ) fnMD ;
315+ var fnYMD = ( fnYY << 9 ) + fnMD ;
316+ var H6_9 = fnYMD . ToString ( "X4" ) ;
317+ var H89 = ( ( byte ) fnMD ) . ToString ( "X2" ) ;
318+ var HABC = fnTi . ToString ( "X3" ) ;
319+
320+ string _13str = $ "80{ fnVM } { fnVm } { H6_9 } { HABC } ";
321+ string nEdited = 0 . ToString ( ) . PadLeft ( 3 , '0' ) ;
322+ var filename = $ "{ mac6 } _{ _13str } _{ nEdited } .ppm";
323+ f . Filename = FilenameChecksumDigit ( filename ) + filename . Remove ( 0 , 1 ) ;
324+
325+ var rawfn = new byte [ 18 ] ;
326+ for ( int i = 0 ; i < 3 ; i ++ )
327+ {
328+ rawfn [ i ] = byte . Parse ( "" + mac6 [ 2 * i ] + mac6 [ 2 * i + 1 ] , System . Globalization . NumberStyles . HexNumber ) ;
329+ }
330+ for ( int i = 3 ; i < 16 ; i ++ )
331+ {
332+ rawfn [ i ] = ( byte ) _13str [ i - 3 ] ;
333+ }
334+ rawfn [ 16 ] = rawfn [ 17 ] = 0 ;
333335
334- f . Metadata . ParentFilename = new byte [ 18 ] ;
335- f . Metadata . CurrentFilename = new byte [ 18 ] ;
336+ f . Metadata . ParentFilename = new byte [ 18 ] ;
337+ f . Metadata . CurrentFilename = new byte [ 18 ] ;
336338
337- Array . Copy ( rawfn , f . Metadata . ParentFilename , 18 ) ;
338- Array . Copy ( rawfn , f . Metadata . CurrentFilename , 18 ) ;
339+ Array . Copy ( rawfn , f . Metadata . ParentFilename , 18 ) ;
340+ Array . Copy ( rawfn , f . Metadata . CurrentFilename , 18 ) ;
339341
340- f . Metadata . RootFileFragment = new byte [ 8 ] ;
341- for ( int i = 0 ; i < 3 ; i ++ )
342- {
343- f . Metadata . RootFileFragment [ i ] =
344- byte . Parse ( "" + mac6 [ 2 * i ] + mac6 [ 2 * i + 1 ] , System . Globalization . NumberStyles . HexNumber ) ;
345- }
346- for ( int i = 3 ; i < 8 ; i ++ )
347- {
348- f . Metadata . RootFileFragment [ i ] =
349- ( byte ) ( ( byte . Parse ( "" + _13str [ 2 * ( i - 3 ) ] , System . Globalization . NumberStyles . HexNumber ) << 4 )
350- + byte . Parse ( "" + _13str [ 2 * ( i - 3 ) + 1 ] , System . Globalization . NumberStyles . HexNumber ) ) ;
342+ f . Metadata . RootFileFragment = new byte [ 8 ] ;
343+ for ( int i = 0 ; i < 3 ; i ++ )
344+ {
345+ f . Metadata . RootFileFragment [ i ] =
346+ byte . Parse ( "" + mac6 [ 2 * i ] + mac6 [ 2 * i + 1 ] , System . Globalization . NumberStyles . HexNumber ) ;
347+ }
348+ for ( int i = 3 ; i < 8 ; i ++ )
349+ {
350+ f . Metadata . RootFileFragment [ i ] =
351+ ( byte ) ( ( byte . Parse ( "" + _13str [ 2 * ( i - 3 ) ] , System . Globalization . NumberStyles . HexNumber ) << 4 )
352+ + byte . Parse ( "" + _13str [ 2 * ( i - 3 ) + 1 ] , System . Globalization . NumberStyles . HexNumber ) ) ;
353+ }
354+ f . Metadata . Timestamp = ( uint ) ( ( dt - new DateTime ( 2000 , 1 , 1 , 0 , 0 , 0 ) ) . TotalSeconds ) ;
355+ f . RawThumbnail = new DecodedFrame ( ) . CreateThumbnailW64 ( ) ;
351356 }
352- f . Metadata . Timestamp = ( uint ) ( ( dt - new DateTime ( 2000 , 1 , 1 , 0 , 0 , 0 ) ) . TotalSeconds ) ;
353- f . RawThumbnail = new DecodedFrame ( ) . CreateThumbnailW64 ( ) ;
354-
355357 // write the animation data
356358 // THIS PART MUST BE CHANGED
357359
@@ -371,7 +373,7 @@ public static Flipnote New(string authorName, byte[] authorId, List<DecodedFrame
371373 f . AnimationDataSize = animDataSize ;
372374
373375 f . SoundHeader . CurrentFramespeed = 3 ;
374- f . SoundHeader . RecordedBGMFramespeed = 1 ;
376+ f . SoundHeader . RecordingBGMFramespeed = 1 ;
375377 return f ;
376378 }
377379
@@ -432,7 +434,7 @@ public void Save(string fn)
432434 w . Write ( ( uint ) 0 ) ; // SE3
433435
434436 w . Write ( SoundHeader . CurrentFramespeed ) ; // Frame speed
435- w . Write ( SoundHeader . RecordedBGMFramespeed ) ; //BGM speed
437+ w . Write ( SoundHeader . RecordingBGMFramespeed ) ; //BGM speed
436438 w . Write ( new byte [ 14 ] ) ;
437439
438440 using ( var ms = new MemoryStream ( ) )
@@ -441,7 +443,14 @@ public void Save(string fn)
441443 w . BaseStream . Seek ( 0 , SeekOrigin . Begin ) ;
442444 w . BaseStream . CopyTo ( ms ) ;
443445 w . BaseStream . Seek ( p , SeekOrigin . Begin ) ;
444- w . Write ( ComputeSignature ( ms . ToArray ( ) ) ) ;
446+ if ( File . Exists ( "private-key" ) )
447+ {
448+ w . Write ( ComputeSignature ( ms . ToArray ( ) ) ) ;
449+ }
450+ else
451+ {
452+ // maybe throw an error
453+ }
445454 }
446455 w . Write ( new byte [ 0x10 ] ) ;
447456 }
@@ -913,7 +922,7 @@ public class _SoundHeader
913922 public uint SE2TrackSize ;
914923 public uint SE3TrackSize ;
915924 public byte CurrentFramespeed ;
916- public byte RecordedBGMFramespeed ;
925+ public byte RecordingBGMFramespeed ;
917926 }
918927
919928 public class _SoundData
@@ -961,6 +970,6 @@ public int this[int i]
961970 }
962971 }
963972 }
964- }
973+ }
965974 }
966975}
0 commit comments