@lynker-desktop/electron-sdk 0.0.9-alpha.81 → 0.0.9-alpha.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,11 +52,13 @@ export interface DownloadOptions {
52
52
  export interface DownloadResult {
53
53
  /** 是否成功 */
54
54
  success: boolean;
55
- /** 下载的文件路径 */
55
+ /** 下载的文件路径(成功时返回) */
56
56
  filePath?: string;
57
- /** 错误信息 */
57
+ /** 错误信息(失败时返回,包含错误类型和详细描述) */
58
58
  error?: string;
59
- /** 文件大小(字节) */
59
+ /** 错误类型(失败时返回,用于区分不同类型的错误) */
60
+ errorType?: 'NETWORK' | 'FILE_SYSTEM' | 'PERMISSION' | 'VALIDATION' | 'USER_CANCEL' | 'UNKNOWN';
61
+ /** 文件大小(字节,成功时返回) */
60
62
  size?: number;
61
63
  }
62
64
  /**
@@ -67,13 +69,25 @@ export declare class Downloader {
67
69
  private _downloadingUrls;
68
70
  /** 上一次选择的保存文件夹路径 */
69
71
  private _lastSelectedDir;
72
+ /**
73
+ * 构造函数:初始化下载器并注册 IPC 处理器
74
+ * 注册 `core:downloader` IPC 处理器,用于从渲染进程接收下载请求
75
+ */
70
76
  constructor();
71
77
  /**
72
78
  * 下载文件
73
- * @param url 要下载的 URL
74
- * @param options 下载选项
79
+ *
80
+ * 主要流程:
81
+ * 1. 检查是否正在下载(避免重复下载)
82
+ * 2. 确定输出路径(支持弹窗选择或自动解析)
83
+ * 3. 验证并准备输出目录
84
+ * 4. 处理 base64 data URL 或普通 HTTP 下载
85
+ * 5. 使用临时文件下载,完成后重命名为最终文件
86
+ *
87
+ * @param url 要下载的 URL(支持 HTTP/HTTPS 和 base64 data URL)
88
+ * @param options 下载选项(输出路径、重试配置、回调函数等)
75
89
  * @param onProgress 进度回调函数(可选,优先级高于 options.onProgress)
76
- * @returns Promise<DownloadResult> 下载结果
90
+ * @returns Promise<DownloadResult> 下载结果,包含成功/失败状态、文件路径、错误信息等
77
91
  */
78
92
  download(url: string, options?: DownloadOptions, onProgress?: DownloadProgressCallback): Promise<DownloadResult>;
79
93
  /**
@@ -117,10 +131,31 @@ export declare class Downloader {
117
131
  * @returns 清理后的文件名
118
132
  */
119
133
  private _getFileName;
134
+ /**
135
+ * 检查目录是否存在且有访问权限
136
+ *
137
+ * 检查项:
138
+ * 1. 路径是否有效(非空字符串)
139
+ * 2. 目录是否存在
140
+ * 3. 路径是否为目录(而非文件)
141
+ * 4. 是否有读写权限
142
+ *
143
+ * @param dirPath 目录路径
144
+ * @returns 如果目录存在且有读写权限则返回 true,否则返回 false
145
+ */
146
+ private _isDirectoryAccessible;
120
147
  /**
121
148
  * 显示保存对话框
122
- * @param url 下载 URL
123
- * @param options 下载选项
149
+ *
150
+ * 功能说明:
151
+ * 1. 确定默认保存目录(优先级:defaultPath > outputDir > _lastSelectedDir > 系统下载目录)
152
+ * 2. 验证并更新 _lastSelectedDir(如果不可访问则重置)
153
+ * 3. 生成唯一文件名(如果文件已存在,添加数字后缀)
154
+ * 4. 显示 Electron 保存对话框
155
+ * 5. 记录用户选择的目录(用于下次默认使用)
156
+ *
157
+ * @param url 下载 URL(用于提取默认文件名)
158
+ * @param options 下载选项(包含 defaultPath、outputDir 等)
124
159
  * @param defaultExt 默认扩展名(可选,用于 base64 URL)
125
160
  * @returns Promise<string | null> 用户选择的保存路径,如果取消则返回 null
126
161
  */
@@ -133,45 +168,87 @@ export declare class Downloader {
133
168
  private _isBase64DataUrl;
134
169
  /**
135
170
  * 保存 base64 数据到文件
136
- * @param base64Data base64 编码的数据
137
- * @param filePath 目标文件路径
171
+ *
172
+ * 处理流程:
173
+ * 1. 将 base64 字符串解码为 Buffer
174
+ * 2. 将 Buffer 写入目标文件路径
175
+ *
176
+ * @param base64Data base64 编码的数据字符串
177
+ * @param filePath 目标文件路径(完整路径,包含文件名)
178
+ * @throws 如果解码失败或文件写入失败,抛出错误
138
179
  */
139
180
  private _saveBase64ToFile;
140
181
  /**
141
- * 准备输出路径(确保目录存在、检查文件是否已存在)
142
- * @param outputPath 输出路径
143
- * @param options 下载选项
144
- * @returns 如果文件已存在且不允许覆盖,返回结果;否则返回 null
182
+ * 准备输出路径
183
+ *
184
+ * 主要功能:
185
+ * 1. 确保输出目录存在(不存在则创建)
186
+ * 2. 检查文件是否已存在
187
+ * 3. 如果文件已存在且不允许覆盖,返回已存在的文件信息
188
+ *
189
+ * @param outputPath 输出文件路径
190
+ * @param options 下载选项(包含 override 选项)
191
+ * @returns 如果文件已存在且不允许覆盖,返回已存在的文件信息;否则返回 null
192
+ * @throws 如果目录创建失败或权限不足,抛出错误
145
193
  */
146
194
  private _prepareOutputPath;
147
195
  /**
148
196
  * 创建成功结果
149
197
  * @param filePath 文件路径
150
- * @param size 文件大小
151
- * @returns DownloadResult
198
+ * @param size 文件大小(字节)
199
+ * @returns DownloadResult 成功结果对象
152
200
  */
153
201
  private _createSuccessResult;
154
202
  /**
155
203
  * 创建错误结果
156
204
  * @param error 错误信息
157
- * @returns DownloadResult
205
+ * @param errorType 错误类型(可选,用于区分不同类型的错误)
206
+ * @returns DownloadResult 错误结果对象
158
207
  */
159
208
  private _createErrorResult;
209
+ /**
210
+ * 从错误对象中提取错误类型和详细信息
211
+ * @param error 错误对象
212
+ * @param url 下载的 URL(用于上下文信息)
213
+ * @returns 包含错误类型和详细错误信息的对象
214
+ */
215
+ private _parseError;
160
216
  /**
161
217
  * 处理 base64 data URL 的下载
218
+ *
219
+ * base64 data URL 格式:data:[<mediatype>][;base64],<data>
220
+ * 例如:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
221
+ *
222
+ * 处理流程:
223
+ * 1. 验证 base64 数据有效性
224
+ * 2. 触发进度回调(模拟 100% 完成)
225
+ * 3. 解码并保存 base64 数据到文件
226
+ * 4. 返回成功结果
227
+ *
162
228
  * @param url base64 data URL
163
- * @param base64Info base64 信息
229
+ * @param base64Info base64 信息(扩展名、MIME 类型、数据)
164
230
  * @param outputPath 已确定的输出路径
165
231
  * @param options 下载选项
166
- * @param progressCallback 进度回调
232
+ * @param progressCallback 进度回调(可选)
167
233
  * @returns Promise<DownloadResult> 下载结果
168
234
  */
169
235
  private _handleBase64Download;
170
236
  /**
171
237
  * 生成唯一的文件名(如果文件已存在,添加数字后缀)
238
+ *
239
+ * 命名规则:
240
+ * - 如果文件不存在,返回原始文件名
241
+ * - 如果文件已存在,添加数字后缀:filename(1).ext, filename(2).ext, ...
242
+ * - 最多尝试 MAX_FILENAME_COUNTER 次,防止无限循环
243
+ *
244
+ * 示例:
245
+ * - "test.pdf" -> "test.pdf" (如果不存在)
246
+ * - "test.pdf" -> "test(1).pdf" (如果 test.pdf 已存在)
247
+ * - "test(1).pdf" -> "test(2).pdf" (如果 test(1).pdf 也已存在)
248
+ *
172
249
  * @param dir 目录路径
173
- * @param fileName 原始文件名
174
- * @returns 唯一的文件名
250
+ * @param fileName 原始文件名(包含扩展名)
251
+ * @returns 唯一的文件名(如果原文件不存在则返回原文件名,否则返回带数字后缀的文件名)
175
252
  */
176
253
  private _generateUniqueFileName;
177
254
  /**
@@ -192,6 +269,7 @@ export declare class Downloader {
192
269
  * @param options 下载选项
193
270
  * @param defaultExt 默认扩展名(可选,用于 base64 URL)
194
271
  * @returns 输出文件路径
272
+ * @throws 如果无法解析有效路径,抛出错误
195
273
  */
196
274
  private _resolveOutputPath;
197
275
  }
@@ -1 +1 @@
1
- {"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../src/main/downloader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../src/main/downloader.ts"],"names":[],"mappings":"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"}