ChannelViewModel.ets
6.15 KB
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
import { NavigationBodyDTO, NavigationDetailDTO, } from 'wdBean';
import { Logger, ResourcesUtils } from 'wdKit';
import { CacheData, ResponseDTO } from 'wdNetwork';
import { PageRepository } from '../repository/PageRepository';
const TAG = 'ChannelViewModel';
/**
* 首页底导、顶导相关
*/
export class ChannelViewModel {
/**
* 获取预置新闻顶导预置数据
* @returns
*/
async getBottomNavPresetData() : Promise<NavigationBodyDTO | null>{
return new Promise<NavigationBodyDTO | null>((success) => {
ResourcesUtils.getResourcesJson<ResponseDTO<NavigationBodyDTO|null>>(getContext(), 'home_bottom_data_product.json').then((data) => {
if (data) {
let navBean = data.data as NavigationBodyDTO
success(navBean)
} else {
success(null)
}
}).catch((err: object) => {
Logger.error(TAG, 'getBottomNavPresetData catch err: ' + JSON.stringify(err));
success(null)
})
})
}
/**
* 获取底导缓存数据
*/
async getBottomNavCacheData(): Promise<NavigationBodyDTO | null> {
Logger.info(TAG, `getBottomNavCacheData start`);
return new Promise<NavigationBodyDTO | null>((success) => {
CacheData.getLocalCacheData(CacheData.bottomCacheKey).then((data) => {
// Logger.debug(TAG, 'getBottomNavCacheData 333 ' + JSON.stringify(data));
if (data) {
let navBean = JSON.parse(CacheData.getNetworkData(data)) as NavigationBodyDTO
success(navBean)
} else {
success(null)
}
}).catch((err: object) => {
Logger.error(TAG, 'getBottomNavCacheData catch err: ' + JSON.stringify(err));
success(null)
})
});
}
/**
* 保存底导数据到缓存
*/
saveBottomData(data: NavigationBodyDTO) {
CacheData.saveCacheData(CacheData.bottomCacheKey, data, data.md5)
}
/**
* 获取底导详情(顶导)缓存数据
*/
getBottomNavDetailCacheData(id: number): Promise<NavigationDetailDTO | null> {
return new Promise<NavigationDetailDTO | null>((success) => {
CacheData.getLocalCacheData(CacheData.channelCacheDataKey + id).then((data) => {
if (data) {
let navBean = JSON.parse(CacheData.getNetworkData(data)) as NavigationDetailDTO
success(navBean)
} else {
success(null)
}
}).catch((err: object) => {
Logger.error(TAG, 'getBottomNavDetailCacheData catch err: ' + JSON.stringify(err));
success(null)
})
})
}
/**
* 获取预置新闻顶导预置数据
* @returns
*/
async getPresetNewsTopTabData() : Promise<NavigationDetailDTO | null>{
return new Promise<NavigationDetailDTO | null>((success) => {
ResourcesUtils.getResourcesJson<ResponseDTO<NavigationDetailDTO|null>>(getContext(), 'news_top_data_product.json').then((data) => {
if (data) {
let navBean = data.data as NavigationDetailDTO
success(navBean)
} else {
success(null)
}
}).catch((err: object) => {
Logger.error(TAG, 'getBottomNavDetailCacheData catch err: ' + JSON.stringify(err));
success(null)
})
})
}
/**
* 保存顶部导详情数据到缓存
*/
saveBottomDetailData(data: NavigationDetailDTO) {
CacheData.saveCacheData(CacheData.channelCacheDataKey + data?.id, data, data.md5)
}
/**
* 获取底导接口数据
*/
async getBottomNavData(): Promise<NavigationBodyDTO> {
Logger.info(TAG, `getBottomNavData start`);
return this.getNavData();
}
/**
* 获取底导详情(顶导)接口数据
*/
async getBottomNavDetailData(id: number, myChannelIds?: string): Promise<NavigationDetailDTO|null> {
Logger.info(TAG, `getBottomNavDetailData start`);
return this.getNavDetailData(id,myChannelIds);
}
private getNavData(): Promise<NavigationBodyDTO> {
return new Promise<NavigationBodyDTO>((success, error) => {
Logger.info(TAG, `getNavData start`);
PageRepository.fetchNavigationDataApi().then((navResDTO: ResponseDTO<NavigationBodyDTO>) => {
if (!navResDTO || !navResDTO.data) {
Logger.error(TAG, 'getNavData then navResDTO is empty');
error('navResDTO is empty');
return
}
if (navResDTO.code != 0) {
Logger.error(TAG, `getNavData then code:${navResDTO.code}, message:${navResDTO.message}`);
error('navResDTO Response Code is failure');
return
}
// let navResStr = JSON.stringify(navResDTO);
Logger.info(TAG, "getNavData then,navResDTO.timestamp:" + navResDTO.timestamp);
navResDTO.data.md5 = navResDTO.meta?.md5 || ''
success(navResDTO.data);
}).catch((err: Error) => {
Logger.error(TAG, `fetchNavigationDataApi catch, error.name : ${err.name}, error.message:${err.message}`);
error(err);
})
})
}
/**
* 请求获取顶部导航栏数据
* @param id
* @param myChannelIds
* @returns
*/
private getNavDetailData(id: number, myChannelIds?: string): Promise<NavigationDetailDTO|null> {
return new Promise<NavigationDetailDTO|null>((success, error) => {
Logger.info(TAG, `getNavData start`);
PageRepository.fetchNavigationDetailDataApi(id,myChannelIds).then((navResDTO: ResponseDTO<NavigationDetailDTO>) => {
if (!navResDTO || !navResDTO.data) {
Logger.error(TAG, 'getNavData then navResDTO is empty');
success(null);
return
}
if (navResDTO.code != 0) {
Logger.error(TAG, `getNavData then code:${navResDTO.code}, message:${navResDTO.message}`);
success(null);
return
}
// let navResStr = JSON.stringify(navResDTO);
Logger.info(TAG, "getNavData then,navResDTO.timestamp:" + navResDTO.timestamp);
navResDTO.data.md5 = navResDTO.meta?.md5 || ''
success(navResDTO.data);
}).catch((err: Error) => {
Logger.error(TAG, `fetchNavigationDataApi catch, error.name : ${err.name}, error.message:${err.message}`);
success(null);
})
})
}
}
let channelViewModel = new ChannelViewModel();
export default channelViewModel as ChannelViewModel;