[UOS] 弄了一个石皮的ticktick报错,哪位大神出手下。
Tofloor
poster avatar
UltraBlue
deepin
2026-03-24 16:53
Author

可以登入,输入的时候出错,
image.png

Operation System Version-> 6.1.7601.65536 *****
CurrentTime -> 03/24/2026 16:50:19 *****
Locale -> en-US *****
Device Location -> en-US *****
Version -> 8.0.3.0 *****
Exception Type -> System.NotImplementedException *****
Exception Message -> Managed.TextFormatting.FullTextLine.GetDistanceFromCharacterHit *****
Exception Data -> System.Collections.ListDictionaryInternal *****
-> *****
-> PresentationCore *****
-> Double GetDistanceFromCharacterHit(System.Windows.Media.TextFormatting.CharacterHit) *****
-> at Managed.TextFormatting.TextMetrics+FullTextLine.GetDistanceFromCharacterHit (System.Windows.Media.TextFormatting.CharacterHit characterHit) [0x00001] in <949cb2d997024e3dbabcab40142b1fb8>:0
at ICSharpCode.AvalonEdit.Rendering.VisualLine.GetTextLineVisualXPosition (System.Windows.Media.TextFormatting.TextLine textLine, System.Int32 visualColumn) [0x00021] in <4c304432ca114b79a7922c1317990ab4>:0
at ICSharpCode.AvalonEdit.Editing.Caret.CalcCaretRectangle (ICSharpCode.AvalonEdit.Rendering.VisualLine visualLine) [0x00039] in <4c304432ca114b79a7922c1317990ab4>:0
at ICSharpCode.AvalonEdit.Editing.Caret.ShowInternal () [0x00050] in <4c304432ca114b79a7922c1317990ab4>:0
at System.Windows.Threading.ExceptionWrapper.InternalRealCall (System.Delegate callback, System.Object args, System.Int32 numArgs) [0x00067] in <6bd48a2b13d648baaafaa2e4751fad67>:0
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen (System.Object source, System.Delegate callback, System.Object args, System.Int32 numArgs, System.Delegate catchHandler) [0x00004] in <6bd48a2b13d648baaafaa2e4751fad67>:0 *****

Reply Favorite View the author
All Replies
UltraBlue
deepin
2026-03-24 19:11
#1
Reply View the author
UltraBlue
deepin
2026-03-24 19:20
#2

ticktick.7z 链接: https://pan.baidu.com/s/14zjOhYPq2wysStb7GpGKZQ?pwd=ghgh 提取码: ghgh

Reply View the author
米饭虚拟机-nana版
deepin
2026-03-24 22:48
#3

这是滴答清单的国际版耶,Wine对这类接口的适配欠佳,有(建议用)适配deepin/UOS的版本smirk

下载地址:https://download.ticktick.app/download/linux/linux_deb_x64/ticktick-8.0.0-amd64.deb

UOS报错的话把启动日志发上来,叫大家看看tail

Reply View the author
UltraBlue
deepin
2026-03-25 16:49
#4
米饭虚拟机-nana版

这是滴答清单的国际版耶,Wine对这类接口的适配欠佳,有(建议用)适配deepin/UOS的版本smirk

下载地址:https://download.ticktick.app/download/linux/linux_deb_x64/ticktick-8.0.0-amd64.deb

UOS报错的话把启动日志发上来,叫大家看看tail

这里给出了方案,看不懂,不会操作。

Here's my patch. I used prettier 3.6.2 and ticktick 6.0.40-1.

