Consolidate duplicate 1Hosts entries and update copilot-instructions.md with comprehensive field requirements

Co-authored-by: collinbarrett <6483057+collinbarrett@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-07-30 01:23:56 +00:00 committed by Collin Barrett
parent a74703942d
commit 3460c7386b
9 changed files with 90718 additions and 457 deletions

View file

@ -23,16 +23,14 @@ web/ # React frontend
infra/cloudflare-workers/ # CDN edge workers
```
## Key Patterns & Conventions
## Core Architecture Patterns
### Data-Driven Architecture
- **Seed Data**: All domain data lives in JSON files under `services/Directory/data/`
- **Migrations**: EF Core migrations are auto-generated from JSON changes via `lint.sh`
- **Read-Only DbContext**: `QueryDbContext` throws on save operations - data changes only via migrations
### Data-Driven Design
- **JSON-First**: All domain data lives in JSON files under `services/Directory/data/`
- **Auto-Migration**: EF Core migrations auto-generated from JSON changes via `lint.sh`
- **Read-Only Runtime**: `QueryDbContext` throws on save operations - data changes only via migrations
### Query Pattern (No CQRS/MediatR)
```csharp
public static class GetLists
{
@ -45,16 +43,6 @@ public static class GetLists
}
```
### Entity Configuration Pattern
```csharp
internal sealed class FilterListTypeConfiguration : IEntityTypeConfiguration<FilterList>
{
public void Configure(EntityTypeBuilder<FilterList> builder) =>
builder.HasDataJsonFile<FilterList>(); // Loads from JSON
}
```
## Development Workflows
### Local Development
@ -201,6 +189,77 @@ API containerized with multi-stage build. Database runs in Docker volume with pe
- Ant Design `Table` component for main list display
- Tag clouds for maintainers, languages, syntaxes
## Data Model Field Requirements & Constraints
### FilterList.json Field Constraints
- **id**: Required, unique integer primary key
- **name**: Required, unique, max 256 characters, title case formatting required
- **description**: Optional, text description of the filter list
- **homeUrl**: Optional, max 512 characters, main project website
- **onionUrl**: Optional, max 512 characters, Tor hidden service URL
- **policyUrl**: Optional, max 512 characters, privacy/usage policy
- **submissionUrl**: Optional, max 512 characters, URL for submitting issues/reports
- **issuesUrl**: Optional, max 512 characters, issue tracker URL
- **forumUrl**: Optional, max 512 characters, discussion forum URL
- **chatUrl**: Optional, max 512 characters, chat/IRC/Discord URL
- **emailAddress**: Optional, max 256 characters, contact email
- **donateUrl**: Optional, max 512 characters, donation/support URL
- **licenseId**: Required, foreign key to License.json, defaults to 5 if not specified
### FilterListViewUrl.json Field Constraints
- **id**: Required, unique integer primary key
- **filterListId**: Required, foreign key to FilterList.json
- **url**: Required, max 512 characters, actual download URL for the list
- **segmentNumber**: Optional, defaults to 1, for multi-part lists
- **primariness**: Optional, defaults to 1, lower numbers = higher priority mirrors
- **Unique constraint**: (filterListId, segmentNumber, primariness) must be unique
### Maintainer.json Field Constraints
- **id**: Required, unique integer primary key
- **name**: Required, unique, max 64 characters
- **url**: Optional, max 512 characters, maintainer's website/profile
- **emailAddress**: Optional, max 256 characters, contact email
- **twitterHandle**: Optional, max 32 characters, Twitter username without @
### License.json Field Constraints
- **id**: Required, unique integer primary key
- **name**: Required, unique, max 64 characters
- **url**: Optional, max 512 characters, license text URL
- **permitsModification**: Required boolean, defaults to false
- **permitsDistribution**: Required boolean, defaults to false
- **permitsCommercialUse**: Required boolean, defaults to false
### Language.json Field Constraints
- **id**: Required, unique integer primary key
- **iso6391**: Required, unique, exactly 2 characters, ISO 639-1 language code
- **name**: Required, unique, max 64 characters, language name in English
### Tag.json Field Constraints
- **id**: Required, unique integer primary key
- **name**: Required, unique, max 32 characters
- **description**: Optional, text description of the tag's purpose
### Syntax.json Field Constraints
- **id**: Required, unique integer primary key
- **name**: Required, unique, max 64 characters
- **url**: Optional, max 512 characters, documentation/specification URL
### Software.json Field Constraints
- **id**: Required, unique integer primary key
- **name**: Required, unique, max 64 characters
- **homeUrl**: Optional, max 512 characters, software's main website
- **downloadUrl**: Optional, max 512 characters, download page URL
- **supportsAbpUrlScheme**: Required boolean, defaults to false
### Junction Table Requirements
- **FilterListMaintainer.json**: Requires valid filterListId and maintainerId
- **FilterListLanguage.json**: Requires valid filterListId and languageId
- **FilterListTag.json**: Requires valid filterListId and tagId
- **FilterListSyntax.json**: Requires valid filterListId and syntaxId
- **Fork.json**: Requires valid upstreamFilterListId and forkFilterListId
- **Merge.json**: Requires valid includesFilterListId and includedInFilterListId
- **Dependent.json**: Requires valid dependencyFilterListId and dependentFilterListId
## Critical Notes
- **No MediatR**: Use direct query pattern instead
@ -209,5 +268,7 @@ API containerized with multi-stage build. Database runs in Docker volume with pe
- **Aspire orchestration**: Always start development via `FilterLists.AppHost`
- **Unique naming**: All FilterList names must be unique and in title case
- **⚠️ FilterList Name Uniqueness**: The database has a unique constraint on FilterList.Name. Any duplicate names will cause migration failures. When adding new FilterLists or modifying existing ones, ensure all names are unique. If differentiation is needed for similar lists (e.g., different hosting sources), use descriptive suffixes like "(GitHub Only)", "(GitHub Pages Primary)", etc.
- **⚠️ Required Foreign Keys**: All foreign key references (licenseId, maintainerId, etc.) must exist in their respective tables
- **⚠️ URL Field Validation**: All URL fields are validated as proper URIs and must include protocol (http/https)
- **No build artifacts**: Never commit build artifacts like `dotnet-install.sh`, `node_modules`, `dist`, or other generated files
- **⚠️ JSON File Location**: NEVER create or modify JSON data files in the repository root directory. All JSON data files MUST be in `services/Directory/data/` only. The root directory should only contain `global.json` (a .NET SDK configuration file)

View file

@ -0,0 +1,295 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
namespace FilterLists.Directory.Infrastructure.Migrations.Migrations
{
/// <inheritdoc />
public partial class Consolidate1HostsDuplicates : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DeleteData(
table: "FilterListMaintainer",
keyColumns: new[] { "FilterListId", "MaintainerId" },
keyValues: new object[] { 811, 25 });
migrationBuilder.DeleteData(
table: "FilterListMaintainer",
keyColumns: new[] { "FilterListId", "MaintainerId" },
keyValues: new object[] { 812, 25 });
migrationBuilder.DeleteData(
table: "FilterListMaintainer",
keyColumns: new[] { "FilterListId", "MaintainerId" },
keyValues: new object[] { 1954, 25 });
migrationBuilder.DeleteData(
table: "FilterListMaintainer",
keyColumns: new[] { "FilterListId", "MaintainerId" },
keyValues: new object[] { 2002, 25 });
migrationBuilder.DeleteData(
table: "FilterListSyntax",
keyColumns: new[] { "FilterListId", "SyntaxId" },
keyValues: new object[] { 811, (short)1 });
migrationBuilder.DeleteData(
table: "FilterListSyntax",
keyColumns: new[] { "FilterListId", "SyntaxId" },
keyValues: new object[] { 812, (short)2 });
migrationBuilder.DeleteData(
table: "FilterListSyntax",
keyColumns: new[] { "FilterListId", "SyntaxId" },
keyValues: new object[] { 1954, (short)28 });
migrationBuilder.DeleteData(
table: "FilterListSyntax",
keyColumns: new[] { "FilterListId", "SyntaxId" },
keyValues: new object[] { 2002, (short)20 });
migrationBuilder.DeleteData(
table: "FilterListSyntax",
keyColumns: new[] { "FilterListId", "SyntaxId" },
keyValues: new object[] { 2280, (short)16 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 811, 1 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 811, 2 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 811, 3 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 811, 6 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 812, 1 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 812, 2 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 812, 3 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 812, 6 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 1954, 1 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 1954, 2 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 1954, 3 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 1954, 6 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2002, 1 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2002, 2 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2002, 3 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2002, 6 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2280, 1 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2280, 2 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2280, 3 });
migrationBuilder.DeleteData(
table: "FilterListTag",
keyColumns: new[] { "FilterListId", "TagId" },
keyValues: new object[] { 2280, 6 });
migrationBuilder.DeleteData(
table: "FilterListViewUrl",
keyColumns: new[] { "FilterListId", "Id" },
keyValues: new object[] { 811, 841 });
migrationBuilder.DeleteData(
table: "FilterListViewUrl",
keyColumns: new[] { "FilterListId", "Id" },
keyValues: new object[] { 812, 842 });
migrationBuilder.DeleteData(
table: "FilterListViewUrl",
keyColumns: new[] { "FilterListId", "Id" },
keyValues: new object[] { 1954, 2027 });
migrationBuilder.DeleteData(
table: "FilterListViewUrl",
keyColumns: new[] { "FilterListId", "Id" },
keyValues: new object[] { 2002, 2098 });
migrationBuilder.DeleteData(
table: "FilterListViewUrl",
keyColumns: new[] { "FilterListId", "Id" },
keyValues: new object[] { 2280, 2421 });
migrationBuilder.DeleteData(
table: "FilterListViewUrl",
keyColumns: new[] { "FilterListId", "Id" },
keyValues: new object[] { 2280, 2422 });
migrationBuilder.DeleteData(
table: "FilterList",
keyColumn: "Id",
keyValue: 811);
migrationBuilder.DeleteData(
table: "FilterList",
keyColumn: "Id",
keyValue: 812);
migrationBuilder.DeleteData(
table: "FilterList",
keyColumn: "Id",
keyValue: 1954);
migrationBuilder.DeleteData(
table: "FilterList",
keyColumn: "Id",
keyValue: 2002);
migrationBuilder.DeleteData(
table: "FilterList",
keyColumn: "Id",
keyValue: 2280);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.InsertData(
table: "FilterList",
columns: new[] { "Id", "ChatUrl", "Description", "DonateUrl", "EmailAddress", "ForumUrl", "HomeUrl", "IssuesUrl", "LicenseId", "Name", "OnionUrl", "PolicyUrl", "SubmissionUrl" },
values: new object[,]
{
{ 811, null, "Balanced - set & forget, prioritizes smooth UX, ideal for general users.", null, "badmojr@gmail.com", "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360", "https://github.com/badmojr/1Hosts", null, 35, "1Hosts Lite (GitHub Only)", null, null, null },
{ 812, null, "Balanced - set & forget, prioritizes smooth UX, ideal for general users.", null, "badmojr@gmail.com", "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360", "https://github.com/badmojr/1Hosts", null, 35, "1Hosts Lite (Domains, GitHub Only)", null, null, null },
{ 1954, null, "Balanced - set & forget, prioritizes smooth UX, ideal for general users.", null, "badmojr@gmail.com", "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360", "https://github.com/badmojr/1Hosts", null, 35, "1Hosts Lite (Adblockers, GitHub Only)", null, null, null },
{ 2002, null, "Balanced - set & forget, prioritizes smooth UX, ideal for general users.", null, "badmojr@gmail.com", "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360", "https://github.com/badmojr/1Hosts", null, 35, "1Hosts Lite (dnsmasq, GitHub Only)", null, null, null },
{ 2280, null, "Balanced - set & forget, prioritizes smooth UX, ideal for general users.", null, "badmojr@gmail.com", "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360", "https://github.com/badmojr/1Hosts", null, 35, "1Hosts Lite (Domains with wildcards, GitHub Pages Primary)", null, null, null }
});
migrationBuilder.InsertData(
table: "FilterListMaintainer",
columns: new[] { "FilterListId", "MaintainerId" },
values: new object[,]
{
{ 811, 25 },
{ 812, 25 },
{ 1954, 25 },
{ 2002, 25 }
});
migrationBuilder.InsertData(
table: "FilterListSyntax",
columns: new[] { "FilterListId", "SyntaxId" },
values: new object[,]
{
{ 811, (short)1 },
{ 812, (short)2 },
{ 1954, (short)28 },
{ 2002, (short)20 },
{ 2280, (short)16 }
});
migrationBuilder.InsertData(
table: "FilterListTag",
columns: new[] { "FilterListId", "TagId" },
values: new object[,]
{
{ 811, 1 },
{ 811, 2 },
{ 811, 3 },
{ 811, 6 },
{ 812, 1 },
{ 812, 2 },
{ 812, 3 },
{ 812, 6 },
{ 1954, 1 },
{ 1954, 2 },
{ 1954, 3 },
{ 1954, 6 },
{ 2002, 1 },
{ 2002, 2 },
{ 2002, 3 },
{ 2002, 6 },
{ 2280, 1 },
{ 2280, 2 },
{ 2280, 3 },
{ 2280, 6 }
});
migrationBuilder.InsertData(
table: "FilterListViewUrl",
columns: new[] { "FilterListId", "Id", "Primariness", "Url" },
values: new object[,]
{
{ 811, 841, (short)1, "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/hosts.txt" },
{ 812, 842, (short)1, "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/domains.txt" },
{ 1954, 2027, (short)1, "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/adblock.txt" },
{ 2002, 2098, (short)1, "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/dnsmasq.conf" },
{ 2280, 2421, (short)1, "https://badmojr.github.io/1Hosts/Lite/wildcards.txt" },
{ 2280, 2422, (short)2, "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/wildcards.txt" }
});
}
}
}

View file

@ -5171,26 +5171,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Name = "1Hosts Lite (Domains)"
},
new
{
Id = 811,
Description = "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
EmailAddress = "badmojr@gmail.com",
ForumUrl = "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
HomeUrl = "https://github.com/badmojr/1Hosts",
LicenseId = 35,
Name = "1Hosts Lite (GitHub Only)"
},
new
{
Id = 812,
Description = "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
EmailAddress = "badmojr@gmail.com",
ForumUrl = "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
HomeUrl = "https://github.com/badmojr/1Hosts",
LicenseId = 35,
Name = "1Hosts Lite (Domains, GitHub Only)"
},
new
{
Id = 813,
Description = "I use an ad blocker not because I hate ads, but because it makes the Internet so much more safe and less annoying. Most advertising is horrible and annoying, but there are exceptions. However, ad blocking lists like EasyList are dedicated to blocking all ads. The only maintained \"Acceptable Ads\" list is by Eyeo, Inc., which basically takes bribes to whitelist ads. I wanted to start an Acceptable Ads list that was of the people, by the people and for the people.",
@ -14028,16 +14008,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Name = "1Hosts Lite (Adblockers)"
},
new
{
Id = 1954,
Description = "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
EmailAddress = "badmojr@gmail.com",
ForumUrl = "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
HomeUrl = "https://github.com/badmojr/1Hosts",
LicenseId = 35,
Name = "1Hosts Lite (Adblockers, GitHub Only)"
},
new
{
Id = 1955,
Description = "Moderately strict - may introduce sporadic minor breaks, privacy-focused.",
@ -14433,16 +14403,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Name = "1Hosts Lite (dnsmasq)"
},
new
{
Id = 2002,
Description = "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
EmailAddress = "badmojr@gmail.com",
ForumUrl = "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
HomeUrl = "https://github.com/badmojr/1Hosts",
LicenseId = 35,
Name = "1Hosts Lite (dnsmasq, GitHub Only)"
},
new
{
Id = 2003,
Description = "Moderately strict - may introduce sporadic minor breaks, privacy-focused.",
@ -16162,16 +16122,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Name = "1Hosts Lite (Domains with wildcards)"
},
new
{
Id = 2280,
Description = "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
EmailAddress = "badmojr@gmail.com",
ForumUrl = "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
HomeUrl = "https://github.com/badmojr/1Hosts",
LicenseId = 35,
Name = "1Hosts Lite (Domains with wildcards, GitHub Pages Primary)"
},
new
{
Id = 2281,
Description = "Moderately strict - may introduce sporadic minor breaks, privacy-focused.",
@ -27257,16 +27207,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
MaintainerId = 25
},
new
{
FilterListId = 811,
MaintainerId = 25
},
new
{
FilterListId = 812,
MaintainerId = 25
},
new
{
FilterListId = 816,
MaintainerId = 22
@ -31017,11 +30957,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
MaintainerId = 25
},
new
{
FilterListId = 1954,
MaintainerId = 25
},
new
{
FilterListId = 1955,
MaintainerId = 25
@ -31182,11 +31117,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
MaintainerId = 25
},
new
{
FilterListId = 2002,
MaintainerId = 25
},
new
{
FilterListId = 2003,
MaintainerId = 25
@ -36169,16 +36099,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
SyntaxId = (short)2
},
new
{
FilterListId = 811,
SyntaxId = (short)1
},
new
{
FilterListId = 812,
SyntaxId = (short)2
},
new
{
FilterListId = 813,
SyntaxId = (short)3
@ -41124,11 +41044,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
SyntaxId = (short)28
},
new
{
FilterListId = 1954,
SyntaxId = (short)28
},
new
{
FilterListId = 1955,
SyntaxId = (short)28
@ -41344,11 +41259,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
SyntaxId = (short)20
},
new
{
FilterListId = 2002,
SyntaxId = (short)20
},
new
{
FilterListId = 2003,
SyntaxId = (short)20
@ -42354,11 +42264,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
SyntaxId = (short)16
},
new
{
FilterListId = 2280,
SyntaxId = (short)16
},
new
{
FilterListId = 2281,
SyntaxId = (short)16
@ -49096,46 +49001,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
TagId = 36
},
new
{
FilterListId = 811,
TagId = 1
},
new
{
FilterListId = 811,
TagId = 2
},
new
{
FilterListId = 811,
TagId = 3
},
new
{
FilterListId = 811,
TagId = 6
},
new
{
FilterListId = 812,
TagId = 1
},
new
{
FilterListId = 812,
TagId = 2
},
new
{
FilterListId = 812,
TagId = 3
},
new
{
FilterListId = 812,
TagId = 6
},
new
{
FilterListId = 813,
TagId = 10
@ -56596,26 +56461,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
TagId = 36
},
new
{
FilterListId = 1954,
TagId = 1
},
new
{
FilterListId = 1954,
TagId = 2
},
new
{
FilterListId = 1954,
TagId = 3
},
new
{
FilterListId = 1954,
TagId = 6
},
new
{
FilterListId = 1955,
TagId = 1
@ -56976,26 +56821,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
TagId = 36
},
new
{
FilterListId = 2002,
TagId = 1
},
new
{
FilterListId = 2002,
TagId = 2
},
new
{
FilterListId = 2002,
TagId = 3
},
new
{
FilterListId = 2002,
TagId = 6
},
new
{
FilterListId = 2003,
TagId = 1
@ -58271,26 +58096,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
TagId = 6
},
new
{
FilterListId = 2280,
TagId = 1
},
new
{
FilterListId = 2280,
TagId = 2
},
new
{
FilterListId = 2280,
TagId = 3
},
new
{
FilterListId = 2280,
TagId = 6
},
new
{
FilterListId = 2281,
TagId = 1
@ -73146,22 +72951,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/domains.txt"
},
new
{
FilterListId = 811,
Id = 841,
Primariness = (short)1,
SegmentNumber = (short)0,
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/hosts.txt"
},
new
{
FilterListId = 812,
Id = 842,
Primariness = (short)1,
SegmentNumber = (short)0,
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/domains.txt"
},
new
{
FilterListId = 813,
Id = 843,
@ -82090,14 +81879,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/adblock.txt"
},
new
{
FilterListId = 1954,
Id = 2027,
Primariness = (short)1,
SegmentNumber = (short)0,
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/adblock.txt"
},
new
{
FilterListId = 1955,
Id = 2028,
@ -82610,14 +82391,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/dnsmasq.conf"
},
new
{
FilterListId = 2002,
Id = 2098,
Primariness = (short)1,
SegmentNumber = (short)0,
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/dnsmasq.conf"
},
new
{
FilterListId = 2003,
Id = 2099,
@ -84474,22 +84247,6 @@ protected override void BuildModel(ModelBuilder modelBuilder)
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/wildcards.txt"
},
new
{
FilterListId = 2280,
Id = 2421,
Primariness = (short)1,
SegmentNumber = (short)0,
Url = "https://badmojr.github.io/1Hosts/Lite/wildcards.txt"
},
new
{
FilterListId = 2280,
Id = 2422,
Primariness = (short)2,
SegmentNumber = (short)0,
Url = "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/wildcards.txt"
},
new
{
FilterListId = 2281,
Id = 2423,

View file

@ -4475,24 +4475,6 @@
"licenseId": 35,
"name": "1Hosts Lite (Domains)"
},
{
"description": "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
"emailAddress": "badmojr@gmail.com",
"forumUrl": "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
"homeUrl": "https://github.com/badmojr/1Hosts",
"id": 811,
"licenseId": 35,
"name": "1Hosts Lite (GitHub Only)"
},
{
"description": "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
"emailAddress": "badmojr@gmail.com",
"forumUrl": "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
"homeUrl": "https://github.com/badmojr/1Hosts",
"id": 812,
"licenseId": 35,
"name": "1Hosts Lite (Domains, GitHub Only)"
},
{
"description": "I use an ad blocker not because I hate ads, but because it makes the Internet so much more safe and less annoying. Most advertising is horrible and annoying, but there are exceptions. However, ad blocking lists like EasyList are dedicated to blocking all ads. The only maintained \"Acceptable Ads\" list is by Eyeo, Inc., which basically takes bribes to whitelist ads. I wanted to start an Acceptable Ads list that was of the people, by the people and for the people.",
"homeUrl": "https://github.com/jwinnie/acceptable-ads",
@ -12349,15 +12331,6 @@
"licenseId": 35,
"name": "1Hosts Lite (Adblockers)"
},
{
"description": "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
"emailAddress": "badmojr@gmail.com",
"forumUrl": "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
"homeUrl": "https://github.com/badmojr/1Hosts",
"id": 1954,
"licenseId": 35,
"name": "1Hosts Lite (Adblockers, GitHub Only)"
},
{
"description": "Moderately strict - may introduce sporadic minor breaks, privacy-focused.",
"emailAddress": "badmojr@gmail.com",
@ -12713,15 +12686,6 @@
"licenseId": 35,
"name": "1Hosts Lite (dnsmasq)"
},
{
"description": "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
"emailAddress": "badmojr@gmail.com",
"forumUrl": "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
"homeUrl": "https://github.com/badmojr/1Hosts",
"id": 2002,
"licenseId": 35,
"name": "1Hosts Lite (dnsmasq, GitHub Only)"
},
{
"description": "Moderately strict - may introduce sporadic minor breaks, privacy-focused.",
"emailAddress": "badmojr@gmail.com",
@ -14246,15 +14210,6 @@
"licenseId": 35,
"name": "1Hosts Lite (Domains with wildcards)"
},
{
"description": "Balanced - set & forget, prioritizes smooth UX, ideal for general users.",
"emailAddress": "badmojr@gmail.com",
"forumUrl": "https://forum.xda-developers.com/android/general/badmojr-one-host-file-to-block-t3713360",
"homeUrl": "https://github.com/badmojr/1Hosts",
"id": 2280,
"licenseId": 35,
"name": "1Hosts Lite (Domains with wildcards, GitHub Pages Primary)"
},
{
"description": "Moderately strict - may introduce sporadic minor breaks, privacy-focused.",
"emailAddress": "badmojr@gmail.com",

View file

@ -1471,14 +1471,6 @@
"filterListId": 810,
"maintainerId": 25
},
{
"filterListId": 811,
"maintainerId": 25
},
{
"filterListId": 812,
"maintainerId": 25
},
{
"filterListId": 816,
"maintainerId": 22
@ -4479,10 +4471,6 @@
"filterListId": 1953,
"maintainerId": 25
},
{
"filterListId": 1954,
"maintainerId": 25
},
{
"filterListId": 1955,
"maintainerId": 25
@ -4611,10 +4599,6 @@
"filterListId": 2001,
"maintainerId": 25
},
{
"filterListId": 2002,
"maintainerId": 25
},
{
"filterListId": 2003,
"maintainerId": 25

View file

@ -2227,14 +2227,6 @@
"filterListId": 810,
"syntaxId": 2
},
{
"filterListId": 811,
"syntaxId": 1
},
{
"filterListId": 812,
"syntaxId": 2
},
{
"filterListId": 813,
"syntaxId": 3
@ -6191,10 +6183,6 @@
"filterListId": 1953,
"syntaxId": 28
},
{
"filterListId": 1954,
"syntaxId": 28
},
{
"filterListId": 1955,
"syntaxId": 28
@ -6367,10 +6355,6 @@
"filterListId": 2001,
"syntaxId": 20
},
{
"filterListId": 2002,
"syntaxId": 20
},
{
"filterListId": 2003,
"syntaxId": 20
@ -7175,10 +7159,6 @@
"filterListId": 2279,
"syntaxId": 16
},
{
"filterListId": 2280,
"syntaxId": 16
},
{
"filterListId": 2281,
"syntaxId": 16

View file

@ -3267,38 +3267,6 @@
"filterListId": 810,
"tagId": 36
},
{
"filterListId": 811,
"tagId": 1
},
{
"filterListId": 811,
"tagId": 2
},
{
"filterListId": 811,
"tagId": 3
},
{
"filterListId": 811,
"tagId": 6
},
{
"filterListId": 812,
"tagId": 1
},
{
"filterListId": 812,
"tagId": 2
},
{
"filterListId": 812,
"tagId": 3
},
{
"filterListId": 812,
"tagId": 6
},
{
"filterListId": 813,
"tagId": 10
@ -9267,22 +9235,6 @@
"filterListId": 1953,
"tagId": 36
},
{
"filterListId": 1954,
"tagId": 1
},
{
"filterListId": 1954,
"tagId": 2
},
{
"filterListId": 1954,
"tagId": 3
},
{
"filterListId": 1954,
"tagId": 6
},
{
"filterListId": 1955,
"tagId": 1
@ -9571,22 +9523,6 @@
"filterListId": 2001,
"tagId": 36
},
{
"filterListId": 2002,
"tagId": 1
},
{
"filterListId": 2002,
"tagId": 2
},
{
"filterListId": 2002,
"tagId": 3
},
{
"filterListId": 2002,
"tagId": 6
},
{
"filterListId": 2003,
"tagId": 1
@ -10607,22 +10543,6 @@
"filterListId": 2279,
"tagId": 6
},
{
"filterListId": 2280,
"tagId": 1
},
{
"filterListId": 2280,
"tagId": 2
},
{
"filterListId": 2280,
"tagId": 3
},
{
"filterListId": 2280,
"tagId": 6
},
{
"filterListId": 2281,
"tagId": 1

View file

@ -4656,18 +4656,6 @@
"primariness": 1,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/domains.txt"
},
{
"filterListId": 811,
"id": 841,
"primariness": 1,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/hosts.txt"
},
{
"filterListId": 812,
"id": 842,
"primariness": 1,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/domains.txt"
},
{
"filterListId": 813,
"id": 843,
@ -11364,12 +11352,6 @@
"primariness": 1,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/adblock.txt"
},
{
"filterListId": 1954,
"id": 2027,
"primariness": 1,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/adblock.txt"
},
{
"filterListId": 1955,
"id": 2028,
@ -11754,12 +11736,6 @@
"primariness": 1,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/dnsmasq.conf"
},
{
"filterListId": 2002,
"id": 2098,
"primariness": 1,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/dnsmasq.conf"
},
{
"filterListId": 2003,
"id": 2099,
@ -13152,18 +13128,6 @@
"primariness": 2,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/wildcards.txt"
},
{
"filterListId": 2280,
"id": 2421,
"primariness": 1,
"url": "https://badmojr.github.io/1Hosts/Lite/wildcards.txt"
},
{
"filterListId": 2280,
"id": 2422,
"primariness": 2,
"url": "https://raw.githubusercontent.com/badmojr/1Hosts/master/Lite/wildcards.txt"
},
{
"filterListId": 2281,
"id": 2423,