Skip to content

Commit b6c71b1

Browse files
authored
Merge pull request Stigmatoz#110 from Stigmatoz/review
Review
2 parents 2b0c1bd + 64c44c7 commit b6c71b1

File tree

11 files changed

+126
-7
lines changed

11 files changed

+126
-7
lines changed

src/_locales/de/messages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,5 +231,9 @@
231231
},
232232
"timeChartDescription": {
233233
"message": "Dies ist eine stundenweise Zeitleiste für den Tag"
234+
},
235+
"enjoyAndReview": {
236+
"message": "Genießen Sie die Erweiterung?",
237+
"description": "Bewerten Web Activity Time Tracker"
234238
}
235239
}

src/_locales/en/messages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,5 +231,9 @@
231231
},
232232
"timeChartDescription": {
233233
"message": "This is a chart of time during the day by the hour"
234+
},
235+
"enjoyAndReview": {
236+
"message": "Enjoying the extension?",
237+
"description": "Rate Web Activity Time Tracker"
234238
}
235239
}

src/_locales/ru/messages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,5 +231,9 @@
231231
},
232232
"timeChartDescription": {
233233
"message": "Это график времени в течение дня по часам"
234+
},
235+
"enjoyAndReview": {
236+
"message": "Вам нравится расширение?",
237+
"description": "Оцените Web Activity Time Tracker"
234238
}
235239
}

src/assets/icons/close.svg

Lines changed: 7 additions & 0 deletions
Loading

src/background.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@ import { logger } from './compositions/logger';
44
import { scheduleJobs } from './jobs/sheduler';
55
import { Settings } from './compositions/settings';
66
import { StorageParams } from './storage/storage-params';
7+
import { injecStorage } from './storage/inject-storage';
8+
import { todayLocalDate } from './utils/date';
79

810
logger.log('Start background script');
911

1012
self.onerror = err => {
1113
console.error('Unhandled error:', err);
1214
};
1315

