-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptions.js
More file actions
115 lines (95 loc) · 4.05 KB
/
options.js
File metadata and controls
115 lines (95 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
document.addEventListener('DOMContentLoaded', () => {
loadMeetings();
});
function loadMeetings() {
const grid = document.getElementById('meetings-list');
const loading = document.getElementById('loading');
const emptyState = document.getElementById('empty-state');
grid.innerHTML = '';
loading.style.display = 'block';
emptyState.style.display = 'none';
chrome.storage.local.get(null, (items) => {
loading.style.display = 'none';
let meetings = [];
for (let key in items) {
if (key.startsWith('meet_transcriber_')) {
meetings.push(items[key]);
}
}
// Ordenar da mais recente para a mais antiga
meetings.sort((a, b) => new Date(b.date) - new Date(a.date));
if (meetings.length === 0) {
emptyState.style.display = 'block';
return;
}
meetings.forEach(meeting => {
const card = document.createElement('div');
card.className = 'meeting-card';
const dateObj = new Date(meeting.date);
const dateStr = dateObj.toLocaleDateString() + ' às ' + dateObj.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
// Conta as palavras
let wordCount = 0;
meeting.transcript.forEach(t => {
wordCount += t.text.split(/\s+/).length;
});
card.innerHTML = `
<h3 class="meeting-title" title="${meeting.title}">${meeting.title}</h3>
<p class="meeting-date">${dateStr}</p>
<div class="meeting-stats">
<span class="stat-badge">${meeting.transcript.length} falas</span>
<span class="stat-badge">${wordCount} palavras</span>
</div>
<div class="card-actions">
<button class="btn-download" data-id="${meeting.id}">Baixar .txt</button>
<button class="btn-delete" data-id="${meeting.id}" title="Excluir">🗑️</button>
</div>
`;
grid.appendChild(card);
});
// Listeners dos botões
document.querySelectorAll('.btn-download').forEach(btn => {
btn.addEventListener('click', (e) => {
const id = e.target.getAttribute('data-id');
downloadMeeting(id);
});
});
document.querySelectorAll('.btn-delete').forEach(btn => {
btn.addEventListener('click', (e) => {
const id = e.target.getAttribute('data-id');
deleteMeeting(id);
});
});
});
}
function downloadMeeting(id) {
const key = `meet_transcriber_${id}`;
chrome.storage.local.get([key], (result) => {
const meeting = result[key];
if (!meeting) return;
let textContent = "Google Meet Transcript\n";
textContent += "Gerado por Google Meet Transcriber (Free)\n";
textContent += `Data: ${new Date(meeting.date).toLocaleString()}\n`;
textContent += `Reunião: ${meeting.title}\n\n`;
meeting.transcript.forEach(item => {
textContent += `[${item.timestamp}] ${item.speaker}:\n${item.text}\n\n`;
});
const blob = new Blob([textContent], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
const safeTitle = meeting.title.replace(/[^a-z0-9]/gi, '_').toLowerCase();
a.download = `Meet_${safeTitle}_${new Date(meeting.date).getTime()}.txt`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
});
}
function deleteMeeting(id) {
if (confirm("Tem certeza que deseja excluir esta transcrição?")) {
const key = `meet_transcriber_${id}`;
chrome.storage.local.remove(key, () => {
loadMeetings();
});
}
}