🎨 Improve exporting data disk check for desktop-end https://github.com/siyuan-note/siyuan/issues/12473

This commit is contained in:
Daniel 2024-09-16 16:41:50 +08:00
parent 07553bbc35
commit 74d3302b09
No known key found for this signature in database
GPG Key ID: 86211BA83DF03017
8 changed files with 43 additions and 6 deletions

View File

@ -1540,7 +1540,7 @@
"239": "Related operations are being processed, please try again later",
"240": "The current drag-and-drop heading is located in the container block and the drag-and-drop operation cannot be performed",
"241": "Drag to its subheading is not supported",
"242": "TODO",
"242": "Currently available space is [%s], at least [%s] is required to perform this operation",
"243": "Only list the first [%d] tags (including subtags), if you need to adjust, please modify [Settings - Doc Tree - Maximum number to list]",
"244": "Data indexing was not completed after the last use. Please execute [Doc Tree - Rebuild Index]. Please exit the program completely before shutting down the computer",
"245": "Data indexing was not completed after the last use. Please execute [Doc Tree - Rebuild Index]. Please use [Exit Application] in the right column panel to exit normally",

View File

@ -1540,7 +1540,7 @@
"239": "Las operaciones relacionadas se están procesando, inténtalo de nuevo más tarde",
"240": "El encabezado actual de arrastrar y soltar está ubicado en el bloque contenedor y la operación de arrastrar y soltar no se puede realizar",
"241": "No se admite arrastrar a su subtítulo",
"242": "TODO",
"242": "Espacio disponible actualmente [%s], se requiere al menos [%s] para realizar esta operación",
"243": "Enumere solo las primeras [%d] etiquetas (incluidas las subetiquetas), modifique [Configuración - Árbol de documentos - Número máximo a listar]",
"244": "La indexación de datos no se ha completado desde el último uso. Ejecute [Árbol de documentos - Reconstruir índice] una vez. En el futuro, salga completamente del programa antes de apagar la computadora.",
"245": "La indexación de datos no se ha completado desde el último uso. Ejecute [Árbol de documentos - Reconstruir índice] una vez. Utilice [Salir de la aplicación] en el panel de la columna derecha para salir normalmente",

View File

@ -1540,7 +1540,7 @@
"239": "Les opérations associées sont en cours de traitement, veuillez réessayer plus tard",
"240": "L'en-tête du glisser-déposer actuel se trouve dans le bloc conteneur et l'opération de glisser-déposer ne peut pas être effectuée",
"241": "Le glisser vers son sous-titre n'est pas pris en charge",
"242": "TODO",
"242": "Espace actuellement disponible [%s], au moins [%s] est requis pour effectuer cette opération",
"243": "Répertorier uniquement les [%d] premières balises (y compris les sous-balises). veuillez modifier [Paramètres - Arbre des documents - Nombre maximum de documents à lister].",
"244": "L'indexation des données n'a pas été terminée depuis la dernière utilisation. Veuillez exécuter [Arborescence des documents - Reconstruire l'index] une fois. À l'avenir, veuillez quitter complètement le programme avant d'éteindre l'ordinateur.",
"245": "L'indexation des données n'a pas été terminée depuis la dernière utilisation. Veuillez exécuter [Arborescence des documents - Reconstruire l'index] une fois. Veuillez utiliser [Quitter l'application] dans le panneau de la colonne de droite pour quitter normalement",

View File

@ -1540,7 +1540,7 @@
"239": "関連する操作が処理中です。後でまた試してください",
"240": "コンテナブロック内の見出しは移動できません",
"241": "小見出しへのドラッグはサポートされていません",
"242": "TODO",
"242": "現在利用可能なスペース [%s]、この操作を実行するには少なくとも [%s] が必要です",
"243": "最初の [%d] 個のタグ (サブタグを含む) のみを表示します。調整が必要な場合は [設定] - [ドキュメントツリー] - [リストする最大数] を変更してください",
"244": "前回の使用以降、データのインデックス作成が完了していません。[ドキュメント ツリー - インデックスの再構築]を一度実行してください。今後は、コンピューターをシャットダウンする前にプログラムを完全に終了してください。",
"245": "前回の使用以降、データのインデックス作成が完了していません。[ドキュメント ツリー - インデックスの再構築]を一度実行してください。正常に終了するには、右列パネルの[アプリケーションの終了]を使用してください。",

