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