1 个不稳定版本
新 0.5.0 | 2024年8月23日 |
---|
#452 在 数据库接口 中
1MB
7.5K SLoC
过滤列表管理库核心
概述
这个包代表了一个用于管理AdGuard过滤列表的库。
这个库可以
- 获取过滤列表
- 存储下载的过滤列表
- 执行过滤列表更新
- ... 更多
过滤分析
从过滤内容中解析的元标签列表
! Title
- 过滤器的名称。! Description
- 过滤器的详细描述。! Version
- 过滤器的当前版本。! Expires
- 过滤器的过期期限。将转换为秒。 请参阅测试示例 如果元数据中缺少此字段,则使用配置中的全局值。在更新过滤器之前,如果此值小于该值,则将其检查并调整为较低边界 (3600)。! Homepage
- 过滤器的网站/主页。! TimeUpdated
- 此过滤器在注册表中更新的时间。格式:2024-08-13T13:30:53+00:00
。! Last modified
-TimeUpdated
的别名。格式:2024-08-13T12:26.703Z
。您可以为这两个字段选择一个格式。! Diff-Path
- 差分更新信息! License
- 过滤器许可链接。! Checksum
- 过滤器的base64(md5-checksum)。在更新/安装过滤器之前,将计算并比较校验和。请参阅源代码这里
库支持的过滤器预处理器指令列表
库支持
!#include 文件路径
- 将文件内容包含到过滤器中并处理。文件路径
必须是- 与父过滤器的相同源绝对URL。
- 相对URL。
- 文件URL(仅当父过滤器的URL具有
file
方案时)。
!#if/!#endif/!#else
- 条件编译指令。它们可以嵌套。支持的令牌()
- 括号true/false
- 布尔值&& ||
- AND/OR运算符!
- NOT运算符- 来自配置的编译器常量文本。例如,
windows
,mac
等。它的工作方式是这样的:如果遇到的常量在configuration.compiler_conditional_constants
列表中,则条件变为true,否则为false
请参阅测试以获取更多信息
for all directives
- 这里
和
for include
- 这里
for if/endif/else
- 这里
用法
为库外观创建和设置配置
let mut configuration = Configuration::default();
// Sets urls for filters indices.
configuration.metadata_url = "https://filters.adtidy.org/extension/safari/filters.json".to_string();
configuration.metadata_locales_url = "https://filters.adtidy.org/extension/safari/filters_i18n.json".to_string();
// Sets locale. Will be used for returning localized strings for filters,
// groups, and tags, where applicable.
configuration.locale = "pt_PT".to_string();
// Creates facade instance
let flm = FilterListManagerImpl::new(configuration);
如何创建和填充标准过滤器数据库
// Creates and configures the database. Populates the database with information
// from the filter indexes (filters metadata), the paths to which are specified
// in the configuration.
flm.pull_metadata();
// Then, downloads the contents of the filters.
flm.update_filters(true, 0, true);
[!NOTE] 默认情况下,应用程序使用当前工作目录(cwd)中的数据库运行,数据库文件名基于格式
agflm_{configuration.filter_list_type.to_string()}
生成。对于标准过滤器,文件路径将是$CWD/agflm_standard.db
。
对自定义过滤器的操作
库将所有过滤器分为三类
- 索引过滤器 - 通过解析索引(注册表)创建的过滤器。
- 自定义过滤器 - 通过使用库的方法添加(并编辑)的用户过滤器。
- 特殊过滤器 - 由库的脚本预配置的自定义过滤器。
您可以通过参考数据库常量文件来检查特殊和自定义过滤器的指标。
// Installs a custom filter.
let custom_filter = flm.install_custom_filter_list(
String::from("https://example.com/custom_filter.txt"),
true, // The filter list is marked as trusted.
String::from("Custom title"),
String::from("Custom description")
);
// Edit metadata.
flm.update_custom_filter_metadata(
custom_filter.id,
String::from("new title"),
false // The filter list is marked as not trusted.
);
// Turn on this filter.
flm.enable_filter_lists(vec![custom_filter.id], true);
// Remove this filter.
flm.delete_custom_filter_lists(vec![custom_filter.id]);
直接从字符串安装自定义过滤器,而不是下载。
let string_contents = String::from(r"
! Checksum: ecbiyIyplBZKLeNzi64pGA
...
! JS API START
#%#var AG_onLoad=function(func){if(document.readyState==="complete"||document.readyState==="interactive")func();else
...
");
flm.install_custom_filter_from_string(
1719505304i64, // last_download_time value. Explanation: Can we update filter? Answer: (filter.last_download_time + filter.expires < now())
true, // Enabled
true, // Trusted
string_contents,
None,
None
);
自定义过滤器规则的操作
// Saves the structure containing the filter rules.
flm.save_custom_filter_rules(rules_for_new_local_custom_filter);
// You can save only disabled rules for the filter list
flm.save_disabled_rules(filter.id, disabled_rules_list);
获取操作
// Retrieves all filters from the database.
// Returns Vec<FullFilterList>.
flm.get_full_filter_lists();
// Retrieves a filter by its ID from the database.
// Returns Optional<FullFilterList>.
flm.get_full_filter_list_by_id(id);
其他(所有)操作
依赖关系
~37–51MB
~878K SLoC