View File

@ -1540,7 +1540,7 @@
"239": "相關操作正在處理中,請稍後再試",
"240": "目前拖曳標題位於容器區塊中,無法進行拖曳操作",
"241": "不支持拖曳為自己的子標題",
"242": "TODO",
"242": "目前可用空間 [%s],至少需要 [%s] 才能執行該動作",
"243": "僅列出前 [%d] 個標籤(含子標籤),如需調整請修改 [設置 - 文檔樹 - 最大列出數量]",
"244": "上次使用後未完成資料索引,請執行一次 [文檔樹 - 重建索引]。以後請完整退出程式後再關閉電腦",
"245": "上次使用後未完成資料索引,請執行一次 [文檔樹 - 重建索引]。以後請使用右側欄面板中的 [退出應用] 進行正常退出",

View File

@ -1540,7 +1540,7 @@
"239": "相关操作正在处理中,请稍后再试",
"240": "当前拖拽标题位于容器块中,无法进行拖拽操作",
"241": "不支持拖拽为自己的子标题",
"242": "TODO",
"242": "当前可用空间 [%s],至少需要 [%s] 才能执行该操作",
"243": "仅列出前 [%d] 个标签(含子标签),如需调整请修改 [设置 - 文档树 - 最大列出数量]",
"244": "上次使用后未完成数据索引,请执行一次 [文档树 - 重建索引]。以后请完整退出程序后再关闭电脑",
"245": "上次使用后未完成数据索引,请执行一次 [文档树 - 重建索引]。以后请使用右侧栏面板中的 [退出应用] 进行正常退出",

View File

@ -33,6 +33,7 @@ import (
"time"
"unicode/utf8"
"github.com/88250/go-humanize"
"github.com/88250/gulu"
"github.com/88250/lute/ast"
"github.com/88250/lute/editor"
@ -413,6 +414,30 @@ func ExportDataInFolder(exportFolder string) (name string, err error) {
util.PushEndlessProgress(Conf.Language(65))
defer util.ClearPushProgress(100)
data := filepath.Join(util.WorkspaceDir, "data")
if util.ContainerStd == util.Container {
// 桌面端检查磁盘可用空间
dataSize, sizeErr := util.SizeOfDirectory(data)
if sizeErr != nil {
logging.LogErrorf("get size of data dir [%s] failed: %s", data, sizeErr)
err = sizeErr
return
}
_, _, tempExportFree := util.GetDiskUsage(util.TempDir)
if int64(tempExportFree) < dataSize*2 { // 压缩 zip 文件时需要 data 的两倍空间
err = errors.New(fmt.Sprintf(Conf.Language(242), humanize.BytesCustomCeil(tempExportFree, 2), humanize.BytesCustomCeil(uint64(dataSize)*2, 2)))
return
}
_, _, targetExportFree := util.GetDiskUsage(exportFolder)
if int64(targetExportFree) < dataSize { // 复制 zip 最多需要 data 一样的空间
err = errors.New(fmt.Sprintf(Conf.Language(242), humanize.BytesCustomCeil(targetExportFree, 2), humanize.BytesCustomCeil(uint64(dataSize), 2)))
return
}
}
zipPath, err := ExportData()
if err != nil {
return
@ -424,6 +449,9 @@ func ExportDataInFolder(exportFolder string) (name string, err error) {
return
}
util.PushEndlessProgress(Conf.Language(65))
defer util.ClearPushProgress(100)
targetZipPath := filepath.Join(exportFolder, name)
zipAbsPath := filepath.Join(util.TempDir, "export", name)
err = filelock.Copy(zipAbsPath, targetZipPath)

View File

@ -33,3 +33,12 @@ func NeedWarnDiskUsage(dataSize int64) bool {
logging.LogInfof("disk usage [total=%s, used=%s, free=%s]", humanize.BytesCustomCeil(usage.Total, 2), humanize.BytesCustomCeil(usage.Used, 2), humanize.BytesCustomCeil(usage.Free, 2))
return usage.Free < uint64(dataSize*2)
}
func GetDiskUsage(p string) (total, used, free uint64) {
usage, err := disk.Usage(p)
if err != nil {
logging.LogErrorf("get disk usage failed: %s", err)
return
}
return usage.Total, usage.Used, usage.Free
}