feat(factory): 内容工厂与链接处理
- 第三栏内容工厂:按拖入类型展示动作,动作按钮本身可接收 drop - 链接分类:http(s) 按扩展名判定图片/音视频/文档/压缩包/网页 - http 链接动作:打开、下载、另存为、复制、Markdown、复制文件名、待办、问小埃 - 非标准 scheme:尝试打开、复制;thunder 解析 base64 真实地址,magnet 解析 dn - 文字动作:ICU 分词、正则提取链接、朗读(spd-say)、复制、待办 - 文件/图片动作:打开、提取文字(占位)、生成描述、保存图片、复制路径、待办 - Downloader:异步下载到 XDG 下载目录 / 另存为,面板 toast 提示 - TodoModel:持久化到 todo.json,供「添加到待办」使用 - 无头自测 gxde-ai-see-selftest:链接分类/分词/提取链接/动作匹配 - 合成器 portal 自测脚本 tests/portal(虚拟指针 + GTK 源/目标)
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
// SPDX-FileCopyrightText: 2026 GXDE OS Team
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QUrl>
|
||||
|
||||
/**
|
||||
* Classification of a link dropped onto the content factory.
|
||||
*/
|
||||
struct LinkInfo
|
||||
{
|
||||
enum Kind {
|
||||
None,
|
||||
Http, // http(s) URL
|
||||
Standard, // other standard URL (ftp, mailto, tel, file)
|
||||
Custom, // app specific scheme (thunder, spk, magnet, ed2k, ...)
|
||||
Other,
|
||||
};
|
||||
|
||||
Kind kind = None;
|
||||
QUrl url;
|
||||
QString scheme;
|
||||
QString extension; // lower case, without dot
|
||||
QString fileType; // image / audio / video / document / archive / code / page / unknown
|
||||
QString raw; // original text, preserved for custom schemes
|
||||
QString decodedUrl; // thunder:// and friends
|
||||
QString displayName; // magnet dn / last path segment
|
||||
bool looksLikeFile = false;
|
||||
|
||||
bool isValid() const { return kind != None; }
|
||||
QString kindLabel() const;
|
||||
};
|
||||
|
||||
namespace LinkTools {
|
||||
|
||||
LinkInfo parse(const QString &text);
|
||||
LinkInfo parseUrl(const QUrl &url);
|
||||
|
||||
/** Map a file extension to a coarse content type. */
|
||||
QString fileTypeForExtension(const QString &extension);
|
||||
|
||||
/** Decode thunder:// (base64 of "AA" + url + "ZZ") and magnet display name. */
|
||||
QString decodeThunder(const QString &text);
|
||||
|
||||
QString displayNameFor(const QUrl &url);
|
||||
|
||||
bool isHttpLink(const QString &text);
|
||||
|
||||
} // namespace LinkTools
|
||||
Reference in New Issue
Block a user