Skip to content

Commit 57c3259

Browse files
committed
Time intervals
1 parent df5bc3f commit 57c3259

File tree

6 files changed

+42
-34
lines changed

6 files changed

+42
-34
lines changed

src/compositions/daily-intervals.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { TimeInterval } from "../entity/time-interval";
22
import { injecStorage } from "../storage/inject-storage";
3-
import { StorageParams } from "../storage/storage-params";
3+
import { StorageDeserializeParam, StorageParams } from "../storage/storage-params";
44
import { todayLocalDate } from "../utils/common";
55

66
export async function closeInterval(domain:string | null): Promise<void>{
77
if (domain == null) return;
88
const storage = injecStorage();
9-
const timeIntervalList = await storage.getValue(StorageParams.TIMEINTERVAL_LIST) as TimeInterval[];
9+
const timeIntervalList = await storage.getDeserializeList(StorageDeserializeParam.TIMEINTERVAL_LIST) as TimeInterval[];
1010
const item = timeIntervalList?.find(x => x.domain === domain && x.day == todayLocalDate());
1111
item?.closeInterval();
1212
await storage.saveValue(StorageParams.TIMEINTERVAL_LIST, timeIntervalList);
@@ -16,18 +16,22 @@ export async function addInterval(domain:string | null): Promise<void>{
1616
if (domain == null) return;
1717

1818
const storage = injecStorage();
19-
const timeIntervalList = await storage.getValue(StorageParams.TIMEINTERVAL_LIST) as TimeInterval[];
19+
let timeIntervalList = await storage.getDeserializeList(StorageDeserializeParam.TIMEINTERVAL_LIST) as TimeInterval[];
20+
if (timeIntervalList == undefined)
21+
timeIntervalList = [];
2022
const item = timeIntervalList?.find(x => x.domain === domain && x.day == todayLocalDate());
2123
if (item != undefined) {
2224
if (item.day == todayLocalDate())
2325
item.addInterval();
2426
else {
25-
const newInterval = new TimeInterval(todayLocalDate(), domain);
27+
const newInterval = new TimeInterval();
28+
newInterval.init(todayLocalDate(), domain);
2629
newInterval.addInterval();
2730
timeIntervalList.push(newInterval);
2831
}
2932
} else {
30-
const newInterval = new TimeInterval(todayLocalDate(), domain);
33+
const newInterval = new TimeInterval();
34+
newInterval.init(todayLocalDate(), domain);
3135
newInterval.addInterval();
3236
timeIntervalList.push(newInterval);
3337
}

src/entity/ISerializable.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
interface ISerializable<T> {
2+
deserialize(input: Object): T;
3+
}

src/entity/tab.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import { todayLocalDate } from "../utils/common";
2+
import { logger } from "../compositions/logger";
23

3-
interface Serializable<T> {
4-
deserialize(input: Object): T;
5-
}
6-
7-
export class Tab implements Serializable<Tab> {
4+
export class Tab implements ISerializable<Tab> {
85
url: string = '';
96
favicon: string = '';
107
summaryTime: number = 0;
@@ -17,7 +14,8 @@ export class Tab implements Serializable<Tab> {
1714
}
1815

1916
incSummaryTime() :void {
20-
this.summaryTime += 1;
17+
this.summaryTime += 1;
18+
//logger.log(`Summary time ${this.url} - ${this.summaryTime}`);
2119

2220
const day = this.days.find(x => x.date == todayLocalDate());
2321
if (day === undefined)
@@ -27,6 +25,7 @@ export class Tab implements Serializable<Tab> {
2725

2826
incCounter() :void {
2927
this.counter +=1;
28+
logger.log(`Counter ${this.url} - ${this.counter}`);
3029
const day = this.days.find(x => x.date == todayLocalDate());
3130
if (day === undefined)
3231
this.addNewDay();
@@ -51,7 +50,7 @@ export class Tab implements Serializable<Tab> {
5150
}
5251
}
5352

54-
export class TabDay implements Serializable<TabDay> {
53+
export class TabDay implements ISerializable<TabDay> {
5554
counter: number = 0;
5655
date: string = '';
5756
summary: number = 0;

src/entity/time-interval.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
export class TimeInterval {
2-
domain: string;
1+
import { logger } from "../compositions/logger";
2+
3+
export class TimeInterval implements ISerializable<TimeInterval> {
4+
domain: string = '';
35
intervals: any;
4-
day: string;
6+
day: string = '';
57

6-
constructor(day:string, domain:string) {
8+
init(day:string, domain:string) {
79
this.domain = domain;
810
this.intervals = [];
911
this.day = day;
@@ -12,19 +14,29 @@ export class TimeInterval {
1214
addInterval() {
1315
const stringDate = this.getCurrentStringDate();
1416
this.intervals.push(stringDate + '-' + stringDate);
17+
logger.log(`Add interval ${this.domain} - ${stringDate} - ${stringDate}`);
1518
}
1619

1720
closeInterval() {
1821
const stringDate = this.getCurrentStringDate();
1922
const currentInterval = this.intervals[this.intervals.length - 1];
20-
if (!currentInterval) {
23+
if (currentInterval != null) {
2124
if (currentInterval.split('-')[0] == currentInterval.split('-')[1]) {
2225
this.intervals.pop();
2326
this.intervals.push(currentInterval.split('-')[0] + '-' + stringDate);
27+
logger.log(`Close interval ${this.domain} - ${currentInterval.split('-')[0]} - ${stringDate}`);
2428
}
2529
}
2630
}
2731

32+
deserialize(input: TimeInterval): TimeInterval {
33+
this.domain = input.domain;
34+
this.day = input.day;
35+
this.intervals = input.intervals;
36+
37+
return this;
38+
}
39+
2840
private getCurrentStringDate():string{
2941
const date = new Date();
3042
return date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();

src/repository/tabs-repository-interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ import Browser from 'webextension-polyfill';
44
export interface ITabsRepository {
55
getTabs(): Tab[];
66
getTab(domain:string): Tab | undefined;
7-
addTab(tab:Browser.Tabs.Tab): Promise<void>;
7+
addTab(tab:Browser.Tabs.Tab): Promise<Tab | null>;
88
}

src/repository/tabs-repository.ts

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@ import { injecStorage } from "../storage/inject-storage";
55
import { isValidPage } from '../compositions/valid-page';
66
import { isInBlackList } from "../compositions/black-list";
77
import { extractHostname } from "../compositions/extract-hostname";
8-
import { addInterval, closeInterval } from "../compositions/daily-intervals";
9-
import { ActiveTab } from "../compositions/activeTab"
8+
import { StorageDeserializeParam } from "../storage/storage-params";
109

1110
export class TabsRepository implements ITabsRepository {
1211
private tabs: Tab[];
13-
private activeTab = ActiveTab.getInstance();
1412

1513
constructor() {
1614
this.tabs = [];
1715
}
1816

1917
async initAsync(){
20-
this.tabs = await injecStorage().getTabs();
18+
this.tabs = await injecStorage().getDeserializeList(StorageDeserializeParam.TABS) as Tab[];
2119
}
2220

2321
getTabs(): Tab[] {
@@ -28,7 +26,7 @@ export class TabsRepository implements ITabsRepository {
2826
return this.tabs?.find(x => x.url === domain);
2927
}
3028

31-
async addTab(tab: Browser.Tabs.Tab): Promise<void> {
29+
async addTab(tab: Browser.Tabs.Tab): Promise<Tab | undefined> {
3230
if (isValidPage(tab)) {
3331
if (tab.id && (tab.id != 0)) {
3432
const domain = extractHostname(tab.url);
@@ -44,20 +42,12 @@ export class TabsRepository implements ITabsRepository {
4442
const newTab = new Tab();
4543
newTab.init(domain, favicon);
4644
this.tabs.push(newTab);
47-
}
48-
else {
49-
tabFromStorage.incCounter();
50-
if (this.activeTab.getActiveTab() != domain) this.setCurrentActiveTab(domain);
51-
await closeInterval(this.activeTab.getActiveTab());
52-
await addInterval(this.activeTab.getActiveTab());
45+
return newTab;
5346
}
5447
}
55-
else await closeInterval(this.activeTab.getActiveTab());
5648
}
57-
} else await closeInterval(this.activeTab.getActiveTab());
58-
}
49+
}
5950

60-
private setCurrentActiveTab(domain:string){
61-
this.activeTab.setActiveTab(domain);
51+
return undefined;
6252
}
6353
}

0 commit comments

Comments
 (0)