Skip to content

Commit 92ac4de

Browse files
committed
Fix duplicate entries in chart data
1 parent 184fb3b commit 92ac4de

File tree

1 file changed

+155
-107
lines changed

1 file changed

+155
-107
lines changed

src/scripts/webact.js

Lines changed: 155 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -174,88 +174,99 @@ function fillEmptyBlock() {
174174
function getTabsFromStorage(tabs) {
175175
tabsFromStorage = tabs;
176176
targetTabs = [];
177-
177+
178178
ui.clearUI();
179179
if (tabs === null) {
180-
ui.fillEmptyBlock('chart');
181-
return;
180+
ui.fillEmptyBlock("chart");
181+
return;
182182
}
183-
183+
184184
var counterOfSite;
185185
if (currentTypeOfList === TypeListEnum.All) {
186-
targetTabs = tabs.sort(function (a, b) {
187-
return b.summaryTime - a.summaryTime;
188-
});
189-
190-
if (targetTabs.length > 0) {
191-
totalTime = getTotalTime(targetTabs);
192-
stat.allDaysTime = totalTime;
193-
194-
} else {
195-
ui.fillEmptyBlock('chart');
196-
return;
197-
}
198-
199-
counterOfSite = tabs.length;
186+
targetTabs = tabs;
187+
if (targetTabs.length > 0) {
188+
totalTime = getTotalTime(targetTabs, currentTypeOfList);
189+
stat.allDaysTime = totalTime;
190+
} else {
191+
ui.fillEmptyBlock("chart");
192+
return;
193+
}
194+
195+
counterOfSite = tabs.length;
200196
}
201197
if (currentTypeOfList === TypeListEnum.ToDay) {
202-
targetTabs = tabs.filter(x => x.days.find(s => s.date === todayLocalDate()));
203-
counterOfSite = targetTabs.length;
204-
if (targetTabs.length > 0) {
205-
targetTabs = targetTabs.sort(function (a, b) {
206-
return b.days.find(s => s.date === todayLocalDate()).summary - a.days.find(s => s.date === todayLocalDate()).summary;
207-
});
208-
209-
totalTime = getTotalTime(targetTabs);
210-
stat.todayTime = totalTime;
211-
} else {
212-
ui.fillEmptyBlock('chart');
213-
return;
214-
}
198+
targetTabs = tabs.filter((x) =>
199+
x.days.find((s) => s.date === todayLocalDate())
200+
);
201+
counterOfSite = targetTabs.length;
202+
if (targetTabs.length > 0) {
203+
targetTabs = targetTabs.sort(function (a, b) {
204+
return (
205+
b.days.find((s) => s.date === todayLocalDate()).summary -
206+
a.days.find((s) => s.date === todayLocalDate()).summary
207+
);
208+
});
209+
210+
totalTime = getTotalTime(targetTabs, currentTypeOfList);
211+
stat.todayTime = totalTime;
212+
} else {
213+
ui.fillEmptyBlock("chart");
214+
return;
215+
}
215216
}
216-
217+
217218
if (currentTypeOfList === TypeListEnum.All)
218-
ui.addTableHeader(currentTypeOfList, counterOfSite, totalTime, getFirstDay());
219+
ui.addTableHeader(
220+
currentTypeOfList,
221+
counterOfSite,
222+
totalTime,
223+
getFirstDay()
224+
);
219225
if (currentTypeOfList === TypeListEnum.ToDay)
220-
ui.addTableHeader(currentTypeOfList, counterOfSite, totalTime);
221-
226+
ui.addTableHeader(currentTypeOfList, counterOfSite, totalTime);
227+
222228
var currentTab = getCurrentTab();
223-
229+
224230
var tabsForChart = [];
225231
var summaryCounter = 0;
226-
for (var i = 0; i < targetTabs.length; i++) {
227-
var summaryTime;
228-
var counter;
229-
if (currentTypeOfList === TypeListEnum.ToDay) {
230-
summaryTime = targetTabs[i].days.find(x => x.date == todayLocalDate()).summary;
231-
let item = targetTabs[i].days.find(x => x.date == todayLocalDate());
232-
if (item != null)
233-
counter = item.counter;
234-
}
235-
if (currentTypeOfList === TypeListEnum.All) {
236-
summaryTime = targetTabs[i].summaryTime;
237-
counter = targetTabs[i].counter;
238-
}
239-
240-
summaryCounter += counter;
241-
242-
if (currentTypeOfList === TypeListEnum.ToDay || (currentTypeOfList === TypeListEnum.All && i <= 30))
243-
ui.addLineToTableOfSite(targetTabs[i], currentTab, summaryTime, currentTypeOfList, counter);
244-
else
245-
ui.addExpander();
246-
247-
if (i <= 8)
248-
addTabForChart(tabsForChart, targetTabs[i].url, summaryTime, counter);
249-
else addTabOthersForChart(tabsForChart, summaryTime);
232+
var tabGroups = getTabGroups(targetTabs, currentTypeOfList);
233+
234+
for (var i = 0; i < tabGroups.length; i++) {
235+
var summaryTime = 0;
236+
var counter = 0;
237+
var tabGroup = tabGroups[i];
238+
239+
summaryTime = tabGroup.summaryTime;
240+
counter = tabGroup.counter;
241+
242+
summaryCounter += counter;
243+
244+
const targetTab = tabGroup.tabs[0];
245+
246+
if (
247+
currentTypeOfList === TypeListEnum.ToDay ||
248+
(currentTypeOfList === TypeListEnum.All && i <= 30)
249+
)
250+
ui.addLineToTableOfSite(
251+
targetTab,
252+
currentTab,
253+
summaryTime,
254+
currentTypeOfList,
255+
counter
256+
);
257+
else ui.addExpander();
258+
259+
var tabForChartUrl = i <= 8 ? tabGroup.host : 'Others';
260+
addTabForChart(tabsForChart, tabForChartUrl, summaryTime, counter);
250261
}
251-
262+
252263
ui.addHrAfterTableOfSite();
253264
ui.createTotalBlock(totalTime, currentTypeOfList, summaryCounter);
254265
ui.drawChart(tabsForChart);
255266
ui.setActiveTooltipe(currentTab);
256-
267+
257268
ui.removePreloader();
258-
}
269+
}
259270

260271
function getTabsForTimeChart(timeIntervals) {
261272
var resultArr = [];
@@ -272,6 +283,39 @@ function getTabsForTimeChart(timeIntervals) {
272283
return resultArr;
273284
}
274285

286+
function getTabGroups(tabs, typeOfList, date) {
287+
var result = [];
288+
289+
var tabGroups = groupTabsByHost(tabs);
290+
291+
for(const host in tabGroups){
292+
var groupedTabs = tabGroups[host];
293+
294+
result.push({
295+
host: host,
296+
counter: getTotalCount(groupedTabs, typeOfList, date),
297+
summaryTime: getTotalTime(groupedTabs, typeOfList, date),
298+
tabs: groupedTabs
299+
});
300+
}
301+
302+
result.sort(function (a, b) {
303+
return b.summaryTime - a.summaryTime;
304+
});
305+
306+
return result;
307+
}
308+
309+
function groupTabsByHost(tabs) {
310+
var tabGroups = tabs.reduce((groups, tab) => {
311+
var key = tab.url.host;
312+
(groups[key] = groups[key] || []).push(tab);
313+
return groups;
314+
}, {});
315+
316+
return tabGroups;
317+
}
318+
275319
function getTabsForExpander() {
276320
if (tabsFromBackground != undefined && tabsFromBackground != null && tabsFromBackground.length > 0)
277321
getTabsFromStorageForExpander(tabsFromBackground);
@@ -296,44 +340,52 @@ function getTabsFromStorageForExpander(tabs) {
296340
tabsFromStorage = tabs;
297341
targetTabs = [];
298342

299-
targetTabs = tabs.sort(function (a, b) {
300-
return b.summaryTime - a.summaryTime;
301-
});
302-
303343
var currentTab = getCurrentTab();
344+
345+
var tabGroups = getTabGroups(tabs, currentTypeOfList);
304346

305-
for (var i = 31; i < targetTabs.length; i++) {
306-
var summaryTime;
307-
var counter;
308-
if (currentTypeOfList === TypeListEnum.ToDay) {
309-
summaryTime = targetTabs[i].days.find(x => x.date == todayLocalDate()).summary;
310-
let item = targetTabs[i].days.find(x => x.date == todayLocalDate());
311-
if (item != undefined)
312-
counter = item.counter;
313-
}
314-
if (currentTypeOfList === TypeListEnum.All) {
315-
summaryTime = targetTabs[i].summaryTime;
316-
counter = targetTabs[i].counter;
317-
}
318-
319-
ui.addLineToTableOfSite(targetTabs[i], currentTab, summaryTime, currentTypeOfList, counter);
347+
for (var i = 31; i < tabGroups.length; i++) {
348+
var tabGroup = tabGroups[i];
349+
ui.addLineToTableOfSite(tabGroup, currentTab, tabGroup.summaryTime, currentTypeOfList, tabGroup.counter);
320350
}
321351

322352
var table = ui.getTableOfSite();
323353
table.removeChild(table.getElementsByTagName('hr')[0]);
324354
ui.addHrAfterTableOfSite();
325355
}
326356

327-
function getTotalTime(tabs) {
357+
function getTotalCount(tabs, typeofList, date) {
328358
var total;
329-
if (currentTypeOfList === TypeListEnum.ToDay) {
330-
var summaryTimeList = tabs.map(function (a) { return a.days.find(s => s.date === todayLocalDate()).summary; });
331-
total = summaryTimeList.reduce(function (a, b) { return a + b; })
359+
if (typeofList === TypeListEnum.ToDay) {
360+
date = date || todayLocalDate();
361+
total = tabs.reduce((tot, tab) => {
362+
let item = tab.days.find((x) => x.date == date);
363+
return tot + (item.counter || 0);
364+
}, 0);
365+
} else if (typeofList === TypeListEnum.All) {
366+
total = tabs.reduce((tot, tab) => tot + tab.counter, 0);
332367
}
333-
if (currentTypeOfList === TypeListEnum.All) {
334-
var summaryTimeList = tabs.map(function (a) { return a.summaryTime; });
335-
total = summaryTimeList.reduce(function (a, b) { return a + b; })
368+
369+
return total;
370+
}
371+
372+
373+
function getTotalTime(tabs, typeOfList, date) {
374+
var total;
375+
switch(typeOfList){
376+
case TypeListEnum.ByDays:
377+
case TypeListEnum.ToDay:
378+
date = date || todayLocalDate();
379+
var summaryTimeList = tabs.map(function (a) { return a.days.find(s => s.date === date).summary; });
380+
total = summaryTimeList.reduce(function (a, b) { return a + b; })
381+
break;
382+
case TypeListEnum.All:
383+
var summaryTimeList = tabs.map(function (a) { return a.summaryTime; });
384+
total = summaryTimeList.reduce(function (a, b) { return a + b; })
385+
break;
386+
default:
336387
}
388+
337389
return total;
338390
}
339391

@@ -356,26 +408,19 @@ function getCurrentTab() {
356408
return chrome.extension.getBackgroundPage().currentTab;
357409
}
358410

359-
function addTabForChart(tabsForChart, url, time, counter) {
360-
tabsForChart.push({
361-
'url': url.host,
362-
'percentage': getPercentageForChart(time),
363-
'summary': time,
364-
'visits': counter
365-
});
366-
}
367-
368-
function addTabOthersForChart(tabsForChart, summaryTime) {
369-
var tab = tabsForChart.find(x => x.url == 'Others');
411+
function addTabForChart(tabsForChart, url, summaryTime, counter) {
412+
var tab = tabsForChart.find(x => x.url == url);
370413
if (tab === undefined) {
371414
tabsForChart.push({
372-
'url': 'Others',
415+
'url': url,
373416
'percentage': getPercentageForChart(summaryTime),
374-
'summary': summaryTime
417+
'summary': summaryTime,
418+
'visits': counter
375419
});
376420
} else {
377421
tab['summary'] += summaryTime;
378422
tab['percentage'] = getPercentageForChart(tab['summary']);
423+
tab['visits'] += counter;
379424
}
380425
}
381426

@@ -517,12 +562,15 @@ function getTabsFromStorageByDay(day, blockName) {
517562
content.classList.add('content-inner');
518563
content.id = blockName + '_content';
519564
document.getElementById(blockName).appendChild(content);
520-
for (var i = 0; i < targetTabs.length; i++) {
521-
var summaryTime, counter;
522-
summaryTime = targetTabs[i].days.find(x => x.date == day).summary;
523-
counter = targetTabs[i].days.find(x => x.date == day).counter;
524565

525-
ui.addLineToTableOfSite(targetTabs[i], currentTab, summaryTime, TypeListEnum.ByDays, counter, blockName + '_content');
566+
var tabGroups = getTabGroups(targetTabs, TypeListEnum.ByDays, day);
567+
568+
for (const tabGroup of tabGroups){
569+
var summaryTime = tabGroup.summaryTime;
570+
var counter = tabGroup.counter;
571+
const targetTab = tabGroup.tabs[0];
572+
573+
ui.addLineToTableOfSite(targetTab, currentTab, summaryTime, TypeListEnum.ByDays, counter, blockName + '_content');
526574
}
527575
}
528576

0 commit comments

Comments
 (0)