GeoSite.
This commit is contained in:
parent
116b6720a7
commit
28dae09424
|
@ -1,5 +1,7 @@
|
||||||
Pods/
|
Pods/
|
||||||
Country.mmdb
|
Country.mmdb
|
||||||
|
geoip.dat
|
||||||
|
geosite.dat
|
||||||
Carthage
|
Carthage
|
||||||
ClashX.a
|
ClashX.a
|
||||||
ClashX.h
|
ClashX.h
|
||||||
|
@ -16,4 +18,6 @@ ClashX/goClash/goClash.h
|
||||||
ClashX/goClash/goClash.a
|
ClashX/goClash/goClash.a
|
||||||
fastlane/report.xml
|
fastlane/report.xml
|
||||||
ClashX/Resources/Country.mmdb.gz
|
ClashX/Resources/Country.mmdb.gz
|
||||||
|
ClashX/Resources/geoip.dat.gz
|
||||||
|
ClashX/Resources/geosite.dat.gz
|
||||||
.bundle/config
|
.bundle/config
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
01B009AE2854533300B93618 /* geoip.dat.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B009AC2854533200B93618 /* geoip.dat.gz */; };
|
||||||
|
01B009AF2854533300B93618 /* geosite.dat.gz in Resources */ = {isa = PBXBuildFile; fileRef = 01B009AD2854533300B93618 /* geosite.dat.gz */; };
|
||||||
4913C82321157D0200F6B87C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4913C82221157D0200F6B87C /* Notification.swift */; };
|
4913C82321157D0200F6B87C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4913C82221157D0200F6B87C /* Notification.swift */; };
|
||||||
491E6203258A424D00313AEF /* CommonUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 491E61FD258A424500313AEF /* CommonUtils.m */; };
|
491E6203258A424D00313AEF /* CommonUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 491E61FD258A424500313AEF /* CommonUtils.m */; };
|
||||||
49228457270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49228456270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift */; };
|
49228457270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49228456270AADE20027A4B6 /* RemoteConfigUpdateIntervalSettingView.swift */; };
|
||||||
|
@ -126,6 +128,8 @@
|
||||||
/* End PBXCopyFilesBuildPhase section */
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
01B009AC2854533200B93618 /* geoip.dat.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = geoip.dat.gz; sourceTree = "<group>"; };
|
||||||
|
01B009AD2854533300B93618 /* geosite.dat.gz */ = {isa = PBXFileReference; lastKnownFileType = archive.gzip; path = geosite.dat.gz; sourceTree = "<group>"; };
|
||||||
4913C82221157D0200F6B87C /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
|
4913C82221157D0200F6B87C /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
|
||||||
491E61FC258A424500313AEF /* CommonUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonUtils.h; sourceTree = "<group>"; };
|
491E61FC258A424500313AEF /* CommonUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonUtils.h; sourceTree = "<group>"; };
|
||||||
491E61FD258A424500313AEF /* CommonUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommonUtils.m; sourceTree = "<group>"; };
|
491E61FD258A424500313AEF /* CommonUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommonUtils.m; sourceTree = "<group>"; };
|
||||||
|
@ -375,6 +379,8 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
4929F676258CD89B00A435F6 /* Country.mmdb.gz */,
|
4929F676258CD89B00A435F6 /* Country.mmdb.gz */,
|
||||||
|
01B009AC2854533200B93618 /* geoip.dat.gz */,
|
||||||
|
01B009AD2854533300B93618 /* geosite.dat.gz */,
|
||||||
4929F60F258CD22E00A435F6 /* menu_icon@2x.png */,
|
4929F60F258CD22E00A435F6 /* menu_icon@2x.png */,
|
||||||
49761DA621C9497000AE13EF /* dashboard */,
|
49761DA621C9497000AE13EF /* dashboard */,
|
||||||
4989F98D20D0AE990001E564 /* sampleConfig.yaml */,
|
4989F98D20D0AE990001E564 /* sampleConfig.yaml */,
|
||||||
|
@ -605,12 +611,14 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
01B009AF2854533300B93618 /* geosite.dat.gz in Resources */,
|
||||||
49761DA721C9497000AE13EF /* dashboard in Resources */,
|
49761DA721C9497000AE13EF /* dashboard in Resources */,
|
||||||
4929F677258CD89B00A435F6 /* Country.mmdb.gz in Resources */,
|
4929F677258CD89B00A435F6 /* Country.mmdb.gz in Resources */,
|
||||||
4981C88B216BAE4A008CC14A /* Localizable.strings in Resources */,
|
4981C88B216BAE4A008CC14A /* Localizable.strings in Resources */,
|
||||||
8A2BBEA727A03ACB0081EBEF /* ProxySetting.sdef in Resources */,
|
8A2BBEA727A03ACB0081EBEF /* ProxySetting.sdef in Resources */,
|
||||||
F9FAB31E262BE04800DE02A6 /* Images.xcassets in Resources */,
|
F9FAB31E262BE04800DE02A6 /* Images.xcassets in Resources */,
|
||||||
495340B020DE5F7200B0D3FF /* StatusItemView.xib in Resources */,
|
495340B020DE5F7200B0D3FF /* StatusItemView.xib in Resources */,
|
||||||
|
01B009AE2854533300B93618 /* geoip.dat.gz in Resources */,
|
||||||
49CF3B2820CD7465001EBF94 /* Main.storyboard in Resources */,
|
49CF3B2820CD7465001EBF94 /* Main.storyboard in Resources */,
|
||||||
499A485A22ED781100F6C675 /* RemoteConfigAddView.xib in Resources */,
|
499A485A22ED781100F6C675 /* RemoteConfigAddView.xib in Resources */,
|
||||||
4929F610258CD22E00A435F6 /* menu_icon@2x.png in Resources */,
|
4929F610258CD22E00A435F6 /* menu_icon@2x.png in Resources */,
|
||||||
|
|
|
@ -5,6 +5,12 @@ import Foundation
|
||||||
import Gzip
|
import Gzip
|
||||||
|
|
||||||
class ClashResourceManager {
|
class ClashResourceManager {
|
||||||
|
enum RuleFiles: String {
|
||||||
|
case mmdb = "Country.mmdb"
|
||||||
|
case geosite = "geosite.dat"
|
||||||
|
case geoip = "geoip.dat"
|
||||||
|
}
|
||||||
|
|
||||||
static func check() -> Bool {
|
static func check() -> Bool {
|
||||||
checkConfigDir()
|
checkConfigDir()
|
||||||
checkMMDB()
|
checkMMDB()
|
||||||
|
@ -25,26 +31,39 @@ class ClashResourceManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
static func checkMMDB() {
|
static func checkMMDB() {
|
||||||
|
checkRule(.mmdb)
|
||||||
|
checkRule(.geoip)
|
||||||
|
checkRule(.geosite)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func checkRule(_ file: RuleFiles) {
|
||||||
let fileManage = FileManager.default
|
let fileManage = FileManager.default
|
||||||
let destMMDBPath = "\(kConfigFolderPath)/Country.mmdb"
|
let destPath = "\(kConfigFolderPath)/\(file.rawValue)"
|
||||||
|
|
||||||
// Remove old mmdb file after version update.
|
// Remove old mmdb file after version update.
|
||||||
if fileManage.fileExists(atPath: destMMDBPath) {
|
if fileManage.fileExists(atPath: destPath) {
|
||||||
let vaild = verifyGEOIPDataBase().toBool()
|
|
||||||
let versionChange = AppVersionUtil.hasVersionChanged || AppVersionUtil.isFirstLaunch
|
let versionChange = AppVersionUtil.hasVersionChanged || AppVersionUtil.isFirstLaunch
|
||||||
let customMMDBSet = !Settings.mmdbDownloadUrl.isEmpty
|
switch file {
|
||||||
if !vaild || (versionChange && customMMDBSet) {
|
case .mmdb:
|
||||||
try? fileManage.removeItem(atPath: destMMDBPath)
|
let vaild = verifyGEOIPDataBase().toBool()
|
||||||
|
let customMMDBSet = !Settings.mmdbDownloadUrl.isEmpty
|
||||||
|
if !vaild || (versionChange && customMMDBSet) {
|
||||||
|
try? fileManage.removeItem(atPath: destPath)
|
||||||
|
}
|
||||||
|
case .geosite, .geoip:
|
||||||
|
if versionChange {
|
||||||
|
try? fileManage.removeItem(atPath: destPath)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fileManage.fileExists(atPath: destMMDBPath) {
|
if !fileManage.fileExists(atPath: destPath) {
|
||||||
if let mmdbUrl = Bundle.main.url(forResource: "Country.mmdb", withExtension: "gz") {
|
if let gzUrl = Bundle.main.url(forResource: file.rawValue, withExtension: "gz") {
|
||||||
do {
|
do {
|
||||||
let data = try Data(contentsOf: mmdbUrl).gunzipped()
|
let data = try Data(contentsOf: gzUrl).gunzipped()
|
||||||
try data.write(to: URL(fileURLWithPath: destMMDBPath))
|
try data.write(to: URL(fileURLWithPath: destPath))
|
||||||
} catch let err {
|
} catch let err {
|
||||||
Logger.log("add mmdb fail:\(err)", level: .error)
|
Logger.log("add \(file.rawValue) fail:\(err)", level: .error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,22 @@ bundle install --jobs 4
|
||||||
bundle exec pod install
|
bundle exec pod install
|
||||||
echo "delete old files"
|
echo "delete old files"
|
||||||
rm -f ./ClashX/Resources/Country.mmdb
|
rm -f ./ClashX/Resources/Country.mmdb
|
||||||
|
rm -f ./ClashX/Resources/geosite.dat
|
||||||
|
rm -f ./ClashX/Resources/geoip.dat
|
||||||
rm -rf ./ClashX/Resources/dashboard
|
rm -rf ./ClashX/Resources/dashboard
|
||||||
rm -f GeoLite2-Country.*
|
rm -f GeoLite2-Country.*
|
||||||
echo "install mmdb"
|
echo "install mmdb"
|
||||||
curl -LO https://github.com/Dreamacro/maxmind-geoip/releases/latest/download/Country.mmdb
|
curl -LO https://github.com/Dreamacro/maxmind-geoip/releases/latest/download/Country.mmdb
|
||||||
gzip Country.mmdb
|
gzip Country.mmdb
|
||||||
mv Country.mmdb.gz ./ClashX/Resources/Country.mmdb.gz
|
mv Country.mmdb.gz ./ClashX/Resources/Country.mmdb.gz
|
||||||
|
echo "install geosite"
|
||||||
|
curl -LO https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
|
||||||
|
gzip geosite.dat
|
||||||
|
mv geosite.dat.gz ./ClashX/Resources/geosite.dat.gz
|
||||||
|
echo "install geoip"
|
||||||
|
curl -LO https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat
|
||||||
|
gzip geoip.dat
|
||||||
|
mv geoip.dat.gz ./ClashX/Resources/geoip.dat.gz
|
||||||
echo "install dashboard"
|
echo "install dashboard"
|
||||||
cd ClashX/Resources
|
cd ClashX/Resources
|
||||||
git clone -b gh-pages https://github.com/MetaCubeX/yacd.git dashboard
|
git clone -b gh-pages https://github.com/MetaCubeX/yacd.git dashboard
|
||||||
|
|
Loading…
Reference in New Issue