Skip to content

Commit af5de27

Browse files
committed
refactor: update size values, enhance ruleset types, and improve UI components for better functionality
1 parent 9ee9419 commit af5de27

File tree

10 files changed

+142
-180
lines changed

10 files changed

+142
-180
lines changed

frontend/src/assets/styles/utilities/size.less

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@size-values: 0, 8, 10, 12, 16, 18, 24, 32, 64, 128, 256;
1+
@size-values: 0, 8, 10, 12, 16, 18, 24, 32, 42, 64, 128, 256;
22
@percent-values: 25, 50, 60, 75, 90, 100;
33

44
.generate-size(@i: 1) when (@i <= length(@size-values)) {

frontend/src/constant/app.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export const ScheduledTasksFilePath = 'data/scheduledtasks.yaml'
2121

2222
export const PluginHubFilePath = 'data/.cache/plugin-list.json'
2323

24+
export const RulesetHubFilePath = 'data/.cache/ruleset-list.json'
25+
2426
export const DefaultFontFamily =
2527
'system-ui, "Microsoft YaHei UI", "Source Han Sans CN", "Twemoji Mozilla", sans-serif'
2628

frontend/src/stores/rulesets.ts

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ref } from 'vue'
33
import { parse } from 'yaml'
44

55
import { Copyfile, Readfile, Writefile, HttpGet, Download, FileExists } from '@/bridge'
6-
import { RulesetsFilePath, EmptyRuleSet } from '@/constant'
6+
import { RulesetsFilePath, EmptyRuleSet, RulesetHubFilePath } from '@/constant'
77
import { RulesetBehavior, RulesetFormat } from '@/enums/kernel'
88
import {
99
debounce,
@@ -14,7 +14,7 @@ import {
1414
asyncPool,
1515
} from '@/utils'
1616

17-
export type RuleSetType = {
17+
export interface RuleSet {
1818
id: string
1919
name: string
2020
updateTime: number
@@ -29,20 +29,30 @@ export type RuleSetType = {
2929
updating?: boolean
3030
}
3131

32+
export interface RulesetHub {
33+
geosite: string
34+
geoip: string
35+
list: { name: string; type: 'geosite' | 'geoip'; description: string; count: number }[]
36+
}
37+
3238
export const useRulesetsStore = defineStore('rulesets', () => {
33-
const rulesets = ref<RuleSetType[]>([])
39+
const rulesets = ref<RuleSet[]>([])
40+
const rulesetHub = ref<RulesetHub>({ geosite: '', geoip: '', list: [] })
3441

3542
const setupRulesets = async () => {
3643
const data = await ignoredError(Readfile, RulesetsFilePath)
3744
data && (rulesets.value = parse(data))
45+
46+
const list = await ignoredError(Readfile, RulesetHubFilePath)
47+
list && (rulesetHub.value = JSON.parse(list))
3848
}
3949

4050
const saveRulesets = debounce(async () => {
4151
const r = omitArray(rulesets.value, ['updating'])
4252
await Writefile(RulesetsFilePath, stringifyNoFolding(r))
4353
}, 500)
4454

45-
const addRuleset = async (r: RuleSetType) => {
55+
const addRuleset = async (r: RuleSet) => {
4656
rulesets.value.push(r)
4757
try {
4858
await saveRulesets()
@@ -64,7 +74,7 @@ export const useRulesetsStore = defineStore('rulesets', () => {
6474
}
6575
}
6676

67-
const editRuleset = async (id: string, r: RuleSetType) => {
77+
const editRuleset = async (id: string, r: RuleSet) => {
6878
const idx = rulesets.value.findIndex((v) => v.id === id)
6979
if (idx === -1) return
7080
const backup = rulesets.value.splice(idx, 1, r)[0]
@@ -76,7 +86,7 @@ export const useRulesetsStore = defineStore('rulesets', () => {
7686
}
7787
}
7888

79-
const _doUpdateRuleset = async (r: RuleSetType) => {
89+
const _doUpdateRuleset = async (r: RuleSet) => {
8090
if (r.format === RulesetFormat.Yaml) {
8191
let body = ''
8292
let isExist = true
@@ -140,7 +150,7 @@ export const useRulesetsStore = defineStore('rulesets', () => {
140150
const updateRulesets = async () => {
141151
let needSave = false
142152

143-
const update = async (r: RuleSetType) => {
153+
const update = async (r: RuleSet) => {
144154
try {
145155
r.updating = true
146156
await _doUpdateRuleset(r)
@@ -159,6 +169,20 @@ export const useRulesetsStore = defineStore('rulesets', () => {
159169
if (needSave) saveRulesets()
160170
}
161171

172+
const rulesetHubLoading = ref(false)
173+
const updateRulesetHub = async () => {
174+
rulesetHubLoading.value = true
175+
try {
176+
const { body } = await HttpGet<string>(
177+
'https://github.com/GUI-for-Cores/Ruleset-Hub/releases/download/latest/meta-full.json',
178+
)
179+
rulesetHub.value = JSON.parse(body)
180+
await Writefile(RulesetHubFilePath, body)
181+
} finally {
182+
rulesetHubLoading.value = false
183+
}
184+
}
185+
162186
const getRulesetById = (id: string) => rulesets.value.find((v) => v.id === id)
163187

164188
const getRulesetByName = (name: string) => rulesets.value.find((v) => v.name === name)
@@ -174,5 +198,9 @@ export const useRulesetsStore = defineStore('rulesets', () => {
174198
updateRulesets,
175199
getRulesetById,
176200
getRulesetByName,
201+
202+
rulesetHub,
203+
rulesetHubLoading,
204+
updateRulesetHub,
177205
}
178206
})

frontend/src/views/ProfilesView/components/RulesConfig.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
BuiltInOutbound,
1111
} from '@/constant'
1212
import { RulesetBehavior, RulesetFormat } from '@/enums/kernel'
13-
import { type ProfileType, useRulesetsStore, type RuleSetType } from '@/stores'
13+
import { type ProfileType, useRulesetsStore, type RuleSet } from '@/stores'
1414
import { deepClone, sampleID, generateRule, message } from '@/utils'
1515
1616
interface Props {
@@ -99,7 +99,7 @@ const handleAddEnd = () => {
9999
}
100100
}
101101
102-
const handleUseRuleset = (ruleset: RuleSetType) => {
102+
const handleUseRuleset = (ruleset: RuleSet) => {
103103
fields.value.payload = ruleset.id
104104
fields.value['no-resolve'] = ruleset.behavior === RulesetBehavior.Ipcidr
105105
}

frontend/src/views/RulesetsView/components/RulesetForm.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useI18n } from 'vue-i18n'
44
55
import { RulesetFormatOptions, RulesetBehaviorOptions } from '@/constant'
66
import { RulesetBehavior, RulesetFormat } from '@/enums/kernel'
7-
import { type RuleSetType, useRulesetsStore } from '@/stores'
7+
import { type RuleSet, useRulesetsStore } from '@/stores'
88
import { deepClone, sampleID, message } from '@/utils'
99
1010
import Button from '@/components/Button/index.vue'
@@ -21,7 +21,7 @@ const props = withDefaults(defineProps<Props>(), {
2121
2222
const loading = ref(false)
2323
24-
const ruleset = ref<RuleSetType>({
24+
const ruleset = ref<RuleSet>({
2525
id: sampleID(),
2626
name: '',
2727
updateTime: 0,

0 commit comments

Comments
 (0)