• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import fileio from '@ohos.fileio'
17import { LogUtil } from './LogUtil'
18import FolderUtil from './FolderUtil'
19import NoteUtil from './NoteUtil'
20import SysDefData from '../model/databaseModel/SysDefData'
21import FolderData from '../model/databaseModel/FolderData'
22import NoteData from '../model/databaseModel/NoteData'
23import {
24  TableSql,
25  TableName,
26  FolderTableColumn,
27  NoteTableColumn,
28  SysDefFolderUuid
29} from '../model/databaseModel/EnumData'
30import relationalStore from '@ohos.data.relationalStore'
31import util from '@ohos.util';
32
33const TAG = "RdbStoreUtil"
34
35const FileMaxSize: number = 20 * 1024 * 1024
36
37/**
38 * db instance
39 */
40
41export default {
42  /**
43   * create db and table
44   */
45  createRdbStore(context) {
46    try {
47      relationalStore.getRdbStore(context, SysDefData.dbInfo.db_name)
48        .then(async (store) => {
49          // add sys-def folder and note to AppStorage
50          let folderDataArray = []
51          let sysDefFolderArray = [SysDefData.sys_def_allNotes, SysDefData.sys_def_unClassified,
52          SysDefData.sys_def_myFavorites, SysDefData.sys_def_recentDeletes,
53          SysDefData.sys_def_personal, SysDefData.sys_def_life, SysDefData.sys_def_work]
54          sysDefFolderArray.forEach((sysDefFolder) => {
55            let folderData = new FolderData(sysDefFolder.id, sysDefFolder.name, sysDefFolder.uuid, sysDefFolder.color,
56              sysDefFolder.folder_type, sysDefFolder.is_deleted, sysDefFolder.created_time,
57              sysDefFolder.modified_time)
58            folderDataArray.push(folderData)
59          })
60          LogUtil.info(TAG, "folderDataArray[sysdef] : " + folderDataArray.length)
61
62          let noteDataArray = []
63          let sysDefNoteArray = [SysDefData.sys_def_note1, SysDefData.sys_def_note2,
64          SysDefData.sys_def_note3, SysDefData.sys_def_note4]
65          sysDefNoteArray.forEach((sysDefNote) => {
66            let noteData = new NoteData(sysDefNote.id, sysDefNote.title, sysDefNote.uuid, sysDefNote.folder_uuid, sysDefNote.content_text,
67              sysDefNote.content_img, sysDefNote.note_type, sysDefNote.is_top, sysDefNote.is_favorite,
68              sysDefNote.is_deleted, sysDefNote.created_time, sysDefNote.modified_time, sysDefNote.deleted_time, sysDefNote.slider_value)
69            noteDataArray.push(noteData)
70          })
71          LogUtil.info(TAG, "noteDataArray[sysdef] : " + noteDataArray.length)
72
73          AppStorage.SetOrCreate('AllFolderArray', folderDataArray)
74          AppStorage.SetOrCreate('AllNoteArray', noteDataArray)
75          LogUtil.info(TAG, "AppStorage[sysdef] set AllFolderArray and AllNoteArray success")
76
77          // save continue data
78          let isContinue = AppStorage.Get<boolean>('IsContinue');
79          LogUtil.info(TAG, "createRdbStore, isContinue is " + isContinue)
80          if (isContinue) {
81            let continueNote: string = AppStorage.Get('ContinueNote')
82            let continueSection = AppStorage.Get('ContinueSection')
83            let noteObj = JSON.parse(continueNote)
84            let noteData = new NoteData(noteObj.uuid, noteObj.title, noteObj.uuid, noteObj.folder_uuid,
85              noteObj.content_text, noteObj.content_img, noteObj.note_type, noteObj.is_top, noteObj.is_favorite,
86              noteObj.is_deleted, noteObj.created_time, noteObj.modified_time, noteObj.deleted_time, noteObj.slider_value)
87
88            // save img to FileDir
89            LogUtil.info(TAG, "createRdbStore, save img to FileDir")
90            let imgNameArray = this.getImgNameFromHtml(noteData)
91            imgNameArray.forEach((imgName: string) => {
92              this.writeToFileDir(imgName)
93            })
94
95            // if not exit this note
96            let exist = false
97            let folderUuid = ""
98            for (let note of noteDataArray) {
99              if (noteData.created_time == note.created_time) {
100                exist = true
101                folderUuid = note.folder_uuid
102                break
103              }
104            }
105            LogUtil.info(TAG, "createRdbStore, exist : " + exist)
106            if (!exist) {
107              // 迁移过来的笔记在本地不存在,则保存在未分类文件夹
108              noteData.folder_uuid = SysDefFolderUuid.UnClassified
109              noteDataArray.push(noteData)
110              AppStorage.SetOrCreate('AllNoteArray', noteDataArray)
111              this.insert(TableName.NoteTable, noteData.toNoteObject(), null)
112              AppStorage.SetOrCreate('Folder', FolderUtil.getFolderData(folderDataArray, SysDefFolderUuid.UnClassified))
113            } else {
114              // 迁移过来的笔记在本地存在,则进行修改
115              for (let i = 0; i < noteDataArray.length; i++) {
116                if (noteData.created_time == noteDataArray[i].created_time) {
117                  noteDataArray[i] = noteData
118                  LogUtil.info(TAG, "createRdbStore, update noteData in noteDataArray success")
119                  break
120                }
121              }
122              let predicates_note = this.getRdbPredicates(TableName.NoteTable)
123              predicates_note.equalTo(NoteTableColumn.CreatedTime, noteData.created_time)
124              this.update(noteData.toNoteObject(), predicates_note, null)
125              AppStorage.SetOrCreate('Folder', FolderUtil.getFolderData(folderDataArray, folderUuid))
126            }
127            AppStorage.SetOrCreate('Note', noteData)
128            AppStorage.SetOrCreate<string>('ContinueNote', JSON.stringify(noteData.toNoteObject()))
129            AppStorage.SetOrCreate('Section', continueSection)
130            AppStorage.SetOrCreate<NoteData>('NewNote', noteData)
131          } else {
132            LogUtil.info(TAG, "createRdbStore, IsContinue false")
133            AppStorage.SetOrCreate('Folder', AppStorage.Get('AllFolderArray')[0])
134            let note = NoteUtil.getFirstNoteData(AppStorage.Get('AllNoteArray'), SysDefFolderUuid.AllNotes)
135            AppStorage.SetOrCreate('Note', note)
136            if (note) {
137              AppStorage.SetOrCreate<string>('ContinueNote', JSON.stringify(note.toNoteObject()))
138            }
139            AppStorage.SetOrCreate('Section', 3)
140          }
141          AppStorage.SetOrCreate('DBQueryFinished', 1)
142          LogUtil.info(TAG, "createRdbStore, set DBQueryFinished 1")
143          LogUtil.info(TAG, "createRdbStore, store is " + store)
144          globalThis.rdbStore = store
145          // create table
146          await globalThis.rdbStore.executeSql(TableSql.FolderTableSQL, null)
147          await globalThis.rdbStore.executeSql(TableSql.NoteTableSQL, null)
148          await globalThis.rdbStore.executeSql(TableSql.AttachmentTableSQL, null)
149          await globalThis.rdbStore.executeSql(TableSql.FormTableSQL, null)
150          LogUtil.info(TAG, "create table success")
151          // insert system defined folder
152          await globalThis.rdbStore.insert(TableName.FolderTable, SysDefData.sys_def_allNotes)
153          await globalThis.rdbStore.insert(TableName.FolderTable, SysDefData.sys_def_unClassified)
154          await globalThis.rdbStore.insert(TableName.FolderTable, SysDefData.sys_def_myFavorites)
155          await globalThis.rdbStore.insert(TableName.FolderTable, SysDefData.sys_def_recentDeletes)
156          await globalThis.rdbStore.insert(TableName.FolderTable, SysDefData.sys_def_personal)
157          await globalThis.rdbStore.insert(TableName.FolderTable, SysDefData.sys_def_life)
158          await globalThis.rdbStore.insert(TableName.FolderTable, SysDefData.sys_def_work)
159          LogUtil.info(TAG, "insert system defined folder success")
160          // insert system defined note and attachment
161          await globalThis.rdbStore.insert(TableName.NoteTable, SysDefData.sys_def_note1)
162          await globalThis.rdbStore.insert(TableName.NoteTable, SysDefData.sys_def_note2)
163          await globalThis.rdbStore.insert(TableName.NoteTable, SysDefData.sys_def_note3)
164          await globalThis.rdbStore.insert(TableName.NoteTable, SysDefData.sys_def_note4)
165          LogUtil.info(TAG, "insert system defined note and attachment success")
166        })
167    } catch (err) {
168      LogUtil.warn(TAG, "createRdbStore, error : " + err)
169    }
170  },
171
172  /**
173   * query folders and notes from the database, then save them to the AppStorage.
174   */
175  initAppStorage(context) {
176    let folderDataArray = []
177    let noteDataArray = []
178    try {
179      relationalStore.getRdbStore(context, SysDefData.dbInfo.db_name)
180        .then(async (store) => {
181          LogUtil.info(TAG, "initAppStorage, store is " + store)
182          globalThis.rdbStore = store
183          // query folder
184          let columns_folder = []
185          let predicates_folder = new relationalStore.RdbPredicates(TableName.FolderTable)
186          let resultSet_folder = await globalThis.rdbStore.query(predicates_folder, columns_folder)
187          while (resultSet_folder.goToNextRow()) {
188            let id = resultSet_folder.getLong(resultSet_folder.getColumnIndex(FolderTableColumn.Id))
189            let name = resultSet_folder.getString(resultSet_folder.getColumnIndex(FolderTableColumn.Name))
190            let uuid = resultSet_folder.getString(resultSet_folder.getColumnIndex(FolderTableColumn.Uuid))
191            let color = resultSet_folder.getString(resultSet_folder.getColumnIndex(FolderTableColumn.Color))
192            let folder_type = resultSet_folder.getLong(resultSet_folder.getColumnIndex(FolderTableColumn.FolderType))
193            let is_deleted = resultSet_folder.getLong(resultSet_folder.getColumnIndex(FolderTableColumn.IsDeleted))
194            let created_time = resultSet_folder.getLong(resultSet_folder.getColumnIndex(FolderTableColumn.CreatedTime))
195            let modified_time = resultSet_folder.getLong(resultSet_folder.getColumnIndex(FolderTableColumn.ModifiedTime))
196            let folderData = new FolderData(id, name, uuid, color, folder_type, is_deleted, created_time, modified_time)
197            folderDataArray.push(folderData)
198          }
199          resultSet_folder.close();
200          LogUtil.info(TAG, "folderDataArray[query] : " + folderDataArray.length)
201          // query note
202          let columns_note = []
203          let predicates_note = new relationalStore.RdbPredicates(TableName.NoteTable)
204          let resultSet_note = await globalThis.rdbStore.query(predicates_note, columns_note)
205          while (resultSet_note.goToNextRow()) {
206            let id = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.Id))
207            let title = resultSet_note.getString(resultSet_note.getColumnIndex(NoteTableColumn.Title))
208            let uuid = resultSet_note.getString(resultSet_note.getColumnIndex(NoteTableColumn.Uuid))
209            let folder_uuid = resultSet_note.getString(resultSet_note.getColumnIndex(NoteTableColumn.FolderUuid))
210            // 暂时规避备忘录二次打开白屏问题,后续数据库解决
211            let content_text = '';
212            let content_img = '';
213            try {
214              content_text = resultSet_note.getString(resultSet_note.getColumnIndex(NoteTableColumn.ContentText))
215              content_img = resultSet_note.getString(resultSet_note.getColumnIndex(NoteTableColumn.ContentImg))
216            } catch (err) {
217              LogUtil.error(TAG, "initAppStorage, content_img = error : " + err)
218            }
219            let noteType = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.NoteType))
220            let is_top = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.IsTop))
221            let is_favorite = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.IsFavorite))
222            let is_deleted = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.IsDeleted))
223            let created_time = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.CreatedTime))
224            let modified_time = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.ModifiedTime))
225            let deleted_time = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.DeletedTime))
226            let slider_value = resultSet_note.getLong(resultSet_note.getColumnIndex(NoteTableColumn.SliderValue))
227            let noteData = new NoteData(id, title, uuid, folder_uuid, content_text, content_img, noteType, is_top, is_favorite, is_deleted, created_time, modified_time, deleted_time, slider_value)
228            noteDataArray.push(noteData)
229          }
230          resultSet_note.close();
231          LogUtil.info(TAG, "noteDataArray[query] : " + noteDataArray.length)
232          if (folderDataArray === null || folderDataArray === undefined || folderDataArray.length === 0) {
233            LogUtil.info(TAG, "folderDataArray is null")
234            let sysDefFolderArray = [SysDefData.sys_def_allNotes, SysDefData.sys_def_unClassified,
235            SysDefData.sys_def_myFavorites, SysDefData.sys_def_recentDeletes,
236            SysDefData.sys_def_personal, SysDefData.sys_def_life, SysDefData.sys_def_work]
237            sysDefFolderArray.forEach((sysDefFolder) => {
238              let folderData = new FolderData(sysDefFolder.id, sysDefFolder.name, sysDefFolder.uuid, sysDefFolder.color,
239                sysDefFolder.folder_type, sysDefFolder.is_deleted, sysDefFolder.created_time,
240                sysDefFolder.modified_time)
241              folderDataArray.push(folderData)
242            })
243            LogUtil.info(TAG, "folderDataArray[query] : " + folderDataArray.length)
244          }
245          AppStorage.SetOrCreate('AllFolderArray', folderDataArray)
246          AppStorage.SetOrCreate('AllNoteArray', noteDataArray)
247          LogUtil.info(TAG, "AppStorage[query] set AllFolderArray and AllNoteArray success")
248
249          // save continue data
250          let isContinue = AppStorage.Get<boolean>('IsContinue');
251          LogUtil.info(TAG, "initAppStorage, isContinue is " + isContinue)
252          if (isContinue) {
253            let continueNote: string = AppStorage.Get('ContinueNote')
254            let continueSection = AppStorage.Get('ContinueSection')
255
256            let noteObj = JSON.parse(continueNote)
257            let noteData = new NoteData(noteObj.uuid, noteObj.title, noteObj.uuid, noteObj.folder_uuid,
258              noteObj.content_text, noteObj.content_img, noteObj.note_type, noteObj.is_top, noteObj.is_favorite,
259              noteObj.is_deleted, noteObj.created_time, noteObj.modified_time, noteObj.deleted_time, noteObj.slider_value)
260
261            // save img to FileDir
262            LogUtil.info(TAG, "initAppStorage, save img to FileDir")
263            let imgNameArray = this.getImgNameFromHtml(noteData)
264            imgNameArray.forEach((imgName: string) => {
265              this.writeToFileDir(imgName)
266            })
267
268            // if not exit this note
269            let exist = false
270            let folderUuid = ""
271            for (let note of noteDataArray) {
272              if (noteData.created_time == note.created_time) {
273                exist = true
274                folderUuid = note.folder_uuid
275                break
276              }
277            }
278            LogUtil.info(TAG, "initAppStorage, exist : " + exist)
279            if (!exist) {
280              // 迁移过来的笔记在本地不存在,则保存在未分类文件夹
281              noteData.folder_uuid = SysDefFolderUuid.UnClassified
282              noteDataArray.push(noteData)
283              AppStorage.SetOrCreate('AllNoteArray', noteDataArray)
284              this.insert(TableName.NoteTable, noteData.toNoteObject(), null)
285              AppStorage.SetOrCreate('Folder', FolderUtil.getFolderData(folderDataArray, SysDefFolderUuid.UnClassified))
286            } else {
287              // 迁移过来的笔记在本地存在,则进行修改
288              for (let i = 0; i < noteDataArray.length; i++) {
289                if (noteData.created_time == noteDataArray[i].created_time) {
290                  noteDataArray[i] = noteData
291                  LogUtil.info(TAG, "initAppStorage, update noteData in noteDataArray success")
292                  break
293                }
294              }
295              let predicates_note = this.getRdbPredicates(TableName.NoteTable)
296              predicates_note.equalTo(NoteTableColumn.CreatedTime, noteData.created_time)
297              this.update(noteData.toNoteObject(), predicates_note, null)
298              AppStorage.SetOrCreate('Folder', FolderUtil.getFolderData(folderDataArray, folderUuid))
299            }
300            AppStorage.SetOrCreate('Note', noteData)
301            AppStorage.SetOrCreate<string>('ContinueNote', JSON.stringify(noteData.toNoteObject()))
302            AppStorage.SetOrCreate('Section', continueSection)
303            AppStorage.SetOrCreate<NoteData>('NewNote', noteData)
304          } else {
305            LogUtil.info(TAG, "initAppStorage, IsContinue false")
306            AppStorage.SetOrCreate('Folder', AppStorage.Get('AllFolderArray')[0])
307            let note = NoteUtil.getFirstNoteData(AppStorage.Get('AllNoteArray'), SysDefFolderUuid.AllNotes)
308            AppStorage.SetOrCreate('Note', note)
309            if (note) {
310              AppStorage.SetOrCreate<string>('ContinueNote', JSON.stringify(note.toNoteObject()))
311            }
312            AppStorage.SetOrCreate('Section', 3)
313          }
314          AppStorage.SetOrCreate('DBQueryFinished', 1)
315          LogUtil.info(TAG, "initAppStorage, set DBQueryFinished 1")
316        })
317    } catch (err) {
318      LogUtil.error(TAG, "initAppStorage, error : " + err)
319    }
320  },
321
322  getImgNameFromHtml(noteData: NoteData): any {
323    let newModuleName = "file://" + globalThis.noteContext.filesDir
324    let imgNameArray = []
325    if (noteData.content_text == undefined || noteData.content_text == null || noteData.content_text == "") {
326      LogUtil.info(TAG, "noteData.content_text is null or undefined")
327      return imgNameArray
328    }
329    let base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/
330    let html
331    if (base64regex.test(noteData.content_text)) {
332      let base64 = new util.Base64Helper
333      html = base64.decodeSync(noteData.content_text).toString()
334    } else {
335      html = noteData.content_text
336    }
337    if (html == undefined || html == null || html == "") {
338      return imgNameArray
339    }
340    let imgReg = /<img[^>]+>/g
341    let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i
342    let imgArray = html.match(imgReg)
343    if (imgArray != null) {
344      let hasFirstImg: boolean = false
345      for (let i = 0; i < imgArray.length; i++) {
346        let src = imgArray[i].match(srcReg)
347        if (src != null && src.length > 1) {
348          LogUtil.info(TAG, "getImgNameFromHtml, src[1] : " + src[1])
349          let lastIndex = src[1].lastIndexOf('/')
350          if (lastIndex != -1) {
351            let oldModuleName = src[1].substring(0, lastIndex)
352            let imgName = src[1].substring(lastIndex + 1)
353            noteData.content_text = noteData.content_text.replace(oldModuleName, newModuleName)
354            if (!hasFirstImg) {
355              noteData.content_img = newModuleName + "/" + imgName
356              hasFirstImg = true
357            }
358            imgNameArray.push(imgName)
359          }
360        }
361      }
362    }
363    return imgNameArray
364  },
365
366  writeToFileDir(fileName: string) {
367    LogUtil.info(TAG, "writeToFileDir fileName : " + fileName)
368
369    let desPath = globalThis.noteContext.filesDir + "/" + fileName
370    LogUtil.info(TAG, "desPath : " + desPath)
371    try {
372      fileio.accessSync(desPath)
373      LogUtil.info(TAG, "desPath has existed, return")
374      return
375    } catch (err) {
376      LogUtil.warn(TAG, "desPath has not existed, need to write")
377    }
378    let srcPath
379    let size
380    try {
381      srcPath = globalThis.noteContext.distributedFilesDir + "/" + fileName
382      LogUtil.info(TAG, "srcPath : " + srcPath)
383      size = fileio.statSync(srcPath).size
384      LogUtil.info(TAG, "srcPath size : " + size)
385      if (size > FileMaxSize) {
386        LogUtil.warn(TAG, "srcPath size more then FileMaxSize, return")
387        return
388      }
389    }
390    catch (err) {
391      LogUtil.warn(TAG, "desPath has not existed, need to write two")
392      return
393    }
394
395
396    let srcFd
397    try {
398      srcFd = fileio.openSync(srcPath, 0o0)
399      LogUtil.info(TAG, "open srcPath success : " + srcFd)
400    } catch (err) {
401      LogUtil.warn(TAG, "open srcPath failed : " + err)
402      return
403    }
404
405    let desFd
406    try {
407      desFd = fileio.openSync(desPath, 0o2 | 0o100, 0o400 | 0o200 | 0o040 | 0o020)
408      LogUtil.info(TAG, "open desPath success : " + srcFd)
409    } catch (err) {
410      LogUtil.warn(TAG, "open desPath failed : " + err)
411      return
412    }
413
414    let buf = new ArrayBuffer(size)
415    try {
416      let readNum = fileio.readSync(srcFd, buf)
417      LogUtil.info(TAG, "readNum : " + readNum)
418      let writeNum = fileio.writeSync(desFd, buf)
419      LogUtil.info(TAG, "writeNum : " + writeNum)
420    } catch (err) {
421      LogUtil.warn(TAG, "read or write error : " + err)
422    }
423  },
424
425  /**
426   * insert
427   * @param tableName
428   * @param valueBucket
429   * @param callback
430   */
431  insert(tableName, valueBucket, callback) {
432    globalThis.rdbStore.insert(tableName, valueBucket).then((rowId) => {
433      LogUtil.info(TAG, "insert success, rowId is " + rowId)
434      if (callback != null) {
435        callback(rowId)
436      }
437    }).catch((err) => {
438      LogUtil.warn(TAG, "insert error : " + err)
439    })
440  },
441
442  /**
443   * delete
444   * @param predicates
445   * @param callback
446   */
447  delete(predicates, callback) {
448    globalThis.rdbStore.delete(predicates).then((affectedRowCount) => {
449      LogUtil.info(TAG, "delete success, affectedRowCount is " + affectedRowCount)
450      if (callback != null) {
451        callback(affectedRowCount)
452      }
453    }).catch((err) => {
454      LogUtil.warn(TAG, "delete error : " + err)
455    })
456  },
457
458  /**
459   * update
460   * @param valueBucket
461   * @param predicates
462   * @param callback
463   */
464  update(valueBucket, predicates, callback) {
465    if (!globalThis.rdbStore) {
466      return;
467    }
468    globalThis.rdbStore.update(valueBucket, predicates).then((affectedRowCount) => {
469      LogUtil.info(TAG, "update success, affectedRowCount is " + affectedRowCount)
470      if (callback != null) {
471        callback(affectedRowCount)
472      }
473    }).catch((err) => {
474      LogUtil.warn(TAG, "update error : " + err)
475    })
476  },
477
478  /**
479   * query
480   * @param columns
481   * @param predicates
482   * @param callback
483   */
484  query(columns, predicates, callback) {
485    globalThis.rdbStore.query(predicates, columns).then((resultSet) => {
486      LogUtil.info(TAG, "query success, row count : " + resultSet.rowCount)
487      if (callback != null) {
488        callback(resultSet)
489      }
490    }).catch((err) => {
491      LogUtil.warn(TAG, "query error : " + err)
492    })
493  },
494
495  /**
496   * get RdbPredicates by table name
497   * @param tableName
498   */
499  getRdbPredicates(tableName) {
500    return new relationalStore.RdbPredicates(tableName)
501  },
502
503  updataNoteImage(noteData: NoteData): string {
504    let content_img = ""
505    let imgNameArray = this.getImgNameFromHtml(noteData)
506    if (imgNameArray.length == 0) {
507      return content_img
508    }
509    if (imgNameArray[0] == 'shuxue.png' || imgNameArray[0] == 'cake.png') {
510      content_img = "/res/" + imgNameArray[0]
511    } else {
512      content_img = noteData.content_img
513    }
514    LogUtil.info(TAG, "updataNoteImage, content_img : " + content_img)
515    return content_img
516  }
517}