Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
;
; ------------------------------------------------------------
;
;   charger une image en streaming en local puis l'afficher by klr128
;   avec l'image redimentionné ;encodage et decodage base64 pour envoi blob mysql
;   va enregistrer les images dans la DB puis les charger
; ------------------------------------------------------------
;
;EnableExplicit
 Global *DatabaseBuffer
 Global scrollgad
 Global offy=0 
 Global scrollgad2=10
 
Procedure CatchImageExCallback(Image)
  OpenGadgetList(scrollgad2)  
    ImageGadget(#PB_Any, 0, offy, ImageWidth(Image), ImageHeight(Image), ImageID(Image))
  CloseGadgetList()
  offy=offy + ImageHeight(Image)+10
EndProcedure
 
Procedure CatchImageEx(Image, Base64String.s, Callback) 
  Protected W, H, IID
  i=0
  ! var v_i = new Image();
  ! v_i.onload = function(){
  !   v_w = v_i.width;
  !   v_h = v_i.height;
  If Image = #PB_Any
    Image = CreateImage(#PB_Any, W, H)
  Else
    CreateImage(Image, W, H)
  EndIf
  IID = ImageID(Image)  
  !   v_iid.getContext("2d").drawImage(v_i, 0, 0);
  !   v_callback(v_image);
  ! };
  ! console.log("hahassss "+v_base64string);
  ! v_i.src = v_base64string;
EndProcedure
 
Procedure CreateFileCallback(Status, Filename$, File, SizeRead)
  Select Status
    Case #PB_Status_Saved
      Debug "Database file saved: " + Filename$
      Debug "Please relaunch the program to test the persitency."
    Case #PB_Status_Error
      Debug "Can't save the database: " + Filename$
  EndSelect
EndProcedure
 
Procedure OnaffDB() ;va suprimer les images présente dans le gadget scrollgad2
  ;  ReadFile(0, "dbsqlitev3.sqlite", @ReadFileCallback(), #PB_LocalStorage)
  nbb=0
  ! var GadgetElement = spider_GadgetID(v_scrollgad2).div;
  ! var tt =GadgetElement.childNodes;
  ! spider.debug.Print(GadgetElement);
  ! var tt2 =tt[0].childNodes;
  ! v_nbb = tt2.length;
  ! spider.debug.Print(v_nbb);
  For sd=0 To nbb-1
    ! tt2[v_nbb-1-v_sd].remove();
  Next
  Debug "delet fin"
  offy=0
EndProcedure
 
Procedure Loaded(Type, Filename$, ObjectId)
  If ImageWidth(ObjectId)>=ImageHeight(ObjectId)
    vv.f= (300-40)*100/ImageWidth(ObjectId)
    bob=ResizeImage(ObjectId, (300-40), ImageHeight(ObjectId)*vv/100);,#PB_Image_Raw)
  Else
    vv.f= (300 -40)*100/ImageHeight(ObjectId) ;380 -90    
    bob= ResizeImage(ObjectId, ImageWidth(ObjectId)*vv/100, (300-40))
  EndIf
  IDD = ImageID(bob) ;ObjectId) ;
  base64encodeimg.s = "";
  ! v_base64encodeimg = v_idd.toDataURL();
 
  *Buffer = AllocateMemory( Len(base64encodeimg) )
  PokeS(*Buffer, 0, base64encodeimg)
  If OpenDatabase(0, *DatabaseBuffer)       ; Now check if it's really in the db 
    SetDatabaseString(0, 0, "blob test")
    SetDatabaseBlob(0, 1, *Buffer, MemorySize(*Buffer)) ; Assign it to the 2nd paramater    
    DatabaseUpdate(0, "INSERT INTO food (name, image) VALUES (?, ?);")
    OnaffDB() ;pour sup image précédente av rafrechissement
 
   *DatabaseBuffer = ExportDatabaseMemory(DB)
   If CreateFile(0, "dbsqlitev3.sqlite", @CreateFileCallback(), #PB_LocalStorage)
     WriteData(0, *DatabaseBuffer, 0, MemorySize(*DatabaseBuffer))
     CloseFile(0)
   EndIf
    If DatabaseQuery(0, "SELECT * FROM food")
      While NextDatabaseRow(0)
        Debug "name: '" + GetDatabaseString(0, 0) + "', blob size: " + MemorySize(GetDatabaseBlob(0, 1))
        *Buffertmp =GetDatabaseBlob(0, 1)
        ooo.s="";
        sizebuff = MemorySize(GetDatabaseBlob(0, 1))
        For o=0 To sizebuff
          ooo = ooo+ Chr( PeekB( *Buffertmp ,o) )
        Next
        Debug ooo
        CatchImageEx(0, ooo, @CatchImageExCallback())
      Wend
    EndIf
    FinishDatabaseQuery(0)        
  Else
    Debug "OpenDatabase() failed"
  EndIf
  FreeImage(bob)  
EndProcedure
 
Procedure LoadingError(Type, Filename$, ObjectId)
  Debug Filename$ + ": loading error"
EndProcedure
 
Enumeration
  #SelectFileGadget
  #ProgressGadget
EndEnumeration
 
#ChunkSize = 1024 * 1024 ; 1 MB chunk
Global *Buffer = AllocateMemory(#ChunkSize) ; Allocate a global memory buffer to avoid realloc
 
Procedure ReadCallback(Status, Filename$, File, Size)
  If Status = #PB_Status_Loaded
    ReadData(1, *Buffer, 0, Size)    ; Read all data into the memory buffer
    AddFingerprintBuffer(1, *Buffer, 0, Size)    ; Continue the fingerprint calculation    
    SetGadgetState(#ProgressGadget, (Loc(0) * 100) / Lof(0))    ; Update the progressbar  
    If Not Eof(1)
      FetchData(1, #ChunkSize) ; Continue the reading if the end of file hasn't be reach yet
    Else
      LoadImage(1, Filename$,#PB_LocalFile);"Data/SpiderBasicLogo.png")
    EndIf
  ElseIf Status = #PB_Status_Error
    Debug "Error when loading the file: " + Filename$
  EndIf
EndProcedure
 
Procedure OpenFileRequesterCallback()  ; Start the read the file, in stream mode
  If NextSelectedFile()
    If ReadFile(1, SelectedFileID(), @ReadCallback(), #PB_LocalFile | #PB_File_Streaming)
      StartFingerprint(1, #PB_Cipher_MD5)      ; Initialize fingerprint calc
      FetchData(1, #ChunkSize)       ; Read the first chunk from the file
    EndIf 
  EndIf
EndProcedure
 
Procedure ChooseFileEvent()
  OpenFileRequester("*.txt", @OpenFileRequesterCallback())
EndProcedure
 
Procedure ReadFileCallback(Status, Filename$, File, SizeRead)
  Select Status
    Case #PB_Status_Loaded
      ;Debug "bob Database file found and loaded: " + Filename$      ; Get all the file as a memory buffer
 
      *DatabaseBuffer = ExportFileMemory(File)  
      If OpenDatabase(0, *DatabaseBuffer)
        Debug "OpenDatabase() created with previous database data. Performing a query..."
 
        If DatabaseQuery(0, "SELECT * FROM food")
          ;Debug "erreur?: "+DatabaseError()
          id=0
          While NextDatabaseRow(0)
            Debug Str(id)+" name: '" + GetDatabaseString(0, 0) + "', blob size: " + MemorySize(GetDatabaseBlob(0, 1))
            id=id+1
            *Buffertmp =GetDatabaseBlob(0, 1)
            ooo.s="";
            sizebuff = MemorySize(GetDatabaseBlob(0, 1))
            For o=0 To sizebuff
              ooo = ooo+ Chr( PeekB( *Buffertmp ,o) )
            Next
            ;Debug ooo
            CatchImageEx(0, ooo, @CatchImageExCallback())
          Wend
          FinishDatabaseQuery(0)        
        Else
          Debug "DatabaseQuery() failed: " + DatabaseError()
        EndIf 
        ;CloseDatabase(0)
      Else
        Debug "OpenDatabase() failed"
      EndIf
 
    Case #PB_Status_Error
      Debug "Database not found in localstorage: " + Filename$
      Debug "Creating a new database..."
      If OpenDatabase(0)  
        DatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), image BLOB)")       
        ;DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Peter', 'Parker', '80.8')")
        ;DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Bruce', 'Wayne', '70.5')")
        ;DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Clark', 'Kent', '75.1')")
 
        *DatabaseBuffer = ExportDatabaseMemory(DB)          ; Now save the database to a persistent file
        If CreateFile(0, "dbsqlitev3.sqlite", @CreateFileCallback(), #PB_LocalStorage)
          WriteData(0, *DatabaseBuffer, 0, MemorySize(*DatabaseBuffer))
          CloseFile(0)
        EndIf
 
        CloseDatabase(0)
      Else
        Debug "OpenDatabase() failed"
      EndIf
  EndSelect
EndProcedure
 
 
If OpenWindow(0, 0, 0, 300, 480, "charger une image par morceaux", #PB_Window_ScreenCentered)
  scrollgad =ScrollAreaGadget(#PB_Any, 0, 5, WindowWidth(0), WindowHeight(0)-10, WindowWidth(0), 2000,#PB_ScrollArea_Single) ;#PB_Any
  ! var GadgetElement = spider_GadgetID(v_scrollgad).div;
  ! GadgetElement.style.scrollbarWidth = 'none';
 
  ;  PanelGadget(pannel, 5, 5, WindowWidth(0)-10, WindowHeight(0)-10)
  ;  AddGadgetItem(pannel, -1, "charger") ;-- pannel compte
 
  ButtonGadget(#SelectFileGadget, 10, 10, 280, 25, "charger une image")
 
  TextGadget(#PB_Any, 10, 45, 60, 25, "Progression: ")
  ProgressBarGadget(#ProgressGadget, 70, 45, 220, 25, 0, 100)    
  BindGadgetEvent(0, @ChooseFileEvent())
 
  btn_aff = ButtonGadget(#PB_Any, 10, 90, 150, 25, "clear images")
  BindGadgetEvent(btn_aff, @OnaffDB())
 
  ScrollAreaGadget(scrollgad2, 0, 120, WindowWidth(0), WindowHeight(0)-120-20+9, WindowWidth(0)-20, 2000,#PB_ScrollArea_Single) ;#PB_Any
  CloseGadgetList()
 
  ;AddGadgetItem(pannel, -1, "afficher") ;-- pannel compte    
  ;CloseGadgetList()
  ReadFile(0, "dbsqlitev3.sqlite", @ReadFileCallback(), #PB_LocalStorage)
EndIf
 
; Register the loading event before calling any resource load command
BindEvent(#PB_Event_Loading, @Loaded())
BindEvent(#PB_Event_LoadingError, @LoadingError())