From a73140ee37021e0b0f0038c746ef115b1174ae1a Mon Sep 17 00:00:00 2001 From: pbsds Date: Sun, 26 Jan 2014 05:30:04 +0100 Subject: [PATCH] Initial commit --- Hatenatools/NTFT.py | 140 +++ Hatenatools/PPM.py | 776 ++++++++++++++++ Hatenatools/ReadMe.txt | 30 + Hatenatools/UGO.py | 573 ++++++++++++ Hatenatools/__init__.py | 3 + Hatenatools/hatenatools project page.url | 5 + .../74CC1F_0D376FC60C9DC_000.ppm | Bin 0 -> 145772 bytes .../Creators/913304C0CC74CC1F/flipnotes.dat | 1 + database/new_flipnotes.dat | 1 + hatena.py | 325 +++++++ hatenadir/css/ds/basic.css | 830 ++++++++++++++++++ hatenadir/css/ds/common.css | 808 +++++++++++++++++ hatenadir/ds/v2-xx/__ntfts/News.ntft | 1 + hatenadir/ds/v2-xx/__ntfts/Special Room.ntft | 1 + hatenadir/ds/v2-xx/en/confirm/delete.txt | Bin 0 -> 418 bytes hatenadir/ds/v2-xx/en/confirm/download.txt | Bin 0 -> 514 bytes hatenadir/ds/v2-xx/en/confirm/upload.txt | Bin 0 -> 410 bytes hatenadir/ds/v2-xx/en/confirm/upload_bak.txt | Bin 0 -> 3190 bytes hatenadir/ds/v2-xx/en/eula.txt | Bin 0 -> 388 bytes hatenadir/ds/v2-xx/eula_list.tsv | 1 + hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py | 94 ++ .../ds/v2-xx/frontpage/likedmovies.ugo.py | 94 ++ hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py | 91 ++ hatenadir/ds/v2-xx/help/post_howto.htm | 1 + hatenadir/ds/v2-xx/inbox.ugo | Bin 0 -> 216 bytes hatenadir/ds/v2-xx/index.ugoxml | 72 ++ hatenadir/ds/v2-xx/information.ugo | Bin 0 -> 296 bytes hatenadir/ds/v2-xx/movie.py | 93 ++ hatenadir/ds/v2-xx/movies.ugo | Bin 0 -> 90472 bytes hatenadir/ds/v2-xx/post/flipnote.post.py | 32 + hatenadir/images/ds/kaeru.ntft | 1 + hatenadir/images/ds/list.ntft | 1 + hatenadir/images/ds/thumb_down.ntft | 1 + logs/2014/January/26 January activity.log | 3 + logs/2014/January/26 January error.log | 0 server.py | 103 +++ 36 files changed, 4081 insertions(+) create mode 100644 Hatenatools/NTFT.py create mode 100644 Hatenatools/PPM.py create mode 100644 Hatenatools/ReadMe.txt create mode 100644 Hatenatools/UGO.py create mode 100644 Hatenatools/__init__.py create mode 100644 Hatenatools/hatenatools project page.url create mode 100644 database/Creators/913304C0CC74CC1F/74CC1F_0D376FC60C9DC_000.ppm create mode 100644 database/Creators/913304C0CC74CC1F/flipnotes.dat create mode 100644 database/new_flipnotes.dat create mode 100644 hatena.py create mode 100644 hatenadir/css/ds/basic.css create mode 100644 hatenadir/css/ds/common.css create mode 100644 hatenadir/ds/v2-xx/__ntfts/News.ntft create mode 100644 hatenadir/ds/v2-xx/__ntfts/Special Room.ntft create mode 100644 hatenadir/ds/v2-xx/en/confirm/delete.txt create mode 100644 hatenadir/ds/v2-xx/en/confirm/download.txt create mode 100644 hatenadir/ds/v2-xx/en/confirm/upload.txt create mode 100644 hatenadir/ds/v2-xx/en/confirm/upload_bak.txt create mode 100644 hatenadir/ds/v2-xx/en/eula.txt create mode 100644 hatenadir/ds/v2-xx/eula_list.tsv create mode 100644 hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py create mode 100644 hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py create mode 100644 hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py create mode 100644 hatenadir/ds/v2-xx/help/post_howto.htm create mode 100644 hatenadir/ds/v2-xx/inbox.ugo create mode 100644 hatenadir/ds/v2-xx/index.ugoxml create mode 100644 hatenadir/ds/v2-xx/information.ugo create mode 100644 hatenadir/ds/v2-xx/movie.py create mode 100644 hatenadir/ds/v2-xx/movies.ugo create mode 100644 hatenadir/ds/v2-xx/post/flipnote.post.py create mode 100644 hatenadir/images/ds/kaeru.ntft create mode 100644 hatenadir/images/ds/list.ntft create mode 100644 hatenadir/images/ds/thumb_down.ntft create mode 100644 logs/2014/January/26 January activity.log create mode 100644 logs/2014/January/26 January error.log create mode 100644 server.py diff --git a/Hatenatools/NTFT.py b/Hatenatools/NTFT.py new file mode 100644 index 0000000..e7fb1d3 --- /dev/null +++ b/Hatenatools/NTFT.py @@ -0,0 +1,140 @@ +#NTFT.py by pbsds +#Free to use as long as credit is given to pbsds / Peder Bergebakken Sundt +#PIL is required to write images to disk +# +#Credit: +# +# -The guys behind TiledGGD at https://code.google.com/p/tiledggd/ +# This sped up the my work a lot +import sys +try: + import Image + hasPIL = True +except ImportError: + hasPIL = False + + +#helpers +def AscDec(ascii, LittleEndian=False):#Converts a ascii string into a decimal + ret = 0 + l = map(ord, ascii) + if LittleEndian: l.reverse() + for i in l: + ret = (ret<<8) | i + return ret +def DecAsc(dec, length=None, LittleEndian=False):#Converts a decimal into an ascii string of chosen length + out = [] + while dec <> 0: + out.insert(0, dec&0xFF) + dec >>= 8 + #"".join(map(chr, out)) + + if length: + if len(out) > length: + #return "".join(map(chr, out[-length:])) + out = out[-length:] + if len(out) < length: + #return "".join(map(chr, [0]*(length-len(out)) + out)) + out = [0]*(length-len(out)) + out + + if LittleEndian: out.reverse() + return "".join(map(chr, out)) + +#Class NTFT: +# +# todo: write documentation +class NTFT: + def __init__(self): + self.Loaded = False + def ReadFile(self, path, size): + f = open(path, "rb") + ret = self.Read(f.read(), size) + f.close() + return ret + def Read(self, data, (w, h)): + if w*h*2 <> len(data): + print "Invalid size" + return False + + self.Image = [[None for _ in xrange(h)] for _ in xrange(w)] + for y in xrange(h): + for x in xrange(w): + pos = (x + y*w)*2 + #print pos + byte = AscDec(data[pos:pos+2], True) + byte = AscDec(data[pos:pos+2], True) + #ARGB1555 -> RGBA8:#require true + a = (byte >> 15 ) * 0xFF + b = (byte >> 10 & 0x1F) * 0xFF / 0x1F + g = (byte >> 5 & 0x1F) * 0xFF / 0x1F + r = (byte & 0x1F) * 0xFF / 0x1F + # #RGB565 -> RGBA8: + # a = 0xFF + # r = (byte >> 11 & 0x1F) * 0xFF / 0x1F + # g = (byte >> 5 & 0x3F) * 0xFF / 0x3F + # b = (byte & 0x1F) * 0xFF / 0x1F + #print x, y + self.Image[x][y] = (r<<24) | (g<<16) | (b<<8) | a#RGBA8 + + self.Loaded = True + return self + def WriteFile(self, path): + pass + def Pack(self): + pass + +#Function WriteImage: +# +# Writes a 2D list if uint32 RGBA values as a image files. +# Designed to work with PPM().Thumbnail or PPM().GetFrame(n) +# +# This function requires the PIl imaging module +def WriteImage(image, outputPath): + if not hasPIL or not image: return False + + out = [] + for y in xrange(len(image[0])): + for x in xrange(len(image)): + out.append(DecAsc(image[x][y], 4)) + + out = Image.fromstring("RGBA", (len(image), len(image[0])), "".join(out)) + + filetype = outputPath[outputPath.rfind(".")+1:] + out.save(outputPath, filetype) + + return True + +#testing: +# i = NTFT().ReadFile("NTFTtests/kaeru.ntft", (64, 32)) +# WriteImage(i.Image, "NTFTtests/kaeru.png") + +# i = NTFT().ReadFile("NTFTtests/News.ntft", (32, 32)) +# WriteImage(i.Image, "NTFTtests/News.png") + +# i = NTFT().ReadFile("NTFTtests/Special Room.ntft", (32, 32)) +# WriteImage(i.Image, "NTFTtests/Special Room.png") + +if __name__ == "__main__": + print " == NTFT.py ==" + print " == by pbsds ==" + print " == v0.05 ==" + print + + if len(sys.argv) < 4: + print "Usage:" + print " NTFT.py " + print "" + print "The NTFT file contain only the colordata, so it's up to the user to find and" + print "store the resolution of the images." + print "32x32 is the normal size for button icons in UGO files." + sys.exit() + + input = sys.argv[1] + output = sys.argv[2] + width = int(sys.argv[3]) + height = int(sys.argv[4]) + + print "Converting..." + WriteImage(NTFT().ReadFile(input, (width, height)).Image, output) + print "Done!" + \ No newline at end of file diff --git a/Hatenatools/PPM.py b/Hatenatools/PPM.py new file mode 100644 index 0000000..cf414d3 --- /dev/null +++ b/Hatenatools/PPM.py @@ -0,0 +1,776 @@ +#PPM.py by pbsds for python 2.7 +#Free to use. Publicated modifications must give credit to pbsds / Peder Bergebakken Sundt +#PIL is required to write frames and thumbnails to disk +# +#Credits: +# +# -Steven for most of the documentation on DSiBrew and his frame decoding example on his talkpage +# -Remark for help on the 8x8 tiling on the preview image. +# -Austin Burk and Jsafive for supplying .tmb files + +import sys, wave#needs os and time aswell +try: + import Image + hasPIL = True +except ImportError: + hasPIL = False + +#helpers: +def AscDec(ascii, LittleEndian=False):#Converts a ascii string into a decimal + ret = 0 + l = map(ord, ascii) + if LittleEndian: l.reverse() + for i in l: + ret = (ret<<8) | i + return ret +def DecAsc(dec, length=None, LittleEndian=False):#Converts a decimal into an ascii string of chosen length + out = [] + while dec <> 0: + out.insert(0, dec&0xFF) + dec >>= 8 + #"".join(map(chr, out)) + + if length: + if len(out) > length: + #return "".join(map(chr, out[-length:])) + out = out[-length:] + if len(out) < length: + #return "".join(map(chr, [0]*(length-len(out)) + out)) + out = [0]*(length-len(out)) + out + + if LittleEndian: out.reverse() + return "".join(map(chr, out)) +def AddPadding(i,pad = 0x10):#used mainly for zipaligning offsets + if i % pad <> 0: + return i + pad - (i % pad) + return i + +#Class PPM: +# +# With this class you can read a Flipnote PPM file into memory and get its attributes. +# You do so by using either instance.ReadFile() or instance.Read() of your instance of the PPM class. +# When reading the PPM file you can specify what parts you need by passing these parameters: +# - DecodeThumbnail = True: The thumbnail will be predecoded. GetThumbnail() will still work if set to False, only takes a bit longer. Default is False +# - ReadFrames = True: The frames are decoded. Disabling this will speed up the PPM reading a lot. Default is True +# - ReadSound = True: Reads the sound data. Default is False +# +# After reading a PPM file, these values are available: +# +# - instance.FrameCount: The number of frames this flipnote consists of +# - instance.Locked: A boolean telling us wether it's locked or not +# - instance.ThumbnailFrameIndex: Which frame the thumbnail is(starting at 0) +# - instance.OriginalAuthorName: The name of the original author in unicode +# - instance.EditorAuthorName: The name of the (previous?) editing author in unicode +# - instance.Username: The username in unicode +# - instance.OriginalAuthorID: The ID of the original author +# - instance.EditorAuthorID: The ID of the last editor, the last user to save the file +# - instance.PreviousEditAuthorID: The ID of the previous editor +# - instance.OriginalFilename: The original filename +# - instance.CurrentFilename: The current filename +# - instance.Date: The date in seconds since January 1'st 2000 +# - instance.GetThumbnail(): The thumbnail stored in a 2D list of uint32 RGBA values. Will decode it first if not done so already +# - instance.GetFrame(n): Returns the specified frame as a 2D list of uint32 RGBA values. Only works if ReadFrames was true when reading the PPM file +# - instance.Looped: A boolean telling us wether it's looped or not +# - instance.SFXUsage: A list telling us when the different sound effects are used: +# instance.SFXUsage[frame] = [SFX1, SFX2, SFX3] where the SFX's are booleans +# - instance.Framespeed: a value between 1 and 8 telling us the speed +# - instance.BGMFramespeed: The framespeed when the BGM was recorded. used for resampling +# - instance.Frames: A list containing the decoded frames' raw data. Only available if ReadFrames was true when reading the PPM file +# instance.Frames[frame] = [Inverted(boolean), [color #1, color #2], frame] +# color #1 and #2 is a value between 0 and 3, check the palette in instance.GetFrame() to see what they are. +# frame is a 3d list, used like this. frame[layer][x][y] = boolean +# To get a colored image of a frame, use instance.GetFrame() +# - instance.SoundData: A list contaning the raw data of the BGM and the 3 sound effects. Only available if ReadSound was true set to true +class PPM: + def __init__(self): + self.Loaded = [False, False, False]#(Meta, Frames, Sound) + self.Frames = None + self.Thumbnail = None + self.RawThumbnail = None + self.SoundData = None + def ReadFile(self, path, DecodeThumbnail=False, ReadFrames=True, ReadSound=False):#Load: (thumbnail, frames, sound) + f = open(path, "rb") + ret = self.Read(f.read(), DecodeThumbnail, ReadFrames, ReadSound) + f.close() + return ret + def Read(self, data, DecodeThumbnail=False, ReadFrames=True, ReadSound=False):#Load: (thumbnail, frames, sound) + if data[:4] <> "PARA" or len(data) <= 0x6a0: + return False + + + #Read the header: + AudioOffset = AscDec(data[4:8], True) + 0x6a0 + AudioLenght = AscDec(data[8:12], True) + + self.FrameCount = AscDec(data[12:14], True) + 1 + self.Locked = ord(data[0x10]) & 0x01 == 1 + self.ThumbnailFrameIndex = AscDec(data[0x12:0x14], True)#which frame the thumbnnail represents + + self.OriginalAuthorName = data[0x14:0x2A].decode("UTF-16LE").split(u"\0")[0] + self.EditorAuthorName = data[0x2A:0x40].decode("UTF-16LE").split(u"\0")[0] + self.Username = data[0x40:0x56].decode("UTF-16LE").split(u"\0")[0] + + self.OriginalAuthorID = data[0x56:0x5e][::-1].encode("HEX").upper() + self.EditorAuthorID = data[0x5E:0x66][::-1].encode("HEX").upper()#the last user to save the file + + self.OriginalFilenameC = data[0x66:0x78]#compressed + self.CurrentFilenameC = data[0x78:0x8a]#compressed + self.OriginalFilename = "%s_%s_%s.tmb" % (self.OriginalFilenameC[:3].encode("HEX").upper(), self.OriginalFilenameC[3:-2], str(AscDec(self.OriginalFilenameC[-2:], True)).zfill(3)) + self.CurrentFilename = "%s_%s_%s.tmb" % (self.CurrentFilenameC[:3].encode("HEX").upper(), self.CurrentFilenameC[3:-2], str(AscDec(self.CurrentFilenameC[-2:], True)).zfill(3)) + + self.PreviousEditAuthorID = data[0x8a:0x92][::-1].encode("HEX").upper()#don't know what this really is + + #self.PartialFilenameC = data[0x92:0x9a]#compressed + + self.Date = AscDec(data[0x9a:0x9e], True)#in seconds since midnight 1'st january 2000 + + self.RawThumbnail = data[0xa0:0x6a0] + if DecodeThumbnail: + self.GetThumbnail()#self.Thumbnail[x][y] = uint32 RGBA + + self.Loaded[0] = True + + #read the animation sequence header: + self.Looped = ord(data[0x06A6]) >> 1 & 0x01 == 1#Unverified? + AnimationOffset = 0x6a8 + AscDec(data[0x6a0:0x6a4], True) + FrameOffsets = [AnimationOffset + AscDec(data[0x06a8+i*4:0x06a8+i*4+4], True) for i in xrange(self.FrameCount)] + + #Read the audio header: + self.SFXUsage = [(i&0x1<>0, i&0x2<>0, i&0x4<>0) for i in map(ord, data[AudioOffset:AudioOffset+self.FrameCount])]#SFXUsage[frame] = (sfx1, sfx2, sfx2) shere sfxX is either 0 or 1 + SoundSize =(AscDec(data[AddPadding(AudioOffset+self.FrameCount, 4) :AddPadding(AudioOffset+self.FrameCount, 4)+ 4], True),#BG music + AscDec(data[AddPadding(AudioOffset+self.FrameCount, 4)+ 4:AddPadding(AudioOffset+self.FrameCount, 4)+ 8], True),#SFX1 + AscDec(data[AddPadding(AudioOffset+self.FrameCount, 4)+ 8:AddPadding(AudioOffset+self.FrameCount, 4)+12], True),#SFX2 + AscDec(data[AddPadding(AudioOffset+self.FrameCount, 4)+12:AddPadding(AudioOffset+self.FrameCount, 4)+16], True))#SFX3 + self.Framespeed = 8 - ord(data[AddPadding(AudioOffset+self.FrameCount, 4) + 16]) + self.BGMFramespeed = 8 - ord(data[AddPadding(AudioOffset+self.FrameCount, 4) + 17])#framespeed when the bgm was recorded + + #Read the Frames: + if ReadFrames: + self.Frames = []#self.Frames[frame] = [inverted(bool), (color1(0-2), color2(0-2)), frame[layer][x][y] = bool] + for i, offset in enumerate(FrameOffsets): + #Read frame header: + Inverted = ord(data[offset]) & 0x01 == 0 + + #Reads which color that will be used: + Colors = (ord(data[offset]) >> 1 & 0x03, + ord(data[offset]) >> 3 & 0x03) + + Frame = self.ExtractFrame(data, offset, self.Frames[i-1][2] if i else None) + + self.Frames.append([Inverted, Colors, Frame]) + + self.Loaded[1] = True + else: + self.Loaded[1] = False + self.Frames = None + + #Read the Audio: + if ReadSound: + self.SoundData = [] + pos = AddPadding(AudioOffset+self.FrameCount+32, 4) + for i in xrange(4): + self.SoundData.append(data[pos:pos+SoundSize[i]]) + pos += SoundSize[i] + + self.Loaded[2] = True + else: + self.Loaded[2] = False + self.SoundData = None + + #return the results + return self + def WriteFile(self, path):#not implented + pass + #Extracting: + def GetFrame(self, frame):#frame is the index in self.Frames. Only works if ReadFrames was True when reading the PPM file + if not self.Loaded[1]: return None + + Inverted, Colors, Frame = self.Frames[frame] + + #Defines the palette: + Palette = [0xFFFFFFFF,0x000000FF,0xFF0000FF,0x0000FFFF] + if Inverted: + Palette[0] = 0x000000FF + Palette[1] = 0xFFFFFFFF + Color1 = Palette[Colors[0]] + Color2 = Palette[Colors[1]] + + out = [] + for x in xrange(256): + out.append([]) + for y in xrange(192): + if Frame[0][x][y]:#Color 1: + out[-1].append(Color1) + elif Frame[1][x][y]:#Color 2: + out[-1].append(Color2) + else:#background: + out[-1].append(Palette[0]) + + return out + def GetThumbnail(self, force=False): + if (not self.Thumbnail or force) and self.RawThumbnail: + if not self.RawThumbnail: + return False + + out = [[0 for _ in xrange(48)] for _ in xrange(64)] + palette = (0xFEFEFEFF,#0 + 0x4F4F4FFF,#1 + 0xFFFFFFFF,#2 + 0x9F9F9FFF,#3 + 0xFF0000FF,#4 + 0x770000FF,#5 + 0xFF7777FF,#6 + 0x00FF00FF,#7- + 0x0000FFFF,#8 + 0x000077FF,#9 + 0x7777FFFF,#A + 0x00FF00FF,#B- + 0xFF00FFFF,#C + 0x00FF00FF,#D- + 0x00FF00FF,#E- + 0x00FF00FF)#F- + + #8x8 tiling: + for ty in range(6): + for tx in range(8): + for y in range(8): + for x in range(0,8,2): + #two colors stored in each byte: + byte = ord(self.RawThumbnail[(ty*512+tx*64+y*8+x)/2]) + out[x+tx*8 ][y+ty*8] = palette[byte & 0xF] + out[x+tx*8+1][y+ty*8] = palette[byte >> 4] + + self.Thumbnail = out + return self.Thumbnail + #sub functions: + def ExtractFrame(self, data, offset, PrevFrame=None): + #defines line encoding storage: + #Enc1 = [0 for i in range(192)] + #Enc2 = [0 for i in range(192)] + #Defines the frame storage: + #Color1Frame = [[0 for i in range(192)] for i in range(256)] + #Color2Frame = [[0 for i in range(192)] for i in range(256)] + + Encoding = [[], []] + Frame = [[[False for _ in xrange(192)] for _ in xrange(256)] for _ in xrange(2)] + + #Read tags: + NewFrame = ord(data[offset]) & 0x80 <> 0 + Unknown = ord(data[offset]) >> 5 & 0x03 + + offset += 1 + + #WIP - framemove: + FrameMove = [0,0] + if Unknown & 0x2:#doesn't work 100%... + move = AscDec(data[offset:offset+2], True) + if move > 128: + FrameMove[0] = move - 256 + else: + FrameMove[1] = 0-move + offset += 2 + if Unknown: + print "Unknown instance:",Unknown,"at offset ",offset-1 + + + #read the line encoding of the layers: + for layer in xrange(2): + for byte in map(ord, data[offset:offset+48]): + Encoding[layer].append(byte & 0x03) + Encoding[layer].append(byte >> 2 & 0x03) + Encoding[layer].append(byte >> 4 & 0x03) + Encoding[layer].append(byte >> 6 ) + offset += 48 + + #read layers: + for layer in xrange(2): + for y in xrange(192): + if Encoding[layer][y] == 0:#Nothing + pass + elif Encoding[layer][y] == 1:#Normal + UseByte = AscDec(data[offset:offset+4]) + offset += 4 + x = 0 + while UseByte & 0xFFFFFFFF: + if UseByte & 0x80000000: + byte = ord(data[offset]) + offset += 1 + for _ in xrange(8): + if byte & 0x01: + Frame[layer][x][y] = True + x += 1 + byte >>= 1 + else: + x += 8 + UseByte <<= 1 + elif Encoding[layer][y] == 2:#Inverted + UseByte = AscDec(data[offset:offset+4]) + offset += 4 + x = 0 + while UseByte&0xFFFFFFFF: + if UseByte & 0x80000000: + byte = ord(data[offset]) + offset += 1 + for _ in range(8): + if not byte & 0x01: + Frame[layer][x][y] = True + x += 1 + byte >>= 1 + else: + x += 8 + UseByte <<= 1 + for n in range(256): + Frame[layer][n][y] = not Frame[layer][n][y] + elif Encoding[layer][y] == 3:#Raw/full + x = 0 + for _ in range(32): + byte = ord(data[offset]) + offset += 1 + for _ in range(8): + if byte & 0x01: + Frame[layer][x][y] = True + x += 1 + byte >>= 1 + + #Merges this frame with the previous frame if NewFrame isn't true: + if not NewFrame and PrevFrame: + if FrameMove[0] or FrameMove[1]:#Moves the previus frame if specified: + NewPrevFrame = [[[False for _ in xrange(192)] for _ in xrange(256)] for _ in xrange(2)] + + for y in range(192): + for x in range(256): + TempX = x+FrameMove[0] + TempY = y+FrameMove[1] + if 0 <= Tempx < 256 and 0 <= TempY < 192: + NewPrevFrame[0][TempX][TempY] = PrevFrame[0][x][y] + NewPrevFrame[1][TempX][TempY] = PrevFrame[1][x][y] + + PrevFrame = NewPrevFrame + + #Merge the frames: + for y in range(192): + for x in range(256): + Frame[0][x][y] = Frame[0][x][y] <> PrevFrame[0][x][y] + Frame[1][x][y] = Frame[1][x][y] <> PrevFrame[1][x][y] + + return Frame + +#Class TMB: +# +# With this class you can read a Flipnote TMB file into memory and get its attributes. +# You do so by using either instance.ReadFile() or instance.Read() of your instance of the TMB class. +# If you pass DecodeThumbnail=True to these functions, it will decode thumbnail. +# The TMB file is a file containing the metadata to a corresponding PPM file. +# +# After reading a TMB file, these values are available: +# +# - instance.FrameCount: The number of frames this flipnote consists of +# - instance.Locked: A boolean telling us wether it's locked or not +# - instance.ThumbnailFrameIndex: Which frame the thumbnail is(starting at 0) +# - instance.OriginalAuthorName: The name of the original author in unicode +# - instance.EditorAuthorName: The name of the (previous?) editing author in unicode +# - instance.Username: The username in unicode +# - instance.OriginalAuthorID: The ID of the original author +# - instance.EditorAuthorID: The ID of the last editor, the last user to save the file +# - instance.PreviousEditAuthorID: The ID of the previous editor +# - instance.OriginalFilename: The original filename +# - instance.CurrentFilename: The current filename +# - instance.Date: The date in seconds since January 1'st 2000 +# - instance.GetThumbnail(): The thumbnail stored in a 2D list of uint32 RGBA values. Will decode it first if not done so already +class TMB: + def __init__(self): + self.Loaded = False + self.Thumbnail = None + self.RawThumbnail = None + def ReadFile(self, path, DecodeThumbnail=False): + f = open(path, "rb") + ret = self.Read(f.read(), DecodeThumbnail) + f.close() + return ret + def Read(self, data, DecodeThumbnail=False): + if data[:4] <> "PARA" or len(data) < 0x6a0: + return False + + #Read the header: + self.AudioOffset = AscDec(data[4:8], True) + 0x6a0#only stored for self.Pack() + self.AudioLenght = AscDec(data[8:12], True)#only stored for self.Pack() + + self.FrameCount = AscDec(data[12:14], True) + 1 + self.Locked = ord(data[0x10]) & 0x01 == 1 + self.ThumbnailFrameIndex = AscDec(data[0x12:0x14], True)#which frame is in the thumbnnail + + #self.OriginalAuthorName = u"".join(unichr(AscDec(data[0x14+i*2:0x14+i*2+2], True)) for i in xrange(11)).split(u"\0")[0] + #self.EditorAuthorName = u"".join(unichr(AscDec(data[0x2A+i*2:0x2A+i*2+2], True)) for i in xrange(11)).split(u"\0")[0] + #self.Username = u"".join(unichr(AscDec(data[0x40+i*2:0x40+i*2+2], True)) for i in xrange(11)).split(u"\0")[0] + self.OriginalAuthorName = data[0x14:0x2A].decode("UTF-16LE").split(u"\0")[0] + self.EditorAuthorName = data[0x2A:0x40].decode("UTF-16LE").split(u"\0")[0] + self.Username = data[0x40:0x56].decode("UTF-16LE").split(u"\0")[0] + + self.OriginalAuthorID = data[0x56:0x5e][::-1].encode("HEX").upper() + self.EditorAuthorID = data[0x5E:0x66][::-1].encode("HEX").upper()#the last user to save the file + + self.OriginalFilenameC = data[0x66:0x78]#compressed + self.CurrentFilenameC = data[0x78:0x8a]#compressed + self.OriginalFilename = "%s_%s_%s.tmb" % (self.OriginalFilenameC[:3].encode("HEX").upper(), self.OriginalFilenameC[3:-2], str(AscDec(self.OriginalFilenameC[-2:], True)).zfill(3)) + self.CurrentFilename = "%s_%s_%s.tmb" % (self.CurrentFilenameC[:3].encode("HEX").upper(), self.CurrentFilenameC[3:-2], str(AscDec(self.CurrentFilenameC[-2:], True)).zfill(3)) + + self.PreviousEditAuthorID = data[0x8a:0x92][::-1].encode("HEX").upper()#don't know what this really is + + self.PartialFilenameC = data[0x92:0x9a]#compressed + + self.Date = AscDec(data[0x9a:0x9e], True)#in seconds since midnight 1'st january 2000 + + self.RawThumbnail = data[0xa0:0x6a0] + if DecodeThumbnail: + self.GetThumbnail()#self.Thumbnail[x][y] = uint32 RGBA + + self.Loaded = True + #return the results + return self + def WriteFile(self, path):#not implented + out = self.Pack() + if out: + f = open(path, "wb") + f.write(out) + f.close() + return True + else: + return False + def Pack(self, ppm=None):#not implented + if not self.Loaded: return False + + #realself = self + #if ppm: self = ppm + + out = ["PARA",#magic + DecAsc(self.AudioOffset-0x6a0, 4, True),#animation data size + DecAsc(self.AudioLenght, 4, True),#audio data size + DecAsc(self.FrameCount-1, 2, True),#frame count + "\x24\x00",#unknown + chr(self.Locked), "\0",#locked + DecAsc(self.ThumbnailFrameIndex, 2, True),#which frame is in the thumbnnail + self.OriginalAuthorName.encode("UTF-16LE") + "\0\0"*(11-len(self.OriginalAuthorName)),#Original Author Name + self.EditorAuthorName.encode("UTF-16LE") + "\0\0"*(11-len(self.EditorAuthorName)),#Editor Author Name + self.Username.encode("UTF-16LE") + "\0\0"*(11-len(self.Username)),#Username + self.OriginalAuthorID.decode("HEX")[::-1],#OriginalAuthorID + self.EditorAuthorID.decode("HEX")[::-1],#EditorAuthorID + self.OriginalFilenameC,#OriginalFilename + self.CurrentFilenameC,#CurrentFilename + self.PreviousEditAuthorID.decode("HEX")[::-1],#EditorAuthorID + self.PartialFilenameC,#PartialFilename + DecAsc(self.Date, 4, True),#Date in seconds + "\0\0",#padding + self.PackThumbnail()]#thumbnail + + return "".join(out) + def GetThumbnail(self, force=False): + if (not self.Thumbnail or force) and self.RawThumbnail: + if not self.RawThumbnail: + return False + + out = [[0 for _ in xrange(48)] for _ in xrange(64)] + palette = (0xFEFEFEFF,#0 + 0x4F4F4FFF,#1 + 0xFFFFFFFF,#2 + 0x9F9F9FFF,#3 + 0xFF0000FF,#4 + 0x770000FF,#5 + 0xFF7777FF,#6 + 0x00FF00FF,#7- + 0x0000FFFF,#8 + 0x000077FF,#9 + 0x7777FFFF,#A + 0x00FF00FF,#B- + 0xFF00FFFF,#C + 0x00FF00FF,#D- + 0x00FF00FF,#E- + 0x00FF00FF)#F- + + #8x8 tiling: + for ty in range(6): + for tx in range(8): + for y in range(8): + for x in range(0,8,2): + #two colors stored in each byte: + byte = ord(self.RawThumbnail[(ty*512+tx*64+y*8+x)/2]) + out[x+tx*8 ][y+ty*8] = palette[byte & 0xF] + out[x+tx*8+1][y+ty*8] = palette[byte >> 4] + + self.Thumbnail = out + return self.Thumbnail + def PackThumbnail(self, Exact=True, force=False):#more or less a private function for now + palette = (0xFEFEFEFF,#0 + 0x4F4F4FFF,#1 + 0xFFFFFFFF,#2 + 0x9F9F9FFF,#3 + 0xFF0000FF,#4 + 0x770000FF,#5 + 0xFF7777FF,#6 + 0x00FF00FF,#7- + 0x0000FFFF,#8 + 0x000077FF,#9 + 0x7777FFFF,#A + 0x00FF00FF,#B- + 0xFF00FFFF,#C + 0x00FF00FF,#D- + 0x00FF00FF,#E- + 0x00FF00FF)#F- + + + if not self.Thumbnail: + return self.RawThumbnail + else: + if Exact: + out = [] + + #8x8 tiling: + for ty in range(6): + for tx in range(8): + for y in range(8): + for x in range(0,8,2): + #two colors stored in each byte: + #pos = 0xa0+(ty*512+tx*64+y*8+x)/2 + p1 = palette.index(self.Thumbnail[x+tx*8 ][y+ty*8]) + p2 = palette.index(self.Thumbnail[x+tx*8+1][y+ty*8]) + out.append(chr(p2<<4 | p1)) + + self.RawThumbnail = "".join(out) + return self.RawThumbnail + else: + #not yet implented + return False + +#Function WriteImage: +# +# Writes a 2D list if uint32 RGBA values as a image files. +# Designed to work with PPM().Thumbnail or PPM().GetFrame(n) +# +# This function requires the PIl imaging module +def WriteImage(image, outputPath): + if not hasPIL or not image: return False + + out = [] + for y in xrange(len(image[0])): + for x in xrange(len(image)): + out.append(DecAsc(image[x][y], 4)) + + out = Image.fromstring("RGBA", (len(image), len(image[0])), "".join(out)) + + filetype = outputPath[outputPath.rfind(".")+1:] + out.save(outputPath, filetype) + + return True + +#this is just for experimenting with sound decoding: +#not even close to being finished +def DecodeSound(outputpath, data): + f = wave.open(outputpath, "wb") + f.setnchannels(1) + f.setsampwidth(2) + f.setframerate(32000) + for i in data: + i1 = ord(i)&0xF + i2 = (ord(i)>>4)&0xF + #Noise reduction: + #if i1&0x8: i1 = 0xF-(i1&0x7) + #if i2&0x8: i2 = 0xF-(i2&0x7) + i1 = i1&0x7 if i1&0x8 else 0xF-i1 + i2 = i2&0x7 if i2&0x8 else 0xF-i2 + f.writeframes(DecAsc(i1<<12, 2, True)*4) + f.writeframes(DecAsc(i2<<12, 2, True)*4) + f.close() + +#for testing during development: +if 1 == 2: + p = PPM() + print "loading ppm..." + p.ReadFile("PPMtests/test.ppm", (1, 1, 1)) + + print str(p.OriginalAuthorName), str(p.OriginalAuthorID) + print str(p.EditorAuthorName), str(p.EditorAuthorID) + + print "Dumping Thumbnail..." + WriteImage(p.Thumbnail, "thumbnail.png") + + print "Dumping frames..." + for i in xrange(p.FrameCount): + WriteImage(p.GetFrame(i), "frames/frame %i.png" % i) + + print "Dumping raw sounds..." + for i, data in enumerate(p.SoundData): + f = open("sound %i.bin" % i, "wb") + f.write(data) + f.close() + + print "Extracting sounds...." + for i, d in enumerate(p.SoundData): DecodeSound("out_%i.wav"%i, d) + +if __name__ == '__main__': + print " == PPM.py ==" + print " == by pbsds ==" + print " == v1.03 ==" + print + + if len(sys.argv) < 3: + print "Usage:" + print " PPM.py [] []" + print "" + print " :" + print " 0: Extracts the thumbnail to the file " + print " 1: Extracts the frame(s) to " + print " 2: Dumps the raw sound data files to the folder " + print " 3: Same as mode 2, but will also dump the experimentally decoded" + print " sounds." + print " 4: Prints out the metadata. Can also write it to which also" + print " supports unicode charactes." + print " Mode 0 and 4 supports TMB files aswell" + print " " + print " Only used in mode 1" + print " Set this to the exact frame you want to extract(starting at 1) and it" + print " will be saved as a file to ." + print " If not specified, it will extract all frames to the folder " + + sys.exit() + + import os, time + + if sys.argv[1] == "0": + print "Reading the flipnote file...", + if not os.path.isfile(sys.argv[2]): + print "Error!\nSpecified file doesn't exist!" + sys.exit() + flipnote = TMB().ReadFile(sys.argv[2], True) + if not flipnote: + print "Error!" + print "The given file is not a Flipnote PPM file or TMB file!" + sys.exit() + print "Done!" + + print "Dumping the thumbnail...", + WriteImage(flipnote.GetThumbnail(), sys.argv[3]) + print "Done!" + elif sys.argv[1] == "1": + if len(sys.argv) < 4: + print "Error!" + print " not specified!" + sys.exit() + + print "Reading the flipnote file...", + if not os.path.isfile(sys.argv[2]): + print "Error!\nSpecified file doesn't exist!" + sys.exit() + flipnote = PPM().ReadFile(sys.argv[2]) + if not flipnote: + print "Error!\nThe given file is not a Flipnote PPM file." + sys.exit() + print "Done!" + + + if len(sys.argv) < 5: + if not os.path.isdir(sys.argv[3]): + print "Error!\nThe specified directory doesn't exist!" + sys.exit() + + for i in xrange(flipnote.FrameCount): + print "Dumping frame #%i..." % (i+1), + WriteImage(flipnote.GetFrame(i), os.path.join(sys.argv[3], "frame %s.png" % str(i+1).zfill(3))) + print "Done!" + else: + try: + int(sys.argv[4]) + except: + print "Error!\nInvalid !" + sys.exit() + + if not (0 <= int(sys.argv[4])-1 < flipnote.FrameCount): + print "Error!\n is out of bounds!" + sys.exit() + + print "Dumping frame #%i..." % int(sys.argv[4]), + WriteImage(flipnote.GetFrame(int(sys.argv[4])-1), sys.argv[3]) + print "Done!" + elif sys.argv[1] in "23": + if len(sys.argv) < 4: + print "Error!" + print " not specified!" + sys.exit() + + print "Reading the flipnote file...", + if not os.path.isfile(sys.argv[2]): + print "Error!\nSpecified file doesn't exist!" + sys.exit() + flipnote = PPM().ReadFile(sys.argv[2], ReadFrames=False, ReadSound=True) + if not flipnote: + print "Error!\nThe given file is not a Flipnote PPM file." + sys.exit() + print "Done!" + + if not os.path.isdir(sys.argv[3]): + print "Error!\nThe specified directory doesn't exist!" + sys.exit() + + print "Dumping the raw sound data...", + for i, data in enumerate(flipnote.SoundData): + f = open(os.path.join(sys.argv[3], ("BGM.bin", "SFX1.bin", "SFX2.bin", "SFX3.bin")[i]), "wb") + f.write(data) + f.close() + print "Done!" + + if sys.argv[1] == "3": + print "Dumping the decoded sound data...", + for i, data in enumerate(flipnote.SoundData): + DecodeSound(os.path.join(sys.argv[3], ("BGM decoded.wav", "SFX1 decoded.wav", "SFX2 decoded.wav", "SFX3 decoded.wav")[i]), data) + print "Done!" + + print "Dumping the sound effect usage...", + f = open(os.path.join(sys.argv[3], "SFX usage.txt"), "w") + for i, (s1, s2, s3) in enumerate(flipnote.SFXUsage): + f.write("Frame %i:%s%s%s\n" % (i, " SFX1"*s1, " SFX2"*s2, " SFX3"*s3)) + f.close() + print "Done!" + elif sys.argv[1] == "4": + epoch = time.mktime(time.struct_time([2000, 1, 1, 0, 0, 0, 5, 1, -1])) + + if not os.path.isfile(sys.argv[2]): + print "Error!\nSpecified file doesn't exist!" + sys.exit() + + filetype = "ppm" if sys.argv[2][-3:] == "ppm" else "tmb" + flipnote = TMB().ReadFile(sys.argv[2]) if filetype == "tmb" else PPM().ReadFile(sys.argv[2], ReadFrames=False) + if not flipnote: + print "Error!\nThe given file is not a Flipnote PPM file or TMB file." + if len(sys.argv) >= 4: + f = open(sys.argv, "wb") + f.write("Error!\nThe given file is not a Flipnote PPM file or TMB file.") + f.close() + sys.exit() + + meta = [] + meta.append(u"Current filename: %s" % flipnote.CurrentFilename[:-3]+filetype) + meta.append(u"Original filename: %s" % flipnote.OriginalFilename[:-3]+filetype) + meta.append(u"Number of frames: %s" % flipnote.FrameCount) + meta.append(u"Locked: %s" % flipnote.Locked) + if filetype == "ppm": + meta.append(u"Frame speed: %s" % flipnote.Framespeed) + meta.append(u"Looped: %s" % flipnote.Looped) + meta.append(u"Thumbnail frame index: %i" % (flipnote.ThumbnailFrameIndex+1)) + meta.append(u"Original author: %s" % flipnote.OriginalAuthorName) + meta.append(u"Editor author: %s" % flipnote.EditorAuthorName) + meta.append(u"Username: %s" % flipnote.Username) + meta.append(u"Original author ID: %s" % flipnote.OriginalAuthorID) + meta.append(u"Editor author ID: %s" % flipnote.EditorAuthorID) + meta.append(u"Date(seconds since 1'st Jan 2000): %s" % flipnote.Date) + meta.append(time.strftime(u"Date: %H:%M %d/%m-%Y", time.gmtime(epoch+flipnote.Date)) + " (faulty)") + + newline = "\n" + if sys.platform in ("win32", "cygwin"): newline = "\r\n" + elif sys.platform in ("darwin"): newline = "\r" + + print newline.join(meta).encode('ascii', 'ignore') + + if len(sys.argv) >= 4: + f = open(sys.argv[3], "wb") + f.write(newline.join(meta).encode("UTF-8")) + f.close() + else: + print "Error!\nThere's no such mode." \ No newline at end of file diff --git a/Hatenatools/ReadMe.txt b/Hatenatools/ReadMe.txt new file mode 100644 index 0000000..e4f8127 --- /dev/null +++ b/Hatenatools/ReadMe.txt @@ -0,0 +1,30 @@ + == Hatenatools == + == By pbsds == + == aka Peder Bergebakken Sundt == + +--VERSIONS-- +PPM.py: v1.03 +UGO.py: v0.09 +NTFT.py: v0.05 + +--DESCRIPTION-- +PPM.py can read the metadata, thumbnail, frames and the sound of Flipnote Studio files: .ppm +It can also handle .tmb files. + +UGO.py can read and write UGO files, and modify their content. It can also convert UGO files +to and from the XML format + +NTFT.py can read ntft image files and convert them to image files +Warning, it's still in a very crude state. Error will occour + +These are all tested and written in python 2.7 +These are all designed to be usable both as python modules and as stand alone applications. + +--LICENCE-- +Free to use. +They are free to modify as you wish as long you give credit to me, pbsds / Peder Bergebakken Sundt + +--CREDIT-- +-Steven for most of the documentation on DSiBrew and his frame decoding example on his talkpage +-Remark for helping me understanding the 8x8 tiling on the preview images. +-Austin Burk and Jsafive for supplying .tmb and .ugo files \ No newline at end of file diff --git a/Hatenatools/UGO.py b/Hatenatools/UGO.py new file mode 100644 index 0000000..8c0e214 --- /dev/null +++ b/Hatenatools/UGO.py @@ -0,0 +1,573 @@ +#This class reads and writes UGO files. +#cal also export and import it in the xml format +#Extended functionality added by PPM.py from http://pbsds.net/projects/ppm +import sys, os +from base64 import b64encode, b64decode +import xml.etree.ElementTree as ET + +try: + import PPM + HasPPM = True +except ImportError: + HasPPM = False + + +#helpers: +def AscDec(ascii, LittleEndian=False):#Converts a ascii string into a decimal + ret = 0 + l = map(ord, ascii) + if LittleEndian: l.reverse() + for i in l: + ret = (ret<<8) | i + return ret +def DecAsc(dec, length=None, LittleEndian=False):#Converts a decimal into an ascii string of chosen length + out = [] + while dec <> 0: + out.insert(0, dec&0xFF) + dec >>= 8 + #"".join(map(chr, out)) + + if length: + if len(out) > length: + #return "".join(map(chr, out[-length:])) + out = out[-length:] + if len(out) < length: + #return "".join(map(chr, [0]*(length-len(out)) + out)) + out = [0]*(length-len(out)) + out + + if LittleEndian: out.reverse() + return "".join(map(chr, out)) +def zipalign(length, r=4): + return length + (4 - length % r) if length % r else length +def indentXML(elem, level=0):#borrowed from: http://effbot.org/zone/element-lib.htm#prettyprint + i = "\n" + level*"\t" + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = i + "\t" + if not elem.tail or not elem.tail.strip(): + elem.tail = i + for elem in elem: + indentXML(elem, level+1) + if not elem.tail or not elem.tail.strip(): + elem.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + +#class UGO: +class UGO: + def __init__(self): + self.Loaded = False + def ReadFile(self, path): + f = open(path, "rb") + ret = self.Read(f.read()) + f.close() + return ret + def Read(self, data): + #Filestructure: + # - Header + # - Table of Contents + # - Padding, normally of length 2 + # - Extra Data + # - Padding + #The padding seems to do zipaligning to a length of 4 + global HasPPM + + #Header: + if data[:4] <> "UGAR": return False#The file isn't a UGO file + Sections = AscDec(data[ 4: 8], True)#could also be version + if Sections >= 1: + self.TableLength = AscDec(data[ 8:12], True) + if Sections >= 2: + self.ExtraLength = AscDec(data[12:16], True) + if Sections > 2: + print "Warning: This UGO file has more than the 2 known sections:",Sections + print "Please send this UGO file to pbsds over at pbsds.net" + print "This file could possibly be read incorrectly..." + headerlength = 8 + Sections*4 + + #Read table of contents: + #A table where the rows are seperated with newlines, and colons with tabs + if Sections >= 1: + TableOfContents = tuple((i.split("\t") for i in data[headerlength:headerlength+self.TableLength].split("\n"))) + else: + TableOfContents = [] + + #Extra data: + if Sections >= 2: + ExtraData = data[zipalign(headerlength+self.TableLength) : zipalign(headerlength+self.TableLength)+self.ExtraLength] + + #Read data: + self.Items = [] + pos = 0#Extra Data position + tmbcount = 1#used if HasPPM is False + ntftcount = 1#used if no label + names = [] + for i in TableOfContents: + type = int(i[0]) + if type == 0:#layout + #I've always seen just numbers here. + #The amount of numbers also differ. + #maybe related to color scheme? or the button scheme/layout + + #all pages containing TMBs have so far been: i = ["0", "2", "1"] + self.Items.append(("layout", map(int, i[1:]))) + continue + elif type == 1:#Text on topscreen + num = int(i[1])#always seen as 0, unknown purpose + labels = [b64decode(i[n]).decode("UTF-16LE") for n in xrange(2,7)]#5 labels probably one label for each line of text + + self.Items.append(("topscreen text", labels, num)) + continue + elif type == 2:#catogories(like "reccomended" and "new flipnotes" and "most popular") + #this one may change greatly depending on what layout is set in type==0 + + link = i[1] + label = b64decode(i[2]).decode("UTF-16LE") + selected = int(i[3]) <> 0#bool + + self.Items.append(("category", link, label, selected)) + continue + elif type == 3:#POST button? "Post Flipnote" + pass + elif type == 4:#Button + link = i[1] + trait = int(i[2]) + label = b64decode(i[3]).decode("UTF-16LE") + other = i[4:]#varies + + #extra data + file = None#== ("filename", "filedata") + if trait < 100 and ExtraData: + if ExtraData == "\x20":#empty + pass#no files + elif ExtraData[pos:pos+4] == "PARA":#tmb file + file = ExtraData[pos:pos+0x6A0] + pos += 0x6A0 + + if HasPPM: + tmb = PPM.TMB().Read(file) + name = tmb.CurrentFilename[:-4] + del tmb + else: + name = "embedded tmb #%i" % tmbcount + tmbcount += 1 + + if name+".tmb" in names: + j = 2 + while "%s_%i.tmb" % (name, j) not in names: + j += 1 + name = "%s_%i" % (name, j) + + file = (name+".tmb", file) + names.append(name+".tmb") + else:#ntft icon + name = label.encode("ascii", "ignore") + if not name: + name = "nameless ntft %i" % ntftcount + ntftcount += 1 + + if name+".ntft" in names: + j = 2 + while "%s_%i.ntft" % (name, j) not in names: + j += 1 + name = "%s_%i" % (name, j) + + file = (name+".ntft", ExtraData[pos:pos+2048]) + names.append(name+".ntft") + pos += 2048 + + self.Items.append(("button", trait, label, link, other, file)) + + + # if subtype == 3:#flipnote + # tmb = PPM.TMB().Read(ExtraData[pos:pos+0x6A0]); pos += 0x6A0 + # unknown1 = i[3]#empty + # stars = int(i[4])#not sure + # unknown2 = map(int, i[5:8])#unknown = [765, 573, 0] + + # self.Items.append(("flipnote", link, tmb, stars, unknown1, unknown2)) + # continue + # elif subtype == 100: pass + # elif subtype == 101: pass + # elif subtype == 102: pass + # elif subtype == 104:#list item? like mails and announcements + # label = b64decode(i[3]).decode("UTF-16LE") + # unknown = i[4] + # num = int(i[5])#only seen as 0 + + # # self.Items.append(("list item?", link, label, unknown, num)) + # # continue + # pass + # elif subtype == 115:#Labeled button link(size of a flipnote thumbnail, commonly "next page") + # label = b64decode(i[3]).decode("UTF-16LE") + # unknown = i[4:6] + # self.Items.append(("thumbnail link", link, label, unknown)) + # continue + # elif subtype == 117: pass + continue + + #if not recognized: + self.Items.append(("unknown", i)) + print "Unknown UGO item discovered:", i + self.Loaded = True + return self + def WriteFile(self, path): + if self.Loaded: + out = self.Pack() + if out: + f = open(path, "wb") + f.write(out) + f.close() + return True + else: + return False + def Pack(self): + if not self.Loaded: return False + + Header = ["UGAR", None] + TableOfContents = [] + ExtraData = [] + + #Encode data: + for i in self.Items: + if i[0] == "unknown": + TableOfContents.append("\t".join(i[1])) + elif i[0] == "layout":#0 + TableOfContents.append("\t".join(["0"] + map(str, list(i[1])))) + elif i[0] == "topscreen text":#1 + labels, num = i[1:] + + num = str(num) + for i in xrange(5): + labels[i] = b64encode(labels[i].encode("UTF-16LE")) + + TableOfContents.append("\t".join(("1", num, labels[0], labels[1], labels[2], labels[3], labels[4]))) + elif i[0] == "category":#2 + link, label, selected = i[1:] + + label = b64encode(label.encode("UTF-16LE")) + selected = str(1*selected) + + TableOfContents.append("\t".join(("2", link, label, selected))) + elif i[0] == "post":#not yet implented + pass + elif i[0] == "button": + trait, label, link, other, file = i[1:] + + trait = str(trait) + label = b64encode(label.encode("UTF-16LE")) + + TableOfContents.append("\t".join(["4", link, trait, label] + list(other))) + + if file: + ExtraData.append(file[1]) + else: + print "Unrecognized entry in self.Items:", i + TableOfContents = "\n".join(TableOfContents) + ExtraData = "".join(ExtraData) + + #Format data: + Sections = 0 + if TableOfContents: + Sections += 1 + Header.append(DecAsc(len(TableOfContents), 4, True)) + + #padding/zipaligning + if len(TableOfContents) % 4: + TableOfContents += "\0" * (4 - len(TableOfContents) % 4) + if ExtraData: + Sections += 1 + Header.append(DecAsc(len(ExtraData), 4, True)) + + #padding/zipaligning + if len(ExtraData) % 4: + ExtraData += "\0" * (4 - len(ExtraData) % 4) + Header[1] = DecAsc(Sections, 4, True) + + #Zip up and send the file: + return "".join(Header) + TableOfContents + ExtraData + #XML + def WriteXML(self, xmlname="content.ugoxml", folder="content.ugoxml embedded"):#WIP + if not self.Loaded: return False + + path, xmlname = os.path.split(xmlname) + ugo_xml = ET.Element("ugo_xml") + files = [] + + for i in self.Items: + if i[0] == "unknown": + elem = ET.SubElement(ugo_xml, "unknown", type=i[1][0]) + for value in i[1][1:]: + ET.SubElement(elem, "value").text = value + continue + elif i[0] == "layout":#0 + elem = ET.SubElement(ugo_xml, "layout") + for value in i[1]: + ET.SubElement(elem, "value").text = str(value) + continue + elif i[0] == "topscreen text":#1 + elem = ET.SubElement(ugo_xml, "title") + labels, num = i[1:] + + for label in labels: + ET.SubElement(elem, "label").text = label + + ET.SubElement(elem, "num").text = str(num) + continue + elif i[0] == "category":#2 + elem = ET.SubElement(ugo_xml, "category") + link, label, selected = i[1:] + + ET.SubElement(elem, "label").text = label + ET.SubElement(elem, "address").text = link + ET.SubElement(elem, "selected").text = str(selected).lower() + elif i[0] == "post":#3 + pass#not yet implented/parsed + elif i[0] == "button":#4 + elem = ET.SubElement(ugo_xml, "button") + trait, label, link, other, file = i[1:] + + ET.SubElement(elem, "label").text = label + ET.SubElement(elem, "address").text = link + ET.SubElement(elem, "trait").text = str(trait)#todo: add names + + for n, value in enumerate(other): + entry = ET.SubElement(elem, "value") + entry.text = value + if n == 0 and trait == 3: + entry.attrib["tip"] = "stars" + + if file: + ET.SubElement(elem, "embedded_file").text = os.path.join(folder, file[0]) + files.append((os.path.join(folder, file[0]), file[1])) + + #intend + indentXML(ugo_xml) + + #pack xml + files.append((xmlname, ET.tostring(ugo_xml, encoding="UTF-8"))) + + #write files + if not os.path.isdir(os.path.join(path, folder)): + os.mkdir(os.path.join(path, folder)) + for name, data in files: + f = open(os.path.join(path, name), "wb") + f.write(data) + f.close() + def ReadXML(self, xmlfile, silent=True): + ugo_xml = ET.parse(xmlfile).getroot() + xmlpath = os.path.split(xmlfile)[0] + + Items = [] + for elem in ugo_xml: + if elem.tag == "unknown": + if "type" not in elem.attrib: + if not silent: print "Invalid formatting. without \"type\" attribute" + return False + values = [elem.attrib["type"]] + for value in elem: + if value.tag <> "value": + if not silent: print "Invalid formatting. <%s> found within " % value.tag + return False + values.append(value.text if value.text else "") + + Items.append(("unknown", values)) + elif elem.tag == "layout":#0 + values = [] + for value in elem: + if value.tag <> "value": + if not silent: print "Invalid formatting. <%s> found within " % value.tag + return False + if not value.text.isdigit(): + if not silent: print "Invalid entry. in is not a number" % value.tag + return False + values.append(int(value.text)) + Items.append(("layout", values)) + elif elem.tag == "title":#1 + labels = ["", "", "", "", ""] + num = 0 + pos = 0 + numset = False + + for value in elem: + if value.tag not in ("label", "num"): + if not silent: print "Invalid formatting. <%s> found within " % value.tag + return False + if value.tag == "label": + if pos >= 5: + if not silent: print "Invalid formatting. More than 5 <labels> in <title>" + return False + if value.text: labels[pos] = value.text + pos += 1 + elif value.tag == "num": + if numset: + if not silent: print "Invalid formatting. Multible <num> in <title>" + return False + if not value.text.isdigit(): + if not silent: print "Invalid entry. <num> in <title> is not a number!" + return False + num = int(value.text) + numset = True + + Items.append(("topscreen text", labels, num)) + elif elem.tag == "category":#2 + link = None + label = None + selected = None + + for value in elem: + if value.tag not in ("label", "address", "selected"): + if not silent: print "Invalid formatting. <%s> found within <category>" % value.tag + return False + + if value.tag == "address": + if isinstance(link, str): + if not silent: print "Invalid formatting. multible <address> within <category>" + return False + link = value.text if value.text else "" + elif value.tag == "label": + if isinstance(label, str): + if not silent: print "Invalid formatting. multible <label> within <category>" + return False + label = value.text if value.text else "" + elif value.tag == "selected": + if selected in (True, False): + if not silent: print "Invalid formatting. multible <selected> within <category>" + return False + selected = value.text[0].lower() in "t1" + + Items.append(("category", link, label, selected)) + elif elem.tag == "post":#3 not yet implented + pass + elif elem.tag == "button":#4 + trait = None#todo: add names + label = None + link = None + other = [] + file = None + + for value in elem: + if value.tag not in ("label", "address", "trait", "value", "embedded_file"): + if not silent: print "Invalid formatting. <%s> found within <button>" % value.tag + return False + + if value.tag == "label": + if isinstance(label, str): + if not silent: print "Invalid formatting. Multible <label> within <button>" + return False + label = value.text if value.text else "" + elif value.tag == "address": + if isinstance(link, str): + if not silent: print "Invalid formatting. Multible <address> within <button>" + return False + link = value.text if value.text else "" + elif value.tag == "trait":#todo: add names + if isinstance(trait, str): + if not silent: print "Invalid formatting. Multible <trait> within <button>" + return False + if not value.text.isdigit(): + if not silent: print "Invalid entry. <trait> in <button> is not a number" + return False + trait = int(value.text) + elif value.tag == "value": + other.append(value.text if value.text else "") + elif value.tag == "embedded_file": + if file <> None: + if not silent: print "Invalid formatting. Multible <embedded_file> within <button>" + return False + + path = os.path.join(xmlpath, value.text) + if not os.path.isfile(path): + if not silent: print "Invalid entry. Embedded file \"%s\" not found!" % value.text + print path + return False + + + f = open(path, "rb") + file = (os.path.split(value.text)[1], f.read()) + f.close() + + if None in (trait, label, link): + if not silent: print "Invalid formatting. <button> lacks either a <trait>, a <address> or a <label>" + return False + + Items.append(("button", trait, label, link, other, file)) + else: + if not silent: + print "Invalid formatting: <%s> found within <ugo_xml>" % elem.tag + + self.Items = Items + self.Loaded = True + return self + +if __name__ == "__main__": + print " == UGO.py ==" + print " == by pbsds ==" + print " == v0.90 ==" + print + + if len(sys.argv) < 3: + print "Usage:" + print " UGO.py <mode> <input> [<output> [<foldername>]]" + print "" + print " <Mode>:" + print " -d: Converts the UGO file in <input> to a UGOXML file with the same" + print " name, unless <output> is specified. Any embedded files will be" + print " written to a folder called UGOXML-filename + \" embedded\" unless" + print " <foldername> is given." + print " <foldername> is relative to the XML." + print " -e: Converts the UGOXML file in <input> to a UGO file with the same" + print " name, unless <output> is specified." + sys.exit() + + mode = sys.argv[1] + if mode not in ("-d", "-e"): + print "Invalid <mode> given" + sys.exit() + if mode == "-d": + input = sys.argv[2] + output = sys.argv[3] if len(sys.argv) >= 4 else sys.argv[2]+"xml" + foldername = sys.argv[4] if len(sys.argv) >= 5 else os.path.split(output)[1] + " embedded" + + print "Reading %s..." % os.path.split(input)[1] + ugo = UGO().ReadFile(input) + if not ugo: + print "Error!\n The given file is not a UGO file!" + sys.exit() + print "Done!" + + print "Writing XML..." + ugo.WriteXML(output, foldername) + + print "Done!\n\nHave a nice day!" + if mode == "-e": + input = sys.argv[2] + output = sys.argv[3] if len(sys.argv) >= 4 else ".".join(sys.argv[2].split(".")[:-1]) + ".ugo" + + print "Reading %s..." % os.path.split(input)[1] + try: + ugo = UGO().ReadXML(input, False) + except EL.ParseError: + print "Error!\nThe given file is not in the XML format" + ugo = False + if not ugo: + #it prints sufficient errormessages + #print "Error!\n The given file is not a UGO file!" + sys.exit() + print "Done!" + + print "Writing UGO..." + ugo.WriteFile(output) + print "Done" + + + + + + + + + + + diff --git a/Hatenatools/__init__.py b/Hatenatools/__init__.py new file mode 100644 index 0000000..054c2b9 --- /dev/null +++ b/Hatenatools/__init__.py @@ -0,0 +1,3 @@ +from PPM import PPM, TMB +from UGO import UGO +from NTFT import NTFT \ No newline at end of file diff --git a/Hatenatools/hatenatools project page.url b/Hatenatools/hatenatools project page.url new file mode 100644 index 0000000..408b915 --- /dev/null +++ b/Hatenatools/hatenatools project page.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,2 +[InternetShortcut] +URL=http://pbsds.net/projects/hatenatools +IDList= diff --git a/database/Creators/913304C0CC74CC1F/74CC1F_0D376FC60C9DC_000.ppm b/database/Creators/913304C0CC74CC1F/74CC1F_0D376FC60C9DC_000.ppm new file mode 100644 index 0000000000000000000000000000000000000000..31a743bb66de191e4708d13dca279d7302dd8798 GIT binary patch literal 145772 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 literal 0 HcmV?d00001 diff --git a/database/Creators/913304C0CC74CC1F/flipnotes.dat b/database/Creators/913304C0CC74CC1F/flipnotes.dat new file mode 100644 index 0000000..bb5f7e2 --- /dev/null +++ b/database/Creators/913304C0CC74CC1F/flipnotes.dat @@ -0,0 +1 @@ +74CC1F_0D376FC60C9DC_000 1 5 0 0 0 0 \ No newline at end of file diff --git a/database/new_flipnotes.dat b/database/new_flipnotes.dat new file mode 100644 index 0000000..18715a2 --- /dev/null +++ b/database/new_flipnotes.dat @@ -0,0 +1 @@ +913304C0CC74CC1F 74CC1F_0D376FC60C9DC_000 \ No newline at end of file diff --git a/hatena.py b/hatena.py new file mode 100644 index 0000000..31d57f9 --- /dev/null +++ b/hatena.py @@ -0,0 +1,325 @@ +from twisted.web import static, resource +from twisted.internet import reactor +import sys, os, atexit, glob, imp + +from Hatenatools import *#UGO, PPM, TMB and NTFT +ServerLog = None#Is set to the log class by server.py + +Silent = False +def Log(request, path=None): + if not path: + path = "\"%s\"" % request.path + ServerLog.write("%s requested %s" % (request.getClientIP(), path), Silent) + +#Responses: +class AccessDenied(resource.Resource): + isLeaf = True + def render(self, request): + ServerLog.write("%s got 403 when requesting \"%s\"" % (request.getClientIP(), request.path), Silent) + + request.setResponseCode(403) + return "403 - Access denied\nThis proxy is only for Flipnote Hatena for the DSi." +AccessDenied = AccessDenied() +class NotFound(resource.Resource): + isLeaf = True + def render(self, request): + args = "&".join(("%s=%s" % (i, request.args[i][0]) for i in request.args)) + path = ("%s?%s" % (request.path, args)) if args else request.path + + ServerLog.write("%s got 404 when requesting \"%s\"" % (request.getClientIP(), path), Silent) + request.setResponseCode(404) + return "404 - Not Found\nThis proxy is only for Flipnote Hatena for the DSi." +NotFound = NotFound() + +#Root structure: +class Root(resource.Resource):#filters out non-hantena clients + isLeaf = False + def __init__(self): + resource.Resource.__init__(self) + + self.dsResource = ds() + self.cssResource = static.File("hatenadir/css/") + self.imagesResource = static.File("hatenadir/images/") + def getChild(self, name, request): + if "x-dsi-sid" not in request.getAllHeaders(): + return AccessDenied + + if name == "ds": + return self.dsResource + elif name == "css": + return self.cssResource + elif name == "images": + return self.imagesResource + elif name == "": + return self + + #return NotFound + return self + def render(self, request): + Log(request, "root") + return "Welcome to hatena.pbsds.net!\nThis is in early stages, so please don't expect too much." +class ds(resource.Resource):#child of Root + isLeaf = False + def __init__(self): + resource.Resource.__init__(self) + + self.region = UgoRoot() + self.regions = ("v2-xx", "v2-eu", "v2-us", "v2-jp") + def getChild(self, name, request): + if name in self.regions: + return self.region + elif name == "": + return self + return NotFound + def render(self, request): + Log(request) + return "ds desu" +class UgoRoot(resource.Resource):#child of ds. (v2-xx) + isLeaf = False + def __init__(self): + resource.Resource.__init__(self) + + LoadHatenaStructure(self) + def getChild(self, name, request): + if name == "": + return self + return NotFound + def render(self, request): + Log(request, "ugoroot") + return "UgoRoot desu" + +#UgoRoot filestructure: +class FileResource(resource.Resource): + isLeaf = True + def __init__(self, filepath, Store=False): + resource.Resource.__init__(self) + + self.Store = Store + + if Store: + f = open(filepath, "rb") + self.file = f.read() + f.close() + else: + self.file = filepath + + self.html = filepath.split(".")[-1][:3] == "htm" + def render(self, request): + path = "/".join(request.path.split("/")[3:]) + Log(request, path) + + if self.html: + #request.responseHeaders.setRawHeaders('content-type', ['text/html']) + pass + else: + request.responseHeaders.setRawHeaders('content-type', ['text/plain']) + + if self.Store: + return self.file + else: + #f = open(self.file, "rb") + #ret = f.read() + #f.close() + #return ret + + return static.File(self.file).render(request) +class UGOXMLResource(resource.Resource): + isLeaf = True + def __init__(self, filepath): + resource.Resource.__init__(self) + + + self.ugofile = UGO().ReadXML(filepath, False) + self.ugofile = self.ugofile.Pack() + def render(self, request): + path = "/".join(request.path.split("/")[3:]) + Log(request, path) + + #page = int(request.args["page"][0]) if "page" in request.args else 1 + request.responseHeaders.setRawHeaders('content-type', ['text/plain']) + return self.ugofile +class FolderResource(resource.Resource): + isLeaf = False + def getChild(self, name, request): + if name == "": + return self + return NotFound + def render(self, request): + path = "/".join(request.path.split("/")[3:]) + Log(request, path) + return "This is a folder, but I'm to lazy to list the contents..." +def LoadHatenaStructure(Resource, path="hatenadir/ds/v2-xx", root = True): + for i in glob.glob("%s\*" % path): + if os.path.isfile(i): + filename = os.path.basename(i) + filetype = filename.split(".")[-1].lower() + + if filetype == "ugoxml": + Resource.putChild(filename[:-3], UGOXMLResource(i)) + elif filetype == "py": + try: + #sys.path.append(os.path.abspath(os.path.dirname(i))) + # #pyfile = __import__(filename[:-3]) + #pyfile = importlib.import_module(filename[:-3]) + #sys.path.pop(-1) + #pyfile = imp.load_module(i) + + pyfile = imp.load_source("pyfile", os.path.abspath(i)) + except ImportError as err: + pyfile = None + print "Error!" + print "Failed to import the python file \"%s\"" % i + print err + + if pyfile: + Resource.putChild(filename[:-3], pyfile.PyResource()) + elif filetype == "pyc": + pass#ignore + else: + Resource.putChild(filename, FileResource(os.path.join(path, filename))) + elif os.path.isdir(i): + if os.path.basename(i)[:2] <> "__": + folder = FolderResource() + LoadHatenaStructure(folder, os.path.join(path, os.path.basename(i)), False) + Resource.putChild(os.path.basename(i), folder) + +#Flipnote handler: +class Database: + def __init__(self): + #read: + f = open("database/new_flipnotes.dat", "rb")#contains the newest 5000 flipnotes + self.Newest = [tuple(i.split("\t")) for i in f.read().split("\n")]#[i] = [creatorID, filename] + self.new = False#True when new flipnotes has been uploaded + f.close() + + self.Creator = {}#to store creator info updates before writing to disk. Creator[id][n] = [filename, views, stars, green stars, red stars, blue stars, purple stars, Channel] + + reactor.callLater(60*3, self.flusher) + atexit.register(self.write) + + #to check if an update is neccesary: + self.Views = 0 + self.Stars = 0 + def flusher(self):#Automatically flushes the files every 3 minutes and trims down memory usage + reactor.callLater(60*3, self.flusher) + + #trim newest: + if len(self.Newest) > 5000: + self.Newest = self.Newest[:5000] + + self.write() + def write(self): + if self.new: + f = open("database/new_flipnotes.dat", "wb") + f.write("\n".join(("\t".join(i) for i in self.Newest))) + f.close() + self.new = False + + for ID in self.Creator.keys(): + f = open("database/Creators/%s/flipnotes.dat" % ID, "wb") + f.write("\n".join(("\t".join(map(str, i)) for i in self.Creator[ID]))) + f.close() + del self.Creator[ID] + #helpers: + def FlipnotePath(self, CreatorID, filename): + return "database/Creators/%s/%s" % (CreatorID, filename) + def CreatorExists(self, CreatorID): + return os.path.exists("database/Creators/" + CreatorID) or (CreatorID in self.Creator) + def FlipnoteExists(self, CreatorID, filename): + return os.path.exists("database/Creators/%s/%s.ppm" % (CreatorID, filename)) + #interface: + def GetCreator(self, CreatorID, Load=False):#Load holds it in memory, use this when making changes or reading him often + if CreatorID in self.Creator: + return self.Creator[CreatorID] + else: + if not os.path.exists("database/Creators/" + CreatorID): + return None + + f = open("database/Creators/%s/flipnotes.dat" % CreatorID, "rb") + ret = [i.split("\t") for i in f.read().split("\n")] + f.close() + + if Load: + self.Creator[CreatorID] = ret + + return ret + def GetFlipnote(self, CreatorID, filename):#[filename, views, stars, green stars, red stars, blue stars, purple stars, Channel] + for i in (self.GetCreator(CreatorID) or []): + if i[0] == filename: + return i + return False + def AddFlipnote(self, content, Channel=""): + tmb = TMB().Read(content) + if not tmb: + return False + + #CreatorID = tmb.Username + CreatorID = tmb.EditorAuthorID + filename = tmb.CurrentFilename[:-4] + del tmb + + if os.path.exists("database/Creators/%s/%s.ppm" % (CreatorID, filename)):#already exists + return False + + #add to database: + self.new = True + self.Newest.insert(0, (CreatorID, filename)) + + if not self.GetCreator(CreatorID, True): + self.Creator[CreatorID] = [[filename, 0, 0, 0, 0, 0, 0, Channel]] + else: + self.Creator[CreatorID].append([filename, 0, 0, 0, 0, 0, 0, Channel]) + + #write flipnote to file: + if not os.path.isdir("database/Creators/" + CreatorID): + os.mkdir("database/Creators/" + CreatorID) + f = open("database/Creators/%s/%s.ppm" % (CreatorID, filename), "wb") + f.write(content) + f.close() + + return CreatorID, filename + def AddView(self, CreatorID, filename): + for i, flipnote in enumerate(self.GetCreator(CreatorID, True) or []): + if flipnote[0] == filename: + self.Creator[CreatorID][i][1] = int(flipnote[1]) + 1 + self.Views += 1 + return True + return False + def AddStar(self, Creator, filename, amount=1): + for i, flipnote in enumerate(self.GetCreator(CreatorID, True) or []): + if flipnote[0] == filename: + self.Creator[CreatorID][i][2] = int(flipnote[2]) + amount + self.Stars += 1 + return True + return False +Database = Database() + +#when loading: +def Setup(): + print "Setting up hatena...", + root = Root() + print "Done!" + return root + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hatenadir/css/ds/basic.css b/hatenadir/css/ds/basic.css new file mode 100644 index 0000000..d24c935 --- /dev/null +++ b/hatenadir/css/ds/basic.css @@ -0,0 +1,830 @@ +@charset "UTF-8"; +table.profbox { + background-color: #82c300; + color: #ffffff; +} +div.prof_out { + margin: 0 11px 0 11px; + background-color: #82c300; + border-style: solid; + border-width: 0 1px 0 1px; + border-color: #82c300; +} +span.more-f{ + color: #ffffff; +} +div.notice2 { + margin:0 11px 5px 11px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#82c300; + background-color:#fbfbfb; +} +span.url{ + text-decoration:underline; +} +span.comptxt { + color:#ff8a00; +} +span.star0 { + color:#fdc556; +} +span.star1 { + color:#138200; +} +span.star2 { + color:#ff455c; +} +span.star3 { + color:#00b0f9; +} +span.star4 { + color:#a411b9; +} +span.star0c { + color:#fdc556; +} +span.star1c { + color:#138200; +} +span.star2c { + color:#ff455c; +} +span.star3c { + color:#00b0f9; +} +span.star4c { + color:#a411b9; +} +span.orange{ + color: #ff8d45; +} +span.green { + color: #82c300; +} +span.gray{ + color: #666666; +} +span.white { + color:#FFFFFF; +} +html { + margin:0; + padding:0; +} +body { + color:#333333; + margin:0; + padding:0; +} +div.title { + margin:0 7px 0 7px; + padding:7px 5px 7px 5px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; +} +div.description { + margin:0 7px 0 7px; + padding:7px 5px 7px 5px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; +} +div.hr { + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; +} +div.hr-tab { + border-style:solid; + border-width:0 0 1px 0; + border-color:#82c300; +} +span.timestamp { + color:#999999; +} +a.timestamp { + color:#999999; +} +a.violation { + color:#333333; +} +div.box { + padding:7px; + border-style:solid; + border-width:1px; + border-color:#CCCCCC; + background-color:#FFFFFF; +} +div.more { + margin:7px 0 0 0; +} +div.pager { + padding:5px; +} +div.num { + margin:5px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#CCCCCC; + background-color:#FFFFFF; +} +span.new { + color: #cc0000; +} +span.price { + color: #92cb22; +} +span.date { + color: #cccccc; +} +table.detail{ + margin:0 7px 0 7px; +} +table.fullsize { + margin:0; +} +div.item-term { + padding:3px 0 3px 5px; +} +div.item-value { + padding:3px 5px 3px 0; +} +div.item-text { + padding:3px 5px 3px 15px; +} +div.item-tcom { + padding: 3px 5px 0 5px; +} +div.item-com { + padding: 0 5px 0 5px; +} +div.td-body { + padding:3px 5px 3px 5px; +} +div.comlist { + background-color:#FFFFFF; +} +div.comment-text { + padding:3px 5px 5px 15px; +} +div.comment-memo { + padding:0 0 0 15px; +} +div.staff { + color:#FFFFFF; + background-color:#1a1a1a; +} +a.staffnam { + color:#FFFFFF; +} +div.notice { + width:226px; + margin:7px 7px 3px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.colorstar { + margin:7px 0 7px 0; +} +div.code-box{ + width:226px; + margin:7px 0 0 0; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.code-data{ + margin:7px 0 7px 0; +} +div.mail-reply { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.lett_txt { + margin: 0 11px 0 11px; + border-style:solid; + border-width:0 2px 0 2px; + border-color:#92d300; + background-color:#ffffff; +} +div.lett_to { + margin: 0 11px 0 11px; + background-color:#92d300; + color:#ffffff; + padding: 1px 0 6px 5px; +} +div.pad0{ + padding: 0 0 0 0; +} +div.pad5t{ + padding: 5px 0 0 0; +} +div.pad5b{ + padding: 0 0 5px 0; +} +div.pad1b{ + padding: 0 0 1px 0; +} +div.pad2b{ + padding: 0 0 2px 0; +} +div.pad2{ + padding: 2px 2px 2px 2px; +} +div.pad5{ + padding: 5px 5px 5px 5px; +} +div.pad0-5{ + padding: 0 5px 0 5px; +} +td.pad2{ + padding: 2px 2px 2px 2px; +} +div.pad3-5{ + padding: 3px 5px 3px 5px; +} +div.lett_from{ + padding: 3px 11px 3px 0; +} +div.pad11{ + padding: 11px 11px 11px 11px; +} +div.pad5-11{ + padding: 5px 11px 5px 11px; +} +div.pad10b{ + padding: 0 0 10px 0; +} +div.pad20b{ + padding: 0 0 20px 0; +} +div.mar0-7{ + margin: 0px 7px 0px 7px; +} +div.mar0-11{ + margin: 0px 11px 0px 11px; +} +div.mar0{ + margin: 0px 0px 0px 0px; +} +div.mar5 { + margin: 5px 5px 5px 5px; +} +div.yaritori{ + margin: 0 11px 0 11px; + background-color:#ffffff; + border-style:solid; + border-width:0 2px 0 2px; + border-color:#92d300; +} +div.gr-tit{ + margin: 0 11px 0 11px; + background-color:#92d300; + color:#ffffff; +} +div.kadomaru{ + margin: 0 11px 0 11px; +} +div.lett-note{ + margin: 5px 11px 5px 11px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#92d300; + background-color:#ffffff; +} +div.pk{ + background-color:#ff3ab7; +} +div.blue{ + background-color:#3acfff; +} +div.gray{ + background-color:#cccccc; +} +div.gray_box{ + padding:5px; + border-style:solid; + border-width:1px; + border-color:#cccccc; + background-color:#ffffff; +} +div.vio-intro { + width:240px; + padding:7px 0 7px 7px; +} +div.vio-memo { + padding:0 0 10px 15px; +} +div.vio-text { + padding:0 0 10px 15px; +} +div.vio-note { + color:#999999; + padding:0 0 10px 15px; +} +div.vio-submit { + padding:10px 0 10px 0; +} +div.info-head { + padding:5px 7px 5px 7px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; + background-color:#eeeeee; +} +div.noborder{ + border-style:solid; + border-color:#CCCCCC; + border-width:0 0 0 0; +} +div.info-body { + padding:7px; +} +div.info-msg { + margin:0 0 7px 0; +} +div.news-head { + padding:5px 7px 5px 7px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; + background-color:#eeeeee; +} +div.news-body { + padding:7px; +} +div.news-h1 { + margin:7px 7px 0 7px; + padding:7px; + border-style:solid; + border-width:3px; + border-color:#91C900; +} +div.news-h2 { + padding:0 0 3px 7px; + border-style:solid; + border-width:0 0 1px 4px; + border-color:#91C900; +} +img.news-memo { + margin:0 10px 5px 0; + border-style:solid; + border-width:1px; + border-color:#CCCCCC; +} +div.info-h2 { + padding:0 0 3px 7px; + border-style:solid; + border-width:0 0 1px 4px; + border-color:#91C900; +} +div.num-box{ + background-color:#cccccc; + margin:0 30px; +} +td.tit-star{ + background-color:#e9f8c3; +} +img.help{ + border-style:solid; + border-width:2px; + border-color:#ffffff; +} +div.list{ + padding:0 0 5px 0; +} +div.star-det{ + padding:5px 0 5px 0; +} +img.sc{ + border-style:solid; + border-width:1px; + border-color:#cccccc; +} +td.border { + background-color: #82c300; +} +div.border { + border-style: solid; + border-width: 0 0 5px 0; + border-color: #82c300; +} +div.border-c { + border-style: solid; + border-width: 0 0 2px 0; + border-color: #82c300; +} +td.space { + background-color: #82c300; + color: #82c300; +} +td.tabon { + color: #82c300; +} +td.taboff { + background-color: #82c300; + color: #ffffff; +} +td.tabpager { + background-color: #82c300; + color: #ffffff; +} +div.on { + padding: 1px 6px 3px 6px; +} +span.border { + color: #b2db59; +} +span.border-gray { + color: #cccccc; +} +a.taboff { + color: #ffffff; +} +div.comme { + padding: 3px 3px 3px 12px; + color: #b2db59; +} +span.text { + color: #333333; +} +td.gray { + background-color: #f2f2f2; +} +div.message { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.error-message { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#F5C8A7; + background-color:#FFEED8; + color:#9B2E2E; +} +div.ok-message { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#C5DABA; + background-color:#E3F9DB; + color:#517B29; +} +div.guide-h2 { + padding:0 0 3px 7px; + border-style:solid; + border-width:0 0 1px 4px; + border-color:#66ccff; +} +div.guide-h3 { + padding:3px 3px 3px 3px; + background-color:#66ccff; + color: #ffffff; +} +div.select-t { + color: #66ccff; + padding: 0 0 3px 0; +} +div.select-b { + padding:5px 3px 5px 3px; + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color: #99ccff; + background-color: #ffffff; +} +span.border-s { + color: #99ccff; +} +span.color { + color: #ffffff; +} +div.credit { + padding:5px 7px 5px 7px; + background-color:#eeeeee; +} +div.rule-tit { + background-color: #82c300; + color: #ffffff; + padding: 3px 3px 3px 3px; +} +div.rule-ind { + margin: 0 0 0 10px; +} +div.hr-prof { + border-style:solid; + border-width:0 0 3px 0; + border-color:transparent; +} +table.send { + margin: 5px 0 0 0 ; +} +div.icon { + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color: #cccccc; +} +td.username { + height:20px; +} +td.mystatus { +} +div.prev { + padding: 1px 0 5px 0; +} +div.next { + padding: 5px 0 1px 0; +} +div.prof-det{ + padding: 0 5px 0 5px; +} +div.catch { + margin: 5px 5px 5px 5px; + padding: 5px 5px 5px 5px; + border-style: solid; + border-width: 2px 2px 2px 2px; + border-color: #ffffff; +} +a.still { + color: #ffffff; +} +div.head { + margin: 0px 0 0 0; +} +div.send { + margin: 0px 10px 3px 11px; +} +div.link { + margin: 0px 10px 0 11px; +} +img.button { + margin: 5px 0 0 0; +} +td.theme { + margin: 0 0 0 3px; +} +div.trial-h1 { + margin: 5px 0 5px 0; + padding:3px; + border-style:solid; + border-width:3px; + border-color:#91C900; +} +div.mar-b10{ +margin:0 0 10px 0; +} +div.cam1{ + margin:7px 7px 0 7px; + padding:7px; + background-color: #ff2828; + color: #ffffff; +} +div.cam2{ + margin:0 7px 0 7px; + padding:7px; + border-style:solid; + border-width: 2px 2px 2px 2px; + border-color: #ff2828; +} +table.xmas2009{ + margin: 0 10px 0 11px; + background-color: #c70606; + color: #ffffff; +} +div.yellow { + margin: 0 11px 0 11px; + background-color:#ffe800; +} +div.sttr_mes { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#92cb22; + background-color:#ffffff; +} +div.sttr_gacha { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#ea475c; + background-color:#ffffff; +} +div.compsp { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#ffe800; + background-color:#fff9b7; +} +div.sttr_war { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#F5C8A7; + background-color:#FFEED8; + color:#9B2E2E; +} +div.sttr_price { + background-color:#FF9933; + color: #ffffff; +} +div.sttr_item { + width:226px; + margin:0px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#92cb22; + background-color:#ffffff; +} +div.sttr_theme { + width:226px; + margin:0px 7px 3px 7px; + padding:5px; + border-style:solid; + border-width:0px 1px 1px 1px; + border-color:#92cb22; + background-color:#ffffff; +} +div.sttr_back { + width:226px; + margin:0px 7px 0px 7px; +} +div.gift_l { + margin: 0 11px 0 11px; + border-style:solid; + border-width:0 2px 0px 2px; + border-color:#ff5252; +} +div.gift_h { + margin: 0 11px 0 11px; + border-style:solid; + border-width:0 2px 0px 2px; + border-color:#ffd616; +} +img.shop_icon { + margin:0 1px 1px 0; +} +div.help_guide { + border-style:solid; + border-width:0 1px 1px 1px; + border-color:#ffac3e; +} +div.guide-head { + color: #ffffff; + background-color: #5abcea; +} +div.guide-title { + color: #ffffff; + background-color: #5abcea; +} +div.guide-main { + border-style:solid; + border-width:0 1px 1px 1px; + border-color:#5abcea; +} +div.green-title { + color: #ffffff; + background-color: #91C900; +} +div.green-main { + border-style:solid; + border-width:0 1px 1px 1px; + border-color:#91C900; +} +table.method{ + border-style:solid; + border-width:1px; + border-color:#cccccc; +} +div.search { + background-color: #eeeeee; + border-style: solid; + border-width: 1px; + border-color:#cccccc; +} +td.keyboard { + background-color: #eeeeee; +} +table.key-tab{ + margin: 0 6px 0 6px; +} +div.keyout { + margin: 0 7px 0 7px; + border-style: solid; + border-width: 0 1px 1px 1px; + border-color:#cccccc; +} +div.on-ja { + border-style: solid; + border-width: 1px 1px 0 1px; + border-color:#cccccc; +} +div.off-en { + border-style: solid; + border-width: 1px 1px 0 0; + border-color:#cccccc; +} +div.off-aa { + border-style: solid; + border-width: 1px 1px 0 0; + border-color:#cccccc; +} +table.camp-detail { + border-style: solid; + border-width: 1px; + border-color:#cccccc; +} +table.center { + margin: 0 15px 0 16px; +} +div.codeborder { + border-style: solid; + border-width:0 1px 1px 1px; + border-color:#82c300; +} +div.codeprev { + border-style: solid; + border-width:1px; + border-color:#82c300; +} +td.code { + background-color:#ffffff; +} +table.codetab { + border-style: solid; + border-width: 1px 1px 0 1px; + border-color:#82c300; +} +div.codetab { + border-style: solid; + border-width: 0 1px 1px 1px; + border-color:#82c300; + background-color:#ffffff; +} +div.c_tab2 { + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color:#82c300; + background-color:#ffffff; +} +div.topic { + border-style:solid; + border-width:1px; + border-color:#fff273; + background-color:#fff8b2; +} +div.icon-green { + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color: #82c300; +} +div.p-block { + border-style:solid; + border-width:1px; + border-color:#000000; + color:#000000; + background-color:#ffffff; +} +div.clstar-help{ + background-color:#ffffff; + color:#82c300; +} +div.ugo4th{ + border-style:solid; + border-width:1px; + border-color:#c4260f; + background-color:#d52515; +} diff --git a/hatenadir/css/ds/common.css b/hatenadir/css/ds/common.css new file mode 100644 index 0000000..04949bb --- /dev/null +++ b/hatenadir/css/ds/common.css @@ -0,0 +1,808 @@ +@charset "UTF-8"; +span.url{ + text-decoration:underline; +} +span.comptxt { + color:#ff8a00; +} +span.star0 { + color:#fdc556; +} +span.star1 { + color:#138200; +} +span.star2 { + color:#ff455c; +} +span.star3 { + color:#00b0f9; +} +span.star4 { + color:#a411b9; +} +span.star0c { + color:#fdc556; +} +span.star1c { + color:#138200; +} +span.star2c { + color:#ff455c; +} +span.star3c { + color:#00b0f9; +} +span.star4c { + color:#a411b9; +} +span.orange{ + color: #ff8d45; +} +span.green { + color: #82c300; +} +span.gray{ + color: #666666; +} +span.white { + color:#FFFFFF; +} +html { + margin:0; + padding:0; +} +body { + color:#333333; + margin:0; + padding:0; +} +div.title { + margin:0 7px 0 7px; + padding:7px 5px 7px 5px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; +} +div.description { + margin:0 7px 0 7px; + padding:7px 5px 7px 5px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; +} +div.hr { + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; +} +div.hr-tab { + border-style:solid; + border-width:0 0 1px 0; + border-color:#82c300; +} +span.timestamp { + color:#999999; +} +a.timestamp { + color:#999999; +} +a.violation { + color:#333333; +} +div.box { + padding:7px; + border-style:solid; + border-width:1px; + border-color:#CCCCCC; + background-color:#FFFFFF; +} +div.more { + margin:7px 0 0 0; +} +div.pager { + padding:5px; +} +div.num { + margin:5px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#CCCCCC; + background-color:#FFFFFF; +} +span.new { + color: #cc0000; +} +span.price { + color: #92cb22; +} +span.date { + color: #cccccc; +} +table.detail{ + margin:0 7px 0 7px; +} +table.fullsize { + margin:0; +} +div.item-term { + padding:3px 0 3px 5px; +} +div.item-value { + padding:3px 5px 3px 0; +} +div.item-text { + padding:3px 5px 3px 15px; +} +div.item-tcom { + padding: 3px 5px 0 5px; +} +div.item-com { + padding: 0 5px 0 5px; +} +div.td-body { + padding:3px 5px 3px 5px; +} +div.comlist { + background-color:#FFFFFF; +} +div.comment-text { + padding:3px 5px 5px 15px; +} +div.comment-memo { + padding:0 0 0 15px; +} +div.staff { + color:#FFFFFF; + background-color:#1a1a1a; +} +a.staffnam { + color:#FFFFFF; +} +div.notice { + width:226px; + margin:7px 7px 3px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.colorstar { + margin:7px 0 7px 0; +} +div.code-box{ + width:226px; + margin:7px 0 0 0; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.code-data{ + margin:7px 0 7px 0; +} +div.mail-reply { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.lett_txt { + margin: 0 11px 0 11px; + border-style:solid; + border-width:0 2px 0 2px; + border-color:#92d300; + background-color:#ffffff; +} +div.lett_to { + margin: 0 11px 0 11px; + background-color:#92d300; + color:#ffffff; + padding: 1px 0 6px 5px; +} +div.pad0{ + padding: 0 0 0 0; +} +div.pad5t{ + padding: 5px 0 0 0; +} +div.pad5b{ + padding: 0 0 5px 0; +} +div.pad1b{ + padding: 0 0 1px 0; +} +div.pad2b{ + padding: 0 0 2px 0; +} +div.pad2{ + padding: 2px 2px 2px 2px; +} +div.pad5{ + padding: 5px 5px 5px 5px; +} +div.pad0-5{ + padding: 0 5px 0 5px; +} +td.pad2{ + padding: 2px 2px 2px 2px; +} +div.pad3-5{ + padding: 3px 5px 3px 5px; +} +div.lett_from{ + padding: 3px 11px 3px 0; +} +div.pad11{ + padding: 11px 11px 11px 11px; +} +div.pad5-11{ + padding: 5px 11px 5px 11px; +} +div.pad10b{ + padding: 0 0 10px 0; +} +div.pad20b{ + padding: 0 0 20px 0; +} +div.mar0-7{ + margin: 0px 7px 0px 7px; +} +div.mar0-11{ + margin: 0px 11px 0px 11px; +} +div.mar0{ + margin: 0px 0px 0px 0px; +} +div.mar5 { + margin: 5px 5px 5px 5px; +} +div.yaritori{ + margin: 0 11px 0 11px; + background-color:#ffffff; + border-style:solid; + border-width:0 2px 0 2px; + border-color:#92d300; +} +div.gr-tit{ + margin: 0 11px 0 11px; + background-color:#92d300; + color:#ffffff; +} +div.kadomaru{ + margin: 0 11px 0 11px; +} +div.lett-note{ + margin: 5px 11px 5px 11px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#92d300; + background-color:#ffffff; +} +div.pk{ + background-color:#ff3ab7; +} +div.blue{ + background-color:#3acfff; +} +div.gray{ + background-color:#cccccc; +} +div.gray_box{ + padding:5px; + border-style:solid; + border-width:1px; + border-color:#cccccc; + background-color:#ffffff; +} +div.vio-intro { + width:240px; + padding:7px 0 7px 7px; +} +div.vio-memo { + padding:0 0 10px 15px; +} +div.vio-text { + padding:0 0 10px 15px; +} +div.vio-note { + color:#999999; + padding:0 0 10px 15px; +} +div.vio-submit { + padding:10px 0 10px 0; +} +div.info-head { + padding:5px 7px 5px 7px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; + background-color:#eeeeee; +} +div.noborder{ + border-style:solid; + border-color:#CCCCCC; + border-width:0 0 0 0; +} +div.info-body { + padding:7px; +} +div.info-msg { + margin:0 0 7px 0; +} +div.news-head { + padding:5px 7px 5px 7px; + border-style:solid; + border-width:0 0 1px 0; + border-color:#CCCCCC; + background-color:#eeeeee; +} +div.news-body { + padding:7px; +} +div.news-h1 { + margin:7px 7px 0 7px; + padding:7px; + border-style:solid; + border-width:3px; + border-color:#91C900; +} +div.news-h2 { + padding:0 0 3px 7px; + border-style:solid; + border-width:0 0 1px 4px; + border-color:#91C900; +} +img.news-memo { + margin:0 10px 5px 0; + border-style:solid; + border-width:1px; + border-color:#CCCCCC; +} +div.info-h2 { + padding:0 0 3px 7px; + border-style:solid; + border-width:0 0 1px 4px; + border-color:#91C900; +} +div.num-box{ + background-color:#cccccc; + margin:0 30px; +} +td.tit-star{ + background-color:#e9f8c3; +} +img.help{ + border-style:solid; + border-width:2px; + border-color:#ffffff; +} +div.list{ + padding:0 0 5px 0; +} +div.star-det{ + padding:5px 0 5px 0; +} +img.sc{ + border-style:solid; + border-width:1px; + border-color:#cccccc; +} +td.border { + background-color: #82c300; +} +div.border { + border-style: solid; + border-width: 0 0 5px 0; + border-color: #82c300; +} +div.border-c { + border-style: solid; + border-width: 0 0 2px 0; + border-color: #82c300; +} +td.space { + background-color: #82c300; + color: #82c300; +} +td.tabon { + color: #82c300; +} +td.taboff { + background-color: #82c300; + color: #ffffff; +} +td.tabpager { + background-color: #82c300; + color: #ffffff; +} +div.on { + padding: 1px 6px 3px 6px; +} +span.border { + color: #b2db59; +} +span.border-gray { + color: #cccccc; +} +a.taboff { + color: #ffffff; +} +div.comme { + padding: 3px 3px 3px 12px; + color: #b2db59; +} +span.text { + color: #333333; +} +td.gray { + background-color: #f2f2f2; +} +div.message { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#BCCDED; + background-color:#E5EEFE; +} +div.error-message { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#F5C8A7; + background-color:#FFEED8; + color:#9B2E2E; +} +div.ok-message { + width:226px; + margin:7px 7px 2px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#C5DABA; + background-color:#E3F9DB; + color:#517B29; +} +div.guide-h2 { + padding:0 0 3px 7px; + border-style:solid; + border-width:0 0 1px 4px; + border-color:#66ccff; +} +div.guide-h3 { + padding:3px 3px 3px 3px; + background-color:#66ccff; + color: #ffffff; +} +div.select-t { + color: #66ccff; + padding: 0 0 3px 0; +} +div.select-b { + padding:5px 3px 5px 3px; + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color: #99ccff; + background-color: #ffffff; +} +span.border-s { + color: #99ccff; +} +span.color { + color: #ffffff; +} +div.credit { + padding:5px 7px 5px 7px; + background-color:#eeeeee; +} +div.rule-tit { + background-color: #82c300; + color: #ffffff; + padding: 3px 3px 3px 3px; +} +div.rule-ind { + margin: 0 0 0 10px; +} +div.hr-prof { + border-style:solid; + border-width:0 0 3px 0; + border-color:transparent; +} +table.send { + margin: 5px 0 0 0 ; +} +div.icon { + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color: #cccccc; +} +td.username { + height:20px; +} +td.mystatus { +} +div.prev { + padding: 1px 0 5px 0; +} +div.next { + padding: 5px 0 1px 0; +} +div.prof-det{ + padding: 0 5px 0 5px; +} +div.catch { + margin: 5px 5px 5px 5px; + padding: 5px 5px 5px 5px; + border-style: solid; + border-width: 2px 2px 2px 2px; + border-color: #ffffff; +} +a.still { + color: #ffffff; +} +div.head { + margin: 0px 0 0 0; +} +div.send { + margin: 0px 10px 3px 11px; +} +div.link { + margin: 0px 10px 0 11px; +} +img.button { + margin: 5px 0 0 0; +} +td.theme { + margin: 0 0 0 3px; +} +div.trial-h1 { + margin: 5px 0 5px 0; + padding:3px; + border-style:solid; + border-width:3px; + border-color:#91C900; +} +div.mar-b10{ +margin:0 0 10px 0; +} +div.cam1{ + margin:7px 7px 0 7px; + padding:7px; + background-color: #ff2828; + color: #ffffff; +} +div.cam2{ + margin:0 7px 0 7px; + padding:7px; + border-style:solid; + border-width: 2px 2px 2px 2px; + border-color: #ff2828; +} +table.xmas2009{ + margin: 0 10px 0 11px; + background-color: #c70606; + color: #ffffff; +} +div.yellow { + margin: 0 11px 0 11px; + background-color:#ffe800; +} +div.sttr_mes { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#92cb22; + background-color:#ffffff; +} +div.sttr_gacha { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#ea475c; + background-color:#ffffff; +} +div.compsp { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#ffe800; + background-color:#fff9b7; +} +div.sttr_war { + width:226px; + margin:7px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#F5C8A7; + background-color:#FFEED8; + color:#9B2E2E; +} +div.sttr_price { + background-color:#FF9933; + color: #ffffff; +} +div.sttr_item { + width:226px; + margin:0px 7px 0px 7px; + padding:5px; + border-style:solid; + border-width:1px; + border-color:#92cb22; + background-color:#ffffff; +} +div.sttr_theme { + width:226px; + margin:0px 7px 3px 7px; + padding:5px; + border-style:solid; + border-width:0px 1px 1px 1px; + border-color:#92cb22; + background-color:#ffffff; +} +div.sttr_back { + width:226px; + margin:0px 7px 0px 7px; +} +div.gift_l { + margin: 0 11px 0 11px; + border-style:solid; + border-width:0 2px 0px 2px; + border-color:#ff5252; +} +div.gift_h { + margin: 0 11px 0 11px; + border-style:solid; + border-width:0 2px 0px 2px; + border-color:#ffd616; +} +img.shop_icon { + margin:0 1px 1px 0; +} +div.help_guide { + border-style:solid; + border-width:0 1px 1px 1px; + border-color:#ffac3e; +} +div.guide-head { + color: #ffffff; + background-color: #5abcea; +} +div.guide-title { + color: #ffffff; + background-color: #5abcea; +} +div.guide-main { + border-style:solid; + border-width:0 1px 1px 1px; + border-color:#5abcea; +} +div.green-title { + color: #ffffff; + background-color: #91C900; +} +div.green-main { + border-style:solid; + border-width:0 1px 1px 1px; + border-color:#91C900; +} +table.method{ + border-style:solid; + border-width:1px; + border-color:#cccccc; +} +div.search { + background-color: #eeeeee; + border-style: solid; + border-width: 1px; + border-color:#cccccc; +} +td.keyboard { + background-color: #eeeeee; +} +table.key-tab{ + margin: 0 6px 0 6px; +} +div.keyout { + margin: 0 7px 0 7px; + border-style: solid; + border-width: 0 1px 1px 1px; + border-color:#cccccc; +} +div.on-ja { + border-style: solid; + border-width: 1px 1px 0 1px; + border-color:#cccccc; +} +div.off-en { + border-style: solid; + border-width: 1px 1px 0 0; + border-color:#cccccc; +} +div.off-aa { + border-style: solid; + border-width: 1px 1px 0 0; + border-color:#cccccc; +} +table.camp-detail { + border-style: solid; + border-width: 1px; + border-color:#cccccc; +} +table.center { + margin: 0 15px 0 16px; +} +div.codeborder { + border-style: solid; + border-width:0 1px 1px 1px; + border-color:#82c300; +} +div.codeprev { + border-style: solid; + border-width:1px; + border-color:#82c300; +} +td.code { + background-color:#ffffff; +} +table.codetab { + border-style: solid; + border-width: 1px 1px 0 1px; + border-color:#82c300; +} +div.codetab { + border-style: solid; + border-width: 0 1px 1px 1px; + border-color:#82c300; + background-color:#ffffff; +} +div.c_tab2 { + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color:#82c300; + background-color:#ffffff; +} +div.topic { + border-style:solid; + border-width:1px; + border-color:#fff273; + background-color:#fff8b2; +} +div.icon-green { + border-style: solid; + border-width: 1px 1px 1px 1px; + border-color: #82c300; +} +div.p-block { + border-style:solid; + border-width:1px; + border-color:#000000; + color:#000000; + background-color:#ffffff; +} +div.clstar-help{ + background-color:#ffffff; + color:#82c300; +} +div.ugo4th{ + border-style:solid; + border-width:1px; + border-color:#c4260f; + background-color:#d52515; +} \ No newline at end of file diff --git a/hatenadir/ds/v2-xx/__ntfts/News.ntft b/hatenadir/ds/v2-xx/__ntfts/News.ntft new file mode 100644 index 0000000..8dadbcf --- /dev/null +++ b/hatenadir/ds/v2-xx/__ntfts/News.ntft @@ -0,0 +1 @@ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓςςÿÓÿÓςςÿÓÿÓÿÓÿÓÿÓÿÓςςςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÏ‚ÿÓςςςςÿÓÏ‚ÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÏ‚ÿÓςςςςÿÓÏ‚ÿÓÿÓÿÓÿÓÿÓςςςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓςςςςςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓςςςςςςςςςςÿÓÿÓÿÓÿÓςςςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓÿÓςςÿÓÿÓÿÓÿÓÿÓÿÓςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓςςςÿÓÿÓÿÓÿÓÿÓÿÓςςςÿÓÿÓÿÓςςςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓςςςςÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓςςςςÿÓÿÓςςςςÿÓÿÓÿÓÿÓςςςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓςςςςςςςςςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓςςςςςςςςςςςςςςςÿÓςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓςςςςςςÿÓςςςςςςςςςςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓςςςςςςςςςÿÓςςςςςςςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓςςςςςςςςςςςςςςςÿÓςςςςςςÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓÿÓςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςςÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/hatenadir/ds/v2-xx/__ntfts/Special Room.ntft b/hatenadir/ds/v2-xx/__ntfts/Special Room.ntft new file mode 100644 index 0000000..cbf8957 --- /dev/null +++ b/hatenadir/ds/v2-xx/__ntfts/Special Room.ntft @@ -0,0 +1 @@ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ãšÛÜëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝïyÓ«®Š®Š®Š®Š®Š®ŠÐ–5»»ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝïV¿®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š®ŠñžšÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxÏ®Š®Š®Š®Š®Š®ŠÐŽòšŸñ’ÐŽ®Š®Š®Š®Š®Šò¢Üëÿÿÿÿÿÿÿÿÿÿÿÿ5·®Š®Š®Š®Š5£š·þÇÿËÿËÿËÿËÿ˼¿x¯Ñ’®Š®Š®Š¯Ššßÿÿÿÿÿÿÿÿÿÿ¯®Š®Š®Šòš»»ÿËÿËÿËÿËÿËW«®ŠÝÃÿËÿËÿËy³®Š®Š®Š®ŠšßÿÿÿÿÿÿÿÿVÃ®Š®Š®ŠV§ÿËÿËÿËÿËÿËÿËÿËW«®Šñ–š·ÿËÿËÿ˼¿Ð’®Š®Š®Š¼ëÿÿÿÿÿÿšÛ®Š®Š®ŠW«ÿËÿËÿËÿËÿËÿËÿËÿËW«®Š®Š®Š¯Ž6§ÝÃÿËÝÃÐ’®Š®ŠÑšÿÿÿÿÿÿЖ®Š®Š4£ÿËÿËÿËÿËÿËÿËÿËÿËÿËW«¯Ž®Š®Š®Š®Š¯Žy³ÿËÜ¿®Š®Š®ŠyÓÿÿÿÿ™×®Š®ŠÐ’ÞÇÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òš¼¿5£®Š®Š®Š¯ŽÝÃÿËš·®Š®ŠÏ’ÿÿÿÿò¢®Š®Šš·ÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËþÇW«®Š®Š»»ÿËÿËò–®Š®Šš×ÿÿÜ뮊®ŠÐŽÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËÿË5£®ŠÝÃÿËÿËš·®Š®Š«ÿÿWÃ®Š®Š5£ÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËþÇÐ’6§ÿËÿËÿËþÇ®Š®Š®Šÿÿ³®Š®Šš·ÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËÝÃñ–ÿËÿËÿËÿËÿËò–®Š®Š¼çÿò¢®Š®Š¼¿ÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËÿËÿËÿËÿËÿËÿËÿË4Ÿ®Š®Š™×ÿÑš®Š®ŠÝÃÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËÿËÿËÿËÿËÿËÿËÿË5£®Š®ŠxÏÿÑš®Š®ŠÝÃÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËÿËÿËÿËÿËÿËÿËÿË5£®Š®ŠxÏÿò¦®Š®Š»»ÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËŸ®Š®Šš×ÿ5»®Š®Šx¯ÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËW«òšÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËñ’®Š®ŠÜëÿyӮЮŠ5£ÿËÿËÿËÿËÿËÝÃx¯Ÿòš6§»»W«òšÿËÿËÿËÿËÿËÿËÿËÿËÿËÝÃ®Š®ŠÏ’ÿÿÝﮊ®Š¯ŠÝÃÿËÿËÿË6§®Š®Š®Š®Š®Š®ŠÐ’òšÿËÿËÿËÿËÿËÿËÿËÿËÿËW«®Š®Š5·ÿÿÿ4·®Š®ŠV§ÿËÿ˼¿®Š®Š®Š®Š®Š®Š®Š®ŠòšÿËÿËÿËÿËÿËÿËÿËÿËÝÃ¯Š®Š®Š»ãÿÿÿ»ã®Š®Š®Š¼¿ÿË»»®Š®Š®Š®Š®Š®Š®Š®ŠòšÿËÿËÿËÿËÿËÿËÿËÿËV§®Š®Šò¦ÿÿÿÿÿ³®Š®ŠÐ’ÞÃÿËñ–®Š®Š®Š®Š®Š®Š¯Ž¼¿ÿËÿËÿËÿËÿËÿËÿË™³®Š®Š®Š»ãÿÿÿÿÿ¼ë®Š®Š®Š›ÞÃÿËy³W«òšòš6§y³þÇÿËÿËÿËÿËÿËÿËÿË»»®Š®Š®Š4³ÿÿÿÿÿÿÿšß®Š®Š®Šñ’Ý¿ÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËÿËx¯®Š®Š®ŠñžÿÿÿÿÿÿÿÿÿxÏ®Š®Š®Š®Šw«þÇÿËÿËÿËÿËÿËÿËÿËÿËÿË»»Ÿ®Š®Š®ŠÐ’Ýïÿÿÿÿÿÿÿÿÿÿš×®Š®Š®Š®ŠÐŽ5£š·ÝÃÞÃþÇÞû»x¯›®Š®Š®Š®Šò¦ÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ë«®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š®ŠWÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ß¯®Š®Š®Š®Š®Š®Š®Š®Š®Š®Š¯ŽV¿ÜëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜëxϯњВϒВò¢5»»ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/hatenadir/ds/v2-xx/en/confirm/delete.txt b/hatenadir/ds/v2-xx/en/confirm/delete.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c00cb21a4e3a6e6ce87198b3eef7da872ffb409 GIT binary patch literal 418 zcmZXQO%8%U429pC#5>H+jo}g+<HDsEK*31DUx1+A-me`<P&4VYGi~4NYpy~SHexCF z3)?8sMGuu46m%qCs#BxZtAd`qD^AdruAqE{k@LQ*r?w_KDf6BNAGGH;)sE=QZ%({* zhJpTGliw-ahabFpM(N?rocD%r=82Xmdb$R1Td)d8PyS{%JtN9&s^H#OBSHb5X=%~d zz|vA>%1n`A2FIOzEAiK6u&nWQ)EIlrT=n)Y<1%f5e1;$Cwkg*;jC);FeD5-)@&m9q BN}d1! literal 0 HcmV?d00001 diff --git a/hatenadir/ds/v2-xx/en/confirm/download.txt b/hatenadir/ds/v2-xx/en/confirm/download.txt new file mode 100644 index 0000000000000000000000000000000000000000..75a720852b654f463ac6e096fc2481df55136cf3 GIT binary patch literal 514 zcmZvZK~4iP3`PGMi97fJsHZ@vt8M_Xp0;TT8Zx8IOrf{uIhja+swhrk`+t8sM-BQ? zQqS4xsEuZQv+s4M*WwSFSjHX|bWqfZeIUDMU5RA;XDz%skO3CczC>od^ESO;vpx&Y z0N&u9@I7!F!3B{1Hn0OWVQ0=|^-jbu#GUzx{0OS%xH=;{-H4c;VOc;$GQ3vP^Pj`C zU9~4p(;Kz+Fvrr5^XHrVe^FIMtFZ%}3O=n}J)$SVb6WX2;y%9-jTt+XZoQw@zfb0j lq8?w>&?3LN>s%UZs~=$b0Ci>Ve)oCS+52q$Uo!PJ`T+(sT}S`` literal 0 HcmV?d00001 diff --git a/hatenadir/ds/v2-xx/en/confirm/upload.txt b/hatenadir/ds/v2-xx/en/confirm/upload.txt new file mode 100644 index 0000000000000000000000000000000000000000..6344c8e390407c3d505f1553629181045d43429b GIT binary patch literal 410 zcmZXQOAdlS5JYQj;vF~vy7m&f(75KO5=SA363=d;z8+>0gA17IUsZK~-g})?>8eB< zHM*%+O>`ta$bnm;hHOPG(Gz^<&FJXJRp6f7N;AEdThH}BnJA~Tpzrd-KF&Khjqkx% zqnOd_Ja6M&^?}n|nTw9M0?obR8f5-E?{4r64nET}*2rZZ6P5f2<{fWF6!+;s({0nB uunYZ#&T!hywA1cVz-Kp%x-NJfC#+U#fvPFl-YwW}J=Sx71G{qECDj+}@=l)s literal 0 HcmV?d00001 diff --git a/hatenadir/ds/v2-xx/en/confirm/upload_bak.txt b/hatenadir/ds/v2-xx/en/confirm/upload_bak.txt new file mode 100644 index 0000000000000000000000000000000000000000..d0768fb5a39852584e577b22b32e91848b47506d GIT binary patch literal 3190 zcmbW3-EPxB5QX=er`Q`LkWk?rT2(~?S_vwyQ^#p7lGw^mt3D3T$qnb*)4_F|G!?2E z+q<*#b7tnu{(k#2-K9D$Q%+Z@P3yEtjlOR6z0r40r`n%rWhtq-_TQvGpF*-uQ%Rg_ zy-A%UTAisSlhcD%=K9O&Mk_gOwLjPXL??X8+Be1eSVvA5l11B6PxRH&w3b%ZK4@i8 zyqd^U>$^#hS{<G`mBo`H{YB@dPwzy7-}YeF`&}Kaq>%-soW2!w?ANs5bC$kq?L>PZ zb3KZ4SN}eAI^lCuP+S)~csI05PO!Stv(_63ObWtn!P*%EfBal&cPq4b!=59(m!Gwy zIcWrl;6d+^nTT^y;<-Ga4dlTZ`|E<iN_solYK7}IRr(75>~mQBC<%O96v-ydik`rB zj1;I|7XPp}-nYNh2^R1omsqOwOYflQy|6%SFN#zv+gUyjE54FEl@5+kxkTwGtZ_F2 zFr~6`I@7uQ@AUJEcl^g=2xQ$e?x0!~jt?M8C$1F1OeoLw9lkgp<hRwj`=+-^^o`De zM^`j#3hpbd-fC}CYGhq9cPE)i`39Sn_E!3)>$2W@dAuRxO}f{9wMU<QtE8pV?(?%? z^;tOe-ZaucL_~*XDkJMutJNWQII3xiN~#JbR6n`z^hNH-YF50Bp70L%1gmwD#HYEQ z*n(k*-PPkxY1NIJ5;tDDdO#2h^wgqghK<~%<ZGsPbeJuvh}SXYFz4=CGG#v7mpdws z_-v6Xu!r`KNL<%Q*^7Oh6SeQEejOLOKcX{Wa!{l@@OUQ6t*{Bi4zp#JXOH^lB=Sb_ zLD*3V)Sx4xV_<&grYcWYw>$1aC)vL*GGz03q{nf!1UBg?vK;IR!mI~&v14!DkMs!Z z^z7K5toX(pGenY{WzCX)GDjzbUAkbboA|?%V1M{%B8=${qikJ7a%h(AW~ZO!J>#39 z!k=KkbJ;*M@w+;yZdlj0{oD6!;Me;!_M51{e5QYNyHX?0E3Luha3wJ^^QwVGm?WeR zM|}Cz*}b=P*w>P)t$yc);jfAn_z_#ipy!U58}^XcD#>rv8|EfYV=!=S972ipU_T<> zkBM2@%-m<lK1JPfr@(fP+3p-LmjqWK9ntxA6EQ`m`>Ep05>xXO4=96Q<ewcgGgvzJ zk%{N?fIYI*^BD5)gfe%Dej@FgB~%B#9iCL^1;v-9)%!9D(9bQ4dB;o$w&#xXa?bDq zrr?)b@9~*EoYkBRWPa#06NWY8a;^9JKj#UZ!)*(Ogri+sOl+d%P5>KmWAmLIFOK^{ c75L7z6ptex_o}#AQjzFlf+OiVg58PaFW^{6?*IS* literal 0 HcmV?d00001 diff --git a/hatenadir/ds/v2-xx/en/eula.txt b/hatenadir/ds/v2-xx/en/eula.txt new file mode 100644 index 0000000000000000000000000000000000000000..f09fdbbf0eaf23b0f4360e61c3907d3d1794c48c GIT binary patch literal 388 zcmY+Au@1s83`B26;vc%Ppt3VDA=u#qXd9qX)mD@OUHEk1T`Gi7l-NG|&avOGpk9>@ zN_EwPJJlrKHE5|;wHnZ%L>sE?)!0O5-VW=y;4Sb=^2R#ii*Cd@UK;gwFv`EIYs@j@ zj&Js;pP+43cWKBQb(Cp{S}k4&V&*DVnb~To1?QJdQ3+%`(-u36jGSIQ?7)Nr?El_# zkdCeiIu$jZ($g1UH439zU{}sJ@z>*jt(BpCie0`F98vIwy_s<ndn$U)ljEO#06+^w ADgXcg literal 0 HcmV?d00001 diff --git a/hatenadir/ds/v2-xx/eula_list.tsv b/hatenadir/ds/v2-xx/eula_list.tsv new file mode 100644 index 0000000..63798b1 --- /dev/null +++ b/hatenadir/ds/v2-xx/eula_list.tsv @@ -0,0 +1 @@ +RQBuAGcAbABpAHMAaAA= en diff --git a/hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py b/hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py new file mode 100644 index 0000000..5e0e891 --- /dev/null +++ b/hatenadir/ds/v2-xx/frontpage/hotmovies.ugo.py @@ -0,0 +1,94 @@ +from twisted.web import resource +from twisted.internet import reactor +import time + +from hatena import Database, Log, NotFound +from Hatenatools import UGO + +#makes a flipnote list of the most seen ones among the recently uploaded +class PyResource(resource.Resource): + isLeaf = True + def __init__(self): + resource.Resource.__init__(self) + + self.pages = []#10 first pages + self.newestview = None + self.Update() + def render(self, request): + page = int(request.args["page"][0]) if "page" in request.args else 1 + + if len(self.pages) >= page: + path = "/".join(request.path.split("/")[3:]) + Log(request, "%s page %i" % (path, page)) + + request.responseHeaders.setRawHeaders('content-type', ['text/plain']) + return self.pages[page-1] + else: + return NotFound.render(request) + #=== + def Update(self):#called every 15 minutes + reactor.callLater(60*10, self.Update) + + if self.newestview <> Database.Views: + self.newestview = Database.Views + reactor.callInThread(self.UpdateThreaded, Database.Newest) + def UpdateThreaded(self, flipnotes):#run in an another thread + #sort the flipnotes by viewcount, affected by amount of stars + def sort((i, (ID, flip))): + views, stars = Database.GetFlipnote(ID, flip)[1:3] + return int(views)*60 + int(stars)/4 - i + flipnotes = map(lambda x: x[1], sorted(enumerate(flipnotes), key=sort)[::-1])[:500] + + #create pages: + pages = [] + pagecount = (len(flipnotes)-1)/50 + 1 + if pagecount > 10: pagecount = 10#temp? + flipcount = len(flipnotes) if len(flipnotes) < 500 else 500 + + for i in xrange(pagecount): + pages.append(self.MakePage(flipnotes[i*50:i*50+50], i+1, i<pagecount-1, flipcount)) + + if self.pages:#not on startup + print time.strftime("[%H:%M:%S] Updated hotmovies.ugo") + self.pages = pages + def MakePage(self, flipnotes, page, next, count): + ugo = UGO() + ugo.Loaded = True + ugo.Items = [] + + #meta + ugo.Items.append(("layout", (2, 1))) + ugo.Items.append(("topscreen text", ["Popular Flipnotes", "Flipnotes", str(count), "", "The most popular new Flipnotes."], 0)) + + #categories + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/hotmovies.uls", "Most Popular", True)) + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/likedmovies.uls", "Most Liked", False)) + #ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/recommended.uls", "Recommended", False)) + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/newmovies.uls", "New Flipnotes", False)) + #ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/following.uls", "New Favourites", False)) + + #the "post flipnote" button + ugo.Items.append(("unknown", ("3", "http://flipnote.hatena.com/ds/v2-xx/help/post_howto.htm", "UABvAHMAdAAgAEYAbABpAHAAbgBvAHQAZQA="))) + + #previous page + if page > 1: + ugo.Items.append(("button", 115, "Previous", "http://flipnote.hatena.com/ds/v2-xx/frontpage/hotmovies.uls?page=%i" % (page-1), ("", ""), None)) + + #Flipnotes + for creatorid, filename in flipnotes:#[i*50 : i*50+50]: + stars = str(Database.GetFlipnote(creatorid, filename)[2]) + + f = open(Database.FlipnotePath(creatorid, filename+".ppm"), "rb") + ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), ("bleh", f.read(0x6a0)))) + f.close() + + #next page + if next: + ugo.Items.append(("button", 115, "Next", "http://flipnote.hatena.com/ds/v2-xx/frontpage/hotmovies.uls?page=%i" % (page+1), ("", ""), None)) + + return ugo.Pack() + + + + + diff --git a/hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py b/hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py new file mode 100644 index 0000000..3544ac2 --- /dev/null +++ b/hatenadir/ds/v2-xx/frontpage/likedmovies.ugo.py @@ -0,0 +1,94 @@ +from twisted.web import resource +from twisted.internet import reactor +import time + +from hatena import Database, Log, NotFound +from Hatenatools import UGO + +#makes a flipnote list of the most seen ones among the recently uploaded +class PyResource(resource.Resource): + isLeaf = True + def __init__(self): + resource.Resource.__init__(self) + + self.pages = []#10 first pages + self.newestview = None + self.Update() + def render(self, request): + page = int(request.args["page"][0]) if "page" in request.args else 1 + + if len(self.pages) >= page: + path = "/".join(request.path.split("/")[3:]) + Log(request, "%s page %i" % (path, page)) + + request.responseHeaders.setRawHeaders('content-type', ['text/plain']) + return self.pages[page-1] + else: + return NotFound.render(request) + #=== + def Update(self):#called every 15 minutes + reactor.callLater(60*10, self.Update) + + if self.newestview <> Database.Views: + self.newestview = Database.Views + reactor.callInThread(self.UpdateThreaded, Database.Newest) + def UpdateThreaded(self, flipnotes):#run in an another thread + #sort the flipnotes by viewcount, affected by amount of stars + def sort((i, (ID, flip))): + views, stars = Database.GetFlipnote(ID, flip)[1:3] + return int(stars)*110 + int(views)/10 - i + flipnotes = map(lambda x: x[1], sorted(enumerate(flipnotes), key=sort)[::-1])[:500] + + #create pages: + pages = [] + pagecount = (len(flipnotes)-1)/50 + 1 + if pagecount > 10: pagecount = 10#temp? + flipcount = len(flipnotes) if len(flipnotes) < 500 else 500 + + for i in xrange(pagecount): + pages.append(self.MakePage(flipnotes[i*50:i*50+50], i+1, i<pagecount-1, flipcount)) + + if self.pages:#not on startup + print time.strftime("[%H:%M:%S] Updated hotmovies.ugo") + self.pages = pages + def MakePage(self, flipnotes, page, next, count): + ugo = UGO() + ugo.Loaded = True + ugo.Items = [] + + #meta + ugo.Items.append(("layout", (2, 1))) + ugo.Items.append(("topscreen text", ["Liked Flipnotes", "Flipnotes", str(count), "", "The most liked new Flipnotes."], 0)) + + #categories + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/hotmovies.uls", "Most Popular", False)) + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/likedmovies.uls", "Most Liked", True)) + #ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/recommended.uls", "Recommended", False)) + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/newmovies.uls", "New Flipnotes", False)) + #ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/following.uls", "New Favourites", False)) + + #the "post flipnote" button + ugo.Items.append(("unknown", ("3", "http://flipnote.hatena.com/ds/v2-xx/help/post_howto.htm", "UABvAHMAdAAgAEYAbABpAHAAbgBvAHQAZQA="))) + + #previous page + if page > 1: + ugo.Items.append(("button", 115, "Previous", "http://flipnote.hatena.com/ds/v2-xx/frontpage/likedmovies.uls?page=%i" % (page-1), ("", ""), None)) + + #Flipnotes + for creatorid, filename in flipnotes:#[i*50 : i*50+50]: + stars = str(Database.GetFlipnote(creatorid, filename)[2]) + + f = open(Database.FlipnotePath(creatorid, filename+".ppm"), "rb") + ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), ("bleh", f.read(0x6a0)))) + f.close() + + #next page + if next: + ugo.Items.append(("button", 115, "Next", "http://flipnote.hatena.com/ds/v2-xx/frontpage/likedmovies.uls?page=%i" % (page+1), ("", ""), None)) + + return ugo.Pack() + + + + + diff --git a/hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py b/hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py new file mode 100644 index 0000000..3e95eaa --- /dev/null +++ b/hatenadir/ds/v2-xx/frontpage/newmovies.ugo.py @@ -0,0 +1,91 @@ +from twisted.web import resource +from twisted.internet import reactor +import time + +from hatena import Database, Log, NotFound +from Hatenatools import UGO + +#makes a flipnote list of the newest flipnotes +class PyResource(resource.Resource): + isLeaf = True + def __init__(self): + resource.Resource.__init__(self) + + self.pages = []#10 first pages + self.newestflip = None + self.Update() + def render(self, request): + page = int(request.args["page"][0]) if "page" in request.args else 1 + + if len(self.pages) >= page: + path = "/".join(request.path.split("/")[3:]) + Log(request, "%s page %i" % (path, page)) + + request.responseHeaders.setRawHeaders('content-type', ['text/plain']) + return self.pages[page-1] + #elif (page-1)*50 < len(Database.Newest): + # pass + else: + return NotFound.render(request) + #=== + def Update(self):#called every minute + reactor.callLater(60, self.Update) + + if self.newestflip <> Database.Newest[0]: + self.newestflip = Database.Newest[0] + reactor.callInThread(self.UpdateThreaded, Database.Newest) + def UpdateThreaded(self, flipnotes):#run in an another thread + #create pages: + pages = [] + pagecount = (len(flipnotes)-1)/50 + 1 + if pagecount > 10: pagecount = 10#temp? + flipcount = len(flipnotes) + + for i in xrange(min((pagecount, 10))): + pages.append(self.MakePage(flipnotes[i*50:i*50+50], i+1, i<pagecount-1, flipcount)) + + if self.pages:#not on startup + print time.strftime("[%H:%M:%S] Updated newmovies.ugo") + self.pages = pages + def MakePage(self, flipnotes, page, next, count): + ugo = UGO() + ugo.Loaded = True + ugo.Items = [] + + #meta + ugo.Items.append(("layout", (2, 1))) + ugo.Items.append(("topscreen text", ["New Flipnotes", "Flipnotes", str(count), "", "The newest Flipnotes submitted."], 0)) + + #categories + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/hotmovies.uls", "Most Popular", False)) + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/likedmovies.uls", "Most Liked", False)) + #ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/recommended.uls", "Recommended", False)) + ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/newmovies.uls", "New Flipnotes", True)) + #ugo.Items.append(("category", "http://flipnote.hatena.com/ds/v2-xx/frontpage/following.uls", "New Favourites", False)) + + #the "post flipnote" button + ugo.Items.append(("unknown", ("3", "http://flipnote.hatena.com/ds/v2-xx/help/post_howto.htm", "UABvAHMAdAAgAEYAbABpAHAAbgBvAHQAZQA="))) + + #previous page + if page > 1: + ugo.Items.append(("button", 115, "Previous", "http://flipnote.hatena.com/ds/v2-xx/frontpage/newmovies.uls?page=%i" % (page-1), ("", ""), None)) + + #Flipnotes + for creatorid, filename in flipnotes:#[i*50 : i*50+50]: + stars = str(Database.GetFlipnote(creatorid, filename)[2]) + + f = open(Database.FlipnotePath(creatorid, filename+".ppm"), "rb") + ugo.Items.append(("button", 3, "", "http://flipnote.hatena.com/ds/v2-xx/movie/%s/%s.ppm" % (creatorid, filename), (stars, "765", "573", "0"), ("bleh", f.read(0x6a0)))) + f.close() + + #next page + if next: + ugo.Items.append(("button", 115, "Next", "http://flipnote.hatena.com/ds/v2-xx/frontpage/newmovies.uls?page=%i" % (page+1), ("", ""), None)) + + return ugo.Pack() + + + + + + diff --git a/hatenadir/ds/v2-xx/help/post_howto.htm b/hatenadir/ds/v2-xx/help/post_howto.htm new file mode 100644 index 0000000..acaf5b2 --- /dev/null +++ b/hatenadir/ds/v2-xx/help/post_howto.htm @@ -0,0 +1 @@ +<html> <head> <title>Post Flipnote
Posting a Flipnote