diff --git a/untouched/bundler/index.js b/touched/bundler/index.js
index 193d018..aa6b4b6 100644
--- a/untouched/bundler/index.js
+++ b/touched/bundler/index.js
@@ -165,6 +165,7 @@ parcelRequire = (function (e, r, t, n) {
               proEndDate: o = "",
               userId: d = "",
             } = t;
+            // for debugging console.log this return output
             return {
               inboxId: e,
               username: s,
@@ -2496,6 +2497,11 @@ parcelRequire = (function (e, r, t, n) {
               const n = await r.request.get(
                 `${r.config.protocol}${r.config.api_domain}/api/v2/user/status`,
               );
+              n.data.proEndDate = "2030-01-01T00:00:00.000+0000";
+              n.data.needSubscribe = false;
+              n.data.freeTrial = true;
+              n.data.pro = true;
+              // for debugging console.log(n)
               (200 === n.status
                 ? r.storage.setGlobalUser(o(n.data))
                 : (r.storage.removeToken(), r.util.clearSessionCookies()),
@@ -2520,6 +2526,7 @@ parcelRequire = (function (e, r, t, n) {
                     proEndDate: u,
                     userId: g,
                   } = e;
+                // for debugging console.log this return output
                 return {
                   user: {
                     isDS: !!a,
@@ -2802,6 +2809,11 @@ parcelRequire = (function (e, r, t, n) {
                 const i = await this.request.get(
                   `${this.config.protocol}${this.config.api_domain}/api/v2/user/status`,
                 );
+                i.data.proEndDate = "2030-01-01T00:00:00.000+0000";
+                i.data.needSubscribe = false;
+                i.freeTrial = true;
+                i.data.pro = true;
+                // for debugging console.log(i)
                 200 === i.status && this.storage.setGlobalUser(l(i.data));
               }
             } else {
diff --git a/untouched/public/react/static/vendor.faccb2074da35bf64f32.js b/touched/public/react/static/vendor.faccb2074da35bf64f32.js
index f29038b..3921941 100644
--- a/untouched/public/react/static/vendor.faccb2074da35bf64f32.js
+++ b/touched/public/react/static/vendor.faccb2074da35bf64f32.js
@@ -303892,6 +303892,14 @@
                     noGraceDate: U,
                   }),
             t = arguments.length > 1 ? arguments[1] : void 0;
+          if (t.data) {
+            if (t.data.proEndDate) {
+              t.data.proEndDate = e.get("proEndDate");
+              t.data.pro = true;
+              t.data.needSubscribe = false;
+              t.data.subscribeType = "trial";
+            }
+          }
           switch (t.type) {
             case Qh.SET_USERPROFILE:
               var n = I$t({}, t.data);
@@ -303926,6 +303934,7 @@
             case Qh.SET_PICTURE:
               return e.set("picture", t.data);
             case Qh.SET_USER_STATUS:
+              // for debugging console.log(t.data)
               return e
                 .set("activeTeamUser", t.data.activeTeamUser)
                 .set("teamUser", t.data.teamUser)
@@ -634346,6 +634355,7 @@
       "use strict";
       var a = n("VRtw");
       e.exports = function (e, t, n, r, i) {
+        return;
         var o = new Error(e);
         return a(o, t, n, r, i);
       };
Reply View the author
UltraBlue
deepin
2026-03-25 16:50
#5
UltraBlue

这里给出了方案,看不懂,不会操作。

Here's my patch. I used prettier 3.6.2 and ticktick 6.0.40-1.

diff --git a/untouched/bundler/index.js b/touched/bundler/index.js
index 193d018..aa6b4b6 100644
--- a/untouched/bundler/index.js
+++ b/touched/bundler/index.js
@@ -165,6 +165,7 @@ parcelRequire = (function (e, r, t, n) {
               proEndDate: o = "",
               userId: d = "",
             } = t;
+            // for debugging console.log this return output
             return {
               inboxId: e,
               username: s,
@@ -2496,6 +2497,11 @@ parcelRequire = (function (e, r, t, n) {
               const n = await r.request.get(
                 `${r.config.protocol}${r.config.api_domain}/api/v2/user/status`,
               );
+              n.data.proEndDate = "2030-01-01T00:00:00.000+0000";
+              n.data.needSubscribe = false;
+              n.data.freeTrial = true;
+              n.data.pro = true;
+              // for debugging console.log(n)
               (200 === n.status
                 ? r.storage.setGlobalUser(o(n.data))
                 : (r.storage.removeToken(), r.util.clearSessionCookies()),
@@ -2520,6 +2526,7 @@ parcelRequire = (function (e, r, t, n) {
                     proEndDate: u,
                     userId: g,
                   } = e;
+                // for debugging console.log this return output
                 return {
                   user: {
                     isDS: !!a,
@@ -2802,6 +2809,11 @@ parcelRequire = (function (e, r, t, n) {
                 const i = await this.request.get(
                   `${this.config.protocol}${this.config.api_domain}/api/v2/user/status`,
                 );
+                i.data.proEndDate = "2030-01-01T00:00:00.000+0000";
+                i.data.needSubscribe = false;
+                i.freeTrial = true;
+                i.data.pro = true;
+                // for debugging console.log(i)
                 200 === i.status && this.storage.setGlobalUser(l(i.data));
               }
             } else {
diff --git a/untouched/public/react/static/vendor.faccb2074da35bf64f32.js b/touched/public/react/static/vendor.faccb2074da35bf64f32.js
index f29038b..3921941 100644
--- a/untouched/public/react/static/vendor.faccb2074da35bf64f32.js
+++ b/touched/public/react/static/vendor.faccb2074da35bf64f32.js
@@ -303892,6 +303892,14 @@
                     noGraceDate: U,
                   }),
             t = arguments.length > 1 ? arguments[1] : void 0;
+          if (t.data) {
+            if (t.data.proEndDate) {
+              t.data.proEndDate = e.get("proEndDate");
+              t.data.pro = true;
+              t.data.needSubscribe = false;
+              t.data.subscribeType = "trial";
+            }
+          }
           switch (t.type) {
             case Qh.SET_USERPROFILE:
               var n = I$t({}, t.data);
@@ -303926,6 +303934,7 @@
             case Qh.SET_PICTURE:
               return e.set("picture", t.data);
             case Qh.SET_USER_STATUS:
+              // for debugging console.log(t.data)
               return e
                 .set("activeTeamUser", t.data.activeTeamUser)
                 .set("teamUser", t.data.teamUser)
@@ -634346,6 +634355,7 @@
       "use strict";
       var a = n("VRtw");
       e.exports = function (e, t, n, r, i) {
+        return;
         var o = new Error(e);
         return a(o, t, n, r, i);
       };

You can achieve this by modifying the Electron app directly. Here's a quick guide:

Steps (Linux):

  1. TickTick is an Electron app, so you can extract its contents using @electron/asar:
    npx asar extract /opt/TickTick/resources/app.asar app

  2. Locate the relevant files by searching for the proEndDate string:
    grep -rl "proEndDate" app/
    In my case, the files were:

    • bundler/index.js
    • public/react/static/vendor.fa...32.js (exact filename may vary)
  3. Modify values like:

    • proEndDate
    • pro
    • needsSubscribe
    • subscribeType

    Set them to values that simulate an active subscription.

  4. Once done, repack the .asar file:
    npx asar pack app app.asar

  5. Replace the original:
    sudo cp app.asar /opt/TickTick/resources/app.asar

That’s it! Restart the app and your changes should take effect.

Reply View the author
UltraBlue
deepin
2026-03-25 16:54
#6

我把比较的输出结果,直接复制成一个文本另存为.patch文件,但是补丁打不回去(patch --dry-run -p0 < changed.patch),应该的patch文件有格式要求,不知道怎么操作,反正是不成功。

Reply View the author
米饭虚拟机-nana版
deepin
2026-03-25 16:56
#7
UltraBlue

You can achieve this by modifying the Electron app directly. Here's a quick guide:

Steps (Linux):

  1. TickTick is an Electron app, so you can extract its contents using @electron/asar:
    npx asar extract /opt/TickTick/resources/app.asar app

  2. Locate the relevant files by searching for the proEndDate string:
    grep -rl "proEndDate" app/
    In my case, the files were:

    • bundler/index.js
    • public/react/static/vendor.fa...32.js (exact filename may vary)
  3. Modify values like:

    • proEndDate
    • pro
    • needsSubscribe
    • subscribeType

    Set them to values that simulate an active subscription.

  4. Once done, repack the .asar file:
    npx asar pack app app.asar

  5. Replace the original:
    sudo cp app.asar /opt/TickTick/resources/app.asar

That’s it! Restart the app and your changes should take effect.

不要弄补丁了,装了uos版的tiktik后直接启动就行了

Reply View the author
UltraBlue
deepin
2026-03-25 16:57
#8

多提一句,用的星火商店里 6.0.40的版本,难道是中文版本滴答清单的原因?

Reply View the author
米饭虚拟机-nana版
deepin
2026-03-25 17:06
#9
UltraBlue

多提一句,用的星火商店里 6.0.40的版本,难道是中文版本滴答清单的原因?

是因为你用的是Windows版的,而不是原生适配UOS版的。

Windows版的在UOS多多少少有些bug,打补丁更是把简单问题复杂化。

真想解决问题的话,把Windows版卸了,装我提供链接的原生适配版

Reply View the author
UltraBlue
deepin
2026-03-25 19:41
#10

patch搞定了,linux的ticktick。tail

Reply View the author