mirror of
https://github.com/orangecoding/fredy.git
synced 2026-06-16 12:31:07 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d09770dae2 | ||
|
|
248e4d2562 |
@@ -15,55 +15,67 @@ const deviceId = getUniqueId() || 'N/A';
|
|||||||
const version = await getPackageVersion();
|
const version = await getPackageVersion();
|
||||||
const FREDY_TRACKING_URL = 'https://fredy.orange-coding.net/tracking';
|
const FREDY_TRACKING_URL = 'https://fredy.orange-coding.net/tracking';
|
||||||
|
|
||||||
export const trackMainEvent = async () => {
|
const staticTrackingData = {
|
||||||
|
operatingSystem: os.platform(),
|
||||||
|
osVersion: os.release(),
|
||||||
|
arch: process.arch,
|
||||||
|
language: process.env.LANG || 'en',
|
||||||
|
nodeVersion: process.version || 'N/A',
|
||||||
|
deviceId,
|
||||||
|
version,
|
||||||
|
};
|
||||||
|
|
||||||
|
const shouldTrack = async () => {
|
||||||
|
const settings = await getSettings();
|
||||||
|
return settings.analyticsEnabled && !inDevMode();
|
||||||
|
};
|
||||||
|
|
||||||
|
const sendTrackingData = async (endpoint, payload) => {
|
||||||
try {
|
try {
|
||||||
const settings = await getSettings();
|
const response = await fetch(`${FREDY_TRACKING_URL}${endpoint}`, {
|
||||||
if (settings.analyticsEnabled && !inDevMode()) {
|
method: 'POST',
|
||||||
const activeProvider = new Set();
|
headers: { 'Content-Type': 'application/json' },
|
||||||
const activeAdapter = new Set();
|
body: payload ? JSON.stringify(payload) : undefined,
|
||||||
|
});
|
||||||
const jobs = getJobs();
|
if (!response.ok) {
|
||||||
|
logger.warn(`Error sending tracking data to ${endpoint}. Status: ${response.status}`);
|
||||||
if (jobs != null && jobs.length > 0) {
|
|
||||||
jobs.forEach((job) => {
|
|
||||||
job.provider.forEach((provider) => activeProvider.add(provider.id));
|
|
||||||
job.notificationAdapter.forEach((adapter) => activeAdapter.add(adapter.id));
|
|
||||||
});
|
|
||||||
|
|
||||||
const trackingObj = enrichTrackingObject({
|
|
||||||
adapter: Array.from(activeAdapter),
|
|
||||||
provider: Array.from(activeProvider),
|
|
||||||
});
|
|
||||||
|
|
||||||
await fetch(`${FREDY_TRACKING_URL}/main`, {
|
|
||||||
method: 'POST',
|
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
body: JSON.stringify(trackingObj),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.warn('Error sending tracking data', error);
|
logger.warn(`Error sending tracking data to ${endpoint}`, error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const trackMainEvent = async () => {
|
||||||
|
if (!(await shouldTrack())) return;
|
||||||
|
|
||||||
|
const activeProvider = new Set();
|
||||||
|
const activeAdapter = new Set();
|
||||||
|
|
||||||
|
const jobs = getJobs();
|
||||||
|
|
||||||
|
if (jobs != null && jobs.length > 0) {
|
||||||
|
jobs.forEach((job) => {
|
||||||
|
job.provider.forEach((provider) => activeProvider.add(provider.id));
|
||||||
|
job.notificationAdapter.forEach((adapter) => activeAdapter.add(adapter.id));
|
||||||
|
});
|
||||||
|
|
||||||
|
const trackingObj = await enrichTrackingObject({
|
||||||
|
adapter: Array.from(activeAdapter),
|
||||||
|
provider: Array.from(activeProvider),
|
||||||
|
});
|
||||||
|
|
||||||
|
await sendTrackingData('/main', trackingObj);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const trackFeature = async (feature) => {
|
export const trackFeature = async (feature) => {
|
||||||
try {
|
if (!(await shouldTrack())) return;
|
||||||
const settings = await getSettings();
|
|
||||||
if (settings.analyticsEnabled && !inDevMode()) {
|
|
||||||
const trackingObj = await enrichTrackingObject({
|
|
||||||
feature,
|
|
||||||
});
|
|
||||||
|
|
||||||
await fetch(`${FREDY_TRACKING_URL}/feature`, {
|
const trackingObj = await enrichTrackingObject({
|
||||||
method: 'POST',
|
feature,
|
||||||
headers: { 'Content-Type': 'application/json' },
|
});
|
||||||
body: JSON.stringify(trackingObj),
|
|
||||||
});
|
await sendTrackingData('/feature', trackingObj);
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
logger.warn('Error tracking feature', error);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,34 +84,17 @@ export const trackFeature = async (feature) => {
|
|||||||
export async function trackDemoAccessed() {
|
export async function trackDemoAccessed() {
|
||||||
const settings = await getSettings();
|
const settings = await getSettings();
|
||||||
if (settings.analyticsEnabled && !inDevMode() && settings.demoMode) {
|
if (settings.analyticsEnabled && !inDevMode() && settings.demoMode) {
|
||||||
try {
|
const trackingObj = await enrichTrackingObject({});
|
||||||
await fetch(`${FREDY_TRACKING_URL}/demo/accessed`, {
|
await sendTrackingData('/demo/accessed', trackingObj);
|
||||||
method: 'POST',
|
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
logger.warn('Error sending tracking data', error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function enrichTrackingObject(trackingObject) {
|
async function enrichTrackingObject(trackingObject) {
|
||||||
const settings = await getSettings();
|
const settings = await getSettings();
|
||||||
const operatingSystem = os.platform();
|
|
||||||
const osVersion = os.release();
|
|
||||||
const arch = process.arch;
|
|
||||||
const language = process.env.LANG || 'en';
|
|
||||||
const nodeVersion = process.version || 'N/A';
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...trackingObject,
|
...trackingObject,
|
||||||
|
...staticTrackingData,
|
||||||
isDemo: settings.demoMode,
|
isDemo: settings.demoMode,
|
||||||
operatingSystem,
|
|
||||||
osVersion,
|
|
||||||
arch,
|
|
||||||
nodeVersion,
|
|
||||||
language,
|
|
||||||
deviceId,
|
|
||||||
version,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "fredy",
|
"name": "fredy",
|
||||||
"version": "19.3.5",
|
"version": "19.3.6",
|
||||||
"description": "[F]ind [R]eal [E]states [d]amn eas[y].",
|
"description": "[F]ind [R]eal [E]states [d]amn eas[y].",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prepare": "husky",
|
"prepare": "husky",
|
||||||
|
|||||||
@@ -2,30 +2,29 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 140px;
|
height: 140px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
transition: transform 0.2s, box-shadow 0.2s;
|
transition: transform 0.2s;
|
||||||
background-color: rgba(36, 36, 36, 0.9);
|
background-color: rgba(36, 36, 36, 0.9);
|
||||||
backdrop-filter: blur(8px);
|
backdrop-filter: blur(8px);
|
||||||
border: 1px solid var(--semi-color-border);
|
border: 1px solid var(--semi-color-border);
|
||||||
|
--pulse-color: rgba(255, 255, 255, 0.1);
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
overflow: visible;
|
||||||
|
|
||||||
&:hover {
|
&::after {
|
||||||
transform: translateY(-4px);
|
content: '';
|
||||||
background-color: rgba(36, 36, 36, 1);
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
&.blue {
|
left: 0;
|
||||||
box-shadow: 0 8px 24px -5px var(--semi-color-primary);
|
right: 0;
|
||||||
}
|
bottom: 0;
|
||||||
&.orange {
|
border-radius: inherit;
|
||||||
box-shadow: 0 8px 24px -5px var(--semi-color-warning);
|
box-shadow: 0 4px 25px -2px var(--pulse-color);
|
||||||
}
|
opacity: 0;
|
||||||
&.green {
|
animation: pulse 5s infinite ease-in-out;
|
||||||
box-shadow: 0 8px 24px -5px var(--semi-color-success);
|
pointer-events: none;
|
||||||
}
|
z-index: -1;
|
||||||
&.purple {
|
will-change: opacity;
|
||||||
box-shadow: 0 8px 24px -5px var(--semi-color-info);
|
|
||||||
}
|
|
||||||
&.gray {
|
|
||||||
box-shadow: 0 8px 24px -5px rgba(255, 255, 255, 0.4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&__icon {
|
&__icon {
|
||||||
@@ -46,22 +45,36 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&.blue {
|
&.blue {
|
||||||
box-shadow: 0 4px 20px -5px var(--semi-color-primary);
|
--pulse-color: var(--semi-color-primary);
|
||||||
|
box-shadow: 0 4px 20px -5px var(--pulse-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.orange {
|
&.orange {
|
||||||
box-shadow: 0 4px 20px -5px var(--semi-color-warning);
|
--pulse-color: var(--semi-color-warning);
|
||||||
|
box-shadow: 0 4px 20px -5px var(--pulse-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.green {
|
&.green {
|
||||||
box-shadow: 0 4px 20px -5px var(--semi-color-success);
|
--pulse-color: var(--semi-color-success);
|
||||||
|
box-shadow: 0 4px 20px -5px var(--pulse-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.purple {
|
&.purple {
|
||||||
box-shadow: 0 4px 20px -5px var(--semi-color-info);
|
--pulse-color: var(--semi-color-info);
|
||||||
|
box-shadow: 0 4px 20px -5px var(--pulse-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.gray {
|
&.gray {
|
||||||
box-shadow: 0 4px 20px -5px rgba(255, 255, 255, 0.2);
|
--pulse-color: rgba(255, 255, 255, 0.2);
|
||||||
|
box-shadow: 0 4px 20px -5px var(--pulse-color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
0%, 100% {
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user