14-
Browser.runtime.onInstalled.addListener(details => {
16+
Browser.runtime.onInstalled.addListener(async details => {
1517
logger.log('Extension installed:', details);
18+
const settingsStorage = injecStorage();
19+
await settingsStorage.saveValue(StorageParams.INSTALL_DATE, todayLocalDate());
1620
});
1721

1822
Browser.storage.onChanged.addListener((changes, namespace) => {

src/components/Review.vue

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<template>
2+
<div class="review-block" v-if="showReview">
3+
<p>{{ t('enjoyAndReview.message') }}</p>
4+
<img height="15" src="../assets/icons/close.svg" @click="closeBlock()" />
5+
<input type="button" :value="t('enjoyAndReview.description')" @click="openStore()" />
6+
</div>
7+
</template>
8+
9+
<script lang="ts">
10+
export default {
11+
name: 'Review',
12+
};
13+
</script>
14+
15+
<script lang="ts" setup>
16+
import { onMounted, ref } from 'vue';
17+
import { useI18n } from 'vue-i18n';
18+
import { injecStorage } from '../storage/inject-storage';
19+
import { StorageParams } from '../storage/storage-params';
20+
import { addDays, startOfToday } from 'date-fns';
21+
import { addHours } from 'date-fns/esm';
22+
23+
const { t } = useI18n();
24+
25+
const settingsStorage = injecStorage();
26+
const PROMPT_AT_TIME_OF_DAY = 12;
27+
const ADD_DAYS_FIRST = 2;
28+
const ADD_DAYS_NEXT = 5;
29+
const CHROME_STORE_URL = `https://chrome.google.com/webstore/detail/web-activity-time-tracker/${__APP_ID__}/reviews`;
30+
31+
const showReview = ref<boolean>();
32+
33+
onMounted(async () => {
34+
showReview.value = false;
35+
if (__BROWSER__ == 'chrome') {
36+
const reviewDate = await settingsStorage.getValue(StorageParams.REVIEW_DATE);
37+
38+
if (reviewDate == undefined) {
39+
let nextTime = await settingsStorage.getValue(StorageParams.REVIEW_PROMPT_AT);
40+
if (nextTime == undefined) {
41+
await settingsStorage.saveValue(
42+
StorageParams.REVIEW_PROMPT_AT,
43+
addDays(addHours(startOfToday(), PROMPT_AT_TIME_OF_DAY), ADD_DAYS_FIRST).toString(),
44+
);
45+
} else {
46+
nextTime = new Date(nextTime);
47+
if (nextTime < new Date()) showReview.value = true;
48+
}
49+
}
50+
}
51+
});
52+
53+
async function closeBlock() {
54+
showReview.value = false;
55+
await settingsStorage.saveValue(
56+
StorageParams.REVIEW_PROMPT_AT,
57+
addDays(addHours(startOfToday(), PROMPT_AT_TIME_OF_DAY), ADD_DAYS_NEXT).toString(),
58+
);
59+
}
60+
61+
async function openStore() {
62+
window.open(CHROME_STORE_URL, '_blank');
63+
await settingsStorage.saveValue(StorageParams.REVIEW_DATE, new Date().toString());
64+
}
65+
</script>
66+
67+
<style scoped>
68+
.review-block {
69+
width: -webkit-fill-available;
70+
position: absolute;
71+
bottom: 0;
72+
padding: 8px 20px;
73+
font-size: 14px;
74+
background-color: #efefef;
75+
}
76+
.review-block input[type='button'] {
77+
margin: 0 20px 0 0;
78+
float: right;
79+
width: auto;
80+
}
81+
.review-block p {
82+
display: inline-block;
83+
margin: 8px;
84+
font-size: 17px;
85+
}
86+
.review-block img {
87+
padding: 9px 0 0 0;
88+
cursor: pointer;
89+
float: right;
90+
}
91+
</style>

src/components/TimeIntervalChart.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ function fillData(timeIntervalList: TimeInterval[]) {
141141
142142
objects.forEach(obj => {
143143
const emptyArray: number[] = Object.assign([], tempArray);
144-
emptyArray[obj.hour] = Number((obj.summary / 60).toFixed(4));
144+
emptyArray[obj.hour] = Number(obj.summary / 60);
145145
result.push({
146146
backgroundColor: ['#5668e2'],
147147
data: emptyArray,

src/pages/Popup.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
</section>
7070
</div>
7171
</div>
72+
<Review />
7273
</template>
7374

7475
<script lang="ts" setup>
@@ -77,6 +78,7 @@ import { useI18n } from 'vue-i18n';
7778
import Browser from 'webextension-polyfill';
7879
import TabList from '../components/TabList.vue';
7980
import ByDays from '../components/ByDays.vue';
81+
import Review from '../components/Review.vue';
8082
import { SettingsTab, TypeOfList } from '../utils/enums';
8183
8284
const { t } = useI18n();

src/storage/storage-params.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ export enum StorageParams {
1414
BLOCK_DEFERRAL_TIME = 'view_block_deferral_time',
1515
DAILY_SUMMARY_NOTIFICATION_TIME = 'daily-summary-notification-time',
1616
DAILY_NOTIFICATION = 'daily_notification',
17+
REVIEW_DATE = 'review_date',
18+
REVIEW_PROMPT_AT = 'review_prompt_at',
19+
INSTALL_DATE = 'install-date',
1720
}
1821

1922
export enum StorageDeserializeParam {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
declare var __EXTENSION_MODE__: ExtensionMode;
33
declare var __DEV__: boolean;
44
declare var __PROD__: boolean;
5-
declare var __EXTENSION_VERSION__: string;
6-
declare var __REAL_APP_ID__: string;
5+
declare var __APP_ID__: string;
6+
declare var __BROWSER__: string;

0 commit comments

Comments
 (0)