|
@@ -13,7 +13,7 @@ import {
|
|
|
} from './api/models';
|
|
} from './api/models';
|
|
|
import { DEMO_MESSAGES } from './api/demo-data';
|
|
import { DEMO_MESSAGES } from './api/demo-data';
|
|
|
import { AlertService } from './alert.service';
|
|
import { AlertService } from './alert.service';
|
|
|
-import { extractDeliveredLinks, extractS3Links, isUserUploadUrl, prettifyStorageKey, stripLinks } from './s3-link';
|
|
|
|
|
|
|
+import { extractDeliveredLinks, extractS3Links, isCloudUrl, isUserUploadUrl, prettifyStorageKey, stripLinks } from './s3-link';
|
|
|
import { isOversize, notifyOversize, oversizeMessage } from './upload-limits';
|
|
import { isOversize, notifyOversize, oversizeMessage } from './upload-limits';
|
|
|
import { batchPhase, FileProgress, overallPct, UploadPhase } from './upload-state';
|
|
import { batchPhase, FileProgress, overallPct, UploadPhase } from './upload-state';
|
|
|
import { environment } from '../../environments/environment';
|
|
import { environment } from '../../environments/environment';
|
|
@@ -21,6 +21,7 @@ import { LiveService } from './live.service';
|
|
|
import { SessionService } from './session.service';
|
|
import { SessionService } from './session.service';
|
|
|
import { UnreadService } from './unread.service';
|
|
import { UnreadService } from './unread.service';
|
|
|
import {
|
|
import {
|
|
|
|
|
+ CLOUD_URL_KEY,
|
|
|
DISPATCH_KEY,
|
|
DISPATCH_KEY,
|
|
|
LOCAL_ID_KEY,
|
|
LOCAL_ID_KEY,
|
|
|
MxDispatchMeta,
|
|
MxDispatchMeta,
|
|
@@ -2304,6 +2305,17 @@ export class ChatService {
|
|
|
file,
|
|
file,
|
|
|
{ name: file.name, size: file.size, mimeType },
|
|
{ name: file.name, size: file.size, mimeType },
|
|
|
sid ?? undefined,
|
|
sid ?? undefined,
|
|
|
|
|
+ undefined,
|
|
|
|
|
+ /*
|
|
|
|
|
+ * 🔴 把云盘链接写进 Matrix 事件的 content(2026-11-13)。
|
|
|
|
|
+ *
|
|
|
|
|
+ * 为什么必须写:不带的话,回读历史只能拿到 `mxc://`,
|
|
|
|
|
+ * 而 App 展示/预览要的是**云盘公网链接**。原先靠内存 Map
|
|
|
|
|
+ * `_cloudUrls` 补,**刷新就丢** —— 用户反馈「链接不对」「刷新后打不开」。
|
|
|
|
|
+ *
|
|
|
|
|
+ * 容器只认 `url`(mxc://),未知字段会被忽略,不影响它。
|
|
|
|
|
+ */
|
|
|
|
|
+ { [CLOUD_URL_KEY]: cloudUrl },
|
|
|
);
|
|
);
|
|
|
this.setFileProgress(pending[i].id, { phase: 'done', pct: 100 });
|
|
this.setFileProgress(pending[i].id, { phase: 'done', pct: 100 });
|
|
|
/*
|
|
/*
|
|
@@ -3098,10 +3110,13 @@ export class ChatService {
|
|
|
mimeType: file.mimeType,
|
|
mimeType: file.mimeType,
|
|
|
url: file.url,
|
|
url: file.url,
|
|
|
/*
|
|
/*
|
|
|
- * 我自己刚发的附件:回读只有 `mxc://`,用发送时记下的云盘地址补上,
|
|
|
|
|
- * 右栏「文件」才能长期访问(2026-11-10)。
|
|
|
|
|
|
|
+ * `url` 已由 MatrixClientService 优先取事件里的云盘链接
|
|
|
|
|
+ * (`com.fmode.cloud_url`),所以这里直接复用。
|
|
|
|
|
+ * 内存 Map 只作老消息的兜底 —— 新消息不再依赖它。
|
|
|
*/
|
|
*/
|
|
|
- cloudUrl: this._cloudUrls.get(this.cloudKeyOf(file.name, file.size)),
|
|
|
|
|
|
|
+ cloudUrl: isCloudUrl(file.url)
|
|
|
|
|
+ ? file.url
|
|
|
|
|
+ : this._cloudUrls.get(this.cloudKeyOf(file.name, file.size)),
|
|
|
}
|
|
}
|
|
|
: linkCard,
|
|
: linkCard,
|
|
|
ts: new Date(m.ts).toISOString(),
|
|
ts: new Date(m.ts).toISOString(),
|