You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: dist-electron/main.js
+93Lines changed: 93 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -124,6 +124,96 @@ function closeDatabase() {
124
124
console.log("[database] Database closed.");
125
125
}
126
126
}
127
+
functiongetAnalytics(){
128
+
constdb2=getDatabase();
129
+
consttotalResult=db2.prepare("SELECT COUNT(*) as count FROM conversions").get();
130
+
consttotalConversions=totalResult.count;
131
+
if(totalConversions===0){
132
+
return{
133
+
totalConversions: 0,
134
+
successfulConversions: 0,
135
+
failedConversions: 0,
136
+
totalFilesSize: 0,
137
+
totalDuration: 0,
138
+
averageDuration: 0,
139
+
topSourceFormats: [],
140
+
topTargetFormats: [],
141
+
conversionsByCategory: [],
142
+
recentTrend: [],
143
+
fastestConversion: null,
144
+
slowestConversion: null
145
+
};
146
+
}
147
+
constsuccessResult=db2.prepare("SELECT COUNT(*) as count FROM conversions WHERE status = ?").get("completed");
148
+
constfailedResult=db2.prepare("SELECT COUNT(*) as count FROM conversions WHERE status = ?").get("failed");
149
+
constaggregateResult=db2.prepare("SELECT SUM(source_size) as total_size, SUM(duration_ms) as total_duration, AVG(duration_ms) as avg_duration FROM conversions").get();
150
+
consttopSourceFormats=db2.prepare(`
151
+
SELECT source_ext as format, COUNT(*) as count
152
+
FROM conversions
153
+
GROUP BY source_ext
154
+
ORDER BY count DESC
155
+
LIMIT 10
156
+
`).all();
157
+
consttopTargetFormats=db2.prepare(`
158
+
SELECT target_format as format, COUNT(*) as count
159
+
FROM conversions
160
+
GROUP BY target_format
161
+
ORDER BY count DESC
162
+
LIMIT 10
163
+
`).all();
164
+
constallExts=db2.prepare("SELECT source_ext, COUNT(*) as count FROM conversions GROUP BY source_ext").all();
consttotalResult=db.prepare('SELECT COUNT(*) as count FROM conversions').get()as{count: number}
203
+
consttotalConversions=totalResult.count
204
+
205
+
if(totalConversions===0){
206
+
return{
207
+
totalConversions: 0,
208
+
successfulConversions: 0,
209
+
failedConversions: 0,
210
+
totalFilesSize: 0,
211
+
totalDuration: 0,
212
+
averageDuration: 0,
213
+
topSourceFormats: [],
214
+
topTargetFormats: [],
215
+
conversionsByCategory: [],
216
+
recentTrend: [],
217
+
fastestConversion: null,
218
+
slowestConversion: null,
219
+
}
220
+
}
221
+
222
+
// Success/failure counts
223
+
constsuccessResult=db.prepare('SELECT COUNT(*) as count FROM conversions WHERE status = ?').get('completed')as{count: number}
224
+
constfailedResult=db.prepare('SELECT COUNT(*) as count FROM conversions WHERE status = ?').get('failed')as{count: number}
225
+
226
+
// Total file size and duration
227
+
constaggregateResult=db.prepare('SELECT SUM(source_size) as total_size, SUM(duration_ms) as total_duration, AVG(duration_ms) as avg_duration FROM conversions').get()as{
228
+
total_size: number|null
229
+
total_duration: number|null
230
+
avg_duration: number|null
231
+
}
232
+
233
+
// Top source formats
234
+
consttopSourceFormats=db.prepare(`
235
+
SELECT source_ext as format, COUNT(*) as count
236
+
FROM conversions
237
+
GROUP BY source_ext
238
+
ORDER BY count DESC
239
+
LIMIT 10
240
+
`).all()asArray<{format: string;count: number}>
241
+
242
+
// Top target formats
243
+
consttopTargetFormats=db.prepare(`
244
+
SELECT target_format as format, COUNT(*) as count
245
+
FROM conversions
246
+
GROUP BY target_format
247
+
ORDER BY count DESC
248
+
LIMIT 10
249
+
`).all()asArray<{format: string;count: number}>
250
+
251
+
// Conversions by category (need to infer from extension)
252
+
// Simplified: group by first letter of extension (not ideal but works without FORMAT_MAP in Node)
0 commit comments