@@ -119,16 +129,20 @@ onMounted(async () => {
+
+ >
+
+ 请勿刷新或关闭页面,否则导致已有的数据丢失而重头来过
+
+
@@ -191,9 +205,8 @@ onMounted(async () => {
diff --git a/apps/monkey/src/main.ts b/apps/monkey/src/main.ts
index 2ff55e4..2a42fff 100644
--- a/apps/monkey/src/main.ts
+++ b/apps/monkey/src/main.ts
@@ -18,6 +18,7 @@ async function initApp() {
if (document.location.hostname === 'weibo.com') {
initApp()
+ console.log('weibo-archiver 加载成功')
}
else {
const users = GM_getValue('users') || []
diff --git a/apps/monkey/src/stores/configStore.ts b/apps/monkey/src/stores/configStore.ts
index 2524bc1..fef7de0 100644
--- a/apps/monkey/src/stores/configStore.ts
+++ b/apps/monkey/src/stores/configStore.ts
@@ -1,15 +1,13 @@
import { defineStore } from 'pinia'
import type { FetchOptions } from '@types'
-type Config = Omit
& {
- isMinimize: boolean
-}
-
export const useConfigStore = defineStore('config', () => {
const now = Date.now()
- const localData = JSON.parse(localStorage.getItem('fetchOptions') || '{}') as Config
+ const KEY_MINIMIZE = 'archiver-isMinimize'
+
+ const isMinimize = ref(localStorage.getItem(KEY_MINIMIZE) === 'true')
- const state = reactive({
+ const state = reactive({
uid: '',
name: '',
isFetchAll: true,
@@ -17,32 +15,24 @@ export const useConfigStore = defineStore('config', () => {
repostPic: true,
hasRepost: true,
hasComment: true,
+ hasFavorite: true,
commentCount: 6,
dateRange: [now, now],
- isMinimize: true,
})
- // 判断 key 是否都相等,如果相等则初始化配置
- function initConfig() {
- const keys = Object.keys(state)
- const localKeys = Object.keys(localData)
- const isSame = keys.every(key => localKeys.includes(key))
-
- if (isSame)
- setConfig(localData)
- }
-
- function setConfig(config: Partial) {
+ function setConfig(config: Partial) {
Object.assign(state, config)
}
- watchEffect(() => {
- localStorage.setItem('fetchOptions', JSON.stringify(state))
- })
+ function toggleMinimize() {
+ isMinimize.value = !isMinimize.value
+ localStorage.setItem(KEY_MINIMIZE, isMinimize.value.toString())
+ }
return {
state,
+ isMinimize,
setConfig,
- initConfig,
+ toggleMinimize,
}
})
diff --git a/apps/monkey/src/stores/postStore.ts b/apps/monkey/src/stores/postStore.ts
index 5c1e504..46a9fa5 100644
--- a/apps/monkey/src/stores/postStore.ts
+++ b/apps/monkey/src/stores/postStore.ts
@@ -2,17 +2,17 @@ import { defineStore } from 'pinia'
import type { Post } from '@types'
export const usePostStore = defineStore('post', () => {
- // 获取到的所有帖子
- const posts = ref([] as Post[])
+ /* 获取到的所有帖子 */
+ const posts = shallowRef([] as Post[])
- // 已获取的页数
+ /* 已获取的页数 */
const fetchedPage = ref(0)
- // 每页显示的帖子数量 ppp
+ /* 每页的帖子数量 */
const pageSize = ref(20)
- // 总帖子数
- const total = ref(posts.value.length)
- // 总页数
+ /* 总帖子数 */
+ const total = ref(0)
+ /* 总页数 */
const pages = computed(() => Math.ceil(total.value / pageSize.value))
/**
@@ -20,18 +20,20 @@ export const usePostStore = defineStore('post', () => {
*/
function reset() {
posts.value = []
+ total.value = 0
pageSize.value = 20
fetchedPage.value = 0
}
/**
* 添加帖子
- * @param newPosts
*/
function add(newPosts: Post[]) {
// pageSize.value = newPosts.length
posts.value = [...posts.value, ...newPosts]
+ triggerRef(posts)
fetchedPage.value++
+ pageSize.value = (newPosts.length || 20)
}
return {
diff --git a/packages/core/src/services/postService.ts b/packages/core/src/services/postService.ts
index 7adc02a..9e8cfa1 100644
--- a/packages/core/src/services/postService.ts
+++ b/packages/core/src/services/postService.ts
@@ -162,10 +162,10 @@ export async function fetchPosts(
const { startLoop, resume, pause } = usePausableLoop(
async () => {
- await fetching()
+ const res = await fetching()
// 如果已经获取到所有帖子
- if (stopCondition())
+ if (stopCondition() || !res?.list.length)
return { isStop: true }
return { isStop: false }
},
diff --git a/packages/core/src/utils/export.ts b/packages/core/src/utils/export.ts
index 3414716..16f45ff 100644
--- a/packages/core/src/utils/export.ts
+++ b/packages/core/src/utils/export.ts
@@ -19,7 +19,9 @@ export async function exportData(posts: Post[]) {
const dataBlob = new Blob([data], { type: 'application/json' })
const imgsDataBlob = new Blob([imgsData], { type: 'text/csv' })
- window.$message.success('导出成功,正在下载数据...请允许浏览器批量下载文件')
+ window.$message.success('导出成功,正在下载数据...请允许浏览器批量下载文件', {
+ duration: 5000,
+ })
fileSaver.saveAs(dataBlob, `weibo-data-${name}.json`)
fileSaver.saveAs(imgsDataBlob, `imgs-${name}.csv`)
diff --git a/types/config.ts b/types/config.ts
index d0c2a0d..8ce38e9 100644
--- a/types/config.ts
+++ b/types/config.ts
@@ -32,6 +32,10 @@ export interface FetchOptions {
* 是否包含评论
*/
hasComment: boolean
+ /**
+ * 包括收藏的微博
+ */
+ hasFavorite: boolean
/**
* 评论的数量
*/