diff --git a/.github/workflows/CodeQL.yml b/.github/workflows/CodeQL.yml index 43f084a7..d680a9c1 100644 --- a/.github/workflows/CodeQL.yml +++ b/.github/workflows/CodeQL.yml @@ -12,8 +12,8 @@ name: "CodeQL" on: - push: - branches: [ "main" ] +# push: + # branches: [ "main" ] # pull_request: # branches: [ "main" ] schedule: diff --git a/entry/src/main/ets/common/constants/CommonConstants.ets b/entry/src/main/ets/common/constants/CommonConstants.ets index ef7b425b..40bdbe10 100644 --- a/entry/src/main/ets/common/constants/CommonConstants.ets +++ b/entry/src/main/ets/common/constants/CommonConstants.ets @@ -221,6 +221,7 @@ export default class CommonConstants { /** * 小说AppStorage存储key */ + static readonly PREFERENCES_BOOK_TYPE_NUMBER:string = 'PREFERENCES_BOOK_TYPE_NUMBER' static readonly PREFERENCES_BOOK_INIT_KEY:string = 'PREFERENCES_BOOK_INIT_KEY' static readonly PREFERENCES_BOOK_DATA_KEY:string = 'PREFERENCES_BOOK_DATA_KEY' static readonly KEY_NOVEL_BOOK_DATA:string = 'KEY_NOVEL_BOOK_DATA' diff --git a/entry/src/main/ets/common/utils/DataPreferencesUtils.ets b/entry/src/main/ets/common/utils/DataPreferencesUtils.ets new file mode 100644 index 00000000..1e839322 --- /dev/null +++ b/entry/src/main/ets/common/utils/DataPreferencesUtils.ets @@ -0,0 +1,47 @@ +import CommonConstants from '../constants/CommonConstants'; +import dataPreferences from '@ohos.data.preferences'; + +// 获取context +let context = getContext(this); +export default class bookDataPreferences { + + static shared = new bookDataPreferences(); + preferences?: dataPreferences.Preferences; + preferencesName: string = CommonConstants.PREFERENCES_BOOK_DATA_KEY; + + // 初始化preferences实例 + initPreferences() { + this.preferences = dataPreferences.getPreferencesSync(context, { name: this.preferencesName }); + } + + // 设置数据 + set(key: string, value: dataPreferences.ValueType) { + if (!this.preferences) { + this.initPreferences(); + } + console.log('setinitPreferences', key, value) + this.preferences?.putSync(key, value); + this.preferences?.flush(); + } + + // 获取数据 + get(key: string): dataPreferences.ValueType | null | undefined { + if (!this.preferences) { + this.initPreferences(); + } + let value = this.preferences?.getSync(key, null);; + return value; + } + + // 删除数据 + delete(key: string) { + if (!this.preferences) { + this.initPreferences(); + } + if (this.preferences?.hasSync(key)) { + this.preferences.deleteSync(key); + this.preferences.flush(); + } + } +} + diff --git a/entry/src/main/ets/common/utils/FileHandler.ets b/entry/src/main/ets/common/utils/FileHandler.ets index 53084d6a..8f43155e 100644 --- a/entry/src/main/ets/common/utils/FileHandler.ets +++ b/entry/src/main/ets/common/utils/FileHandler.ets @@ -32,13 +32,14 @@ export class FileHandler { let chapterNumber = 0 const chapters: chaptersItem[] = []; console.info('readFileUrl:' + readFileUrl) - const regex = /===第(.*?)章 (.*?)===/g; + //const regex = /===第(.*?)章 (.*?)===/g; + const regex = /^[=|<]{0,4}((?:序章|楔子|番外|第\s{0,4})([\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4})(?:章|回(?!合)|话(?!说)|节(?!课)|卷|篇(?!张)))(.{0,30})/g; await fs.readLines(readFileUrl, options).then((readerIterator: fs.ReaderIterator) => { for (let it = readerIterator.next();!it.done; it = readerIterator.next()) { const match = regex.exec(it.value); if (match) { const chapterTitleNumber = match[1]; // 书源内部章节 - const chapterTitle = match[2]; + const chapterTitle = match[3]; chapterNumber++ chapters.push(new chaptersItem(chapterNumber, chapterTitle, chapterTitleNumber, '')) } else { diff --git a/entry/src/main/ets/componets/common/ReadShow.ets b/entry/src/main/ets/componets/common/ReadShow.ets index ee74fa06..0e402502 100644 --- a/entry/src/main/ets/componets/common/ReadShow.ets +++ b/entry/src/main/ets/componets/common/ReadShow.ets @@ -31,6 +31,7 @@ export default struct ReadShow { } .alignItems(HorizontalAlign.Start) } + .layoutWeight(1) .alignItems(HorizontalAlign.Start) .padding({left:15}) Column(){ diff --git a/entry/src/main/ets/pages/view/BookDetailPage.ets b/entry/src/main/ets/pages/view/BookDetailPage.ets index f42f135e..4bcdfd39 100644 --- a/entry/src/main/ets/pages/view/BookDetailPage.ets +++ b/entry/src/main/ets/pages/view/BookDetailPage.ets @@ -4,6 +4,8 @@ import TagIndex from '../../componets/bookDetail/TagIndex' import { router, SwipeRefresher } from '@kit.ArkUI' import NoteIndex from '../../componets/bookDetail/note/NoteIndex' import { BookList } from 'ets/componets/dataList/bookList' +import { chaptersItem } from '../../componets/dataList/ReaderChaptersItem' +import { FileHandler } from '../../common/utils/FileHandler' /** * 标题图片样式 @@ -78,10 +80,13 @@ struct BookDetailPage { offset: { dx: 0, dy: -100 } }) - onPageShow(): void { + @State txtFile: chaptersItem[] = []; + + async onPageShow() { console.log('router BookDetailPage:' + JSON.stringify(router.getParams())) if (router.getParams() as BookList) { this.bookData = router.getParams() as BookList + this.txtFile = await FileHandler.readFile(this.bookData.fileLink) //txt小说 } } @@ -108,18 +113,56 @@ struct BookDetailPage { Tabs({ barPosition: BarPosition.Start }) { TabContent() { Column() { - SwipeRefresher({ - content: '目录加载中...', - isLoading: true - }) + if (this.txtFile.length === 0 || undefined) { + SwipeRefresher({ + content: '目录加载中...', + isLoading: true + }) + } else { + List() { + ForEach(this.txtFile, (item: chaptersItem, index: number) => { + ListItem() { + Button({ type: ButtonType.Normal }) { + Row() { + Text(`${item.chapterTitleNumber} ${item.title}`.replace(new RegExp('\\s{1,}','g'),' ').replaceAll('=', '')).layoutWeight(1) + } + .width('100%') + .padding({ + left: 20, + right: 20, + top: 12, + bottom: 12 + }) + } + .borderRadius(10) + .width('100%') + .backgroundColor(Color.White) + .onClick(() => { + // 跳转到阅读器 + router.pushUrl({ + url: 'pages/view/Reader/ReaderPage', + //跳转到对应的章节,额,不会传这个参。。。只知道传index过去,对面TotalChapters接收 + params: this.bookData + }) + }) + } + }) + } + .divider({ + strokeWidth: 0.8, + color: '#cccccc', + startMargin: 12, + endMargin: 12 + }) + } } } - .tabBar(this.catalogTab(0, '目录', 548)) + .tabBar(this.catalogTab(0, '目录', this.txtFile.length)) TabContent() { Column() { SwipeRefresher({ - content: '目录加载中...', + content: '书源加载中...', isLoading: true }) } diff --git a/entry/src/main/ets/pages/view/Reader/ReaderPage.ets b/entry/src/main/ets/pages/view/Reader/ReaderPage.ets index 6a5aa0e1..25d5a703 100644 --- a/entry/src/main/ets/pages/view/Reader/ReaderPage.ets +++ b/entry/src/main/ets/pages/view/Reader/ReaderPage.ets @@ -66,8 +66,10 @@ struct ReaderPage { .onClick(() => { router.back() }) - Text(`第${this.txtFile[this.CurrentChapters]?.chapterTitleNumber}章 ${this.txtFile[this.CurrentChapters]?.title}`) - Blank(1) + Text(`${this.txtFile[this.CurrentChapters]?.chapterTitleNumber} ${this.txtFile[this.CurrentChapters]?.title}`.replace(new RegExp('\\s{1,}','g'),' ').replaceAll('=','')) + .layoutWeight(1) + .maxLines(1) + .textOverflow({overflow:TextOverflow.Ellipsis}) Row({ space: 16 }) { Image($r("app.media.refresh")) .width(24) @@ -392,11 +394,11 @@ struct ReaderPage { Scroll() { Column() { Row() { - Text(this.txtFile[this.CurrentChapters]?.title) + Text(`${this.txtFile[this.CurrentChapters]?.chapterTitleNumber} ${this.txtFile[this.CurrentChapters]?.title}`.replace(new RegExp('\\s{1,}','g'),' ').replaceAll('=','')) .lineHeight(20) .font({ - size: 12, - weight: 400 + size: 15, + weight: 700 }) .fontColor("rgba(0, 0, 0, 0.88)") } diff --git a/entry/src/main/ets/pages/view/bookShelf/IndexShelf.ets b/entry/src/main/ets/pages/view/bookShelf/IndexShelf.ets index 8a38ecb8..66bfc0f7 100644 --- a/entry/src/main/ets/pages/view/bookShelf/IndexShelf.ets +++ b/entry/src/main/ets/pages/view/bookShelf/IndexShelf.ets @@ -14,6 +14,7 @@ import ShelfBookList from './Shelf/ShelfBookList' import picker from '@ohos.file.picker' import { FileHandler } from 'ets/common/utils/FileHandler' import RefreshComponent from '../../../componets/common/RefreshComponent' +import CommonConstants from '../../../common/constants/CommonConstants' @Component export default struct IndexShelf { diff --git a/entry/src/main/ets/pages/view/bookShelf/cartoonPage.ets b/entry/src/main/ets/pages/view/bookShelf/cartoonPage.ets index e4a79c1e..66d2b265 100644 --- a/entry/src/main/ets/pages/view/bookShelf/cartoonPage.ets +++ b/entry/src/main/ets/pages/view/bookShelf/cartoonPage.ets @@ -3,7 +3,8 @@ import BookInfo from './BookInfo' import { promptAction } from '@kit.ArkUI' import BookInfoGrid from './BookInfoGrid' import CommonConstants from '../../../common/constants/CommonConstants' -import { delBookListAll, delBookListByBookId, getBookData } from '../../../storage/bookListData' +import { delBookListAll, delBookListByBookId} from '../../../storage/bookListData' +import { updateShelfBookData } from '../../../preferences/bookDataPreferences' /** * 漫画 @@ -15,11 +16,11 @@ export default struct cartoonPage{ @Prop currentIndex:number @State lastIndex:string = '9999' @Prop @Watch('onIsEXHIBITChange') EXHIBIT:string + @StorageLink(CommonConstants.KEY_CARTOON_BOOK_DATA) + @Watch('updatePreferences')cartoonList:BookList[] = [] - @State cartoonList:BookList[] = [] - - aboutToAppear(): void { - this.cartoonList = getBookData(1) as BookList[] //初始化数据 + updatePreferences(){ + updateShelfBookData(this.cartoonList, 0) } onIsClearChange() { diff --git a/entry/src/main/ets/pages/view/bookShelf/novelPage.ets b/entry/src/main/ets/pages/view/bookShelf/novelPage.ets index 938dfaa1..0496def2 100644 --- a/entry/src/main/ets/pages/view/bookShelf/novelPage.ets +++ b/entry/src/main/ets/pages/view/bookShelf/novelPage.ets @@ -3,7 +3,8 @@ import BookInfo from './BookInfo' import { promptAction } from '@kit.ArkUI' import BookInfoGrid from './BookInfoGrid' import CommonConstants from '../../../common/constants/CommonConstants' -import { delBookListAll, delBookListByBookId, getBookData } from '../../../storage/bookListData' +import { delBookListAll, delBookListByBookId } from '../../../storage/bookListData' +import { updateShelfBookData } from '../../../preferences/bookDataPreferences' @Component @@ -15,12 +16,10 @@ export default struct novelPage{ @Prop bookType:string @Prop @Watch('onIsEXHIBITChange') EXHIBIT:string - @State bookList:BookList[] = [] - - aboutToAppear(): void { - this.bookList = getBookData(0) as BookList[] //初始化数据 - console.log('test----------') - console.log(JSON.stringify(this.bookList)) + @StorageLink(CommonConstants.KEY_NOVEL_BOOK_DATA) + @Watch('updatePreferences')bookList:BookList[] = [] + updatePreferences(){ + updateShelfBookData(this.bookList, 0) } //监听isClear变化 @@ -35,25 +34,6 @@ export default struct novelPage{ } } - // isChangeManageDelete() { - // if (this.manageDelete) { - // if (this.checkBookList === null || this.checkBookList.length === 0) { - // promptAction.showToast({ - // message: '请选择要删除的内容', - // duration: 1000, - // }) - // this.manageDelete = false - // return - // } - // this.bookList = [] - // console.log('删除') - // this.manageDelete = false - // } - // } - // isChangeBookList() { - // console.log(this.checkBookList + '') - // } - //监听EXHIBIT变化 onIsEXHIBITChange() { console.log(this.EXHIBIT) diff --git a/entry/src/main/ets/pages/view/bookShelf/soundPage.ets b/entry/src/main/ets/pages/view/bookShelf/soundPage.ets index 8df2e573..4b4806b6 100644 --- a/entry/src/main/ets/pages/view/bookShelf/soundPage.ets +++ b/entry/src/main/ets/pages/view/bookShelf/soundPage.ets @@ -3,7 +3,8 @@ import BookInfo from './BookInfo' import { promptAction } from '@kit.ArkUI' import BookInfoGrid from './BookInfoGrid' import CommonConstants from '../../../common/constants/CommonConstants' -import { delBookListAll, delBookListByBookId, getBookData } from '../../../storage/bookListData' +import { delBookListAll, delBookListByBookId } from '../../../storage/bookListData' +import { updateShelfBookData } from '../../../preferences/bookDataPreferences' /** * 有声书 @@ -16,11 +17,13 @@ export default struct soundPage{ @State lastIndex:string = '9999' @Prop @Watch('onIsEXHIBITChange') EXHIBIT:string - soundList:BookList[] = [] + @StorageLink(CommonConstants.KEY_SOUND_BOOK_DATA) + @Watch('updatePreferences')soundList:BookList[] = [] - aboutToAppear(): void { - this.soundList = getBookData(2) as BookList[] //初始化数据 + updatePreferences(){ + updateShelfBookData(this.soundList, 0) } + //监听isClear变化 onIsClearChange() { if (this.currentIndex === 2 && this.isClear) { diff --git a/entry/src/main/ets/pages/view/myCenter/MyCenter.ets b/entry/src/main/ets/pages/view/myCenter/MyCenter.ets index 9632e0f7..850178cd 100644 --- a/entry/src/main/ets/pages/view/myCenter/MyCenter.ets +++ b/entry/src/main/ets/pages/view/myCenter/MyCenter.ets @@ -59,7 +59,7 @@ export default struct MyCenter { Text("夏目友人").fontSize(16).fontWeight(600).lineHeight(24) Text("今日阅读"+this.reading_time+"分钟").fontSize(12).fontColor(TextConstants.TEXT_FONT_COLOR) .lineHeight(20) - }.alignItems(HorizontalAlign.Start).width("45%").height("100%") + }.alignItems(HorizontalAlign.Start).width("45%").height("100%").layoutWeight(1) .justifyContent(FlexAlign.SpaceBetween) //云盘登录 @@ -120,12 +120,12 @@ export default struct MyCenter { ForEach(this.end_list,(item:dataItem)=>{ Row({space:10}){ Image(item.icon).size({width:20,height:20}).interpolation(ImageInterpolation.High) - Text(item.title).fontSize(14).width("75%" ) + Text(item.title).fontSize(14).width("75%" ).layoutWeight(1) Image($r("app.media.right")).size({width:24,height:24}) - }.width(300) + }.width("100%") .height(48) .justifyContent(FlexAlign.SpaceBetween) - .padding({top:12,bottom:12}) + .padding({top:12,bottom:12,left:20,right:20}) .onClick(()=>this.endOnclick(item.value)) }) }.padding({top:5,bottom:5}) diff --git a/entry/src/main/ets/preferences/bookDataPreferences.ets b/entry/src/main/ets/preferences/bookDataPreferences.ets index 2ea5e3ab..102b8cf4 100644 --- a/entry/src/main/ets/preferences/bookDataPreferences.ets +++ b/entry/src/main/ets/preferences/bookDataPreferences.ets @@ -1,47 +1,73 @@ -import CommonConstants from '../common/constants/CommonConstants'; -import dataPreferences from '@ohos.data.preferences'; +import CommonConstants from '../common/constants/CommonConstants' +import { BookList } from '../componets/dataList/bookList' +import bookDataPreferences from '../common/utils/DataPreferencesUtils' -// 获取context -let context = getContext(this); -export default class bookDataPreferences { +/** + * 初始化存放书本内容 + */ +let KEY = '' - static shared = new bookDataPreferences(); - preferences?: dataPreferences.Preferences; - preferencesName: string = CommonConstants.PREFERENCES_BOOK_DATA_KEY; +export const novelListData:BookList[] = [ + new BookList('1','仙人消失之后','会说话的肘子·未读过1','更新至·第340章 镇压',$r('app.media.cover_list'),'测试作者','玄幻') + ,new BookList('2','仙人消失之后','会说话的肘子·未读过2','更新至·第340章 镇压',$r('app.media.cover_list'),'测试作者','玄幻') +] - // 初始化preferences实例 - initPreferences() { - this.preferences = dataPreferences.getPreferencesSync(context, { name: this.preferencesName }); - } +const soundListData:BookList[] = [ + new BookList('1','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('2','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('3','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('4','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('5','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('6','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('7','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('8','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('9','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), + new BookList('10','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻')] - // 设置数据 - set(key: string, value: dataPreferences.ValueType) { - if (!this.preferences) { - this.initPreferences(); - } - console.log('setinitPreferences', key, value) - this.preferences?.putSync(key, value); - this.preferences?.flush(); - } +const cartoonListData:BookList[] = [ + new BookList('1','极主夫道','会说话的肘子·未读过1','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('2','极主夫道','会说话的肘子·未读过2','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('3','极主夫道','会说话的肘子·未读过3','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('4','极主夫道','会说话的肘子·未读过4','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('5','极主夫道','会说话的肘子·未读过5','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('6','极主夫道','会说话的肘子·未读过6','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('7','极主夫道','会说话的肘子·未读过7','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('8','极主夫道','会说话的肘子·未读过8','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('9','极主夫道','会说话的肘子·未读过9','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') + ,new BookList('10','极主夫道','会说话的肘子·未读过10','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') +] - // 获取数据 - get(key: string): dataPreferences.ValueType | null | undefined { - if (!this.preferences) { - this.initPreferences(); - } - let value = this.preferences?.getSync(key, null);; - return value; - } - // 删除数据 - delete(key: string) { - if (!this.preferences) { - this.initPreferences(); - } - if (this.preferences?.hasSync(key)) { - this.preferences.deleteSync(key); - this.preferences.flush(); - } - } + +export const initBookPreferences = ()=>{ + //内容数据持久化 + bookDataPreferences.shared.set(CommonConstants.PREFERENCES_BOOK_INIT_KEY,true) + bookDataPreferences.shared.set(CommonConstants.KEY_NOVEL_BOOK_DATA,novelListData) + bookDataPreferences.shared.set(CommonConstants.KEY_SOUND_BOOK_DATA,soundListData) + bookDataPreferences.shared.set(CommonConstants.KEY_CARTOON_BOOK_DATA,cartoonListData) +} +/** + * 统一更新持久化 + * bookDate 书籍更新内容 + * bookType 书籍类型Key + */ +export const updateShelfBookData = (bookDate:BookList[], bookType:number) =>{ + shelfBookType(bookType) + bookDataPreferences.shared.set(KEY,bookDate) +} + +//获取书架持久化数据 +export const getBookData = (shelfTye:number)=>{ + shelfBookType(shelfTye) + return bookDataPreferences.shared.get(KEY) as BookList[]; } +function shelfBookType(shelfTye:number){ + if (shelfTye === 0) { + KEY = CommonConstants.KEY_NOVEL_BOOK_DATA + } else if (shelfTye === 1) { + KEY = CommonConstants.KEY_CARTOON_BOOK_DATA + } else if (shelfTye === 2) { + KEY = CommonConstants.KEY_SOUND_BOOK_DATA + } +} diff --git a/entry/src/main/ets/storage/appData.ets b/entry/src/main/ets/storage/appData.ets index ccb239ce..99942dd3 100644 --- a/entry/src/main/ets/storage/appData.ets +++ b/entry/src/main/ets/storage/appData.ets @@ -1,9 +1,10 @@ import CommonConstants from '../common/constants/CommonConstants' import { showMessage } from '../componets/common/promptShow' -import bookDataPreferences from '../preferences/bookDataPreferences' +import bookDataPreferences from '../common/utils/DataPreferencesUtils' import { initBookListData } from './bookListData' import { groupInitAppData } from './groupData' import { shelfInitAppData } from './shelfListData' +import { initBookPreferences } from '../preferences/bookDataPreferences' let APP_INDEX_SCROLLABLE = 'APP_INDEX_SCROLLABLE' @@ -13,11 +14,12 @@ export const initAppData = ()=>{ AppStorage.setOrCreate(APP_INDEX_SCROLLABLE,APP_INDEX_SCROLLABLE_DATA) shelfInitAppData() if (!bookDataPreferences.shared.get(CommonConstants.PREFERENCES_BOOK_INIT_KEY) as boolean) { - initBookListData() + initBookPreferences() showMessage(`初始化成功${CommonConstants.PREFERENCES_BOOK_DATA_KEY} ${bookDataPreferences.shared.get(CommonConstants.PREFERENCES_BOOK_INIT_KEY) as boolean}`) } else { showMessage(`已经初始化过${CommonConstants.PREFERENCES_BOOK_DATA_KEY} ${bookDataPreferences.shared.get(CommonConstants.PREFERENCES_BOOK_INIT_KEY) as boolean}`) } + initBookListData() groupInitAppData() } diff --git a/entry/src/main/ets/storage/bookListData.ets b/entry/src/main/ets/storage/bookListData.ets index 1cba6bd7..94826daf 100644 --- a/entry/src/main/ets/storage/bookListData.ets +++ b/entry/src/main/ets/storage/bookListData.ets @@ -1,70 +1,28 @@ import CommonConstants from '../common/constants/CommonConstants' -import { showMessage } from '../componets/common/promptShow' import { BookList } from '../componets/dataList/bookList' -import bookDataPreferences from '../preferences/bookDataPreferences' +import bookDataPreferences from '../common/utils/DataPreferencesUtils' +import { getBookData } from '../preferences/bookDataPreferences' /** * 初始化存放书本内容 */ let KEY = '' -export const novelListData:BookList[] = [ - new BookList('1','仙人消失之后','会说话的肘子·未读过1','更新至·第340章 镇压',$r('app.media.cover_list'),'测试作者','玄幻') - ,new BookList('2','仙人消失之后','会说话的肘子·未读过2','更新至·第340章 镇压',$r('app.media.cover_list'),'测试作者','玄幻') -] - -const soundListData:BookList[] = [ - new BookList('1','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('2','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('3','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('4','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('5','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('6','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('7','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('8','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('9','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻'), - new BookList('10','三体广播据','729声工厂 · 第一季 第五集 红岸基地','共101集 · 最终季 最终集 回归大宇宙',$r('app.media.cover_list2'),'测试作者','玄幻')] - -const cartoonListData:BookList[] = [ - new BookList('1','极主夫道','会说话的肘子·未读过1','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('2','极主夫道','会说话的肘子·未读过2','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('3','极主夫道','会说话的肘子·未读过3','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('4','极主夫道','会说话的肘子·未读过4','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('5','极主夫道','会说话的肘子·未读过5','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('6','极主夫道','会说话的肘子·未读过6','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('7','极主夫道','会说话的肘子·未读过7','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('8','极主夫道','会说话的肘子·未读过8','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('9','极主夫道','会说话的肘子·未读过9','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') - ,new BookList('10','极主夫道','会说话的肘子·未读过10','更新至·第340章 镇压',$r('app.media.cover_list1'),'测试作者','玄幻') -] - -const novelGroupListData:string[] = [] -const soundGroupListData:string[] = [] -const cartoonGroupListData:string[] = [] - export const initBookListData = ()=>{ - bookDataPreferences.shared.set(CommonConstants.PREFERENCES_BOOK_INIT_KEY,true) - bookDataPreferences.shared.set(CommonConstants.KEY_NOVEL_BOOK_DATA,novelListData) - bookDataPreferences.shared.set(CommonConstants.KEY_SOUND_BOOK_DATA,soundListData) - bookDataPreferences.shared.set(CommonConstants.KEY_CARTOON_BOOK_DATA,cartoonListData) -} - -export const getBookData = (shelfTye:number)=>{ - shelfBookType(shelfTye) - return bookDataPreferences.shared.get(KEY) as BookList[]; + // AppStorage.setOrCreate(CommonConstants.PREFERENCES_BOOK_TYPE_NUMBER,0) + AppStorage.setOrCreate(CommonConstants.KEY_NOVEL_BOOK_DATA,getBookData(0)) + AppStorage.setOrCreate(CommonConstants.KEY_SOUND_BOOK_DATA,getBookData(1)) + AppStorage.setOrCreate(CommonConstants.KEY_CARTOON_BOOK_DATA,getBookData(2)) } export const addShelfBook = (shelfTye:number, bookData:BookList)=>{ let bookList = getBookData(shelfTye) //根据bookList bookId是string类型排序然后获取最大的一个id然后自增 bookData.bookId = getBookIdAutoIncrement(bookList) - showMessage(bookData.bookId) + bookList.push(bookData) - console.log(`${KEY} ---------------`) - console.log(JSON.stringify(bookList)) - bookDataPreferences.shared.set(KEY,bookList) - console.log(`最终结果 ---------------`) - console.log(JSON.stringify(bookDataPreferences.shared.get(KEY) as BookList[])) + + shortUpdateDateList(bookList) } export const delBookListByBookId = (shelfTye:number,bookId:string)=>{ @@ -73,9 +31,8 @@ export const delBookListByBookId = (shelfTye:number,bookId:string)=>{ bookListData = bookListData.filter(book => book.bookId !== bookId); - console.log('b',JSON.stringify(bookListData)) //重新存放 - bookDataPreferences.shared.set(KEY,shortDateList(bookListData)) + shortUpdateDateList(bookListData) } export const delBookListAll = (shelfTye:number)=>{ @@ -84,7 +41,7 @@ export const delBookListAll = (shelfTye:number)=>{ bookListData = []; //重新存放 - bookDataPreferences.shared.set(KEY,shortDateList(bookListData)) + shortUpdateDateList(bookListData) } @@ -103,7 +60,7 @@ export const updateBookListData = (shelfTye:number,list:BookList[])=>{ } } } - bookDataPreferences.shared.set(KEY,shortDateList(bookListData)) + shortUpdateDateList(bookListData) } export const updateDateListById = (index:number, isJoin:boolean, bookId:string)=>{ @@ -115,10 +72,10 @@ export const updateDateListById = (index:number, isJoin:boolean, bookId:string)= break } } - bookDataPreferences.shared.set(KEY,shortDateList(bookListData)) + shortUpdateDateList(bookListData) } -export function shortDateList(showBookList:BookList[]) { +export const shortUpdateDateList = (showBookList:BookList[])=> { //防止topUpdateTime出现string类型 showBookList.forEach(book => { if (typeof book.topUpdateTime === 'string') { @@ -138,25 +95,10 @@ export function shortDateList(showBookList:BookList[]) { } }); - return showBookList; + AppStorage.set(KEY,showBookList) + bookDataPreferences.shared.set(KEY,showBookList); } -// function getBookListData(shelfTye:number){ -// shelfBookType(shelfTye) -// let bookList = AppStorage.get(KEY) || [] -// let bookListData = bookList as BookList[] -// return bookListData -// } - -function shelfBookType(shelfTye:number){ - if (shelfTye === 0) { - KEY = CommonConstants.KEY_NOVEL_BOOK_DATA - } else if (shelfTye === 1) { - KEY = CommonConstants.KEY_CARTOON_BOOK_DATA - } else if (shelfTye === 2) { - KEY = CommonConstants.KEY_SOUND_BOOK_DATA - } -} //id自增 const getBookIdAutoIncrement = (bookList:BookList[])=>{ let maxId = 0 @@ -168,3 +110,26 @@ const getBookIdAutoIncrement = (bookList:BookList[])=>{ return JSON.stringify( maxId + 1) } + +export const shortDateList = (showBookList:BookList[])=> { + //防止topUpdateTime出现string类型 + showBookList.forEach(book => { + if (typeof book.topUpdateTime === 'string') { + book.topUpdateTime = new Date(book.topUpdateTime); + } + }); + let aTime = 0, bTime = 0; + showBookList.sort((a:BookList, b:BookList) => { + if (a.isTop && !b.isTop) { + return -1; + } else if (!a.isTop && b.isTop) { + return 1; + } else { + aTime = a.topUpdateTime instanceof Date ? a.topUpdateTime.getTime() : 0; + bTime = b.topUpdateTime instanceof Date ? b.topUpdateTime.getTime() : 0; + return bTime - aTime; + } + }); + + return showBookList +} \ No newline at end of file