From b6dd1a788f85afb4d49d79cc6103380eec534312 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 2 Nov 2024 01:09:40 +0800 Subject: [PATCH 1/3] :art: Improve data synchronization stability https://github.com/siyuan-note/siyuan/issues/12991 --- kernel/go.mod | 14 +++++++------- kernel/go.sum | 32 ++++++++++++++++---------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/kernel/go.mod b/kernel/go.mod index 3eddad7cb..89529fa68 100644 --- a/kernel/go.mod +++ b/kernel/go.mod @@ -28,7 +28,7 @@ require ( github.com/flopp/go-findfont v0.1.0 github.com/fsnotify/fsnotify v1.7.0 github.com/gabriel-vasile/mimetype v1.4.5 - github.com/getsentry/sentry-go v0.29.0 + github.com/getsentry/sentry-go v0.29.1 github.com/gin-contrib/gzip v1.0.1 github.com/gin-contrib/sessions v1.0.1 github.com/gin-gonic/gin v1.10.0 @@ -54,11 +54,11 @@ require ( github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 github.com/sashabaranov/go-openai v1.29.1 github.com/shirou/gopsutil/v3 v3.24.5 - github.com/siyuan-note/dejavu v0.0.0-20241026143313-2e180bfe2017 + github.com/siyuan-note/dejavu v0.0.0-20241101165922-5c8aefd88ca8 github.com/siyuan-note/encryption v0.0.0-20231219001248-1e028a4d13b4 github.com/siyuan-note/eventbus v0.0.0-20240627125516-396fdb0f0f97 github.com/siyuan-note/filelock v0.0.0-20240724034355-d1ed7bf21d04 - github.com/siyuan-note/httpclient v0.0.0-20241014033953-8a969cdbd61b + github.com/siyuan-note/httpclient v0.0.0-20241101092545-63ac2e89a49d github.com/siyuan-note/logging v0.0.0-20240505035402-6430d57006a2 github.com/siyuan-note/riff v0.0.0-20240912073907-1e89a5f8e7dc github.com/spf13/cast v1.7.0 @@ -107,7 +107,7 @@ require ( github.com/go-resty/resty/v2 v2.14.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/google/pprof v0.0.0-20241009165004-a3522334989c // indirect + github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect github.com/google/uuid v1.6.0 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/gorilla/context v1.1.2 // indirect @@ -135,14 +135,14 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/onsi/ginkgo/v2 v2.20.2 // indirect + github.com/onsi/ginkgo/v2 v2.21.0 // indirect github.com/otiai10/gosseract/v2 v2.4.1 // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/qiniu/go-sdk/v7 v7.20.2 // indirect github.com/quic-go/qpack v0.5.1 // indirect - github.com/quic-go/quic-go v0.47.0 // indirect + github.com/quic-go/quic-go v0.48.1 // indirect github.com/refraction-networking/utls v1.6.7 // indirect github.com/restic/chunker v0.4.0 // indirect github.com/richardlehane/mscfb v1.0.4 // indirect @@ -161,7 +161,7 @@ require ( github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d // indirect github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.uber.org/mock v0.4.0 // indirect + go.uber.org/mock v0.5.0 // indirect golang.org/x/arch v0.10.0 // indirect golang.org/x/crypto v0.28.0 // indirect golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect diff --git a/kernel/go.sum b/kernel/go.sum index abbf17a44..18547898d 100644 --- a/kernel/go.sum +++ b/kernel/go.sum @@ -105,8 +105,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= -github.com/getsentry/sentry-go v0.29.0 h1:YtWluuCFg9OfcqnaujpY918N/AhCCwarIDWOYSBAjCA= -github.com/getsentry/sentry-go v0.29.0/go.mod h1:jhPesDAL0Q0W2+2YEuVOvdWmVtdsr1+jtBrlDEVWwLY= +github.com/getsentry/sentry-go v0.29.1 h1:DyZuChN8Hz3ARxGVV8ePaNXh1dQ7d76AiB117xcREwA= +github.com/getsentry/sentry-go v0.29.1/go.mod h1:x3AtIzN01d6SiWkderzaH28Tm0lgkafpJ5Bm3li39O0= github.com/gigawattio/window v0.0.0-20180317192513-0f5467e35573 h1:u8AQ9bPa9oC+8/A/jlWouakhIvkFfuxgIIRjiy8av7I= github.com/gigawattio/window v0.0.0-20180317192513-0f5467e35573/go.mod h1:eBvb3i++NHDH4Ugo9qCvMw8t0mTSctaEa5blJbWcNxs= github.com/gin-contrib/gzip v1.0.1 h1:HQ8ENHODeLY7a4g1Au/46Z92bdGFl74OhxcZble9WJE= @@ -159,8 +159,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241009165004-a3522334989c h1:NDovD0SMpBYXlE1zJmS1q55vWB/fUQBcPAqAboZSccA= -github.com/google/pprof v0.0.0-20241009165004-a3522334989c/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= +github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= @@ -261,10 +261,10 @@ github.com/olahol/melody v1.2.1/go.mod h1:GgkTl6Y7yWj/HtfD48Q5vLKPVoZOH+Qqgfa7Cv github.com/olekukonko/tablewriter v0.0.0-20180506121414-d4647c9c7a84/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= -github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= -github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= +github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/open-spaced-repetition/go-fsrs/v3 v3.2.0 h1:lDY1dURLg5xYGbCcz9bxB7c+1v36+wZRYnSHOdQloPA= github.com/open-spaced-repetition/go-fsrs/v3 v3.2.0/go.mod h1:zTtQIk3kOO9kweg5zJAgbdwBXR2HBPsDN0k6AxmTpzY= github.com/otiai10/gosseract/v2 v2.4.1 h1:G8AyBpXEeSlcq8TI85LH/pM5SXk8Djy2GEXisgyblRw= @@ -293,8 +293,8 @@ github.com/qiniu/go-sdk/v7 v7.20.2/go.mod h1:ZnEP1rOOi7weF+yzM2qZMHI0z1ht+KjVuNA github.com/qiniu/x v1.10.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.47.0 h1:yXs3v7r2bm1wmPTYNLKAAJTHMYkPEsfYJmTazXrCZ7Y= -github.com/quic-go/quic-go v0.47.0/go.mod h1:3bCapYsJvXGZcipOHuu7plYtaV6tnF+z7wIFsU0WK9E= +github.com/quic-go/quic-go v0.48.1 h1:y/8xmfWI9qmGTc+lBr4jKRUWLGSlSigv847ULJ4hYXA= +github.com/quic-go/quic-go v0.48.1/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/radovskyb/watcher v1.0.7 h1:AYePLih6dpmS32vlHfhCeli8127LzkIgwJGcwwe8tUE= github.com/radovskyb/watcher v1.0.7/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg= github.com/refraction-networking/utls v1.6.7 h1:zVJ7sP1dJx/WtVuITug3qYUq034cDq9B2MR1K67ULZM= @@ -332,16 +332,16 @@ github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+D github.com/shurcooL/gofontwoff v0.0.0-20181114050219-180f79e6909d h1:lvCTyBbr36+tqMccdGMwuEU+hjux/zL6xSmf5S9ITaA= github.com/shurcooL/gofontwoff v0.0.0-20181114050219-180f79e6909d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= github.com/simplereach/timeutils v1.2.0/go.mod h1:VVbQDfN/FHRZa1LSqcwo4kNZ62OOyqLLGQKYB3pB0Q8= -github.com/siyuan-note/dejavu v0.0.0-20241026143313-2e180bfe2017 h1:QOq6KYVbNKKx0qv8JJX6nuacQoYNtLkj9L4nWNEJ0mM= -github.com/siyuan-note/dejavu v0.0.0-20241026143313-2e180bfe2017/go.mod h1:7E+jOWm75Me1ss7Sc5UM6O5xMiATAyCbN3g7MP6Cgxw= +github.com/siyuan-note/dejavu v0.0.0-20241101165922-5c8aefd88ca8 h1:l5L5yJiJ8cIgzGSe4v5fBjzkhm4H/S69FA8n20liu/M= +github.com/siyuan-note/dejavu v0.0.0-20241101165922-5c8aefd88ca8/go.mod h1:PfTyVdHF4Ba0Sl9MblG9Ht0od/lWmUnIcBHqEeC/g88= github.com/siyuan-note/encryption v0.0.0-20231219001248-1e028a4d13b4 h1:kJaw5L/evyW6LcB9IQT8PR4ppx8JVqOFP9Ix3rfwSrc= github.com/siyuan-note/encryption v0.0.0-20231219001248-1e028a4d13b4/go.mod h1:UYcCCY+0wh+GmUoDOaO63j1sV5lgy7laLAk1XhEiUis= github.com/siyuan-note/eventbus v0.0.0-20240627125516-396fdb0f0f97 h1:lM5v8BfNtbOL5jYwhCdMYBcYtr06IYBKjjSLAPMKTM8= github.com/siyuan-note/eventbus v0.0.0-20240627125516-396fdb0f0f97/go.mod h1:1/nGgthl89FPA7GzAcEWKl6zRRnfgyTjzLZj9bW7kuw= github.com/siyuan-note/filelock v0.0.0-20240724034355-d1ed7bf21d04 h1:aoXvEO6BMqm6L0EnTjRhB4ynQIyJvHpqz+Ue3g0D3a0= github.com/siyuan-note/filelock v0.0.0-20240724034355-d1ed7bf21d04/go.mod h1:iqFhf4EDKy4MjQgT6RQJ6Z6NSW662NS0PR40K1qdSpE= -github.com/siyuan-note/httpclient v0.0.0-20241014033953-8a969cdbd61b h1:1jYu8ynRa7DiLFHI5FsENwcsUBzHgdrSsQB5jxzZahw= -github.com/siyuan-note/httpclient v0.0.0-20241014033953-8a969cdbd61b/go.mod h1:1MA4DD8YdGF40odx0xkBsp+9ReUi6/kAFLXxC2dD0YE= +github.com/siyuan-note/httpclient v0.0.0-20241101092545-63ac2e89a49d h1:6D8xjsshHWTh1ASG2/QmYIl8Eq0cC4jJ32RLd7KjIuk= +github.com/siyuan-note/httpclient v0.0.0-20241101092545-63ac2e89a49d/go.mod h1:40Ji7fbIBCDbdmhr9leoO16np3YcM057B5BPjfjudwk= github.com/siyuan-note/logging v0.0.0-20240505035402-6430d57006a2 h1:/2+tlOThVB86RxSLeW0JFw2ISUrH2ZFRg15ULGAUGAE= github.com/siyuan-note/logging v0.0.0-20240505035402-6430d57006a2/go.mod h1:3Osd2/nwzXZFl6ZcDE4hA0HD83Wyv1fds47nVuapyOM= github.com/siyuan-note/riff v0.0.0-20240912073907-1e89a5f8e7dc h1:5AFQ9sx+baB6nBHdabWwGsGf4QWrarIyocsn/DUc+Tc= @@ -400,8 +400,8 @@ github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3i github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8= golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= From fc50b864ad477c0ca560a9004177ef806b856119 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 2 Nov 2024 12:09:35 +0800 Subject: [PATCH 2/3] :art: Improve data synchronization perception https://github.com/siyuan-note/siyuan/issues/13000 --- kernel/go.mod | 2 +- kernel/go.sum | 4 ++-- kernel/model/sync.go | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/kernel/go.mod b/kernel/go.mod index 89529fa68..b7286bf08 100644 --- a/kernel/go.mod +++ b/kernel/go.mod @@ -54,7 +54,7 @@ require ( github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 github.com/sashabaranov/go-openai v1.29.1 github.com/shirou/gopsutil/v3 v3.24.5 - github.com/siyuan-note/dejavu v0.0.0-20241101165922-5c8aefd88ca8 + github.com/siyuan-note/dejavu v0.0.0-20241102040801-b415ddf75154 github.com/siyuan-note/encryption v0.0.0-20231219001248-1e028a4d13b4 github.com/siyuan-note/eventbus v0.0.0-20240627125516-396fdb0f0f97 github.com/siyuan-note/filelock v0.0.0-20240724034355-d1ed7bf21d04 diff --git a/kernel/go.sum b/kernel/go.sum index 18547898d..057e951ee 100644 --- a/kernel/go.sum +++ b/kernel/go.sum @@ -332,8 +332,8 @@ github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+D github.com/shurcooL/gofontwoff v0.0.0-20181114050219-180f79e6909d h1:lvCTyBbr36+tqMccdGMwuEU+hjux/zL6xSmf5S9ITaA= github.com/shurcooL/gofontwoff v0.0.0-20181114050219-180f79e6909d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= github.com/simplereach/timeutils v1.2.0/go.mod h1:VVbQDfN/FHRZa1LSqcwo4kNZ62OOyqLLGQKYB3pB0Q8= -github.com/siyuan-note/dejavu v0.0.0-20241101165922-5c8aefd88ca8 h1:l5L5yJiJ8cIgzGSe4v5fBjzkhm4H/S69FA8n20liu/M= -github.com/siyuan-note/dejavu v0.0.0-20241101165922-5c8aefd88ca8/go.mod h1:PfTyVdHF4Ba0Sl9MblG9Ht0od/lWmUnIcBHqEeC/g88= +github.com/siyuan-note/dejavu v0.0.0-20241102040801-b415ddf75154 h1:CTexAFB8DAPt4R1cLNGZ9WvkPzmY9L3lF44M1j8FNUs= +github.com/siyuan-note/dejavu v0.0.0-20241102040801-b415ddf75154/go.mod h1:PfTyVdHF4Ba0Sl9MblG9Ht0od/lWmUnIcBHqEeC/g88= github.com/siyuan-note/encryption v0.0.0-20231219001248-1e028a4d13b4 h1:kJaw5L/evyW6LcB9IQT8PR4ppx8JVqOFP9Ix3rfwSrc= github.com/siyuan-note/encryption v0.0.0-20231219001248-1e028a4d13b4/go.mod h1:UYcCCY+0wh+GmUoDOaO63j1sV5lgy7laLAk1XhEiUis= github.com/siyuan-note/eventbus v0.0.0-20240627125516-396fdb0f0f97 h1:lM5v8BfNtbOL5jYwhCdMYBcYtr06IYBKjjSLAPMKTM8= diff --git a/kernel/model/sync.go b/kernel/model/sync.go index 03cb1129e..740bdd9b4 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -805,7 +805,8 @@ func connectSyncWebSocket() { data := result.Data.(map[string]interface{}) switch data["cmd"].(string) { case "synced": - syncData(false, false) + // Improve data synchronization perception https://github.com/siyuan-note/siyuan/issues/13000 + SyncDataDownload() case "kernels": onlineKernelsLock.Lock() From a2cb7d4c9b1f1c77e818db39a3e8714759e2ff45 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sat, 2 Nov 2024 12:21:51 +0800 Subject: [PATCH 3/3] :art: All plain text formats are supported when comparing data snapshots https://github.com/siyuan-note/siyuan/issues/12975 --- kernel/mobile/kernel.go | 4 ++++ kernel/model/repository.go | 2 +- kernel/util/file.go | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/kernel/mobile/kernel.go b/kernel/mobile/kernel.go index 6278a0b22..900238fcf 100644 --- a/kernel/mobile/kernel.go +++ b/kernel/mobile/kernel.go @@ -98,6 +98,10 @@ func GetAssetAbsPath(asset string) (ret string) { return } +func GetMimeTypeByExt(ext string) string { + return util.GetMimeTypeByExt(ext) +} + func SetTimezone(container, appDir, timezoneID string) { if "ios" == container { os.Setenv("ZONEINFO", filepath.Join(appDir, "app", "zoneinfo.zip")) diff --git a/kernel/model/repository.go b/kernel/model/repository.go index f2d646214..aa8f3ec75 100644 --- a/kernel/model/repository.go +++ b/kernel/model/repository.go @@ -153,7 +153,7 @@ func OpenRepoSnapshotDoc(fileID string) (title, content string, displayInText bo displayInText = true title = path.Base(file.Path) - if mimeType := mime.TypeByExtension(filepath.Ext(file.Path)); strings.HasPrefix(mimeType, "text/") { + if mimeType := mime.TypeByExtension(filepath.Ext(file.Path)); strings.HasPrefix(mimeType, "text/") || strings.Contains(mimeType, "json") { // 如果是文本文件,直接返回文本内容 // All plain text formats are supported when comparing data snapshots https://github.com/siyuan-note/siyuan/issues/12975 content = gulu.Str.FromBytes(data) diff --git a/kernel/util/file.go b/kernel/util/file.go index 560c62d90..3aab9852d 100644 --- a/kernel/util/file.go +++ b/kernel/util/file.go @@ -20,6 +20,7 @@ import ( "bytes" "io" "io/fs" + "mime" "os" "path" "path/filepath" @@ -29,6 +30,7 @@ import ( "github.com/88250/gulu" "github.com/88250/lute/ast" + "github.com/gabriel-vasile/mimetype" "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" ) @@ -73,6 +75,21 @@ func GetUniqueFilename(filePath string) string { } } +func GetMimeTypeByExt(filePath string) (ret string) { + ret = mime.TypeByExtension(filepath.Ext(filePath)) + if "" == ret { + m, err := mimetype.DetectFile(filePath) + if err != nil { + logging.LogErrorf("detect mime type of [%s] failed: %s", filePath, err) + return + } + if nil != m { + ret = m.String() + } + } + return +} + func IsSymlinkPath(absPath string) bool { fi, err := os.Lstat(absPath) if err != nil {