interfaces.go RawHistoryFolder
1package filtering
2
3import (
4 "context"
5 "time"
6
7 "github.com/bnema/puregotk-webkit/webkit"
8)
9
10// FilterStore abstracts the WebKit UserContentFilterStore operations.
11// This interface enables testing without requiring GTK/WebKit.
12type FilterStore interface {
13 // Compile compiles a JSON filter file and stores it with the given identifier.
14 Compile(ctx context.Context, identifier string, jsonPath string) (*webkit.UserContentFilter, error)
15
16 // Load loads a previously compiled filter by its identifier.
17 Load(ctx context.Context, identifier string) (*webkit.UserContentFilter, error)
18
19 // Remove removes a compiled filter by its identifier.
20 Remove(ctx context.Context, identifier string) error
21
22 // HasCompiledFilter checks if a compiled filter exists for the given identifier.
23 HasCompiledFilter(ctx context.Context, identifier string) bool
24
25 // FetchIdentifiers returns all stored filter identifiers.
26 FetchIdentifiers(ctx context.Context) ([]string, error)
27
28 // Path returns the storage path for compiled filters.
29 Path() string
30}
31
32// FilterDownloader abstracts the filter download operations.
33// This interface enables testing without requiring network access.
34type FilterDownloader interface {
35 // GetCachedManifest reads the locally cached manifest.json.
36 GetCachedManifest() (*Manifest, error)
37
38 // FetchManifest downloads the latest manifest.json from the remote source.
39 FetchManifest(ctx context.Context) (*Manifest, error)
40
41 // DownloadFilters downloads filter JSON files from the remote source.
42 DownloadFilters(ctx context.Context, onProgress func(DownloadProgress)) ([]string, error)
43
44 // NeedsUpdate checks if filters need to be updated based on manifest version.
45 NeedsUpdate(ctx context.Context) (bool, error)
46
47 // ClearCache removes all cached filter files.
48 ClearCache() error
49
50 // HasCachedFilters checks if all filter JSON files are cached.
51 HasCachedFilters() bool
52
53 // GetCachedFilterPaths returns paths to cached filter JSON files.
54 GetCachedFilterPaths() []string
55
56 // IsCacheStale checks if the cached manifest is older than maxAge.
57 IsCacheStale(maxAge time.Duration) bool
58}
59
60// Ensure concrete types implement the interfaces.
61var (
62 _ FilterStore = (*Store)(nil)
63 _ FilterDownloader = (*Downloader)(nil)
64)