11/* eslint-disable global-require */
2+ import fs from 'fs' ;
3+ import path from 'path' ;
24import { downloadFile } from './utils/webutils' ;
35
46// Here we can access optimizable filters and its optimization percentages
57// eslint-disable-next-line max-len
6- const OPTIMIZATION_PERCENT_URL = 'https://chrome.adtidy.org/optimization_config/percent.json?key=4DDBE80A3DA94D819A00523252FB6380' ;
7- // eslint-disable-next-line max-len
8- const OPTIMIZATION_STATS_URL = 'https://chrome.adtidy.org/filters/{0}/stats.json?key=4DDBE80A3DA94D819A00523252FB6380' ;
8+ const OPTIMIZATION_KEY = '4DDBE80A3DA94D819A00523252FB6380' ;
9+ export const OPTIMIZATION_PERCENT_URL = `https://chrome.adtidy.org/optimization_config/percent.json?key=${ OPTIMIZATION_KEY } ` ;
10+
11+ export const getOptimizationStatsUrl = ( filterId ) =>
12+ // eslint-disable-next-line implicit-arrow-linebreak
13+ `https://chrome.adtidy.org/filters/${ filterId } /stats.json?key=${ OPTIMIZATION_KEY } ` ;
14+
15+ const downloadOptimizationStats = ( filterId ) =>
16+ // eslint-disable-next-line implicit-arrow-linebreak
17+ downloadFile ( getOptimizationStatsUrl ( filterId ) ) ;
918
1019let optimizationEnabled = true ;
1120
1221let filtersOptimizationPercent = null ;
1322
23+ let localOptimizationConfigDir = null ;
24+
25+ export const setLocalOptimizationConfigDir = ( dir ) => {
26+ localOptimizationConfigDir = dir ;
27+ } ;
28+
1429/**
1530 * Downloads and caches filters optimization percentages configuration
1631 */
@@ -20,7 +35,11 @@ export const getFiltersOptimizationPercent = () => {
2035 }
2136
2237 if ( filtersOptimizationPercent === null ) {
23- filtersOptimizationPercent = JSON . parse ( downloadFile ( OPTIMIZATION_PERCENT_URL ) ) ;
38+ const content = localOptimizationConfigDir
39+ ? fs . readFileSync ( path . join ( localOptimizationConfigDir , 'percent.json' ) , 'utf-8' )
40+ : downloadFile ( OPTIMIZATION_PERCENT_URL ) ;
41+
42+ filtersOptimizationPercent = JSON . parse ( content ) ;
2443 }
2544
2645 if ( filtersOptimizationPercent . config . length === 0 ) {
@@ -40,12 +59,17 @@ export const getFilterOptimizationConfig = (filterId) => {
4059 }
4160
4261 // config: [{filterId: 1, percent: 45}, ...]
43- const filterOptimizationPercent = getFiltersOptimizationPercent ( ) . config
62+ const filterOptimizationPercent = getFiltersOptimizationPercent ( )
63+ . config // eslint-disable-next-line
4464 . find ( ( config ) => config . filterId === filterId ) ;
4565
4666 let optimizationConfig = null ;
4767 if ( optimizationEnabled && filterOptimizationPercent ) {
48- optimizationConfig = JSON . parse ( downloadFile ( OPTIMIZATION_STATS_URL . replace ( '{0}' , filterId ) ) ) ;
68+ const content = localOptimizationConfigDir
69+ ? fs . readFileSync ( path . join ( localOptimizationConfigDir , `${ filterId } _stats.json` ) , 'utf-8' )
70+ : downloadOptimizationStats ( filterId ) ;
71+
72+ optimizationConfig = JSON . parse ( content ) ;
4973 if ( ! optimizationConfig || ! optimizationConfig . groups || optimizationConfig . groups . length === 0 ) {
5074 throw new Error ( `Unable to retrieve optimization stats for ${ filterId } ` ) ;
5175 }
0 commit comments