Posting a flipnote is as easy as pressing the button down below and selecting the flipnote you want to upload!

\ No newline at end of file diff --git a/hatenadir/ds/v2-xx/inbox.ugo b/hatenadir/ds/v2-xx/inbox.ugo new file mode 100644 index 0000000000000000000000000000000000000000..65d99424ca5cadd48782ed0964342ec64c5b6cc7 GIT binary patch literal 216 zcma*iOAdlC6op}Qc3FiRu!UZNXu{yu7<7oQ#35(}46jJh=llTVr-vOn3*utlA*AOE!wwwb)qGNvS! KmycyWj7)FYeLP73 literal 0 HcmV?d00001 diff --git a/hatenadir/ds/v2-xx/index.ugoxml b/hatenadir/ds/v2-xx/index.ugoxml new file mode 100644 index 0000000..1890ad7 --- /dev/null +++ b/hatenadir/ds/v2-xx/index.ugoxml @@ -0,0 +1,72 @@ + + + + 0 + + + <label /> + <label /> + <label /> + <label /> + <label /> + <num>0</num> + + + + + + + + + + diff --git a/hatenadir/ds/v2-xx/information.ugo b/hatenadir/ds/v2-xx/information.ugo new file mode 100644 index 0000000000000000000000000000000000000000..4210d2d382c8a815aff66940f56e5c22cf38cbca GIT binary patch literal 296 zcma)1OK!q25Dm-W3|s+hgM|VTi)UyYDzR{-ERtQChCme(L<|L1S+^H6tqX_%dfP9T5ovgjC89TP;YuDR)b}DV%m9wh9 zu%CfF=F|Gls8oNd_tjgayz*$0!<)$srIwk>)6k`i0K0hx&Z|HR=IuHbnfN zdaGrET^#d;*vi%JLojh-X7xMAw#-H{tDx@8z0WkUQO3M C7*tyT literal 0 HcmV?d00001 diff --git a/hatenadir/ds/v2-xx/movie.py b/hatenadir/ds/v2-xx/movie.py new file mode 100644 index 0000000..434cf1f --- /dev/null +++ b/hatenadir/ds/v2-xx/movie.py @@ -0,0 +1,93 @@ +from twisted.web import resource +import os + +from hatena import Database, Log, ServerLog, Silent, NotFound + +detailsHMTL = """uguu""" + + +#The movie folder: +class PyResource(resource.Resource): + isLeaf = False + def __init__(self): + resource.Resource.__init__(self) + + self.CreatorID = CreatorID() + def getChild(self, name, request): + if Database.CreatorExists(name): + return self.CreatorID + elif name == "": + return self + else: + return NotFound + def render(self, request): + request.setResponseCode(403) + return "403 - Denied access" + +#The creator ID folder: +class CreatorID(resource.Resource): + isLeaf = False + def __init__(self): + resource.Resource.__init__(self) + + self.CreatorIDFile = CreatorIDFile() + def getChild(self, name, request): + CreatorID = request.path.split("/")[-2] + filename = ".".join(name.split(".")[:-1]) + + if Database.FlipnoteExists(CreatorID, filename):#html, ppm and info + return self.CreatorIDFile + elif name == "": + return self + else: + return NotFound + def render(self, request): + request.setResponseCode(403) + return "403 - Denied access" + +#Any public file inside creator ID folder: +class CreatorIDFile(resource.Resource): + isLeaf = True + def __init__(self): + resource.Resource.__init__(self) + def render(self, request): + creator, file = request.path.split("/")[-2:] + filetype = file.split(".")[-1].lower() + + if filetype == "ppm": + #log it: + path = "/".join(request.path.split("/")[3:]) + Log(request, path) + + #add a view: + Database.AddView(creator, file[:-4]) + + #read ppm file: + f = open(Database.FlipnotePath(creator, file), "rb") + data = f.read() + f.close() + + #send file to client: + request.responseHeaders.setRawHeaders('content-type', ['text/plain']) + return data + elif filetype == "info": + path = "/".join(request.path.split("/")[3:]) + Log(request, path) + request.responseHeaders.setRawHeaders('content-type', ['text/plain']) + return "0\n0\n"#undocumented what it means + elif filetype == "htm":#not yet implemented + + + #ret = detailsHMTL[:] + #ret.replace("%%CreatorID%%", creator) + #ret.replace("%%Filename%%", file[:-4])#without the ext + #ret.replace("%%%%", ) + #ret.replace("%%%%", ) + + return "Not yet implemented" + else: + path = "/".join(request.path.split("/")[3:]) + ServerLog.write("%s got 403 when requesting " % (request.getClientIP(), path), Silent) + + request.setResponseCode(403) + return "403 - Denied access" \ No newline at end of file diff --git a/hatenadir/ds/v2-xx/movies.ugo b/hatenadir/ds/v2-xx/movies.ugo new file mode 100644 index 0000000000000000000000000000000000000000..fd25ca2f4e1eb7b58f9124e757eede1da1a1a4d9 GIT binary patch literal 90472 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 hwF*sof&+k