SYMBOL INDEX (2558 symbols across 118 files) FILE: api/auth_handler.go type LoginRequest (line 12) | type LoginRequest struct type LoginResponse (line 18) | type LoginResponse struct function LoginHandler (line 25) | func LoginHandler(c *gin.Context) { function VerifyHandler (line 72) | func VerifyHandler(c *gin.Context) { function LogoutHandler (line 96) | func LogoutHandler(c *gin.Context) { FILE: api/filter.go function applyResultFilter (line 9) | func applyResultFilter(response model.SearchResponse, filter *model.Filt... function filterMergedByType (line 51) | func filterMergedByType(mergedLinks model.MergedLinks, includeKeywords, ... function filterResults (line 77) | func filterResults(results []model.SearchResult, includeKeywords, exclud... function matchFilter (line 115) | func matchFilter(text string, includeKeywords, excludeKeywords []string)... FILE: api/handler.go function SetSearchService (line 21) | func SetSearchService(service *service.SearchService) { function SearchHandler (line 26) | func SearchHandler(c *gin.Context) { FILE: api/middleware.go function CORSMiddleware (line 15) | func CORSMiddleware() gin.HandlerFunc { function LoggerMiddleware (line 31) | func LoggerMiddleware() gin.HandlerFunc { function AuthMiddleware (line 78) | func AuthMiddleware() gin.HandlerFunc { FILE: api/router.go function SetupRouter (line 12) | func SetupRouter(searchService *service.SearchService) *gin.Engine { FILE: config/config.go type Config (line 14) | type Config struct function Init (line 62) | func Init() { function getDefaultChannels (line 116) | func getDefaultChannels() []string { function getDefaultConcurrency (line 125) | func getDefaultConcurrency() int { function UpdateDefaultConcurrency (line 164) | func UpdateDefaultConcurrency(pluginCount int) { function getPort (line 189) | func getPort() string { function getProxyURL (line 197) | func getProxyURL() string { function getHTTPProxyURL (line 201) | func getHTTPProxyURL() string { function getHTTPSProxyURL (line 208) | func getHTTPSProxyURL() string { function getCacheEnabled (line 216) | func getCacheEnabled() bool { function getCachePath (line 225) | func getCachePath() string { function getCacheMaxSize (line 239) | func getCacheMaxSize() int { function getCacheTTL (line 252) | func getCacheTTL() int { function getEnableCompression (line 265) | func getEnableCompression() bool { function getMinSizeToCompress (line 274) | func getMinSizeToCompress() int { function getGCPercent (line 287) | func getGCPercent() int { function getOptimizeMemory (line 300) | func getOptimizeMemory() bool { function getPluginTimeout (line 309) | func getPluginTimeout() int { function getAsyncPluginEnabled (line 322) | func getAsyncPluginEnabled() bool { function getEnabledPlugins (line 334) | func getEnabledPlugins() []string { function getAsyncResponseTimeout (line 359) | func getAsyncResponseTimeout() int { function getAsyncMaxBackgroundWorkers (line 372) | func getAsyncMaxBackgroundWorkers() int { function getAsyncMaxBackgroundTasks (line 395) | func getAsyncMaxBackgroundTasks() int { function getAsyncCacheTTLHours (line 417) | func getAsyncCacheTTLHours() int { function getHTTPReadTimeout (line 430) | func getHTTPReadTimeout() time.Duration { function getHTTPWriteTimeout (line 456) | func getHTTPWriteTimeout() time.Duration { function getHTTPIdleTimeout (line 482) | func getHTTPIdleTimeout() time.Duration { function getHTTPMaxConns (line 496) | func getHTTPMaxConns() int { function getAsyncLogEnabled (line 519) | func getAsyncLogEnabled() bool { function getAuthEnabled (line 532) | func getAuthEnabled() bool { function getAuthUsers (line 538) | func getAuthUsers() map[string]string { function getAuthTokenExpiry (line 560) | func getAuthTokenExpiry() time.Duration { function getAuthJWTSecret (line 573) | func getAuthJWTSecret() string { function applyGCSettings (line 589) | func applyGCSettings() { FILE: main.go function main (line 110) | func main() { function initApp (line 119) | func initApp() { function startServer (line 154) | func startServer() { function printServiceInfo (line 254) | func printServiceInfo(port string, pluginManager *plugin.PluginManager) { FILE: model/plugin_result.go type PluginSearchResult (line 8) | type PluginSearchResult struct method IsEmpty (line 17) | func (p *PluginSearchResult) IsEmpty() bool { method Count (line 22) | func (p *PluginSearchResult) Count() int { method GetResults (line 27) | func (p *PluginSearchResult) GetResults() []SearchResult { FILE: model/request.go type FilterConfig (line 4) | type FilterConfig struct type SearchRequest (line 10) | type SearchRequest struct FILE: model/response.go type Link (line 6) | type Link struct type SearchResult (line 15) | type SearchResult struct type MergedLink (line 28) | type MergedLink struct type MergedLinks (line 38) | type MergedLinks type SearchResponse (line 41) | type SearchResponse struct type Response (line 48) | type Response struct function NewSuccessResponse (line 55) | func NewSuccessResponse(data interface{}) Response { function NewErrorResponse (line 64) | func NewErrorResponse(code int, message string) Response { FILE: plugin/ahhhhfs/ahhhhfs.go constant pluginName (line 51) | pluginName = "ahhhhfs" constant defaultPriority (line 54) | defaultPriority = 2 constant DefaultTimeout (line 57) | DefaultTimeout = 10 * time.Second constant DetailTimeout (line 58) | DetailTimeout = 8 * time.Second constant MaxConcurrency (line 61) | MaxConcurrency = 15 constant MaxIdleConns (line 64) | MaxIdleConns = 100 constant MaxIdleConnsPerHost (line 65) | MaxIdleConnsPerHost = 30 constant MaxConnsPerHost (line 66) | MaxConnsPerHost = 50 constant IdleConnTimeout (line 67) | IdleConnTimeout = 90 * time.Second type AhhhhfsAsyncPlugin (line 79) | type AhhhhfsAsyncPlugin struct method Search (line 129) | func (p *AhhhhfsAsyncPlugin) Search(keyword string, ext map[string]int... method SearchWithResult (line 138) | func (p *AhhhhfsAsyncPlugin) SearchWithResult(keyword string, ext map[... method searchImpl (line 143) | func (p *AhhhhfsAsyncPlugin) searchImpl(client *http.Client, keyword s... method extractArticleID (line 283) | func (p *AhhhhfsAsyncPlugin) extractArticleID(detailURL string) string { method parseDateTime (line 292) | func (p *AhhhhfsAsyncPlugin) parseDateTime(datetime string) time.Time { method fetchDetailLinks (line 337) | func (p *AhhhhfsAsyncPlugin) fetchDetailLinks(client *http.Client, det... method extractNetDiskLinks (line 397) | func (p *AhhhhfsAsyncPlugin) extractNetDiskLinks(doc *goquery.Document... method determineCloudType (line 433) | func (p *AhhhhfsAsyncPlugin) determineCloudType(url string) string { method extractPassword (line 459) | func (p *AhhhhfsAsyncPlugin) extractPassword(linkElem *goquery.Selecti... method doRequestWithRetry (line 510) | func (p *AhhhhfsAsyncPlugin) doRequestWithRetry(req *http.Request, cli... function init (line 85) | func init() { function startCacheCleaner (line 93) | func startCacheCleaner() { function createOptimizedHTTPClient (line 105) | func createOptimizedHTTPClient() *http.Client { function NewAhhhhfsPlugin (line 121) | func NewAhhhhfsPlugin() *AhhhhfsAsyncPlugin { FILE: plugin/aikanzy/aikanzy.go constant pluginName (line 42) | pluginName = "aikanzy" constant searchURLTemplate (line 45) | searchURLTemplate = "https://www.aikanzy.com/search?word=%s&molds=article" constant defaultPriority (line 48) | defaultPriority = 3 constant defaultTimeout (line 51) | defaultTimeout = 15 constant detailTimeout (line 54) | detailTimeout = 8 constant maxRetries (line 57) | maxRetries = 3 constant detailConcurrency (line 60) | detailConcurrency = 15 constant backoffBase (line 63) | backoffBase = 200 type AikanzyAsyncPlugin (line 67) | type AikanzyAsyncPlugin struct method Name (line 104) | func (p *AikanzyAsyncPlugin) Name() string { method Priority (line 109) | func (p *AikanzyAsyncPlugin) Priority() int { method Search (line 114) | func (p *AikanzyAsyncPlugin) Search(keyword string, ext map[string]int... method SearchWithResult (line 123) | func (p *AikanzyAsyncPlugin) SearchWithResult(keyword string, ext map[... method doSearch (line 128) | func (p *AikanzyAsyncPlugin) doSearch(client *http.Client, keyword str... method parseArticleList (line 205) | func (p *AikanzyAsyncPlugin) parseArticleList(doc *goquery.Document) [... method fetchDetailsWithLinks (line 264) | func (p *AikanzyAsyncPlugin) fetchDetailsWithLinks(items []ArticleItem... method fetchDetailPageLinks (line 344) | func (p *AikanzyAsyncPlugin) fetchDetailPageLinks(detailURL string, cl... method extractNetDiskLinks (line 386) | func (p *AikanzyAsyncPlugin) extractNetDiskLinks(doc *goquery.Document... method determineLinkType (line 477) | func (p *AikanzyAsyncPlugin) determineLinkType(urlStr string) string { method extractArticleID (line 495) | func (p *AikanzyAsyncPlugin) extractArticleID(urlStr string) string { method extractViewCount (line 504) | func (p *AikanzyAsyncPlugin) extractViewCount(text string) int { method cleanHTMLTags (line 515) | func (p *AikanzyAsyncPlugin) cleanHTMLTags(text string) string { method parsePublishTime (line 527) | func (p *AikanzyAsyncPlugin) parsePublishTime(dateStr string) time.Time { method extractPassword (line 557) | func (p *AikanzyAsyncPlugin) extractPassword(urlStr string) string { method doRequestWithRetry (line 568) | func (p *AikanzyAsyncPlugin) doRequestWithRetry(req *http.Request, cli... function init (line 76) | func init() { function createOptimizedHTTPClient (line 81) | func createOptimizedHTTPClient() *http.Client { function NewAikanzyAsyncPlugin (line 96) | func NewAikanzyAsyncPlugin() *AikanzyAsyncPlugin { type ArticleItem (line 193) | type ArticleItem struct FILE: plugin/alupan/alupan.go type cacheEntry (line 43) | type cacheEntry struct constant pluginName (line 49) | pluginName = "alupan" constant defaultPriority (line 50) | defaultPriority = 2 constant searchTimeout (line 51) | searchTimeout = 12 * time.Second constant detailTimeout (line 52) | detailTimeout = 10 * time.Second constant maxConcurrency (line 53) | maxConcurrency = 12 constant maxIdleConns (line 54) | maxIdleConns = 64 constant maxIdlePerHost (line 55) | maxIdlePerHost = 16 constant maxConnsPerHost (line 56) | maxConnsPerHost = 32 constant idleConnLifetime (line 57) | idleConnLifetime = 90 * time.Second constant tlsHandshakeTimeout (line 58) | tlsHandshakeTimeout = 10 * time.Second constant expectContinueTimeout (line 59) | expectContinueTimeout = 1 * time.Second constant searchMaxRetries (line 61) | searchMaxRetries = 3 constant detailMaxRetries (line 62) | detailMaxRetries = 2 constant retryBaseDelay (line 63) | retryBaseDelay = 200 * time.Millisecond type AlupanPlugin (line 67) | type AlupanPlugin struct method Search (line 86) | func (p *AlupanPlugin) Search(keyword string, ext map[string]interface... method SearchWithResult (line 95) | func (p *AlupanPlugin) SearchWithResult(keyword string, ext map[string... method searchImpl (line 115) | func (p *AlupanPlugin) searchImpl(client *http.Client, keyword string,... method fetchDetailLinks (line 242) | func (p *AlupanPlugin) fetchDetailLinks(client *http.Client, detailURL... method doRequestWithRetry (line 383) | func (p *AlupanPlugin) doRequestWithRetry(req *http.Request, client *h... function init (line 72) | func init() { function NewAlupanPlugin (line 78) | func NewAlupanPlugin() *AlupanPlugin { function newHTTPClient (line 99) | func newHTTPClient() *http.Client { function extractArticleID (line 208) | func extractArticleID(detailURL string) string { function parsePublishTime (line 215) | func parsePublishTime(value string) time.Time { function extractNetDiskLinks (line 286) | func extractNetDiskLinks(doc *goquery.Document) []model.Link { function classifyLink (line 324) | func classifyLink(raw string) (string, string) { function extractPassword (line 333) | func extractPassword(link *goquery.Selection) string { function matchPassword (line 361) | func matchPassword(text string) string { function setCommonHeaders (line 375) | func setCommonHeaders(req *http.Request, referer string) { function startCacheCleaner (line 404) | func startCacheCleaner() { FILE: plugin/ash/ash.go type AshPlugin (line 18) | type AshPlugin struct method Search (line 59) | func (p *AshPlugin) Search(keyword string, ext map[string]interface{})... method SearchWithResult (line 68) | func (p *AshPlugin) SearchWithResult(keyword string, ext map[string]in... method searchImpl (line 73) | func (p *AshPlugin) searchImpl(client *http.Client, keyword string, ex... method extractResultsFromBytes (line 123) | func (p *AshPlugin) extractResultsFromBytes(data []byte) ([]model.Sear... method fixPanURL (line 233) | func (p *AshPlugin) fixPanURL(url string) string { method setRequestHeaders (line 253) | func (p *AshPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 264) | func (p *AshPlugin) doRequestWithRetry(req *http.Request, client *http... constant wrongQuarkDomain (line 24) | wrongQuarkDomain = "pan.qualk.cn" constant correctQuarkDomain (line 26) | correctQuarkDomain = "pan.quark.cn" type AshResult (line 38) | type AshResult struct function init (line 51) | func init() { FILE: plugin/bixin/bixin.go function init (line 20) | func init() { constant BaseURL (line 27) | BaseURL = "https://www.bixbiy.com/api/discussions" constant PageSize (line 30) | PageSize = 50 constant MaxRetries (line 31) | MaxRetries = 2 type BixinAsyncPlugin (line 45) | type BixinAsyncPlugin struct method Search (line 59) | func (p *BixinAsyncPlugin) Search(keyword string, ext map[string]inter... method SearchWithResult (line 68) | func (p *BixinAsyncPlugin) SearchWithResult(keyword string, ext map[st... method doSearch (line 73) | func (p *BixinAsyncPlugin) doSearch(client *http.Client, keyword strin... method fetchBatch (line 93) | func (p *BixinAsyncPlugin) fetchBatch(client *http.Client, keyword str... method deduplicateResults (line 157) | func (p *BixinAsyncPlugin) deduplicateResults(results []model.SearchRe... method fetchPage (line 177) | func (p *BixinAsyncPlugin) fetchPage(client *http.Client, keyword stri... function NewBixinAsyncPlugin (line 51) | func NewBixinAsyncPlugin() *BixinAsyncPlugin { function generateRandomIP (line 302) | func generateRandomIP() string { function getRandomUA (line 311) | func getRandomUA() string { function cleanHTML (line 316) | func cleanHTML(html string) string { function extractMobileLinksFromText (line 365) | func extractMobileLinksFromText(content string) []model.Link { function extractURLFromText (line 478) | func extractURLFromText(text string) string { function extractPasswordFromURL (line 510) | func extractPasswordFromURL(url string) string { function abs (line 538) | func abs(n int) int { type BixinResponse (line 546) | type BixinResponse struct type BixinDiscussion (line 556) | type BixinDiscussion struct type BixinPost (line 579) | type BixinPost struct FILE: plugin/cldi/cldi.go type CldiPlugin (line 19) | type CldiPlugin struct method Search (line 50) | func (p *CldiPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 59) | func (p *CldiPlugin) SearchWithResult(keyword string, ext map[string]i... method searchImpl (line 64) | func (p *CldiPlugin) searchImpl(client *http.Client, keyword string, e... method searchPage (line 122) | func (p *CldiPlugin) searchPage(client *http.Client, keyword string, p... method setRequestHeaders (line 168) | func (p *CldiPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 179) | func (p *CldiPlugin) doRequestWithRetry(req *http.Request, client *htt... method extractSearchResults (line 208) | func (p *CldiPlugin) extractSearchResults(doc *goquery.Document) []mod... method parseSearchResult (line 223) | func (p *CldiPlugin) parseSearchResult(s *goquery.Selection) model.Sea... method extractMagnetInfo (line 256) | func (p *CldiPlugin) extractMagnetInfo(s *goquery.Selection, result *m... method extractFileList (line 283) | func (p *CldiPlugin) extractFileList(s *goquery.Selection, result *mod... method mapCategory (line 312) | func (p *CldiPlugin) mapCategory(category string) string { method cleanTitle (line 337) | func (p *CldiPlugin) cleanTitle(title string) string { constant MaxConcurrency (line 25) | MaxConcurrency = 10 constant MaxPages (line 28) | MaxPages = 5 function init (line 42) | func init() { FILE: plugin/clmao/clmao.go constant BaseURL (line 22) | BaseURL = "https://www.8800492.xyz" constant SearchURL (line 25) | SearchURL = BaseURL + "/search-%s-0-2-%d.html" constant MaxRetries (line 28) | MaxRetries = 3 constant TimeoutSeconds (line 29) | TimeoutSeconds = 30 constant MaxConcurrency (line 32) | MaxConcurrency = 10 constant MaxPages (line 33) | MaxPages = 5 type ClmaoPlugin (line 56) | type ClmaoPlugin struct method Name (line 68) | func (p *ClmaoPlugin) Name() string { method DisplayName (line 73) | func (p *ClmaoPlugin) DisplayName() string { method Description (line 78) | func (p *ClmaoPlugin) Description() string { method Search (line 83) | func (p *ClmaoPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 92) | func (p *ClmaoPlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 97) | func (p *ClmaoPlugin) searchImpl(client *http.Client, keyword string, ... method searchPage (line 162) | func (p *ClmaoPlugin) searchPage(client *http.Client, keyword string, ... method extractSearchResults (line 209) | func (p *ClmaoPlugin) extractSearchResults(doc *goquery.Document) []mo... method parseSearchResult (line 224) | func (p *ClmaoPlugin) parseSearchResult(s *goquery.Selection) model.Se... method extractMagnetInfo (line 255) | func (p *ClmaoPlugin) extractMagnetInfo(s *goquery.Selection, result *... method extractFileList (line 289) | func (p *ClmaoPlugin) extractFileList(s *goquery.Selection, result *mo... method mapCategory (line 310) | func (p *ClmaoPlugin) mapCategory(category string) string { method cleanTitle (line 332) | func (p *ClmaoPlugin) cleanTitle(title string) string { method setRequestHeaders (line 343) | func (p *ClmaoPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 358) | func (p *ClmaoPlugin) doRequestWithRetry(req *http.Request, client *ht... function NewClmaoPlugin (line 61) | func NewClmaoPlugin() *ClmaoPlugin { function init (line 379) | func init() { FILE: plugin/clxiong/clxiong.go constant BaseURL (line 20) | BaseURL = "https://www.cilixiong.org" constant SearchURL (line 21) | SearchURL = "https://www.cilixiong.org/e/search/index.php" constant UserAgent (line 22) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWe... constant MaxRetries (line 23) | MaxRetries = 3 constant RetryDelay (line 24) | RetryDelay = 2 * time.Second constant MaxResults (line 25) | MaxResults = 30 type DetailPageInfo (line 29) | type DetailPageInfo struct type ClxiongPlugin (line 37) | type ClxiongPlugin struct method Search (line 51) | func (p *ClxiongPlugin) Search(keyword string, ext map[string]interfac... method SearchWithResult (line 60) | func (p *ClxiongPlugin) SearchWithResult(keyword string, ext map[strin... method getSearchID (line 103) | func (p *ClxiongPlugin) getSearchID(keyword string) (string, error) { method extractSearchIDFromLocation (line 180) | func (p *ClxiongPlugin) extractSearchIDFromLocation(location string) s... method getSearchResults (line 191) | func (p *ClxiongPlugin) getSearchResults(searchID, keyword string) ([]... method parseSearchResults (line 245) | func (p *ClxiongPlugin) parseSearchResults(html string) ([]model.Searc... method extractImageFromStyle (line 334) | func (p *ClxiongPlugin) extractImageFromStyle(style string) string { method fetchDetailLinksSync (line 345) | func (p *ClxiongPlugin) fetchDetailLinksSync(results []model.SearchRes... method extractDetailURLFromContent (line 449) | func (p *ClxiongPlugin) extractDetailURLFromContent(content string) st... method fetchDetailPageInfo (line 460) | func (p *ClxiongPlugin) fetchDetailPageInfo(detailURL string, movieTit... method parseDetailPageInfo (line 507) | func (p *ClxiongPlugin) parseDetailPageInfo(html string, movieTitle st... method parseUpdateTimeFromDetail (line 537) | func (p *ClxiongPlugin) parseUpdateTimeFromDetail(doc *goquery.Documen... method parseMagnetLinksFromDetailDoc (line 576) | func (p *ClxiongPlugin) parseMagnetLinksFromDetailDoc(doc *goquery.Doc... method generateUniqueID (line 628) | func (p *ClxiongPlugin) generateUniqueID(detailPath string) string { function init (line 42) | func init() { FILE: plugin/cyg/cyg.go type CygPlugin (line 41) | type CygPlugin struct method Search (line 88) | func (p *CygPlugin) Search(keyword string, ext map[string]interface{})... method SearchWithResult (line 97) | func (p *CygPlugin) SearchWithResult(keyword string, ext map[string]in... method searchImpl (line 102) | func (p *CygPlugin) searchImpl(client *http.Client, keyword string, ex... method fetchSearchResults (line 130) | func (p *CygPlugin) fetchSearchResults(client *http.Client, searchURL ... method fetchDownloadLinksAsync (line 171) | func (p *CygPlugin) fetchDownloadLinksAsync(client *http.Client, posts... method getDownloadLinks (line 218) | func (p *CygPlugin) getDownloadLinks(client *http.Client, postID int) ... method convertToSearchResult (line 263) | func (p *CygPlugin) convertToSearchResult(post CygPost, links []model.... method convertToLinks (line 276) | func (p *CygPlugin) convertToLinks(downloadData []CygDownload) []model... method determineCloudTypeByURL (line 296) | func (p *CygPlugin) determineCloudTypeByURL(url string) string { method determineCloudType (line 328) | func (p *CygPlugin) determineCloudType(name string) string { method setRequestHeaders (line 360) | func (p *CygPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 369) | func (p *CygPlugin) doRequestWithRetry(req *http.Request, client *http... method parseExtOptions (line 398) | func (p *CygPlugin) parseExtOptions(ext map[string]interface{}) CygSea... method cleanHTML (line 430) | func (p *CygPlugin) cleanHTML(htmlContent string) string { method parseDateTime (line 447) | func (p *CygPlugin) parseDateTime(dateStr string) time.Time { type CygPost (line 46) | type CygPost struct type CygDownload (line 63) | type CygDownload struct type CygSearchOptions (line 72) | type CygSearchOptions struct function init (line 80) | func init() { FILE: plugin/daishudj/daishudj.go type cacheEntry (line 50) | type cacheEntry struct constant pluginName (line 56) | pluginName = "daishudj" constant defaultPriority (line 57) | defaultPriority = 3 constant searchTimeout (line 58) | searchTimeout = 10 * time.Second constant detailTimeout (line 59) | detailTimeout = 8 * time.Second constant maxConcurrency (line 60) | maxConcurrency = 10 constant maxIdleConns (line 61) | maxIdleConns = 64 constant maxIdlePerHost (line 62) | maxIdlePerHost = 16 constant maxConnsPerHost (line 63) | maxConnsPerHost = 32 constant idleConnLifetime (line 64) | idleConnLifetime = 90 * time.Second constant tlsHandshakeTimeout (line 65) | tlsHandshakeTimeout = 10 * time.Second constant expectContinueTimeout (line 66) | expectContinueTimeout = 1 * time.Second constant maxRetries (line 67) | maxRetries = 3 constant retryBaseDelay (line 68) | retryBaseDelay = 200 * time.Millisecond type DaishuPlugin (line 72) | type DaishuPlugin struct method Search (line 91) | func (p *DaishuPlugin) Search(keyword string, ext map[string]interface... method SearchWithResult (line 100) | func (p *DaishuPlugin) SearchWithResult(keyword string, ext map[string... method searchImpl (line 120) | func (p *DaishuPlugin) searchImpl(client *http.Client, keyword string,... method fetchDetailLinks (line 216) | func (p *DaishuPlugin) fetchDetailLinks(client *http.Client, detailURL... method doRequestWithRetry (line 420) | func (p *DaishuPlugin) doRequestWithRetry(req *http.Request, client *h... function init (line 77) | func init() { function NewDaishuPlugin (line 83) | func NewDaishuPlugin() *DaishuPlugin { function newHTTPClient (line 104) | func newHTTPClient() *http.Client { function extractLinks (line 268) | func extractLinks(selection *goquery.Selection) []model.Link { function classifyLink (line 327) | func classifyLink(raw string) (string, string) { function extractPassword (line 336) | func extractPassword(node *goquery.Selection) string { function matchPassword (line 362) | func matchPassword(text string) string { function substring (line 375) | func substring(text string, start, end int) string { function extractPostID (line 385) | func extractPostID(detailURL string) string { function parseChineseDate (line 392) | func parseChineseDate(value string) time.Time { function setCommonHeaders (line 412) | func setCommonHeaders(req *http.Request, referer string) { function startCacheCleaner (line 439) | func startCacheCleaner() { FILE: plugin/ddys/ddys.go constant PluginName (line 21) | PluginName = "ddys" constant DisplayName (line 22) | DisplayName = "低端影视" constant Description (line 23) | Description = "低端影视 - 影视资源网盘链接搜索" constant BaseURL (line 24) | BaseURL = "https://ddys.pro" constant SearchPath (line 25) | SearchPath = "/?s=%s&post_type=post" constant UserAgent (line 26) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWe... constant MaxResults (line 27) | MaxResults = 50 constant MaxConcurrency (line 28) | MaxConcurrency = 20 type DdysPlugin (line 32) | type DdysPlugin struct method Name (line 58) | func (p *DdysPlugin) Name() string { method DisplayName (line 63) | func (p *DdysPlugin) DisplayName() string { method Description (line 68) | func (p *DdysPlugin) Description() string { method Search (line 73) | func (p *DdysPlugin) Search(keyword string, ext map[string]interface{}... method searchImpl (line 78) | func (p *DdysPlugin) searchImpl(client *http.Client, keyword string, e... method executeSearch (line 111) | func (p *DdysPlugin) executeSearch(client *http.Client, keyword string... method doRequestWithRetry (line 153) | func (p *DdysPlugin) doRequestWithRetry(req *http.Request, client *htt... method parseSearchResults (line 182) | func (p *DdysPlugin) parseSearchResults(doc *goquery.Document) ([]mode... method parseResultItem (line 205) | func (p *DdysPlugin) parseResultItem(s *goquery.Selection, index int) ... method extractPostID (line 269) | func (p *DdysPlugin) extractPostID(articleClass string) string { method extractPublishTime (line 280) | func (p *DdysPlugin) extractPublishTime(s *goquery.Selection) time.Time { method extractCategory (line 300) | func (p *DdysPlugin) extractCategory(s *goquery.Selection) string { method extractContent (line 309) | func (p *DdysPlugin) extractContent(s *goquery.Selection) string { method fetchDetailLinks (line 323) | func (p *DdysPlugin) fetchDetailLinks(client *http.Client, searchResul... method extractDetailURLFromContent (line 378) | func (p *DdysPlugin) extractDetailURLFromContent(content string) string { method cleanContent (line 389) | func (p *DdysPlugin) cleanContent(content string) string { method fetchDetailPageLinks (line 401) | func (p *DdysPlugin) fetchDetailPageLinks(client *http.Client, detailU... method parseNetworkDiskLinks (line 471) | func (p *DdysPlugin) parseNetworkDiskLinks(htmlContent string) []model... method extractPassword (line 534) | func (p *DdysPlugin) extractPassword(content string, panURL string) st... method determineCloudType (line 573) | func (p *DdysPlugin) determineCloudType(url string) string { function init (line 40) | func init() { function NewDdysPlugin (line 45) | func NewDdysPlugin() *DdysPlugin { FILE: plugin/discourse/discourse.go constant pluginName (line 35) | pluginName = "discourse" constant searchURLTemplate (line 37) | searchURLTemplate = "https://linux.do/search.json?q=%s%%20in%%3Atitle%%2... constant detailURLTemplate (line 38) | detailURLTemplate = "https://linux.do/t/%d.json?track_visit=true&forceLo... constant defaultPriority (line 39) | defaultPriority = 2 constant defaultTimeout (line 40) | defaultTimeout = 30 * time.Second constant defaultMaxPages (line 43) | defaultMaxPages = 1 constant maxAllowedPages (line 44) | maxAllowedPages = 10 constant pageRequestDelay (line 45) | pageRequestDelay = 500 * time.Millisecond type DiscourseAsyncPlugin (line 49) | type DiscourseAsyncPlugin struct method Search (line 148) | func (p *DiscourseAsyncPlugin) Search(keyword string, ext map[string]i... method SearchWithResult (line 157) | func (p *DiscourseAsyncPlugin) SearchWithResult(keyword string, ext ma... method searchImpl (line 163) | func (p *DiscourseAsyncPlugin) searchImpl(client *http.Client, keyword... method convertToSearchResults (line 305) | func (p *DiscourseAsyncPlugin) convertToSearchResults(resp SearchRespo... method extractNetDiskLinksFromBlurb (line 356) | func (p *DiscourseAsyncPlugin) extractNetDiskLinksFromBlurb(blurb stri... method cleanContent (line 441) | func (p *DiscourseAsyncPlugin) cleanContent(content string) string { method GetTopicDetail (line 465) | func (p *DiscourseAsyncPlugin) GetTopicDetail(topicID int) ([]model.Li... method parseNetDiskLink (line 524) | func (p *DiscourseAsyncPlugin) parseNetDiskLink(linkURL string) *model... type SearchResponse (line 55) | type SearchResponse struct type Post (line 62) | type Post struct type Topic (line 73) | type Topic struct type GroupedSearchResult (line 84) | type GroupedSearchResult struct type DetailResponse (line 91) | type DetailResponse struct type PostStream (line 99) | type PostStream struct type DetailPost (line 104) | type DetailPost struct type LinkCount (line 114) | type LinkCount struct function init (line 125) | func init() { function NewDiscourseAsyncPlugin (line 130) | func NewDiscourseAsyncPlugin() *DiscourseAsyncPlugin { function max (line 297) | func max(a, b int) int { FILE: plugin/djgou/djgou.go constant DefaultTimeout (line 35) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 36) | DetailTimeout = 6 * time.Second constant MaxConcurrency (line 39) | MaxConcurrency = 15 constant MaxIdleConns (line 42) | MaxIdleConns = 50 constant MaxIdleConnsPerHost (line 43) | MaxIdleConnsPerHost = 20 constant MaxConnsPerHost (line 44) | MaxConnsPerHost = 30 constant IdleConnTimeout (line 45) | IdleConnTimeout = 90 * time.Second constant SiteURL (line 48) | SiteURL = "https://duanjugou.top" function init (line 52) | func init() { function startCacheCleaner (line 60) | func startCacheCleaner() { type DjgouPlugin (line 72) | type DjgouPlugin struct method Search (line 98) | func (p *DjgouPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 107) | func (p *DjgouPlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 112) | func (p *DjgouPlugin) searchImpl(client *http.Client, keyword string, ... method parseSearchItem (line 183) | func (p *DjgouPlugin) parseSearchItem(s *goquery.Selection, keyword st... method parseTime (line 240) | func (p *DjgouPlugin) parseTime(timeStr string) time.Time { method enhanceWithDetails (line 265) | func (p *DjgouPlugin) enhanceWithDetails(client *http.Client, results ... method getDetailInfo (line 304) | func (p *DjgouPlugin) getDetailInfo(client *http.Client, detailURL str... method fetchDetailPage (line 336) | func (p *DjgouPlugin) fetchDetailPage(client *http.Client, detailURL s... method extractLinksFromDoc (line 386) | func (p *DjgouPlugin) extractLinksFromDoc(doc *goquery.Document) []mod... method extractContent (line 438) | func (p *DjgouPlugin) extractContent(mainContent *goquery.Selection) s... method doRequestWithRetry (line 453) | func (p *DjgouPlugin) doRequestWithRetry(req *http.Request, client *ht... function createOptimizedHTTPClient (line 78) | func createOptimizedHTTPClient() *http.Client { function NewDjgouPlugin (line 90) | func NewDjgouPlugin() *DjgouPlugin { type DetailCacheData (line 329) | type DetailCacheData struct FILE: plugin/duoduo/duoduo.go constant DefaultTimeout (line 52) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 53) | DetailTimeout = 6 * time.Second constant MaxConcurrency (line 56) | MaxConcurrency = 20 constant MaxIdleConns (line 59) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 60) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 61) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 62) | IdleConnTimeout = 90 * time.Second function init (line 76) | func init() { function startCacheCleaner (line 84) | func startCacheCleaner() { type DuoduoAsyncPlugin (line 96) | type DuoduoAsyncPlugin struct method Search (line 126) | func (p *DuoduoAsyncPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 135) | func (p *DuoduoAsyncPlugin) SearchWithResult(keyword string, ext map[s... method searchImpl (line 140) | func (p *DuoduoAsyncPlugin) searchImpl(client *http.Client, keyword st... method parseSearchItem (line 211) | func (p *DuoduoAsyncPlugin) parseSearchItem(s *goquery.Selection, keyw... method enhanceWithDetails (line 311) | func (p *DuoduoAsyncPlugin) enhanceWithDetails(client *http.Client, re... method doRequestWithRetry (line 374) | func (p *DuoduoAsyncPlugin) doRequestWithRetry(req *http.Request, clie... method fetchDetailLinksAndImages (line 403) | func (p *DuoduoAsyncPlugin) fetchDetailLinksAndImages(client *http.Cli... method fetchDetailLinks (line 505) | func (p *DuoduoAsyncPlugin) fetchDetailLinks(client *http.Client, item... method isValidNetworkDriveURL (line 511) | func (p *DuoduoAsyncPlugin) isValidNetworkDriveURL(url string) bool { method determineLinkType (line 539) | func (p *DuoduoAsyncPlugin) determineLinkType(url string) string { method GetPerformanceStats (line 585) | func (p *DuoduoAsyncPlugin) GetPerformanceStats() map[string]interface... function createOptimizedHTTPClient (line 102) | func createOptimizedHTTPClient() *http.Client { function NewDuoduoPlugin (line 118) | func NewDuoduoPlugin() *DuoduoAsyncPlugin { function min (line 577) | func min(a, b int) int { FILE: plugin/dyyj/dyyj.go constant PluginName (line 22) | PluginName = "dyyj" constant DisplayName (line 23) | DisplayName = "电影云集" constant Description (line 24) | Description = "电影云集 - 影视资源网盘链接搜索" constant BaseURL (line 25) | BaseURL = "https://bbs.dyyjmax.org" constant SearchPath (line 26) | SearchPath = "/?q=%s" constant UserAgent (line 27) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Apple... constant MaxResults (line 28) | MaxResults = 100 constant MaxConcurrency (line 29) | MaxConcurrency = 100 constant RequestTimeout (line 30) | RequestTimeout = 30 * time.Second constant MaxIdleConns (line 33) | MaxIdleConns = 100 constant MaxIdleConnsPerHost (line 34) | MaxIdleConnsPerHost = 100 constant MaxConnsPerHost (line 35) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 36) | IdleConnTimeout = 90 * time.Second constant TLSHandshakeTimeout (line 37) | TLSHandshakeTimeout = 10 * time.Second constant ExpectContinueTimeout (line 38) | ExpectContinueTimeout = 1 * time.Second type DyyjPlugin (line 82) | type DyyjPlugin struct method Name (line 129) | func (p *DyyjPlugin) Name() string { method DisplayName (line 134) | func (p *DyyjPlugin) DisplayName() string { method Description (line 139) | func (p *DyyjPlugin) Description() string { method Search (line 144) | func (p *DyyjPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 153) | func (p *DyyjPlugin) SearchWithResult(keyword string, ext map[string]i... method searchImpl (line 158) | func (p *DyyjPlugin) searchImpl(client *http.Client, keyword string, e... method executeSearch (line 202) | func (p *DyyjPlugin) executeSearch(client *http.Client, keyword string... method doRequestWithRetry (line 354) | func (p *DyyjPlugin) doRequestWithRetry(req *http.Request, client *htt... method parseSearchResults (line 396) | func (p *DyyjPlugin) parseSearchResults(doc *goquery.Document, htmlCon... method parseSearchResultsWithRegex (line 487) | func (p *DyyjPlugin) parseSearchResultsWithRegex(htmlContent string) [... method parseResultItem (line 567) | func (p *DyyjPlugin) parseResultItem(s *goquery.Selection, index int) ... method extractPostID (line 625) | func (p *DyyjPlugin) extractPostID(url string) string { method filterByTitleKeyword (line 635) | func (p *DyyjPlugin) filterByTitleKeyword(results []model.SearchResult... method fetchDetailLinks (line 667) | func (p *DyyjPlugin) fetchDetailLinks(client *http.Client, searchResul... method extractDetailURLFromContent (line 749) | func (p *DyyjPlugin) extractDetailURLFromContent(content string) string { method cleanContent (line 760) | func (p *DyyjPlugin) cleanContent(content string) string { method fetchDetailPageLinks (line 772) | func (p *DyyjPlugin) fetchDetailPageLinks(client *http.Client, detailU... method extractPublishTime (line 878) | func (p *DyyjPlugin) extractPublishTime(htmlContent string) time.Time { method parseNetworkDiskLinks (line 912) | func (p *DyyjPlugin) parseNetworkDiskLinks(htmlContent string) []model... method parseNetworkDiskLinksWithRegex (line 1040) | func (p *DyyjPlugin) parseNetworkDiskLinksWithRegex(htmlContent string... method isNetworkDiskName (line 1108) | func (p *DyyjPlugin) isNetworkDiskName(text string) bool { method extractPasswordFromURL (line 1124) | func (p *DyyjPlugin) extractPasswordFromURL(linkURL string) string { method determineCloudType (line 1144) | func (p *DyyjPlugin) determineCloudType(url string) string { function init (line 91) | func init() { function NewDyyjPlugin (line 96) | func NewDyyjPlugin() *DyyjPlugin { function createOptimizedHTTPClient (line 110) | func createOptimizedHTTPClient() *http.Client { type cacheItem (line 871) | type cacheItem struct FILE: plugin/erxiao/erxiao.go constant DefaultTimeout (line 21) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 22) | DetailTimeout = 6 * time.Second constant MaxIdleConns (line 25) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 26) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 27) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 28) | IdleConnTimeout = 90 * time.Second constant MaxConcurrency (line 31) | MaxConcurrency = 20 constant cacheTTL (line 34) | cacheTTL = 1 * time.Hour function init (line 53) | func init() { type ErxiaoAsyncPlugin (line 81) | type ErxiaoAsyncPlugin struct method Search (line 110) | func (p *ErxiaoAsyncPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 119) | func (p *ErxiaoAsyncPlugin) SearchWithResult(keyword string, ext map[s... method searchImpl (line 124) | func (p *ErxiaoAsyncPlugin) searchImpl(client *http.Client, keyword st... method parseSearchItem (line 193) | func (p *ErxiaoAsyncPlugin) parseSearchItem(s *goquery.Selection, keyw... method enhanceWithDetails (line 294) | func (p *ErxiaoAsyncPlugin) enhanceWithDetails(client *http.Client, re... method fetchDetailLinksAndImages (line 354) | func (p *ErxiaoAsyncPlugin) fetchDetailLinksAndImages(client *http.Cli... method isValidNetworkDriveURL (line 428) | func (p *ErxiaoAsyncPlugin) isValidNetworkDriveURL(url string) bool { method determineLinkType (line 440) | func (p *ErxiaoAsyncPlugin) determineLinkType(url string) string { method extractPassword (line 472) | func (p *ErxiaoAsyncPlugin) extractPassword(url string) string { method doRequestWithRetry (line 481) | func (p *ErxiaoAsyncPlugin) doRequestWithRetry(req *http.Request, clie... method GetPerformanceStats (line 507) | func (p *ErxiaoAsyncPlugin) GetPerformanceStats() map[string]interface... function createOptimizedHTTPClient (line 87) | func createOptimizedHTTPClient() *http.Client { function NewErxiaoPlugin (line 102) | func NewErxiaoPlugin() *ErxiaoAsyncPlugin { FILE: plugin/feikuai/feikuai.go constant SearchAPIURL (line 20) | SearchAPIURL = "https://feikuai.tv/t_search/bm_search.php?kw=%s" constant DefaultTimeout (line 23) | DefaultTimeout = 15 * time.Second constant MaxIdleConns (line 26) | MaxIdleConns = 100 constant MaxIdleConnsPerHost (line 27) | MaxIdleConnsPerHost = 30 constant MaxConnsPerHost (line 28) | MaxConnsPerHost = 50 constant IdleConnTimeout (line 29) | IdleConnTimeout = 90 * time.Second type FeikuaiPlugin (line 45) | type FeikuaiPlugin struct method Search (line 79) | func (p *FeikuaiPlugin) Search(keyword string, ext map[string]interfac... method SearchWithResult (line 88) | func (p *FeikuaiPlugin) SearchWithResult(keyword string, ext map[strin... method searchImpl (line 93) | func (p *FeikuaiPlugin) searchImpl(client *http.Client, keyword string... method parseTorrent (line 197) | func (p *FeikuaiPlugin) parseTorrent(keyword string, item FeikuaiAPIIt... method buildWorkTitle (line 236) | func (p *FeikuaiPlugin) buildWorkTitle(keyword, fileName string) string { method cleanFileName (line 250) | func (p *FeikuaiPlugin) cleanFileName(fileName string) string { method containsKeywords (line 266) | func (p *FeikuaiPlugin) containsKeywords(keyword, text string) bool { method splitKeywords (line 281) | func (p *FeikuaiPlugin) splitKeywords(keyword string) []string { method buildContent (line 314) | func (p *FeikuaiPlugin) buildContent(item FeikuaiAPIItem, torrent Feik... method extractTags (line 336) | func (p *FeikuaiPlugin) extractTags(title, fileName string) []string { method parsePublishedTime (line 370) | func (p *FeikuaiPlugin) parsePublishedTime(timeStr string) time.Time { method doRequestWithRetry (line 395) | func (p *FeikuaiPlugin) doRequestWithRetry(req *http.Request, client *... function createOptimizedHTTPClient (line 51) | func createOptimizedHTTPClient() *http.Client { function NewFeikuaiPlugin (line 67) | func NewFeikuaiPlugin() *FeikuaiPlugin { function init (line 74) | func init() { type FeikuaiAPIResponse (line 164) | type FeikuaiAPIResponse struct type FeikuaiAPIItem (line 173) | type FeikuaiAPIItem struct type FeikuaiTorrent (line 182) | type FeikuaiTorrent struct FILE: plugin/fox4k/fox4k.go constant BaseURL (line 28) | BaseURL = "https://4kfox.com" constant SearchURL (line 33) | SearchURL = BaseURL + "/search/%s-------------.html" constant SearchPageURL (line 36) | SearchPageURL = BaseURL + "/search/%s----------%d---.html" constant DetailURL (line 39) | DetailURL = BaseURL + "/video/%s.html" constant DefaultTimeout (line 42) | DefaultTimeout = 15 * time.Second constant DefaultHTTPProxy (line 45) | DefaultHTTPProxy = "http://154.219.110.34:51422" constant DefaultSocks5Proxy (line 46) | DefaultSocks5Proxy = "socks5://154.219.110.34:51423" constant DebugMode (line 49) | DebugMode = false constant ProxyEnabled (line 52) | ProxyEnabled = false constant MaxConcurrency (line 55) | MaxConcurrency = 50 constant MaxPages (line 58) | MaxPages = 10 constant MaxIdleConns (line 61) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 62) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 63) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 64) | IdleConnTimeout = 90 * time.Second type detailPageResponse (line 121) | type detailPageResponse struct type Fox4kPlugin (line 131) | type Fox4kPlugin struct method Search (line 240) | func (p *Fox4kPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 249) | func (p *Fox4kPlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 269) | func (p *Fox4kPlugin) searchImpl(client *http.Client, keyword string, ... method searchPage (line 341) | func (p *Fox4kPlugin) searchPage(client *http.Client, encodedKeyword s... method parseTotalPages (line 469) | func (p *Fox4kPlugin) parseTotalPages(doc *goquery.Document) int { method parseSearchResultItem (line 492) | func (p *Fox4kPlugin) parseSearchResultItem(s *goquery.Selection) *mod... method enrichWithDetailInfo (line 604) | func (p *Fox4kPlugin) enrichWithDetailInfo(results []model.SearchResul... method getDetailInfo (line 673) | func (p *Fox4kPlugin) getDetailInfo(id string, client *http.Client) *d... method GetPerformanceStats (line 775) | func (p *Fox4kPlugin) GetPerformanceStats() map[string]interface{} { method extractDownloadLinks (line 802) | func (p *Fox4kPlugin) extractDownloadLinks(doc *goquery.Document, deta... method processFoundLink (line 871) | func (p *Fox4kPlugin) processFoundLink(detail *detailPageResponse, lin... method extractLinksFromText (line 904) | func (p *Fox4kPlugin) extractLinksFromText(detail *detailPageResponse,... method extractPasswordFromLink (line 935) | func (p *Fox4kPlugin) extractPasswordFromLink(link string) string { method extractPasswordFromText (line 946) | func (p *Fox4kPlugin) extractPasswordFromText(text, link string) string { method addDownloadLink (line 963) | func (p *Fox4kPlugin) addDownloadLink(detail *detailPageResponse, link... method doRequestWithRetry (line 991) | func (p *Fox4kPlugin) doRequestWithRetry(req *http.Request, client *ht... function createProxyTransport (line 137) | func createProxyTransport(proxyURL string) (*http.Transport, error) { function createOptimizedHTTPClient (line 175) | func createOptimizedHTTPClient() *http.Client { function NewFox4kPlugin (line 205) | func NewFox4kPlugin() *Fox4kPlugin { function debugPrintf (line 213) | func debugPrintf(format string, args ...interface{}) { function init (line 220) | func init() { function startCacheCleaner (line 228) | func startCacheCleaner() { function getRandomUA (line 1052) | func getRandomUA() string { function generateRandomIP (line 1067) | func generateRandomIP() string { FILE: plugin/gying/gying.go constant MaxConcurrentUsers (line 36) | MaxConcurrentUsers = 10 constant MaxConcurrentDetails (line 37) | MaxConcurrentDetails = 50 constant DebugLog (line 38) | DebugLog = false constant HTMLTemplate (line 57) | HTMLTemplate = ` type GyingPlugin (line 369) | type GyingPlugin struct method Initialize (line 433) | func (p *GyingPlugin) Initialize() error { method RegisterWebRoutes (line 473) | func (p *GyingPlugin) RegisterWebRoutes(router *gin.RouterGroup) { method Search (line 482) | func (p *GyingPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 495) | func (p *GyingPlugin) SearchWithResult(keyword string, ext map[string]... method loadAllUsers (line 559) | func (p *GyingPlugin) loadAllUsers() { method initDefaultAccounts (line 616) | func (p *GyingPlugin) initDefaultAccounts() { method initOrRestoreUser (line 662) | func (p *GyingPlugin) initOrRestoreUser(username, password, source str... method getUserByHash (line 721) | func (p *GyingPlugin) getUserByHash(hash string) (*User, bool) { method saveUser (line 730) | func (p *GyingPlugin) saveUser(user *User) error { method persistUser (line 736) | func (p *GyingPlugin) persistUser(user *User) error { method deleteUser (line 746) | func (p *GyingPlugin) deleteUser(hash string) error { method getActiveUsers (line 753) | func (p *GyingPlugin) getActiveUsers() []*User { method handleManagePage (line 770) | func (p *GyingPlugin) handleManagePage(c *gin.Context) { method handleManagePagePOST (line 784) | func (p *GyingPlugin) handleManagePagePOST(c *gin.Context) { method handleGetStatus (line 814) | func (p *GyingPlugin) handleGetStatus(c *gin.Context, hash string) { method handleLogin (line 855) | func (p *GyingPlugin) handleLogin(c *gin.Context, hash string, reqData... method handleLogout (line 910) | func (p *GyingPlugin) handleLogout(c *gin.Context, hash string) { method handleTestSearch (line 931) | func (p *GyingPlugin) handleTestSearch(c *gin.Context, hash string, re... method encryptPassword (line 998) | func (p *GyingPlugin) encryptPassword(password string) (string, error) { method decryptPassword (line 1027) | func (p *GyingPlugin) decryptPassword(encrypted string) (string, error) { method createScraperWithCookies (line 1066) | func (p *GyingPlugin) createScraperWithCookies(cookieStr string) (*clo... method doLogin (line 1173) | func (p *GyingPlugin) doLogin(username, password string) (*cloudscrape... method reloginUser (line 1419) | func (p *GyingPlugin) reloginUser(user *User) error { method executeSearchTasks (line 1467) | func (p *GyingPlugin) executeSearchTasks(users []*User, keyword string... method searchWithScraperWithRetry (line 1534) | func (p *GyingPlugin) searchWithScraperWithRetry(keyword string, scrap... method searchWithScraper (line 1576) | func (p *GyingPlugin) searchWithScraper(keyword string, scraper *cloud... method fetchAllDetails (line 1720) | func (p *GyingPlugin) fetchAllDetails(searchData *SearchData, scraper ... method fetchDetail (line 1845) | func (p *GyingPlugin) fetchDetail(resourceID, resourceType string, scr... method buildResult (line 1924) | func (p *GyingPlugin) buildResult(detail *DetailData, searchData *Sear... method parseUpdateTime (line 1994) | func (p *GyingPlugin) parseUpdateTime(timeStrs []string) time.Time { method parseRelativeTime (line 2053) | func (p *GyingPlugin) parseRelativeTime(timeStr string, baseTime time.... method extractPanLinks (line 2097) | func (p *GyingPlugin) extractPanLinks(detail *DetailData) []model.Link { method determineLinkType (line 2155) | func (p *GyingPlugin) determineLinkType(linkURL string) string { method extractPasswordFromURL (line 2181) | func (p *GyingPlugin) extractPasswordFromURL(linkURL string) string { method deduplicateResults (line 2202) | func (p *GyingPlugin) deduplicateResults(results []model.SearchResult)... method generateHash (line 2219) | func (p *GyingPlugin) generateHash(username string) string { method maskUsername (line 2230) | func (p *GyingPlugin) maskUsername(username string) string { method isHexString (line 2241) | func (p *GyingPlugin) isHexString(s string) bool { method startSessionKeepAlive (line 2333) | func (p *GyingPlugin) startSessionKeepAlive() { method keepAllSessionsAlive (line 2348) | func (p *GyingPlugin) keepAllSessionsAlive() { method startCleanupTask (line 2392) | func (p *GyingPlugin) startCleanupTask() { method cleanupExpiredUsers (line 2404) | func (p *GyingPlugin) cleanupExpiredUsers() int { method markInactiveUsers (line 2422) | func (p *GyingPlugin) markInactiveUsers() int { type User (line 379) | type User struct type SearchData (line 393) | type SearchData struct type DetailData (line 409) | type DetailData struct function init (line 424) | func init() { function parseCookieString (line 1147) | func parseCookieString(cookieStr string) map[string]string { function min (line 1409) | func min(a, b int) int { function respondSuccess (line 2251) | func respondSuccess(c *gin.Context, message string, data interface{}) { function respondError (line 2260) | func respondError(c *gin.Context, message string) { function getEncryptionKey (line 2270) | func getEncryptionKey() []byte { function encryptCookie (line 2278) | func encryptCookie(plaintext string) (string, error) { function decryptCookie (line 2299) | func decryptCookie(encrypted string) (string, error) { FILE: plugin/haisou/haisou.go constant DebugLog (line 21) | DebugLog = false constant DefaultPagesPerType (line 23) | DefaultPagesPerType = 2 constant MaxAllowedPagesPerType (line 25) | MaxAllowedPagesPerType = 3 type HaisouPlugin (line 32) | type HaisouPlugin struct method Search (line 93) | func (p *HaisouPlugin) Search(keyword string, ext map[string]interface... method SearchWithResult (line 102) | func (p *HaisouPlugin) SearchWithResult(keyword string, ext map[string... method searchImpl (line 107) | func (p *HaisouPlugin) searchImpl(client *http.Client, keyword string,... method fetchSearchPage (line 312) | func (p *HaisouPlugin) fetchSearchPage(client *http.Client, keyword st... method fetchShareLink (line 375) | func (p *HaisouPlugin) fetchShareLink(client *http.Client, hsid string... method doRequestWithRetry (line 449) | func (p *HaisouPlugin) doRequestWithRetry(req *http.Request, client *h... type SearchAPIResponse (line 37) | type SearchAPIResponse struct type ShareItem (line 51) | type ShareItem struct type FetchAPIResponse (line 60) | type FetchAPIResponse struct type PageResult (line 70) | type PageResult struct type LinkResult (line 78) | type LinkResult struct function init (line 85) | func init() { function buildShareURL (line 478) | func buildShareURL(platform, shareCode string) string { function mapPlatformType (line 496) | func mapPlatformType(platform string) string { function cleanHTMLTags (line 514) | func cleanHTMLTags(text string) string { function formatSize (line 527) | func formatSize(size int64) string { FILE: plugin/hdmoli/hdmoli.go constant PluginName (line 21) | PluginName = "hdmoli" constant DisplayName (line 22) | DisplayName = "HDmoli" constant Description (line 23) | Description = "HDmoli - 影视资源网盘下载链接搜索" constant BaseURL (line 24) | BaseURL = "https://www.hdmoli.pro" constant SearchPath (line 25) | SearchPath = "/search.php?searchkey=%s&submit=" constant UserAgent (line 26) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleW... constant MaxResults (line 27) | MaxResults = 50 constant MaxConcurrency (line 28) | MaxConcurrency = 20 type HdmoliPlugin (line 32) | type HdmoliPlugin struct method Name (line 58) | func (p *HdmoliPlugin) Name() string { method DisplayName (line 63) | func (p *HdmoliPlugin) DisplayName() string { method Description (line 68) | func (p *HdmoliPlugin) Description() string { method Search (line 73) | func (p *HdmoliPlugin) Search(keyword string, ext map[string]interface... method searchImpl (line 78) | func (p *HdmoliPlugin) searchImpl(client *http.Client, keyword string,... method executeSearch (line 111) | func (p *HdmoliPlugin) executeSearch(client *http.Client, keyword stri... method doRequestWithRetry (line 153) | func (p *HdmoliPlugin) doRequestWithRetry(req *http.Request, client *h... method parseSearchResults (line 182) | func (p *HdmoliPlugin) parseSearchResults(doc *goquery.Document) ([]mo... method parseResultItem (line 205) | func (p *HdmoliPlugin) parseResultItem(s *goquery.Selection, index int... method extractRating (line 329) | func (p *HdmoliPlugin) extractRating(s *goquery.Selection) string { method extractUpdateStatus (line 339) | func (p *HdmoliPlugin) extractUpdateStatus(s *goquery.Selection) string { method extractDirector (line 349) | func (p *HdmoliPlugin) extractDirector(s *goquery.Selection) string { method extractActors (line 368) | func (p *HdmoliPlugin) extractActors(s *goquery.Selection) []string { method extractCategoryInfo (line 386) | func (p *HdmoliPlugin) extractCategoryInfo(s *goquery.Selection) (cate... method extractDescription (line 422) | func (p *HdmoliPlugin) extractDescription(s *goquery.Selection) string { method fetchDetailLinks (line 446) | func (p *HdmoliPlugin) fetchDetailLinks(client *http.Client, searchRes... method extractDetailURLFromContent (line 501) | func (p *HdmoliPlugin) extractDetailURLFromContent(content string) str... method cleanContent (line 512) | func (p *HdmoliPlugin) cleanContent(content string) string { method fetchDetailPageLinks (line 524) | func (p *HdmoliPlugin) fetchDetailPageLinks(client *http.Client, detai... method parseNetworkDiskLinks (line 594) | func (p *HdmoliPlugin) parseNetworkDiskLinks(htmlContent string) []mod... method parseNetworkDiskLinksWithRegex (line 655) | func (p *HdmoliPlugin) parseNetworkDiskLinksWithRegex(htmlContent stri... method extractPasswordFromQuarkURL (line 691) | func (p *HdmoliPlugin) extractPasswordFromQuarkURL(panURL string) stri... method extractPasswordFromBaiduURL (line 697) | func (p *HdmoliPlugin) extractPasswordFromBaiduURL(panURL string) stri... function init (line 40) | func init() { function NewHdmoliPlugin (line 45) | func NewHdmoliPlugin() *HdmoliPlugin { FILE: plugin/hdr4k/hdr4k.go type cachedResponse (line 47) | type cachedResponse struct function init (line 53) | func init() { function startCacheCleaner (line 65) | func startCacheCleaner() { function getRandomUA (line 80) | func getRandomUA() string { constant SearchURL (line 86) | SearchURL = "https://www.4khdr.cn/search.php?mod=forum" constant ThreadURLPattern (line 88) | ThreadURLPattern = "https://www.4khdr.cn/thread-%s-1-1.html" constant DefaultTimeout (line 90) | DefaultTimeout = 10 * time.Second constant MaxRetries (line 92) | MaxRetries = 2 constant MaxConcurrency (line 94) | MaxConcurrency = 20 type Hdr4kAsyncPlugin (line 98) | type Hdr4kAsyncPlugin struct method Search (line 110) | func (p *Hdr4kAsyncPlugin) Search(keyword string, ext map[string]inter... method SearchWithResult (line 119) | func (p *Hdr4kAsyncPlugin) SearchWithResult(keyword string, ext map[st... method doSearch (line 124) | func (p *Hdr4kAsyncPlugin) doSearch(client *http.Client, keyword strin... method isEmptyRequestPost (line 321) | func (p *Hdr4kAsyncPlugin) isEmptyRequestPost(title string, links []mo... method getLinksFromDetail (line 372) | func (p *Hdr4kAsyncPlugin) getLinksFromDetail(client *http.Client, pos... method determineLinkType (line 490) | func (p *Hdr4kAsyncPlugin) determineLinkType(url, name string) string { method doRequestWithRetry (line 577) | func (p *Hdr4kAsyncPlugin) doRequestWithRetry(client *http.Client, req... method isRetriableError (line 608) | func (p *Hdr4kAsyncPlugin) isRetriableError(err error) bool { method parseDateTime (line 626) | func (p *Hdr4kAsyncPlugin) parseDateTime(dateStr string) (time.Time, e... method cleanHTML (line 645) | func (p *Hdr4kAsyncPlugin) cleanHTML(html string) string { function NewHdr4kAsyncPlugin (line 103) | func NewHdr4kAsyncPlugin() *Hdr4kAsyncPlugin { FILE: plugin/huban/huban.go constant DefaultTimeout (line 21) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 22) | DetailTimeout = 6 * time.Second constant MaxIdleConns (line 25) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 26) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 27) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 28) | IdleConnTimeout = 90 * time.Second constant MaxConcurrency (line 31) | MaxConcurrency = 20 constant cacheTTL (line 34) | cacheTTL = 1 * time.Hour constant EnableRefererCheck (line 37) | EnableRefererCheck = false constant DebugLog (line 40) | DebugLog = false function init (line 70) | func init() { type HubanAsyncPlugin (line 102) | type HubanAsyncPlugin struct method Search (line 132) | func (p *HubanAsyncPlugin) Search(keyword string, ext map[string]inter... method SearchWithResult (line 168) | func (p *HubanAsyncPlugin) SearchWithResult(keyword string, ext map[st... method searchImpl (line 173) | func (p *HubanAsyncPlugin) searchImpl(client *http.Client, keyword str... method parseSearchItem (line 242) | func (p *HubanAsyncPlugin) parseSearchItem(s *goquery.Selection, keywo... method enhanceWithDetails (line 342) | func (p *HubanAsyncPlugin) enhanceWithDetails(client *http.Client, res... method fetchDetailLinksAndImages (line 402) | func (p *HubanAsyncPlugin) fetchDetailLinksAndImages(client *http.Clie... method isValidNetworkDriveURL (line 478) | func (p *HubanAsyncPlugin) isValidNetworkDriveURL(url string) bool { method determineLinkType (line 505) | func (p *HubanAsyncPlugin) determineLinkType(url string) string { method extractPassword (line 543) | func (p *HubanAsyncPlugin) extractPassword(url string) string { method doRequestWithRetry (line 558) | func (p *HubanAsyncPlugin) doRequestWithRetry(req *http.Request, clien... method GetPerformanceStats (line 584) | func (p *HubanAsyncPlugin) GetPerformanceStats() map[string]interface{} { function createOptimizedHTTPClient (line 108) | func createOptimizedHTTPClient() *http.Client { function NewHubanPlugin (line 124) | func NewHubanPlugin() *HubanAsyncPlugin { function AddAllowedReferer (line 615) | func AddAllowedReferer(referer string) { function RemoveAllowedReferer (line 625) | func RemoveAllowedReferer(referer string) { function GetAllowedReferers (line 635) | func GetAllowedReferers() []string { function IsRefererAllowed (line 642) | func IsRefererAllowed(referer string) bool { FILE: plugin/hunhepan/hunhepan.go function debugLog (line 20) | func debugLog(format string, args ...interface{}) { function init (line 27) | func init() { constant HunhepanAPI (line 34) | HunhepanAPI = "https://hunhepan.com/open/search/disk" constant QkpansoAPI (line 35) | QkpansoAPI = "https://qkpanso.com/v1/search/disk" constant KuakeAPI (line 36) | KuakeAPI = "https://kuake8.com/v1/search/disk" constant MisosoAPI (line 37) | MisosoAPI = "https://www.misoso.cc/v1/search/disk" constant DefaultPageSize (line 40) | DefaultPageSize = 30 type HunhepanAsyncPlugin (line 44) | type HunhepanAsyncPlugin struct method Search (line 56) | func (p *HunhepanAsyncPlugin) Search(keyword string, ext map[string]in... method SearchWithResult (line 65) | func (p *HunhepanAsyncPlugin) SearchWithResult(keyword string, ext map... method doSearch (line 70) | func (p *HunhepanAsyncPlugin) doSearch(client *http.Client, keyword st... method searchAPI (line 165) | func (p *HunhepanAsyncPlugin) searchAPI(client *http.Client, apiURL, k... method deduplicateItems (line 310) | func (p *HunhepanAsyncPlugin) deduplicateItems(items []HunhepanItem) [... method convertResults (line 365) | func (p *HunhepanAsyncPlugin) convertResults(items []HunhepanItem) []m... method convertDiskType (line 424) | func (p *HunhepanAsyncPlugin) convertDiskType(diskType string) string { function NewHunhepanAsyncPlugin (line 49) | func NewHunhepanAsyncPlugin() *HunhepanAsyncPlugin { function min (line 302) | func min(a, b int) int { function cleanTitle (line 452) | func cleanTitle(title string) string { type HunhepanResponse (line 475) | type HunhepanResponse struct type HunhepanItem (line 486) | type HunhepanItem struct FILE: plugin/javdb/javdb.go constant PluginName (line 24) | PluginName = "javdb" constant DisplayName (line 25) | DisplayName = "JavDB" constant Description (line 26) | Description = "JavDB - 影片数据库,专门提供磁力链接搜索" constant BaseURL (line 27) | BaseURL = "https://javdb.com" constant SearchPath (line 28) | SearchPath = "/search?q=%s&f=all" constant UserAgent (line 29) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) A... constant MaxResults (line 30) | MaxResults = 50 constant MaxConcurrency (line 31) | MaxConcurrency = 10 constant MaxRetryOnRateLimit (line 34) | MaxRetryOnRateLimit = 0 constant MinRetryDelay (line 35) | MinRetryDelay = 4 constant MaxRetryDelay (line 36) | MaxRetryDelay = 8 type JavdbPlugin (line 40) | type JavdbPlugin struct method Name (line 71) | func (p *JavdbPlugin) Name() string { method DisplayName (line 76) | func (p *JavdbPlugin) DisplayName() string { method Description (line 81) | func (p *JavdbPlugin) Description() string { method SkipServiceFilter (line 86) | func (p *JavdbPlugin) SkipServiceFilter() bool { method Search (line 91) | func (p *JavdbPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 100) | func (p *JavdbPlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 105) | func (p *JavdbPlugin) searchImpl(client *http.Client, keyword string, ... method executeSearchWithRateLimit (line 150) | func (p *JavdbPlugin) executeSearchWithRateLimit(client *http.Client, ... method doRequestWithRetry (line 246) | func (p *JavdbPlugin) doRequestWithRetry(req *http.Request, client *ht... method doRequestWithRateLimitRetry (line 275) | func (p *JavdbPlugin) doRequestWithRateLimitRetry(req *http.Request, c... method parseSearchResults (line 332) | func (p *JavdbPlugin) parseSearchResults(doc *goquery.Document) ([]mod... method parseResultItem (line 401) | func (p *JavdbPlugin) parseResultItem(s *goquery.Selection, index int)... method extractVideoInfo (line 511) | func (p *JavdbPlugin) extractVideoInfo(s *goquery.Selection) (videoNum... method extractRating (line 530) | func (p *JavdbPlugin) extractRating(s *goquery.Selection) string { method extractReleaseDate (line 543) | func (p *JavdbPlugin) extractReleaseDate(s *goquery.Selection) string { method extractTags (line 553) | func (p *JavdbPlugin) extractTags(s *goquery.Selection) []string { method cleanTitle (line 565) | func (p *JavdbPlugin) cleanTitle(title string) string { method parseTime (line 573) | func (p *JavdbPlugin) parseTime(dateStr string) time.Time { method fetchDetailMagnetLinks (line 596) | func (p *JavdbPlugin) fetchDetailMagnetLinks(client *http.Client, sear... method extractDetailURLFromContent (line 761) | func (p *JavdbPlugin) extractDetailURLFromContent(content string) stri... method cleanContent (line 772) | func (p *JavdbPlugin) cleanContent(content string) string { method fetchDetailPageMagnetLinks (line 784) | func (p *JavdbPlugin) fetchDetailPageMagnetLinks(client *http.Client, ... method parseMagnetLinks (line 891) | func (p *JavdbPlugin) parseMagnetLinks(htmlContent string) []model.Link { function init (line 50) | func init() { function NewJavdbPlugin (line 55) | func NewJavdbPlugin() *JavdbPlugin { FILE: plugin/jikepan/jikepan.go function init (line 16) | func init() { constant JikepanAPIURL (line 23) | JikepanAPIURL = "https://api.jikepan.xyz/search" type JikepanAsyncV2Plugin (line 27) | type JikepanAsyncV2Plugin struct method Search (line 39) | func (p *JikepanAsyncV2Plugin) Search(keyword string, ext map[string]i... method SearchWithResult (line 48) | func (p *JikepanAsyncV2Plugin) SearchWithResult(keyword string, ext ma... method doSearch (line 53) | func (p *JikepanAsyncV2Plugin) doSearch(client *http.Client, keyword s... method convertResults (line 112) | func (p *JikepanAsyncV2Plugin) convertResults(items []JikepanItem) []m... method convertLinkType (line 162) | func (p *JikepanAsyncV2Plugin) convertLinkType(service string) string { function NewJikepanAsyncV2Plugin (line 32) | func NewJikepanAsyncV2Plugin() *JikepanAsyncV2Plugin { type JikepanResponse (line 197) | type JikepanResponse struct type JikepanItem (line 203) | type JikepanItem struct type JikepanLink (line 209) | type JikepanLink struct FILE: plugin/jsnoteclub/jsnoteclub.go constant pluginName (line 21) | pluginName = "jsnoteclub" constant defaultPriority (line 22) | defaultPriority = 2 constant postsCacheTTL (line 24) | postsCacheTTL = time.Hour constant detailCacheTTL (line 25) | detailCacheTTL = time.Hour constant maxMatchedPosts (line 26) | maxMatchedPosts = 30 constant maxDetailWorkers (line 27) | maxDetailWorkers = 8 constant requestTimeout (line 28) | requestTimeout = 12 * time.Second constant detailTimeout (line 29) | detailTimeout = 10 * time.Second constant httpMaxIdleConns (line 30) | httpMaxIdleConns = 64 constant httpMaxIdlePerHost (line 31) | httpMaxIdlePerHost = 16 constant httpMaxConnsPerHost (line 32) | httpMaxConnsPerHost = 32 constant retryBaseDelay (line 33) | retryBaseDelay = 200 * time.Millisecond constant maxRequestRetries (line 34) | maxRequestRetries = 3 type detailCacheEntry (line 75) | type detailCacheEntry struct type JsNoteClubPlugin (line 81) | type JsNoteClubPlugin struct method Search (line 100) | func (p *JsNoteClubPlugin) Search(keyword string, ext map[string]inter... method SearchWithResult (line 109) | func (p *JsNoteClubPlugin) SearchWithResult(keyword string, ext map[st... method searchImpl (line 113) | func (p *JsNoteClubPlugin) searchImpl(client *http.Client, keyword str... method getAllPosts (line 188) | func (p *JsNoteClubPlugin) getAllPosts(client *http.Client) ([]ghostPo... method fetchDataKey (line 223) | func (p *JsNoteClubPlugin) fetchDataKey(client *http.Client) (string, ... method fetchPosts (line 263) | func (p *JsNoteClubPlugin) fetchPosts(client *http.Client, dataKey str... method fetchDetailLinks (line 299) | func (p *JsNoteClubPlugin) fetchDetailLinks(client *http.Client, detai... method doRequestWithRetry (line 495) | func (p *JsNoteClubPlugin) doRequestWithRetry(req *http.Request, clien... function init (line 86) | func init() { function NewJsNoteClubPlugin (line 92) | func NewJsNoteClubPlugin() *JsNoteClubPlugin { function extractLinksFromSelection (line 357) | func extractLinksFromSelection(sel *goquery.Selection) []model.Link { function classifyLink (line 415) | func classifyLink(raw string) (string, string) { function extractPassword (line 424) | func extractPassword(node *goquery.Selection) string { function matchPassword (line 448) | func matchPassword(text string) string { function substring (line 461) | func substring(text string, start, end int) string { function filterPostsByKeyword (line 471) | func filterPostsByKeyword(posts []ghostPost, keyword string) []ghostPost { function newHTTPClient (line 515) | func newHTTPClient() *http.Client { function setHTMLHeaders (line 528) | func setHTMLHeaders(req *http.Request, referer string) { function setAPIHeaders (line 536) | func setAPIHeaders(req *http.Request, referer string) { function startDetailCacheCleaner (line 544) | func startDetailCacheCleaner() { type ghostPostsResponse (line 560) | type ghostPostsResponse struct type ghostPost (line 564) | type ghostPost struct method updatedAtTime (line 574) | func (p ghostPost) updatedAtTime() time.Time { FILE: plugin/jutoushe/jutoushe.go type JutoushePlugin (line 19) | type JutoushePlugin struct method Search (line 31) | func (p *JutoushePlugin) Search(keyword string, ext map[string]interfa... method SearchWithResult (line 40) | func (p *JutoushePlugin) SearchWithResult(keyword string, ext map[stri... method searchImpl (line 45) | func (p *JutoushePlugin) searchImpl(client *http.Client, keyword strin... method doRequestWithRetry (line 132) | func (p *JutoushePlugin) doRequestWithRetry(req *http.Request, client ... method getDetailLinks (line 161) | func (p *JutoushePlugin) getDetailLinks(client *http.Client, detailURL... method determineCloudType (line 221) | func (p *JutoushePlugin) determineCloudType(url string) string { method extractPassword (line 249) | func (p *JutoushePlugin) extractPassword(url string) string { method isValidNetworkDriveURL (line 264) | func (p *JutoushePlugin) isValidNetworkDriveURL(url string) bool { method extractIDFromURL (line 292) | func (p *JutoushePlugin) extractIDFromURL(urlPath string) string { method extractTags (line 305) | func (p *JutoushePlugin) extractTags(title string) []string { method parseDate (line 326) | func (p *JutoushePlugin) parseDate(dateStr string) time.Time { function init (line 23) | func init() { FILE: plugin/kkmao/kkmao.go type detailCacheEntry (line 34) | type detailCacheEntry struct constant pluginName (line 40) | pluginName = "kkmao" constant defaultPriority (line 41) | defaultPriority = 2 constant searchTimeout (line 42) | searchTimeout = 12 * time.Second constant detailTimeout (line 43) | detailTimeout = 10 * time.Second constant maxConcurrency (line 44) | maxConcurrency = 8 constant maxIdleConns (line 45) | maxIdleConns = 64 constant maxIdlePerHost (line 46) | maxIdlePerHost = 8 constant maxConnsPerHost (line 47) | maxConnsPerHost = 32 constant idleConnLifetime (line 48) | idleConnLifetime = 90 * time.Second constant tlsHandshakeTimeout (line 49) | tlsHandshakeTimeout = 10 * time.Second constant expectContinueTimeout (line 50) | expectContinueTimeout = 1 * time.Second constant searchMaxRetries (line 52) | searchMaxRetries = 3 constant detailMaxRetries (line 53) | detailMaxRetries = 2 constant retryBaseDelay (line 54) | retryBaseDelay = 200 * time.Millisecond type KkMaoPlugin (line 58) | type KkMaoPlugin struct method Search (line 77) | func (p *KkMaoPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 86) | func (p *KkMaoPlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 106) | func (p *KkMaoPlugin) searchImpl(client *http.Client, keyword string, ... method fetchDetailLinks (line 229) | func (p *KkMaoPlugin) fetchDetailLinks(client *http.Client, detailURL,... method doRequestWithRetry (line 362) | func (p *KkMaoPlugin) doRequestWithRetry(req *http.Request, client *ht... function init (line 63) | func init() { function NewKkMaoPlugin (line 69) | func NewKkMaoPlugin() *KkMaoPlugin { function newHTTPClient (line 90) | func newHTTPClient() *http.Client { function extractArticleID (line 200) | func extractArticleID(detailURL string) string { function parsePublishTime (line 208) | func parsePublishTime(value string) time.Time { function extractQuarkLinks (line 273) | func extractQuarkLinks(doc *goquery.Document) []model.Link { function extractPassword (line 308) | func extractPassword(link *goquery.Selection) string { function matchPassword (line 339) | func matchPassword(text string) string { function setCommonHeaders (line 354) | func setCommonHeaders(req *http.Request, referer string) { function startDetailCacheCleaner (line 383) | func startDetailCacheCleaner() { FILE: plugin/kkv/kkv.go constant baseURL (line 19) | baseURL = "http://kkv.q-23.cn" constant searchPath (line 20) | searchPath = "/" constant maxResults (line 21) | maxResults = 10 constant maxConcurrent (line 22) | maxConcurrent = 3 function debugPrintf (line 27) | func debugPrintf(format string, args ...interface{}) { type KKVPlugin (line 33) | type KKVPlugin struct method Search (line 44) | func (p *KKVPlugin) Search(keyword string, ext map[string]interface{})... method SearchWithResult (line 52) | func (p *KKVPlugin) SearchWithResult(keyword string, ext map[string]in... method searchImpl (line 56) | func (p *KKVPlugin) searchImpl(client *http.Client, keyword string, ex... method filterItemsByKeyword (line 99) | func (p *KKVPlugin) filterItemsByKeyword(items []searchItem, keyword s... method fetchSearchResults (line 116) | func (p *KKVPlugin) fetchSearchResults(searchURL string, client *http.... method processDetailPages (line 180) | func (p *KKVPlugin) processDetailPages(items []searchItem, client *htt... method processDetailPage (line 206) | func (p *KKVPlugin) processDetailPage(item searchItem, client *http.Cl... method extractUpdateTime (line 272) | func (p *KKVPlugin) extractUpdateTime(doc *goquery.Document) time.Time { method extractPanLinks (line 290) | func (p *KKVPlugin) extractPanLinks(doc *goquery.Document) []model.Link { method determinePanType (line 324) | func (p *KKVPlugin) determinePanType(panURL string) string { method extractPassword (line 355) | func (p *KKVPlugin) extractPassword(panURL, contextText string) string { method setHeaders (line 379) | func (p *KKVPlugin) setHeaders(req *http.Request, referer string) { method doRequestWithRetry (line 387) | func (p *KKVPlugin) doRequestWithRetry(req *http.Request, client *http... function init (line 37) | func init() { type searchItem (line 93) | type searchItem struct FILE: plugin/labi/labi.go constant DefaultTimeout (line 37) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 38) | DetailTimeout = 6 * time.Second constant MaxConcurrency (line 40) | MaxConcurrency = 20 constant MaxIdleConns (line 42) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 43) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 44) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 45) | IdleConnTimeout = 90 * time.Second function init (line 59) | func init() { function startCacheCleaner (line 67) | func startCacheCleaner() { type LabiAsyncPlugin (line 79) | type LabiAsyncPlugin struct method Search (line 105) | func (p *LabiAsyncPlugin) Search(keyword string, ext map[string]interf... method SearchWithResult (line 114) | func (p *LabiAsyncPlugin) SearchWithResult(keyword string, ext map[str... method searchImpl (line 119) | func (p *LabiAsyncPlugin) searchImpl(client *http.Client, keyword stri... method parseSearchItem (line 177) | func (p *LabiAsyncPlugin) parseSearchItem(s *goquery.Selection, keywor... method enhanceWithDetails (line 277) | func (p *LabiAsyncPlugin) enhanceWithDetails(client *http.Client, resu... method doRequestWithRetry (line 338) | func (p *LabiAsyncPlugin) doRequestWithRetry(req *http.Request, client... method fetchDetailLinksAndImages (line 367) | func (p *LabiAsyncPlugin) fetchDetailLinksAndImages(client *http.Clien... method fetchDetailLinks (line 457) | func (p *LabiAsyncPlugin) fetchDetailLinks(client *http.Client, itemID... method isValidNetworkDriveURL (line 463) | func (p *LabiAsyncPlugin) isValidNetworkDriveURL(url string) bool { function createOptimizedHTTPClient (line 85) | func createOptimizedHTTPClient() *http.Client { function NewLabiPlugin (line 97) | func NewLabiPlugin() *LabiAsyncPlugin { function min (line 477) | func min(a, b int) int { FILE: plugin/leijing/leijing.go constant BaseURL (line 21) | BaseURL = "https://leijing.xyz" constant SearchPath (line 22) | SearchPath = "/search" constant UserAgent (line 23) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleW... constant MaxConcurrency (line 24) | MaxConcurrency = 20 constant MaxPages (line 25) | MaxPages = 1 type LeijingPlugin (line 29) | type LeijingPlugin struct method Name (line 51) | func (p *LeijingPlugin) Name() string { method DisplayName (line 56) | func (p *LeijingPlugin) DisplayName() string { method Description (line 61) | func (p *LeijingPlugin) Description() string { method Search (line 66) | func (p *LeijingPlugin) Search(keyword string, ext map[string]interfac... method SearchWithResult (line 75) | func (p *LeijingPlugin) SearchWithResult(keyword string, ext map[strin... method setRequestHeaders (line 80) | func (p *LeijingPlugin) setRequestHeaders(req *http.Request, referer s... method doRequest (line 93) | func (p *LeijingPlugin) doRequest(client *http.Client, url string, ref... method searchImpl (line 121) | func (p *LeijingPlugin) searchImpl(client *http.Client, keyword string... method getResponseReader (line 173) | func (p *LeijingPlugin) getResponseReader(resp *http.Response) (io.Rea... method extractSearchResults (line 195) | func (p *LeijingPlugin) extractSearchResults(doc *goquery.Document, ke... method extractTianyiLinks (line 274) | func (p *LeijingPlugin) extractTianyiLinks(text string) []model.Link { method enrichWithDetailLinks (line 297) | func (p *LeijingPlugin) enrichWithDetailLinks(client *http.Client, res... method fetchDetailPageLinks (line 349) | func (p *LeijingPlugin) fetchDetailPageLinks(client *http.Client, deta... method extractDetailPageLinks (line 410) | func (p *LeijingPlugin) extractDetailPageLinks(doc *goquery.Document) ... method filterValidResults (line 447) | func (p *LeijingPlugin) filterValidResults(results []model.SearchResul... function NewLeijingPlugin (line 37) | func NewLeijingPlugin() *LeijingPlugin { function init (line 461) | func init() { FILE: plugin/libvio/libvio.go constant BaseURL (line 22) | BaseURL = "https://www.libvio.mov" constant SearchPath (line 23) | SearchPath = "/search/-------------.html" constant UserAgent (line 24) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleW... constant MaxConcurrency (line 25) | MaxConcurrency = 20 constant MaxPages (line 26) | MaxPages = 1 type LibvioPlugin (line 30) | type LibvioPlugin struct method Name (line 53) | func (p *LibvioPlugin) Name() string { method DisplayName (line 58) | func (p *LibvioPlugin) DisplayName() string { method Description (line 63) | func (p *LibvioPlugin) Description() string { method Search (line 68) | func (p *LibvioPlugin) Search(keyword string, ext map[string]interface... method SearchWithResult (line 77) | func (p *LibvioPlugin) SearchWithResult(keyword string, ext map[string... method setRequestHeaders (line 82) | func (p *LibvioPlugin) setRequestHeaders(req *http.Request, referer st... method doRequest (line 95) | func (p *LibvioPlugin) doRequest(client *http.Client, url string, refe... method searchImpl (line 123) | func (p *LibvioPlugin) searchImpl(client *http.Client, keyword string,... method getResponseReader (line 185) | func (p *LibvioPlugin) getResponseReader(resp *http.Response) (io.Read... method extractSearchResults (line 208) | func (p *LibvioPlugin) extractSearchResults(doc *goquery.Document, key... method enrichWithDetailLinks (line 283) | func (p *LibvioPlugin) enrichWithDetailLinks(client *http.Client, resu... method fetchDetailPageLinks (line 330) | func (p *LibvioPlugin) fetchDetailPageLinks(client *http.Client, detai... method extractDownloadPlayLinks (line 428) | func (p *LibvioPlugin) extractDownloadPlayLinks(doc *goquery.Document)... method fetchPanLink (line 494) | func (p *LibvioPlugin) fetchPanLink(client *http.Client, playURL strin... method mapPanType (line 604) | func (p *LibvioPlugin) mapPanType(from string, url string) string { function NewLibvioPlugin (line 39) | func NewLibvioPlugin() *LibvioPlugin { type PlayLinkInfo (line 422) | type PlayLinkInfo struct function init (line 647) | func init() { FILE: plugin/lou1/lou1.go constant pluginName (line 20) | pluginName = "lou1" constant defaultPriority (line 21) | defaultPriority = 1 constant baseURL (line 23) | baseURL = "https://www.1lou.me" constant searchPathFormat (line 24) | searchPathFormat = baseURL + "/search-%s.htm" constant requestTimeout (line 25) | requestTimeout = 12 * time.Second constant detailTimeout (line 26) | detailTimeout = 12 * time.Second constant maxRequestRetries (line 27) | maxRequestRetries = 3 constant retryBaseDelay (line 28) | retryBaseDelay = 200 * time.Millisecond constant searchLimit (line 29) | searchLimit = 12 constant detailWorkers (line 30) | detailWorkers = 6 constant httpMaxIdleConns (line 31) | httpMaxIdleConns = 64 constant httpMaxIdlePerHost (line 32) | httpMaxIdlePerHost = 16 constant httpMaxConnsPerHost (line 33) | httpMaxConnsPerHost = 32 type Lou1Plugin (line 64) | type Lou1Plugin struct method Search (line 82) | func (p *Lou1Plugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 91) | func (p *Lou1Plugin) SearchWithResult(keyword string, ext map[string]i... method searchImpl (line 95) | func (p *Lou1Plugin) searchImpl(client *http.Client, keyword string, e... method fetchSearchResults (line 171) | func (p *Lou1Plugin) fetchSearchResults(client *http.Client, keyword s... method fetchDetail (line 248) | func (p *Lou1Plugin) fetchDetail(client *http.Client, detailURL string... method doRequestWithRetry (line 550) | func (p *Lou1Plugin) doRequestWithRetry(req *http.Request, client *htt... function init (line 69) | func init() { function NewLou1Plugin (line 74) | func NewLou1Plugin() *Lou1Plugin { type searchThread (line 164) | type searchThread struct type detailResult (line 241) | type detailResult struct function collectDetailTags (line 301) | func collectDetailTags(doc *goquery.Document) []string { function extractPostDatetime (line 324) | func extractPostDatetime(doc *goquery.Document) time.Time { function extractLinksFromSelection (line 339) | func extractLinksFromSelection(sel *goquery.Selection) []model.Link { function classifyLink (line 392) | func classifyLink(raw string) (string, string) { function extractPassword (line 405) | func extractPassword(node *goquery.Selection) string { function matchPassword (line 427) | func matchPassword(text string) string { function substring (line 440) | func substring(text string, start, end int) string { function encodeKeyword (line 450) | func encodeKeyword(keyword string) string { function toAbsoluteURL (line 463) | func toAbsoluteURL(href string) string { function mergeTags (line 477) | func mergeTags(a []string, b []string) []string { function buildUniqueID (line 496) | func buildUniqueID(detailURL string) string { function truncateString (line 508) | func truncateString(text string, length int) string { function filterQuarkLinks (line 516) | func filterQuarkLinks(links []model.Link) []model.Link { function newHTTPClient (line 529) | func newHTTPClient() *http.Client { function setHTMLHeaders (line 542) | func setHTMLHeaders(req *http.Request, referer string) { FILE: plugin/meitizy/meitizy.go constant PluginName (line 18) | PluginName = "meitizy" constant DisplayName (line 19) | DisplayName = "美体资源" constant Description (line 20) | Description = "美体资源 - 影视资源网盘链接搜索" constant BaseURL (line 21) | BaseURL = "https://video.451024.xyz" constant SearchPath (line 22) | SearchPath = "/api/search" constant UserAgent (line 23) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Apple... constant MaxResults (line 24) | MaxResults = 100 constant RequestTimeout (line 25) | RequestTimeout = 30 * time.Second constant MaxPageSize (line 26) | MaxPageSize = 1000 constant MaxIdleConns (line 29) | MaxIdleConns = 100 constant MaxIdleConnsPerHost (line 30) | MaxIdleConnsPerHost = 30 constant MaxConnsPerHost (line 31) | MaxConnsPerHost = 50 constant IdleConnTimeout (line 32) | IdleConnTimeout = 90 * time.Second constant TLSHandshakeTimeout (line 33) | TLSHandshakeTimeout = 10 * time.Second constant ExpectContinueTimeout (line 34) | ExpectContinueTimeout = 1 * time.Second type MeitizyPlugin (line 38) | type MeitizyPlugin struct method Name (line 103) | func (p *MeitizyPlugin) Name() string { method DisplayName (line 108) | func (p *MeitizyPlugin) DisplayName() string { method Description (line 113) | func (p *MeitizyPlugin) Description() string { method Search (line 118) | func (p *MeitizyPlugin) Search(keyword string, ext map[string]interfac... method SearchWithResult (line 127) | func (p *MeitizyPlugin) SearchWithResult(keyword string, ext map[strin... method searchImpl (line 132) | func (p *MeitizyPlugin) searchImpl(client *http.Client, keyword string... method convertToSearchResults (line 200) | func (p *MeitizyPlugin) convertToSearchResults(items []apiItem) []mode... method mapLinkType (line 257) | func (p *MeitizyPlugin) mapLinkType(apiLinkType string) string { method determineCloudTypeFromURL (line 286) | func (p *MeitizyPlugin) determineCloudTypeFromURL(url string) string { method parseTime (line 320) | func (p *MeitizyPlugin) parseTime(timeStr string) time.Time { method doRequestWithRetry (line 344) | func (p *MeitizyPlugin) doRequestWithRetry(req *http.Request, client *... type searchRequest (line 44) | type searchRequest struct type searchResponse (line 51) | type searchResponse struct type apiItem (line 57) | type apiItem struct function init (line 69) | func init() { function NewMeitizyPlugin (line 74) | func NewMeitizyPlugin() *MeitizyPlugin { function createOptimizedHTTPClient (line 84) | func createOptimizedHTTPClient() *http.Client { FILE: plugin/miaoso/miaoso.go function init (line 22) | func init() { constant BaseURL (line 28) | BaseURL = "https://miaosou.fun/api/secendsearch" constant MaxRetries (line 31) | MaxRetries = 3 constant TimeoutSeconds (line 32) | TimeoutSeconds = 30 constant AESKey (line 35) | AESKey = "4OToScUFOaeVTrHE" constant AESIV (line 36) | AESIV = "9CLGao1vHKqm17Oz" type MiaosouPlugin (line 56) | type MiaosouPlugin struct method Search (line 68) | func (p *MiaosouPlugin) Search(keyword string, ext map[string]interfac... method SearchWithResult (line 77) | func (p *MiaosouPlugin) SearchWithResult(keyword string, ext map[strin... method searchImpl (line 82) | func (p *MiaosouPlugin) searchImpl(client *http.Client, keyword string... method setRequestHeaders (line 157) | func (p *MiaosouPlugin) setRequestHeaders(req *http.Request, keyword s... method doRequestWithRetry (line 167) | func (p *MiaosouPlugin) doRequestWithRetry(req *http.Request, client *... method convertToSearchResult (line 195) | func (p *MiaosouPlugin) convertToSearchResult(item MiaosouItem) (model... method cleanHTMLTags (line 247) | func (p *MiaosouPlugin) cleanHTMLTags(text string) string { method decryptURL (line 256) | func (p *MiaosouPlugin) decryptURL(encryptedURL string) string { method removePKCS7Padding (line 298) | func (p *MiaosouPlugin) removePKCS7Padding(data []byte) []byte { method determineCloudType (line 323) | func (p *MiaosouPlugin) determineCloudType(from string) string { function NewMiaosouPlugin (line 61) | func NewMiaosouPlugin() *MiaosouPlugin { type MiaosouResponse (line 347) | type MiaosouResponse struct type MiaosouData (line 353) | type MiaosouData struct type MiaosouItem (line 358) | type MiaosouItem struct type MiaosouFileInfo (line 373) | type MiaosouFileInfo struct FILE: plugin/mikuclub/mikuclub.go type cacheEntry (line 52) | type cacheEntry struct constant pluginName (line 58) | pluginName = "mikuclub" constant defaultPriority (line 59) | defaultPriority = 2 constant searchTimeout (line 60) | searchTimeout = 12 * time.Second constant detailTimeout (line 61) | detailTimeout = 10 * time.Second constant maxConcurrency (line 62) | maxConcurrency = 12 constant maxIdleConns (line 63) | maxIdleConns = 64 constant maxIdlePerHost (line 64) | maxIdlePerHost = 16 constant maxConnsPerHost (line 65) | maxConnsPerHost = 32 constant idleConnLifetime (line 66) | idleConnLifetime = 90 * time.Second constant tlsHandshakeTimeout (line 67) | tlsHandshakeTimeout = 10 * time.Second constant expectContinueTimeout (line 68) | expectContinueTimeout = 1 * time.Second constant searchMaxRetries (line 70) | searchMaxRetries = 3 constant detailMaxRetries (line 71) | detailMaxRetries = 2 constant retryBaseDelay (line 72) | retryBaseDelay = 200 * time.Millisecond type MikuclubPlugin (line 76) | type MikuclubPlugin struct method Search (line 95) | func (p *MikuclubPlugin) Search(keyword string, ext map[string]interfa... method SearchWithResult (line 104) | func (p *MikuclubPlugin) SearchWithResult(keyword string, ext map[stri... method searchImpl (line 125) | func (p *MikuclubPlugin) searchImpl(client *http.Client, keyword strin... method fetchCategoryPosts (line 223) | func (p *MikuclubPlugin) fetchCategoryPosts(client *http.Client, keywo... method fetchDetailLinks (line 264) | func (p *MikuclubPlugin) fetchDetailLinks(client *http.Client, postID ... method doRequestWithRetry (line 444) | func (p *MikuclubPlugin) doRequestWithRetry(req *http.Request, client ... function init (line 81) | func init() { function NewMikuclubPlugin (line 87) | func NewMikuclubPlugin() *MikuclubPlugin { function newHTTPClient (line 108) | func newHTTPClient() *http.Client { function extractLinksFromSelection (line 317) | func extractLinksFromSelection(sel *goquery.Selection) []model.Link { function classifyLink (line 376) | func classifyLink(raw string) (string, string) { function extractPassword (line 385) | func extractPassword(node *goquery.Selection) string { function matchPassword (line 413) | func matchPassword(text string) string { function substring (line 426) | func substring(text string, start, end int) string { function setCommonHeaders (line 436) | func setCommonHeaders(req *http.Request, referer string) { function startCacheCleaner (line 465) | func startCacheCleaner() { type postListResponse (line 481) | type postListResponse struct type postItem (line 485) | type postItem struct method summary (line 496) | func (p postItem) summary() string { method tags (line 510) | func (p postItem) tags() []string { method publishTime (line 521) | func (p postItem) publishTime() time.Time { FILE: plugin/mizixing/mizixing.go constant pluginName (line 21) | pluginName = "mizixing" constant defaultPriority (line 22) | defaultPriority = 3 constant baseURL (line 24) | baseURL = "https://mizixing.com" constant searchEndpoint (line 25) | searchEndpoint = baseURL + "/" constant searchLimit (line 26) | searchLimit = 12 constant detailWorkers (line 27) | detailWorkers = 6 constant requestTimeout (line 28) | requestTimeout = 12 * time.Second constant detailTimeout (line 29) | detailTimeout = 10 * time.Second constant httpMaxIdleConns (line 30) | httpMaxIdleConns = 64 constant httpMaxIdlePerHost (line 31) | httpMaxIdlePerHost = 16 constant httpMaxConnsPerHost (line 32) | httpMaxConnsPerHost = 32 constant retryBaseDelay (line 33) | retryBaseDelay = 200 * time.Millisecond constant maxRequestRetries (line 34) | maxRequestRetries = 3 type MizixingPlugin (line 65) | type MizixingPlugin struct method Search (line 83) | func (p *MizixingPlugin) Search(keyword string, ext map[string]interfa... method SearchWithResult (line 92) | func (p *MizixingPlugin) SearchWithResult(keyword string, ext map[stri... method searchImpl (line 96) | func (p *MizixingPlugin) searchImpl(client *http.Client, keyword strin... method fetchSearchResults (line 172) | func (p *MizixingPlugin) fetchSearchResults(client *http.Client, keywo... method fetchDetailData (line 237) | func (p *MizixingPlugin) fetchDetailData(client *http.Client, detailUR... method doRequestWithRetry (line 503) | func (p *MizixingPlugin) doRequestWithRetry(req *http.Request, client ... function init (line 70) | func init() { function NewMizixingPlugin (line 75) | func NewMizixingPlugin() *MizixingPlugin { type searchItem (line 165) | type searchItem struct type detailData (line 230) | type detailData struct function collectTags (line 290) | func collectTags(doc *goquery.Document) []string { function extractDateTime (line 308) | func extractDateTime(doc *goquery.Document) time.Time { function extractLinksFromSelection (line 338) | func extractLinksFromSelection(sel *goquery.Selection) []model.Link { function classifyLink (line 390) | func classifyLink(raw string) (string, string) { function extractPassword (line 403) | func extractPassword(node *goquery.Selection) string { function matchPassword (line 427) | func matchPassword(text string) string { function substring (line 440) | func substring(text string, start, end int) string { function mergeTags (line 450) | func mergeTags(primary string, extra []string) []string { function buildUniqueID (line 470) | func buildUniqueID(detailURL string) string { function normalizeURL (line 475) | func normalizeURL(raw string) string { function newHTTPClient (line 482) | func newHTTPClient() *http.Client { function setHTMLHeaders (line 495) | func setHTMLHeaders(req *http.Request, referer string) { FILE: plugin/muou/muou.go constant DefaultTimeout (line 47) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 48) | DetailTimeout = 6 * time.Second constant MaxConcurrency (line 51) | MaxConcurrency = 20 constant MaxIdleConns (line 54) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 55) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 56) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 57) | IdleConnTimeout = 90 * time.Second constant cacheTTL (line 60) | cacheTTL = 1 * time.Hour function init (line 74) | func init() { type MuouAsyncPlugin (line 79) | type MuouAsyncPlugin struct method Search (line 109) | func (p *MuouAsyncPlugin) Search(keyword string, ext map[string]interf... method SearchWithResult (line 118) | func (p *MuouAsyncPlugin) SearchWithResult(keyword string, ext map[str... method searchImpl (line 123) | func (p *MuouAsyncPlugin) searchImpl(client *http.Client, keyword stri... method parseSearchItem (line 194) | func (p *MuouAsyncPlugin) parseSearchItem(s *goquery.Selection, keywor... method enhanceWithDetails (line 294) | func (p *MuouAsyncPlugin) enhanceWithDetails(client *http.Client, resu... method doRequestWithRetry (line 357) | func (p *MuouAsyncPlugin) doRequestWithRetry(req *http.Request, client... method fetchDetailLinksAndImages (line 386) | func (p *MuouAsyncPlugin) fetchDetailLinksAndImages(client *http.Clien... method fetchDetailLinks (line 488) | func (p *MuouAsyncPlugin) fetchDetailLinks(client *http.Client, itemID... method isValidNetworkDriveURL (line 494) | func (p *MuouAsyncPlugin) isValidNetworkDriveURL(url string) bool { method determineLinkType (line 522) | func (p *MuouAsyncPlugin) determineLinkType(url string) string { method GetPerformanceStats (line 568) | func (p *MuouAsyncPlugin) GetPerformanceStats() map[string]interface{} { function createOptimizedHTTPClient (line 85) | func createOptimizedHTTPClient() *http.Client { function NewMuouPlugin (line 101) | func NewMuouPlugin() *MuouAsyncPlugin { function min (line 560) | func min(a, b int) int { FILE: plugin/nsgame/nsgame.go constant pluginName (line 20) | pluginName = "nsgame" constant apiURL (line 23) | apiURL = "https://nsthwj.com/thwj/game/query" constant defaultPriority (line 26) | defaultPriority = 2 constant defaultTimeout (line 29) | defaultTimeout = 10 * time.Second constant pageSize (line 32) | pageSize = 1000 type NSGameAsyncPlugin (line 46) | type NSGameAsyncPlugin struct method Search (line 85) | func (p *NSGameAsyncPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 94) | func (p *NSGameAsyncPlugin) SearchWithResult(keyword string, ext map[s... method searchImpl (line 99) | func (p *NSGameAsyncPlugin) searchImpl(client *http.Client, keyword st... method parseLinks (line 187) | func (p *NSGameAsyncPlugin) parseLinks(urlText string) []model.Link { method extractURL (line 235) | func (p *NSGameAsyncPlugin) extractURL(text string) string { method extractBaiduLink (line 241) | func (p *NSGameAsyncPlugin) extractBaiduLink(line string) (url, passwo... method generateUniqueID (line 265) | func (p *NSGameAsyncPlugin) generateUniqueID(gameName string) string { method doRequestWithRetry (line 272) | func (p *NSGameAsyncPlugin) doRequestWithRetry(req *http.Request, clie... type NSGameResponse (line 51) | type NSGameResponse struct type NSGameItem (line 66) | type NSGameItem struct function init (line 73) | func init() { function NewNSGamePlugin (line 78) | func NewNSGamePlugin() *NSGameAsyncPlugin { FILE: plugin/nyaa/nyaa.go constant DefaultTimeout (line 29) | DefaultTimeout = 10 * time.Second constant MaxIdleConns (line 32) | MaxIdleConns = 50 constant MaxIdleConnsPerHost (line 33) | MaxIdleConnsPerHost = 20 constant MaxConnsPerHost (line 34) | MaxConnsPerHost = 30 constant IdleConnTimeout (line 35) | IdleConnTimeout = 90 * time.Second constant SiteURL (line 38) | SiteURL = "https://nyaa.si" function init (line 42) | func init() { type NyaaPlugin (line 47) | type NyaaPlugin struct method Search (line 74) | func (p *NyaaPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 83) | func (p *NyaaPlugin) SearchWithResult(keyword string, ext map[string]i... method searchImpl (line 88) | func (p *NyaaPlugin) searchImpl(client *http.Client, keyword string, e... method parseSearchRow (line 158) | func (p *NyaaPlugin) parseSearchRow(s *goquery.Selection) model.Search... method doRequestWithRetry (line 282) | func (p *NyaaPlugin) doRequestWithRetry(req *http.Request, client *htt... function createOptimizedHTTPClient (line 53) | func createOptimizedHTTPClient() *http.Client { function NewNyaaPlugin (line 65) | func NewNyaaPlugin() *NyaaPlugin { FILE: plugin/ouge/ouge.go constant DefaultTimeout (line 21) | DefaultTimeout = 8 * time.Second constant MaxIdleConns (line 24) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 25) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 26) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 27) | IdleConnTimeout = 90 * time.Second function init (line 36) | func init() { type OugeAsyncPlugin (line 61) | type OugeAsyncPlugin struct method Search (line 91) | func (p *OugeAsyncPlugin) Search(keyword string, ext map[string]interf... method SearchWithResult (line 100) | func (p *OugeAsyncPlugin) SearchWithResult(keyword string, ext map[str... method searchImpl (line 105) | func (p *OugeAsyncPlugin) searchImpl(client *http.Client, keyword stri... method parseAPIItem (line 201) | func (p *OugeAsyncPlugin) parseAPIItem(item OugeAPIItem) model.SearchR... method parseDownloadLinks (line 261) | func (p *OugeAsyncPlugin) parseDownloadLinks(vodDownFrom, vodDownURL s... method mapCloudType (line 305) | func (p *OugeAsyncPlugin) mapCloudType(apiType, url string) string { method isValidNetworkDriveURL (line 335) | func (p *OugeAsyncPlugin) isValidNetworkDriveURL(url string) bool { method determineLinkType (line 360) | func (p *OugeAsyncPlugin) determineLinkType(url string) string { method extractPassword (line 392) | func (p *OugeAsyncPlugin) extractPassword(url string) string { method doRequestWithRetry (line 401) | func (p *OugeAsyncPlugin) doRequestWithRetry(req *http.Request, client... method GetPerformanceStats (line 427) | func (p *OugeAsyncPlugin) GetPerformanceStats() map[string]interface{} { function createOptimizedHTTPClient (line 67) | func createOptimizedHTTPClient() *http.Client { function NewOugePlugin (line 83) | func NewOugePlugin() *OugeAsyncPlugin { type OugeAPIResponse (line 174) | type OugeAPIResponse struct type OugeAPIItem (line 185) | type OugeAPIItem struct FILE: plugin/pan666/pan666.go function init (line 20) | func init() { constant BaseURL (line 27) | BaseURL = "https://pan666.net/api/discussions" constant PageSize (line 30) | PageSize = 50 constant MaxRetries (line 31) | MaxRetries = 2 type Pan666AsyncPlugin (line 45) | type Pan666AsyncPlugin struct method Search (line 59) | func (p *Pan666AsyncPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 68) | func (p *Pan666AsyncPlugin) SearchWithResult(keyword string, ext map[s... method doSearch (line 73) | func (p *Pan666AsyncPlugin) doSearch(client *http.Client, keyword stri... method fetchBatch (line 93) | func (p *Pan666AsyncPlugin) fetchBatch(client *http.Client, keyword st... method deduplicateResults (line 157) | func (p *Pan666AsyncPlugin) deduplicateResults(results []model.SearchR... method fetchPage (line 177) | func (p *Pan666AsyncPlugin) fetchPage(client *http.Client, keyword str... function NewPan666AsyncPlugin (line 51) | func NewPan666AsyncPlugin() *Pan666AsyncPlugin { function generateRandomIP (line 303) | func generateRandomIP() string { function getRandomUA (line 312) | func getRandomUA() string { function extractLinks (line 317) | func extractLinks(content string) []model.Link { function extractLinksByPattern (line 336) | func extractLinksByPattern(content, pattern, altPattern, linkType string... function extractLinkFromLine (line 365) | func extractLinkFromLine(line, prefix string) model.Link { function cleanHTML (line 409) | func cleanHTML(html string) string { function extractLinksFromText (line 458) | func extractLinksFromText(content string) []model.Link { function extractURLFromText (line 609) | func extractURLFromText(text string) string { function extractPasswordFromURL (line 641) | func extractPasswordFromURL(url string) string { function abs (line 669) | func abs(n int) int { type Pan666Response (line 677) | type Pan666Response struct type Pan666Discussion (line 687) | type Pan666Discussion struct type Pan666Post (line 710) | type Pan666Post struct FILE: plugin/pansearch/pansearch.go function init (line 35) | func init() { function startCacheCleaner (line 44) | func startCacheCleaner() { type cachedResponse (line 57) | type cachedResponse struct constant WebsiteURL (line 64) | WebsiteURL = "https://www.pansearch.me/search" constant BaseURLTemplate (line 67) | BaseURLTemplate = "https://www.pansearch.me/_next/data/%s/search.json" constant DefaultTimeout (line 70) | DefaultTimeout = 6 * time.Second constant PageSize (line 71) | PageSize = 10 constant MaxResults (line 72) | MaxResults = 1000 constant MaxConcurrent (line 73) | MaxConcurrent = 200 constant MaxRetries (line 74) | MaxRetries = 2 constant MaxAPIPages (line 75) | MaxAPIPages = 100 constant MaxIdleConns (line 78) | MaxIdleConns = 500 constant MaxIdleConnsPerHost (line 79) | MaxIdleConnsPerHost = 200 constant MaxConnsPerHost (line 80) | MaxConnsPerHost = 400 constant IdleConnTimeout (line 81) | IdleConnTimeout = 120 * time.Second constant TLSHandshakeTimeout (line 82) | TLSHandshakeTimeout = 10 * time.Second constant ExpectContinueTimeout (line 83) | ExpectContinueTimeout = 1 * time.Second constant WriteBufferSize (line 84) | WriteBufferSize = 16 * 1024 constant ReadBufferSize (line 85) | ReadBufferSize = 16 * 1024 constant BuildIdCacheDuration (line 88) | BuildIdCacheDuration = 30 type PanSearchAsyncPlugin (line 99) | type PanSearchAsyncPlugin struct method startBuildIdUpdater (line 262) | func (p *PanSearchAsyncPlugin) startBuildIdUpdater() { method updateBuildId (line 273) | func (p *PanSearchAsyncPlugin) updateBuildId() { method Name (line 358) | func (p *PanSearchAsyncPlugin) Name() string { method Priority (line 363) | func (p *PanSearchAsyncPlugin) Priority() int { method getBuildId (line 368) | func (p *PanSearchAsyncPlugin) getBuildId() (string, error) { method getBaseURL (line 482) | func (p *PanSearchAsyncPlugin) getBaseURL(client *http.Client) (string... method Search (line 492) | func (p *PanSearchAsyncPlugin) Search(keyword string, ext map[string]i... method SearchWithResult (line 501) | func (p *PanSearchAsyncPlugin) SearchWithResult(keyword string, ext ma... method doSearch (line 506) | func (p *PanSearchAsyncPlugin) doSearch(client *http.Client, keyword s... method fetchFirstPage (line 792) | func (p *PanSearchAsyncPlugin) fetchFirstPage(keyword string, baseURL ... method fetchPage (line 851) | func (p *PanSearchAsyncPlugin) fetchPage(keyword string, offset int, b... method deduplicateItems (line 906) | func (p *PanSearchAsyncPlugin) deduplicateItems(items []PanSearchItem)... method convertResults (line 924) | func (p *PanSearchAsyncPlugin) convertResults(items []PanSearchItem, k... type WorkerPool (line 109) | type WorkerPool struct method Start (line 141) | func (wp *WorkerPool) Start(ctx context.Context, handler func(ctx cont... method Submit (line 181) | func (wp *WorkerPool) Submit(task Task) bool { method Close (line 200) | func (wp *WorkerPool) Close() { type Task (line 119) | type Task struct type TaskResult (line 126) | type TaskResult struct function NewWorkerPool (line 132) | func NewWorkerPool(size int) *WorkerPool { function NewPanSearchPlugin (line 234) | func NewPanSearchPlugin() *PanSearchAsyncPlugin { function extractBuildId (line 334) | func extractBuildId(body string) string { type LinkInfo (line 979) | type LinkInfo struct function extractLinkAndPassword (line 985) | func extractLinkAndPassword(content string) LinkInfo { function extractTitle (line 1026) | func extractTitle(content string, keyword string) string { function cleanHTML (line 1045) | func cleanHTML(html string) string { function min (line 1084) | func min(a, b int) int { type PanSearchResponse (line 1092) | type PanSearchResponse struct type PanSearchItem (line 1106) | type PanSearchItem struct FILE: plugin/panta/panta.go type passwordCacheKey (line 100) | type passwordCacheKey struct constant pluginName (line 108) | pluginName = "panta" constant searchURLTemplate (line 111) | searchURLTemplate = "https://www.91panta.cn/search?keyword=%s" constant threadURLTemplate (line 114) | threadURLTemplate = "https://www.91panta.cn/thread?topicId=%s" constant defaultPriority (line 117) | defaultPriority = 1 constant defaultTimeout (line 120) | defaultTimeout = 6 constant defaultConcurrency (line 123) | defaultConcurrency = 30 constant maxRetries (line 126) | maxRetries = 2 constant minConcurrency (line 129) | minConcurrency = 5 constant maxConcurrency (line 132) | maxConcurrency = 50 constant responseTimeThreshold (line 135) | responseTimeThreshold = 500 constant concurrencyStep (line 138) | concurrencyStep = 5 constant concurrencyAdjustInterval (line 141) | concurrencyAdjustInterval = 30 constant backoffBase (line 144) | backoffBase = 100 constant maxBackoff (line 147) | maxBackoff = 5000 type PantaAsyncPlugin (line 151) | type PantaAsyncPlugin struct method Name (line 210) | func (p *PantaAsyncPlugin) Name() string { method Priority (line 215) | func (p *PantaAsyncPlugin) Priority() int { method Search (line 220) | func (p *PantaAsyncPlugin) Search(keyword string, ext map[string]inter... method SearchWithResult (line 229) | func (p *PantaAsyncPlugin) SearchWithResult(keyword string, ext map[st... method doSearch (line 234) | func (p *PantaAsyncPlugin) doSearch(client *http.Client, keyword strin... method parseSearchResults (line 291) | func (p *PantaAsyncPlugin) parseSearchResults(doc *goquery.Document, c... method extractLinksFromElement (line 475) | func (p *PantaAsyncPlugin) extractLinksFromElement(s *goquery.Selectio... method fetchThreadLinks (line 592) | func (p *PantaAsyncPlugin) fetchThreadLinks(topicID string, client *ht... method startConcurrencyAdjuster (line 1199) | func (p *PantaAsyncPlugin) startConcurrencyAdjuster() { method adjustConcurrency (line 1209) | func (p *PantaAsyncPlugin) adjustConcurrency() { method recordResponseTime (line 1239) | func (p *PantaAsyncPlugin) recordResponseTime(d time.Duration) { method doRequestWithRetry (line 1253) | func (p *PantaAsyncPlugin) doRequestWithRetry(req *http.Request, clien... function init (line 168) | func init() { function NewPantaAsyncPlugin (line 174) | func NewPantaAsyncPlugin() *PantaAsyncPlugin { function startCacheCleaner (line 191) | func startCacheCleaner() { function extractTextLinks (line 749) | func extractTextLinks(text string, yearFromTitle string) []model.Link { function extractPassword (line 1085) | func extractPassword(content string, url string) string { function determineLinkType (line 1138) | func determineLinkType(url string) string { function isNetDiskLink (line 1176) | func isNetDiskLink(url string) bool { function max (line 1296) | func max(a, b int) int { function min (line 1304) | func min(a, b int) int { FILE: plugin/panwiki/panwiki.go constant PrimaryBaseURL (line 20) | PrimaryBaseURL = "https://www.panwiki.com" constant BackupBaseURL (line 21) | BackupBaseURL = "https://pan666.net" constant SearchPath (line 22) | SearchPath = "/search.php?mod=forum&srchtxt=%s&searchsubmit=yes&or... constant UserAgent (line 23) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Appl... constant MaxConcurrency (line 24) | MaxConcurrency = 40 constant MaxPages (line 25) | MaxPages = 2 type PanwikiPlugin (line 29) | type PanwikiPlugin struct method getSearchURL (line 58) | func (p *PanwikiPlugin) getSearchURL(keyword string, page int) string { method switchToBackupDomain (line 69) | func (p *PanwikiPlugin) switchToBackupDomain() { method searchImpl (line 79) | func (p *PanwikiPlugin) searchImpl(client *http.Client, keyword string... method searchPage (line 158) | func (p *PanwikiPlugin) searchPage(client *http.Client, keyword string... method setRequestHeaders (line 259) | func (p *PanwikiPlugin) setRequestHeaders(req *http.Request) { method extractSearchResults (line 269) | func (p *PanwikiPlugin) extractSearchResults(doc *goquery.Document) []... method parseSearchResult (line 294) | func (p *PanwikiPlugin) parseSearchResult(s *goquery.Selection) model.... method cleanTitle (line 370) | func (p *PanwikiPlugin) cleanTitle(title string) string { method enrichWithDetailLinks (line 389) | func (p *PanwikiPlugin) enrichWithDetailLinks(client *http.Client, res... method fetchDetailPageLinksWithKeyword (line 452) | func (p *PanwikiPlugin) fetchDetailPageLinksWithKeyword(client *http.C... method extractDetailPageLinksWithFilter (line 510) | func (p *PanwikiPlugin) extractDetailPageLinksWithFilter(doc *goquery.... method filterLinksByContext (line 568) | func (p *PanwikiPlugin) filterLinksByContext(links []model.Link, htmlC... method extractWorkNameForLinkInLine (line 614) | func (p *PanwikiPlugin) extractWorkNameForLinkInLine(line, url string)... method isSimpleCase (line 634) | func (p *PanwikiPlugin) isSimpleCase(htmlContent, keyword string) bool { method pageContentRelevant (line 687) | func (p *PanwikiPlugin) pageContentRelevant(htmlContent, keyword strin... method extractAllLinksDirectly (line 734) | func (p *PanwikiPlugin) extractAllLinksDirectly(contentArea *goquery.S... method extractLinksWithGrouping (line 793) | func (p *PanwikiPlugin) extractLinksWithGrouping(htmlContent, keyword ... method isSingleLineFormat (line 862) | func (p *PanwikiPlugin) isSingleLineFormat(lines []string, keyword str... method extractLinksFromSingleLineFormat (line 904) | func (p *PanwikiPlugin) extractLinksFromSingleLineFormat(lines []strin... method extractLinksFromSingleLine (line 933) | func (p *PanwikiPlugin) extractLinksFromSingleLine(line, keyword strin... method isLineTitleRelevant (line 979) | func (p *PanwikiPlugin) isLineTitleRelevant(line, keyword string) bool { method containsNetworkLink (line 1012) | func (p *PanwikiPlugin) containsNetworkLink(text string) bool { method cleanHtmlText (line 1028) | func (p *PanwikiPlugin) cleanHtmlText(html string) string { method isNewWorkTitle (line 1039) | func (p *PanwikiPlugin) isNewWorkTitle(text string) bool { method isWorkTitleRelevant (line 1159) | func (p *PanwikiPlugin) isWorkTitleRelevant(title, keyword string) bool { method extractLinksFromGroup (line 1209) | func (p *PanwikiPlugin) extractLinksFromGroup(group []string) []model.... method determineLinkType (line 1245) | func (p *PanwikiPlugin) determineLinkType(url string) string { method extractLinksFromText (line 1271) | func (p *PanwikiPlugin) extractLinksFromText(text string) []model.Link { method deduplicateLinks (line 1309) | func (p *PanwikiPlugin) deduplicateLinks(links []model.Link) []model.L... method extractPasswordFromURL (line 1354) | func (p *PanwikiPlugin) extractPasswordFromURL(rawURL string) (normali... method extractDetailURLFromContent (line 1396) | func (p *PanwikiPlugin) extractDetailURLFromContent(content string) st... method Search (line 1443) | func (p *PanwikiPlugin) Search(keyword string, ext map[string]interfac... method SearchWithResult (line 1452) | func (p *PanwikiPlugin) SearchWithResult(keyword string, ext map[strin... method extractPasswordFromContent (line 1457) | func (p *PanwikiPlugin) extractPasswordFromContent(content, linkURL st... function NewPanwikiPlugin (line 38) | func NewPanwikiPlugin() *PanwikiPlugin { type cacheItem (line 1390) | type cacheItem struct function parseStats (line 1407) | func parseStats(statsText string, replyCount, viewCount *int) { function parseTime (line 1421) | func parseTime(timeStr string) time.Time { function init (line 1500) | func init() { FILE: plugin/panyq/panyq.go constant DefaultTimeout (line 26) | DefaultTimeout = 15 * time.Second constant MaxConcurrency (line 28) | MaxConcurrency = 100 constant MaxRetries (line 30) | MaxRetries = 0 constant DebugLog (line 32) | DebugLog = false constant ConfigFileName (line 34) | ConfigFileName = "panyq_config.json" constant BaseURL (line 36) | BaseURL = "https://panyq.com" constant EnableRefererCheck (line 38) | EnableRefererCheck = false type Credentials (line 49) | type Credentials struct type SearchHit (line 56) | type SearchHit struct type SearchResponse (line 63) | type SearchResponse struct type PanyqPlugin (line 93) | type PanyqPlugin struct method Search (line 132) | func (p *PanyqPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 194) | func (p *PanyqPlugin) SearchWithResult(keyword string, ext map[string]... method doSearch (line 199) | func (p *PanyqPlugin) doSearch(client *http.Client, keyword string, ex... method getOrDiscoverActionIDs (line 375) | func (p *PanyqPlugin) getOrDiscoverActionIDs() (map[string]string, err... method discoverActionIDs (line 398) | func (p *PanyqPlugin) discoverActionIDs() (map[string]string, error) { method findPotentialActionIDs (line 647) | func (p *PanyqPlugin) findPotentialActionIDs(client *http.Client) ([]s... method validateCredentialID (line 742) | func (p *PanyqPlugin) validateCredentialID(actionID string) bool { method validateIntermediateID (line 748) | func (p *PanyqPlugin) validateIntermediateID(actionID, testHash, testS... method validateFinalLinkID (line 754) | func (p *PanyqPlugin) validateFinalLinkID(actionID, testEID string) bo... method doRequestWithRetry (line 780) | func (p *PanyqPlugin) doRequestWithRetry(client *http.Client, req *htt... method getRawFinalLinkResponse (line 833) | func (p *PanyqPlugin) getRawFinalLinkResponse(actionID, eid string, cl... method getCredentials (line 941) | func (p *PanyqPlugin) getCredentials(query, actionID string, client *h... method getSearchResults (line 993) | func (p *PanyqPlugin) getSearchResults(sign string, pageNum int, clien... method performIntermediateStep (line 1039) | func (p *PanyqPlugin) performIntermediateStep(actionID, hashVal, shaVa... method getFinalLink (line 1103) | func (p *PanyqPlugin) getFinalLink(actionID, eid string, client *http.... method determineLinkType (line 1164) | func (p *PanyqPlugin) determineLinkType(url string) string { method extractPassword (line 1204) | func (p *PanyqPlugin) extractPassword(url string, linkType string) str... method cleanEscapedHTML (line 1231) | func (p *PanyqPlugin) cleanEscapedHTML(text string) string { method extractTitle (line 1299) | func (p *PanyqPlugin) extractTitle(desc string) string { method loadActionIDsFromFile (line 1365) | func (p *PanyqPlugin) loadActionIDsFromFile() (map[string]string, erro... method saveActionIDsToFile (line 1389) | func (p *PanyqPlugin) saveActionIDsToFile(ids map[string]string) error { function NewPanyqPlugin (line 99) | func NewPanyqPlugin() *PanyqPlugin { function isRetriableError (line 815) | func isRetriableError(err error) bool { function init (line 1331) | func init() { function startCacheCleaner (line 1339) | func startCacheCleaner() { FILE: plugin/pianku/pianku.go function init (line 19) | func init() { constant BaseURL (line 25) | BaseURL = "https://btnull.pro" constant SearchPath (line 26) | SearchPath = "/search/-------------.html" constant MaxRetries (line 29) | MaxRetries = 3 constant TimeoutSeconds (line 30) | TimeoutSeconds = 30 type PiankuPlugin (line 85) | type PiankuPlugin struct method Search (line 97) | func (p *PiankuPlugin) Search(keyword string, ext map[string]interface... method SearchWithResult (line 106) | func (p *PiankuPlugin) SearchWithResult(keyword string, ext map[string... method searchImpl (line 111) | func (p *PiankuPlugin) searchImpl(client *http.Client, keyword string,... method setRequestHeaders (line 188) | func (p *PiankuPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 197) | func (p *PiankuPlugin) doRequestWithRetry(req *http.Request, client *h... method extractSearchResults (line 225) | func (p *PiankuPlugin) extractSearchResults(doc *goquery.Document) []m... method extractSingleResult (line 240) | func (p *PiankuPlugin) extractSingleResult(s *goquery.Selection) model... method extractMovieID (line 349) | func (p *PiankuPlugin) extractMovieID(url string) string { method buildFullURL (line 368) | func (p *PiankuPlugin) buildFullURL(path string) string { method fetchDetailPageLinks (line 376) | func (p *PiankuPlugin) fetchDetailPageLinks(client *http.Client, detai... method extractDownloadLinks (line 413) | func (p *PiankuPlugin) extractDownloadLinks(doc *goquery.Document) []m... method isValidLink (line 461) | func (p *PiankuPlugin) isValidLink(url string) bool { method determineLinkType (line 484) | func (p *PiankuPlugin) determineLinkType(url string) string { method extractPassword (line 506) | func (p *PiankuPlugin) extractPassword(url, title string) string { function NewPiankuPlugin (line 90) | func NewPiankuPlugin() *PiankuPlugin { function parseRegionAndTypes (line 358) | func parseRegionAndTypes(text string) (region, types string) { FILE: plugin/plugin.go type AsyncSearchPlugin (line 21) | type AsyncSearchPlugin interface type PluginWithWebHandler (line 47) | type PluginWithWebHandler interface type InitializablePlugin (line 57) | type InitializablePlugin interface type cachedResponse (line 115) | type cachedResponse struct function RegisterGlobalPlugin (line 128) | func RegisterGlobalPlugin(plugin AsyncSearchPlugin) { function GetRegisteredPlugins (line 145) | func GetRegisteredPlugins() []AsyncSearchPlugin { function GetPluginByName (line 158) | func GetPluginByName(name string) (AsyncSearchPlugin, bool) { type PluginManager (line 167) | type PluginManager struct method RegisterPlugin (line 179) | func (pm *PluginManager) RegisterPlugin(plugin AsyncSearchPlugin) { method RegisterAllGlobalPlugins (line 192) | func (pm *PluginManager) RegisterAllGlobalPlugins() { method RegisterGlobalPluginsWithFilter (line 201) | func (pm *PluginManager) RegisterGlobalPluginsWithFilter(enabledPlugin... method GetPlugins (line 229) | func (pm *PluginManager) GetPlugins() []AsyncSearchPlugin { function NewPluginManager (line 172) | func NewPluginManager() *PluginManager { function FilterResultsByKeyword (line 238) | func FilterResultsByKeyword(results []model.SearchResult, keyword string... function cleanupExpiredApiCache (line 280) | func cleanupExpiredApiCache() { function initAsyncPlugin (line 324) | func initAsyncPlugin() { function InitAsyncPluginSystem (line 346) | func InitAsyncPluginSystem() { function acquireWorkerSlot (line 351) | func acquireWorkerSlot() bool { function releaseWorkerSlot (line 374) | func releaseWorkerSlot() { function recordCacheHit (line 380) | func recordCacheHit() { function recordCacheMiss (line 385) | func recordCacheMiss() { function recordAsyncCompletion (line 390) | func recordAsyncCompletion() { function recordCacheAccess (line 395) | func recordCacheAccess(key string) { type BaseAsyncPlugin (line 420) | type BaseAsyncPlugin struct method SetMainCacheKey (line 507) | func (p *BaseAsyncPlugin) SetMainCacheKey(key string) { method SetCurrentKeyword (line 512) | func (p *BaseAsyncPlugin) SetCurrentKeyword(keyword string) { method SetMainCacheUpdater (line 517) | func (p *BaseAsyncPlugin) SetMainCacheUpdater(updater func(string, []m... method Name (line 522) | func (p *BaseAsyncPlugin) Name() string { method Priority (line 527) | func (p *BaseAsyncPlugin) Priority() int { method SkipServiceFilter (line 532) | func (p *BaseAsyncPlugin) SkipServiceFilter() bool { method GetClient (line 537) | func (p *BaseAsyncPlugin) GetClient() *http.Client { method AsyncSearch (line 546) | func (p *BaseAsyncPlugin) AsyncSearch( method AsyncSearchWithResult (line 803) | func (p *BaseAsyncPlugin) AsyncSearchWithResult( method completeSearchInBackground (line 979) | func (p *BaseAsyncPlugin) completeSearchInBackground( method refreshCacheInBackground (line 1022) | func (p *BaseAsyncPlugin) refreshCacheInBackground( method updateMainCache (line 1094) | func (p *BaseAsyncPlugin) updateMainCache(cacheKey string, results []m... method updateMainCacheWithFinal (line 1099) | func (p *BaseAsyncPlugin) updateMainCacheWithFinal(cacheKey string, re... method hasUpdatedFinalCache (line 1137) | func (p *BaseAsyncPlugin) hasUpdatedFinalCache(updateKey string) bool { method markFinalCacheUpdated (line 1144) | func (p *BaseAsyncPlugin) markFinalCacheUpdated(updateKey string) { function NewBaseAsyncPlugin (line 435) | func NewBaseAsyncPlugin(name string, priority int) *BaseAsyncPlugin { function NewBaseAsyncPluginWithFilter (line 469) | func NewBaseAsyncPluginWithFilter(name string, priority int, skipService... function SetGlobalCacheSerializer (line 1155) | func SetGlobalCacheSerializer(serializer interface { function getEnhancedCacheSerializer (line 1163) | func getEnhancedCacheSerializer() interface { FILE: plugin/qingying/qingying.go constant baseURL (line 20) | baseURL = "http://revohd.com" constant searchPath (line 21) | searchPath = "/vodsearch/-------------.html" constant maxResults (line 22) | maxResults = 10 constant maxConcurrent (line 23) | maxConcurrent = 3 function debugPrintf (line 28) | func debugPrintf(format string, args ...interface{}) { type QingYingPlugin (line 34) | type QingYingPlugin struct method Search (line 45) | func (p *QingYingPlugin) Search(keyword string, ext map[string]interfa... method SearchWithResult (line 53) | func (p *QingYingPlugin) SearchWithResult(keyword string, ext map[stri... method searchImpl (line 57) | func (p *QingYingPlugin) searchImpl(client *http.Client, keyword strin... method filterItemsByKeyword (line 100) | func (p *QingYingPlugin) filterItemsByKeyword(items []searchItem, keyw... method fetchSearchResults (line 117) | func (p *QingYingPlugin) fetchSearchResults(searchURL string, client *... method processDetailPages (line 186) | func (p *QingYingPlugin) processDetailPages(items []searchItem, client... method processDetailPage (line 212) | func (p *QingYingPlugin) processDetailPage(item searchItem, client *ht... method extract123PanLink (line 314) | func (p *QingYingPlugin) extract123PanLink(doc *goquery.Document) *mod... method parseUpdateTimeFromHTML (line 366) | func (p *QingYingPlugin) parseUpdateTimeFromHTML(timeText string) time... method extractPassword (line 386) | func (p *QingYingPlugin) extractPassword(panURL string) string { method buildAbsURL (line 405) | func (p *QingYingPlugin) buildAbsURL(path string) string { method setHeaders (line 418) | func (p *QingYingPlugin) setHeaders(req *http.Request, referer string) { method doRequestWithRetry (line 426) | func (p *QingYingPlugin) doRequestWithRetry(req *http.Request, client ... function init (line 38) | func init() { type searchItem (line 94) | type searchItem struct function min (line 307) | func min(a, b int) int { FILE: plugin/qqpd/qqpd.go constant MaxConcurrentUsers (line 33) | MaxConcurrentUsers = 10 constant MaxConcurrentChannels (line 34) | MaxConcurrentChannels = 50 constant DebugLog (line 35) | DebugLog = false constant HTMLTemplate (line 44) | HTMLTemplate = ` type QQPDPlugin (line 477) | type QQPDPlugin struct method Initialize (line 520) | func (p *QQPDPlugin) Initialize() error { method RegisterWebRoutes (line 556) | func (p *QQPDPlugin) RegisterWebRoutes(router *gin.RouterGroup) { method Search (line 565) | func (p *QQPDPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 574) | func (p *QQPDPlugin) SearchWithResult(keyword string, ext map[string]i... method loadAllUsers (line 636) | func (p *QQPDPlugin) loadAllUsers() { method getUserByHash (line 668) | func (p *QQPDPlugin) getUserByHash(hash string) (*User, bool) { method saveUser (line 677) | func (p *QQPDPlugin) saveUser(user *User) error { method persistUser (line 686) | func (p *QQPDPlugin) persistUser(user *User) error { method deleteUser (line 698) | func (p *QQPDPlugin) deleteUser(hash string) error { method getActiveUsers (line 708) | func (p *QQPDPlugin) getActiveUsers() []*User { method handleManagePage (line 773) | func (p *QQPDPlugin) handleManagePage(c *gin.Context) { method handleManagePagePOST (line 789) | func (p *QQPDPlugin) handleManagePagePOST(c *gin.Context) { method handleGetStatus (line 832) | func (p *QQPDPlugin) handleGetStatus(c *gin.Context, hash string) { method handleRefreshQRCode (line 923) | func (p *QQPDPlugin) handleRefreshQRCode(c *gin.Context, hash string) { method handleLogout (line 950) | func (p *QQPDPlugin) handleLogout(c *gin.Context, hash string) { method handleCheckLogin (line 977) | func (p *QQPDPlugin) handleCheckLogin(c *gin.Context, hash string) { method handleManualLogin (line 1038) | func (p *QQPDPlugin) handleManualLogin(c *gin.Context, hash string, re... method handleSetChannelsWithData (line 1092) | func (p *QQPDPlugin) handleSetChannelsWithData(c *gin.Context, hash st... method handleTestSearchWithData (line 1224) | func (p *QQPDPlugin) handleTestSearchWithData(c *gin.Context, hash str... method buildChannelTasks (line 1312) | func (p *QQPDPlugin) buildChannelTasks(users []*User) []ChannelTask { method executeTasks (line 1373) | func (p *QQPDPlugin) executeTasks(tasks []ChannelTask, keyword string)... method extractGuildIDFromChannelNumber (line 1405) | func (p *QQPDPlugin) extractGuildIDFromChannelNumber(channelNumber str... method searchSingleChannel (line 1458) | func (p *QQPDPlugin) searchSingleChannel(keyword, cookieStr, channelID... method extractResultInfo (line 1638) | func (p *QQPDPlugin) extractResultInfo(item map[string]interface{}, ch... method extractLinksFromContent (line 1687) | func (p *QQPDPlugin) extractLinksFromContent(content string) []model.L... method checkQRLoginStatus (line 1757) | func (p *QQPDPlugin) checkQRLoginStatus(qrsig string) (*LoginResult, e... method extractLoginInfo (line 1836) | func (p *QQPDPlugin) extractLoginInfo(responseText string) (string, st... method fetchFullCookie (line 1873) | func (p *QQPDPlugin) fetchFullCookie(uin, ptsigx, setCookieHeader stri... method parseSetCookieHeader (line 1935) | func (p *QQPDPlugin) parseSetCookieHeader(setCookie string) (string, s... method refreshCookie (line 1965) | func (p *QQPDPlugin) refreshCookie(cookieStr string) string { method maskQQ (line 2057) | func (p *QQPDPlugin) maskQQ(uin string) string { method generateQRCodeWithSig (line 2069) | func (p *QQPDPlugin) generateQRCodeWithSig() ([]byte, string, error) { method testCookieValid (line 2137) | func (p *QQPDPlugin) testCookieValid(cookieStr string) bool { method generateHash (line 2241) | func (p *QQPDPlugin) generateHash(qq string) string { method normalizeChannel (line 2252) | func (p *QQPDPlugin) normalizeChannel(input string) string { method isHexString (line 2268) | func (p *QQPDPlugin) isHexString(s string) bool { method startCleanupTask (line 2365) | func (p *QQPDPlugin) startCleanupTask() { method cleanupExpiredUsers (line 2378) | func (p *QQPDPlugin) cleanupExpiredUsers() int { method markInactiveUsers (line 2400) | func (p *QQPDPlugin) markInactiveUsers() int { type User (line 485) | type User struct type ChannelTask (line 504) | type ChannelTask struct function init (line 511) | func init() { type LoginResult (line 1750) | type LoginResult struct function extractQrsig (line 2106) | func extractQrsig(setCookie string) string { function getptqrtoken (line 2118) | func getptqrtoken(qrsig string) string { function bkn (line 2127) | func bkn(skey string) int64 { function parseCookieString (line 2208) | func parseCookieString(cookieStr string) map[string]string { function respondSuccess (line 2278) | func respondSuccess(c *gin.Context, message string, data interface{}) { function respondError (line 2287) | func respondError(c *gin.Context, message string) { function getEncryptionKey (line 2298) | func getEncryptionKey() []byte { function encryptCookie (line 2307) | func encryptCookie(plaintext string) (string, error) { function decryptCookie (line 2330) | func decryptCookie(encrypted string) (string, error) { FILE: plugin/quark4k/quark4k.go function init (line 20) | func init() { constant BaseURL (line 27) | BaseURL = "https://quark4k.com/api/discussions" constant PageSize (line 30) | PageSize = 50 constant MaxRetries (line 31) | MaxRetries = 2 type Quark4KAsyncPlugin (line 45) | type Quark4KAsyncPlugin struct method Search (line 59) | func (p *Quark4KAsyncPlugin) Search(keyword string, ext map[string]int... method SearchWithResult (line 68) | func (p *Quark4KAsyncPlugin) SearchWithResult(keyword string, ext map[... method doSearch (line 73) | func (p *Quark4KAsyncPlugin) doSearch(client *http.Client, keyword str... method fetchBatch (line 93) | func (p *Quark4KAsyncPlugin) fetchBatch(client *http.Client, keyword s... method deduplicateResults (line 157) | func (p *Quark4KAsyncPlugin) deduplicateResults(results []model.Search... method fetchPage (line 177) | func (p *Quark4KAsyncPlugin) fetchPage(client *http.Client, keyword st... function NewQuark4KAsyncPlugin (line 51) | func NewQuark4KAsyncPlugin() *Quark4KAsyncPlugin { function generateRandomIP (line 330) | func generateRandomIP() string { function getRandomUA (line 339) | func getRandomUA() string { function cleanHTML (line 344) | func cleanHTML(html string) string { function extractQuarkLinksFromText (line 393) | func extractQuarkLinksFromText(content string) []model.Link { function extractURLFromText (line 506) | func extractURLFromText(text string) string { function extractPasswordFromURL (line 538) | func extractPasswordFromURL(url string) string { function abs (line 566) | func abs(n int) int { type Quark4KResponse (line 574) | type Quark4KResponse struct type Quark4KLinks (line 581) | type Quark4KLinks struct type Quark4KDiscussion (line 587) | type Quark4KDiscussion struct type Quark4KDiscussionAttributes (line 595) | type Quark4KDiscussionAttributes struct type Quark4KRelationships (line 608) | type Quark4KRelationships struct type Quark4KPostRef (line 613) | type Quark4KPostRef struct type Quark4KPostData (line 618) | type Quark4KPostData struct type Quark4KIncludedItem (line 624) | type Quark4KIncludedItem struct type Quark4KPost (line 631) | type Quark4KPost struct type Quark4KPostAttributes (line 638) | type Quark4KPostAttributes struct FILE: plugin/quarksoo/quarksoo.go function init (line 20) | func init() { constant BaseURL (line 27) | BaseURL = "https://quarksoo.cc/search.php" constant MaxRetries (line 30) | MaxRetries = 2 type QuarksooAsyncPlugin (line 44) | type QuarksooAsyncPlugin struct method Search (line 58) | func (p *QuarksooAsyncPlugin) Search(keyword string, ext map[string]in... method SearchWithResult (line 67) | func (p *QuarksooAsyncPlugin) SearchWithResult(keyword string, ext map... method doSearch (line 72) | func (p *QuarksooAsyncPlugin) doSearch(client *http.Client, keyword st... method parseSearchResults (line 146) | func (p *QuarksooAsyncPlugin) parseSearchResults(htmlContent string, k... method deduplicateResults (line 220) | func (p *QuarksooAsyncPlugin) deduplicateResults(results []model.Searc... function NewQuarksooAsyncPlugin (line 50) | func NewQuarksooAsyncPlugin() *QuarksooAsyncPlugin { function generateRandomIP (line 241) | func generateRandomIP() string { function getRandomUA (line 250) | func getRandomUA() string { FILE: plugin/qupanshe/qupanshe.go constant BaseURL (line 22) | BaseURL = "https://www.qupanshe.com" constant UserAgent (line 23) | UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.... constant MaxRetries (line 24) | MaxRetries = 3 type QupanshePlugin (line 32) | type QupanshePlugin struct method Search (line 44) | func (p *QupanshePlugin) Search(keyword string, ext map[string]interfa... method SearchWithResult (line 53) | func (p *QupanshePlugin) SearchWithResult(keyword string, ext map[stri... method searchImpl (line 58) | func (p *QupanshePlugin) searchImpl(client *http.Client, keyword strin... method createSessionClient (line 119) | func (p *QupanshePlugin) createSessionClient(baseClient *http.Client) ... method getFormhash (line 141) | func (p *QupanshePlugin) getFormhash(client *http.Client) (string, err... method postSearchRequest (line 218) | func (p *QupanshePlugin) postSearchRequest(client *http.Client, keywor... method getSearchResults (line 312) | func (p *QupanshePlugin) getSearchResults(client *http.Client, searchU... method extractSearchResults (line 364) | func (p *QupanshePlugin) extractSearchResults(doc *goquery.Document) [... method parseSearchResult (line 394) | func (p *QupanshePlugin) parseSearchResult(s *goquery.Selection) model... method cleanTitle (line 509) | func (p *QupanshePlugin) cleanTitle(titleHTML string) string { method determineLinkType (line 525) | func (p *QupanshePlugin) determineLinkType(urlStr string) string { method extractLinksFromText (line 554) | func (p *QupanshePlugin) extractLinksFromText(text string) []model.Link { method extractPasswordFromContent (line 597) | func (p *QupanshePlugin) extractPasswordFromContent(content, linkURL s... method deduplicateLinks (line 643) | func (p *QupanshePlugin) deduplicateLinks(links []model.Link) []model.... method extractPasswordFromURL (line 683) | func (p *QupanshePlugin) extractPasswordFromURL(rawURL string) (normal... method parseStats (line 719) | func (p *QupanshePlugin) parseStats(statsText string, replyCount, view... method parseTime (line 734) | func (p *QupanshePlugin) parseTime(timeStr string) time.Time { method doRequestWithRetry (line 756) | func (p *QupanshePlugin) doRequestWithRetry(req *http.Request, client ... method setRequestHeaders (line 793) | func (p *QupanshePlugin) setRequestHeaders(req *http.Request) { function NewQupanshePlugin (line 37) | func NewQupanshePlugin() *QupanshePlugin { function init (line 804) | func init() { FILE: plugin/qupansou/qupansou.go function init (line 30) | func init() { function startCacheCleaner (line 39) | func startCacheCleaner() { constant ApiURL (line 53) | ApiURL = "https://v.funletu.com/search" constant DefaultTimeout (line 56) | DefaultTimeout = 6 * time.Second constant DefaultPageSize (line 59) | DefaultPageSize = 1000 type QuPanSouAsyncPlugin (line 63) | type QuPanSouAsyncPlugin struct method Name (line 82) | func (p *QuPanSouAsyncPlugin) Name() string { method Priority (line 87) | func (p *QuPanSouAsyncPlugin) Priority() int { method Search (line 92) | func (p *QuPanSouAsyncPlugin) Search(keyword string, ext map[string]in... method SearchWithResult (line 101) | func (p *QuPanSouAsyncPlugin) SearchWithResult(keyword string, ext map... method doSearch (line 106) | func (p *QuPanSouAsyncPlugin) doSearch(client *http.Client, keyword st... method searchAPI (line 126) | func (p *QuPanSouAsyncPlugin) searchAPI(keyword string, client *http.C... method convertResults (line 195) | func (p *QuPanSouAsyncPlugin) convertResults(items []QuPanSouItem) []m... method determineLinkType (line 248) | func (p *QuPanSouAsyncPlugin) determineLinkType(url string) string { function NewQuPanSouPlugin (line 69) | func NewQuPanSouPlugin() *QuPanSouAsyncPlugin { type cachedResponse (line 120) | type cachedResponse struct function cleanHTML (line 279) | func cleanHTML(html string) string { type QuPanSouResponse (line 302) | type QuPanSouResponse struct type QuPanSouItem (line 311) | type QuPanSouItem struct FILE: plugin/sdso/sdso.go constant DebugLog (line 23) | DebugLog = false constant DefaultPagesPerType (line 25) | DefaultPagesPerType = 2 constant MaxAllowedPagesPerType (line 27) | MaxAllowedPagesPerType = 5 constant AESKey (line 29) | AESKey = "4OToScUFOaeVTrHE" constant AESIV (line 30) | AESIV = "9CLGao1vHKqm17Oz" type SDSOPlugin (line 37) | type SDSOPlugin struct method Search (line 92) | func (p *SDSOPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 101) | func (p *SDSOPlugin) SearchWithResult(keyword string, ext map[string]i... method searchImpl (line 106) | func (p *SDSOPlugin) searchImpl(client *http.Client, keyword string, e... method fetchSinglePageWithType (line 223) | func (p *SDSOPlugin) fetchSinglePageWithType(client *http.Client, keyw... method doRequestWithRetry (line 347) | func (p *SDSOPlugin) doRequestWithRetry(req *http.Request, client *htt... type APIResponse (line 42) | type APIResponse struct type DataItem (line 52) | type DataItem struct type FileInfo (line 68) | type FileInfo struct type PageResult (line 77) | type PageResult struct function init (line 84) | func init() { function DecryptURL (line 378) | func DecryptURL(encryptedURL string) (string, error) { function removePKCS7Padding (line 427) | func removePKCS7Padding(data []byte) ([]byte, error) { function cleanHTMLTags (line 452) | func cleanHTMLTags(text string) string { function mapPanType (line 465) | func mapPanType(from string) string { function isValidPanURL (line 481) | func isValidPanURL(url string) bool { FILE: plugin/shandian/shandian.go constant DefaultTimeout (line 37) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 38) | DetailTimeout = 6 * time.Second constant MaxConcurrency (line 40) | MaxConcurrency = 20 constant MaxIdleConns (line 42) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 43) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 44) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 45) | IdleConnTimeout = 90 * time.Second function init (line 59) | func init() { function startCacheCleaner (line 67) | func startCacheCleaner() { type ShandianAsyncPlugin (line 79) | type ShandianAsyncPlugin struct method Search (line 105) | func (p *ShandianAsyncPlugin) Search(keyword string, ext map[string]in... method SearchWithResult (line 114) | func (p *ShandianAsyncPlugin) SearchWithResult(keyword string, ext map... method searchImpl (line 119) | func (p *ShandianAsyncPlugin) searchImpl(client *http.Client, keyword ... method parseSearchItem (line 177) | func (p *ShandianAsyncPlugin) parseSearchItem(s *goquery.Selection, ke... method enhanceWithDetails (line 270) | func (p *ShandianAsyncPlugin) enhanceWithDetails(client *http.Client, ... method doRequestWithRetry (line 326) | func (p *ShandianAsyncPlugin) doRequestWithRetry(req *http.Request, cl... method fetchDetailLinks (line 355) | func (p *ShandianAsyncPlugin) fetchDetailLinks(client *http.Client, it... method isValidNetworkDriveURL (line 439) | func (p *ShandianAsyncPlugin) isValidNetworkDriveURL(url string) bool { function createOptimizedHTTPClient (line 85) | func createOptimizedHTTPClient() *http.Client { function NewShandianPlugin (line 97) | func NewShandianPlugin() *ShandianAsyncPlugin { function min (line 453) | func min(a, b int) int { FILE: plugin/sousou/sousou.go function debugLog (line 20) | func debugLog(format string, args ...interface{}) { function init (line 27) | func init() { constant SousouAPI (line 33) | SousouAPI = "https://sousou.pro/api.php" constant DefaultPerSize (line 36) | DefaultPerSize = 30 constant DefaultMaxPages (line 37) | DefaultMaxPages = 3 type SousouAsyncPlugin (line 51) | type SousouAsyncPlugin struct method Search (line 63) | func (p *SousouAsyncPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 72) | func (p *SousouAsyncPlugin) SearchWithResult(keyword string, ext map[s... method doSearch (line 77) | func (p *SousouAsyncPlugin) doSearch(client *http.Client, keyword stri... method searchByType (line 151) | func (p *SousouAsyncPlugin) searchByType(client *http.Client, keyword ... method deduplicateItems (line 281) | func (p *SousouAsyncPlugin) deduplicateItems(items []SousouItem) []Sou... method convertResults (line 336) | func (p *SousouAsyncPlugin) convertResults(items []SousouItem) []model... method convertDiskType (line 399) | func (p *SousouAsyncPlugin) convertDiskType(diskType string) string { method processTags (line 427) | func (p *SousouAsyncPlugin) processTags(tags interface{}) []string { function NewSousouAsyncPlugin (line 56) | func NewSousouAsyncPlugin() *SousouAsyncPlugin { function min (line 273) | func min(a, b int) int { type SousouResponse (line 449) | type SousouResponse struct type SousouItem (line 461) | type SousouItem struct FILE: plugin/susu/susu.go function init (line 50) | func init() { function startCacheCleaner (line 62) | func startCacheCleaner() { function getRandomUA (line 77) | func getRandomUA() string { constant SearchURL (line 83) | SearchURL = "https://susuifa.com/?type=post&s=%s" constant ButtonListURL (line 85) | ButtonListURL = "https://susuifa.com/wp-json/b2/v1/getDownloadData?post_... constant ButtonDetailURL (line 87) | ButtonDetailURL = "https://susuifa.com/wp-json/b2/v1/getDownloadPageData... constant MaxRetries (line 89) | MaxRetries = 0 constant MaxConcurrency (line 91) | MaxConcurrency = 100 type SusuAsyncPlugin (line 95) | type SusuAsyncPlugin struct method Search (line 107) | func (p *SusuAsyncPlugin) Search(keyword string, ext map[string]interf... method SearchWithResult (line 116) | func (p *SusuAsyncPlugin) SearchWithResult(keyword string, ext map[str... method doSearch (line 121) | func (p *SusuAsyncPlugin) doSearch(client *http.Client, keyword string... method extractPostID (line 277) | func (p *SusuAsyncPlugin) extractPostID(s *goquery.Selection) string { method getLinks (line 311) | func (p *SusuAsyncPlugin) getLinks(client *http.Client, postID string)... method getButtonDetail (line 361) | func (p *SusuAsyncPlugin) getButtonDetail(client *http.Client, postID ... method decodeJWTURL (line 432) | func (p *SusuAsyncPlugin) decodeJWTURL(jwtToken string) (string, error) { method determineLinkType (line 467) | func (p *SusuAsyncPlugin) determineLinkType(url, name string) string { method doRequestWithRetry (line 538) | func (p *SusuAsyncPlugin) doRequestWithRetry(client *http.Client, req ... function NewSusuAsyncPlugin (line 100) | func NewSusuAsyncPlugin() *SusuAsyncPlugin { function isRetriableError (line 569) | func isRetriableError(err error) bool { function md5sum (line 587) | func md5sum(s string) uint32 { FILE: plugin/thepiratebay/thepiratebay.go constant SearchURL (line 22) | SearchURL = "https://thpibay.xyz/search/%s/1/99/0" constant SearchPageURL (line 25) | SearchPageURL = "https://thpibay.xyz/search/%s/%d/99/0" constant DefaultTimeout (line 28) | DefaultTimeout = 10 * time.Second constant MaxConcurrency (line 31) | MaxConcurrency = 200 constant MaxPages (line 34) | MaxPages = 30 constant MaxIdleConns (line 37) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 38) | MaxIdleConnsPerHost = 80 constant MaxConnsPerHost (line 39) | MaxConnsPerHost = 150 constant IdleConnTimeout (line 40) | IdleConnTimeout = 90 * time.Second type pageResponse (line 72) | type pageResponse struct type ThePirateBayPlugin (line 79) | type ThePirateBayPlugin struct method Search (line 132) | func (p *ThePirateBayPlugin) Search(keyword string, ext map[string]int... method SearchWithResult (line 141) | func (p *ThePirateBayPlugin) SearchWithResult(keyword string, ext map[... method searchImpl (line 146) | func (p *ThePirateBayPlugin) searchImpl(client *http.Client, keyword s... method searchPage (line 225) | func (p *ThePirateBayPlugin) searchPage(client *http.Client, encodedKe... method parseTotalPages (line 313) | func (p *ThePirateBayPlugin) parseTotalPages(doc *goquery.Document) int { method parseSearchResultItem (line 352) | func (p *ThePirateBayPlugin) parseSearchResultItem(s *goquery.Selectio... method parseUploadTime (line 450) | func (p *ThePirateBayPlugin) parseUploadTime(timeStr string) time.Time { method doRequestWithRetry (line 476) | func (p *ThePirateBayPlugin) doRequestWithRetry(req *http.Request, cli... function createOptimizedHTTPClient (line 85) | func createOptimizedHTTPClient() *http.Client { function NewThePirateBayPlugin (line 104) | func NewThePirateBayPlugin() *ThePirateBayPlugin { function init (line 112) | func init() { function startCacheCleaner (line 120) | func startCacheCleaner() { FILE: plugin/u3c3/u3c3.go constant BaseURL (line 19) | BaseURL = "https://u3c3u3c3.u3c3u3c3u3c3.com" constant UserAgent (line 20) | UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.... constant MaxRetries (line 21) | MaxRetries = 3 constant RetryDelay (line 22) | RetryDelay = 2 * time.Second type U3c3Plugin (line 26) | type U3c3Plugin struct method Search (line 42) | func (p *U3c3Plugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 51) | func (p *U3c3Plugin) SearchWithResult(keyword string, ext map[string]i... method getSearch2Parameter (line 91) | func (p *U3c3Plugin) getSearch2Parameter() (string, error) { method extractSearch2FromHTML (line 163) | func (p *U3c3Plugin) extractSearch2FromHTML(html string) string { method doSearch (line 210) | func (p *U3c3Plugin) doSearch(keyword, search2 string) ([]model.Search... method parseSearchResults (line 267) | func (p *U3c3Plugin) parseSearchResults(html string) ([]model.SearchRe... method cleanTitle (line 363) | func (p *U3c3Plugin) cleanTitle(title string) string { method parseDateTime (line 374) | func (p *U3c3Plugin) parseDateTime(dateStr string) time.Time { method generateUniqueID (line 397) | func (p *U3c3Plugin) generateUniqueID(title, size string) string { function init (line 33) | func init() { FILE: plugin/wanou/wanou.go constant DefaultTimeout (line 21) | DefaultTimeout = 8 * time.Second constant MaxIdleConns (line 24) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 25) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 26) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 27) | IdleConnTimeout = 90 * time.Second function init (line 36) | func init() { type WanouAsyncPlugin (line 61) | type WanouAsyncPlugin struct method Search (line 91) | func (p *WanouAsyncPlugin) Search(keyword string, ext map[string]inter... method SearchWithResult (line 100) | func (p *WanouAsyncPlugin) SearchWithResult(keyword string, ext map[st... method searchImpl (line 105) | func (p *WanouAsyncPlugin) searchImpl(client *http.Client, keyword str... method parseAPIItem (line 201) | func (p *WanouAsyncPlugin) parseAPIItem(item WanouAPIItem) model.Searc... method parseDownloadLinks (line 261) | func (p *WanouAsyncPlugin) parseDownloadLinks(vodDownFrom, vodDownURL ... method determineLinkTypeOptimized (line 309) | func (p *WanouAsyncPlugin) determineLinkTypeOptimized(apiType, url str... method determineLinkType (line 394) | func (p *WanouAsyncPlugin) determineLinkType(url string) string { method extractPassword (line 426) | func (p *WanouAsyncPlugin) extractPassword(url string) string { method doRequestWithRetry (line 435) | func (p *WanouAsyncPlugin) doRequestWithRetry(req *http.Request, clien... method GetPerformanceStats (line 461) | func (p *WanouAsyncPlugin) GetPerformanceStats() map[string]interface{} { function createOptimizedHTTPClient (line 67) | func createOptimizedHTTPClient() *http.Client { function NewWanouPlugin (line 83) | func NewWanouPlugin() *WanouAsyncPlugin { type WanouAPIResponse (line 174) | type WanouAPIResponse struct type WanouAPIItem (line 185) | type WanouAPIItem struct FILE: plugin/weibo/weibo.go constant MaxConcurrentUsers (line 29) | MaxConcurrentUsers = 10 constant MaxConcurrentWeibo (line 30) | MaxConcurrentWeibo = 30 constant MaxComments (line 31) | MaxComments = 1 constant DebugLog (line 32) | DebugLog = false constant HTMLTemplate (line 38) | HTMLTemplate = ` type WeiboPlugin (line 409) | type WeiboPlugin struct method Initialize (line 446) | func (p *WeiboPlugin) Initialize() error { method RegisterWebRoutes (line 469) | func (p *WeiboPlugin) RegisterWebRoutes(router *gin.RouterGroup) { method SkipServiceFilter (line 477) | func (p *WeiboPlugin) SkipServiceFilter() bool { method Search (line 482) | func (p *WeiboPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 490) | func (p *WeiboPlugin) SearchWithResult(keyword string, ext map[string]... method loadAllUsers (line 528) | func (p *WeiboPlugin) loadAllUsers() { method getUserByHash (line 558) | func (p *WeiboPlugin) getUserByHash(hash string) (*User, bool) { method saveUser (line 566) | func (p *WeiboPlugin) saveUser(user *User) error { method persistUser (line 571) | func (p *WeiboPlugin) persistUser(user *User) error { method deleteUser (line 580) | func (p *WeiboPlugin) deleteUser(hash string) error { method getActiveUsers (line 586) | func (p *WeiboPlugin) getActiveUsers() []*User { method handleManagePage (line 614) | func (p *WeiboPlugin) handleManagePage(c *gin.Context) { method handleManagePagePOST (line 626) | func (p *WeiboPlugin) handleManagePagePOST(c *gin.Context) { method handleGetStatus (line 659) | func (p *WeiboPlugin) handleGetStatus(c *gin.Context, hash string) { method handleRefreshQRCode (line 724) | func (p *WeiboPlugin) handleRefreshQRCode(c *gin.Context, hash string) { method handleLogout (line 749) | func (p *WeiboPlugin) handleLogout(c *gin.Context, hash string) { method handleCheckLogin (line 769) | func (p *WeiboPlugin) handleCheckLogin(c *gin.Context, hash string) { method handleSetUserIDs (line 830) | func (p *WeiboPlugin) handleSetUserIDs(c *gin.Context, hash string, re... method handleTestSearch (line 880) | func (p *WeiboPlugin) handleTestSearch(c *gin.Context, hash string, re... method buildUserTasks (line 938) | func (p *WeiboPlugin) buildUserTasks(users []*User) []UserTask { method refreshCookie (line 990) | func (p *WeiboPlugin) refreshCookie(cookieStr string) string { method executeTasks (line 1059) | func (p *WeiboPlugin) executeTasks(tasks []UserTask, keyword string) [... method searchUserWeibo (line 1086) | func (p *WeiboPlugin) searchUserWeibo(uid, cookie, keyword string) []m... method getComments (line 1285) | func (p *WeiboPlugin) getComments(weiboID, cookie string, maxComments ... method parseWeibo (line 1464) | func (p *WeiboPlugin) parseWeibo(weibo map[string]interface{}, uid str... method checkQRLoginStatus (line 1663) | func (p *WeiboPlugin) checkQRLoginStatus(qrsig string) (*LoginResult, ... method generateQRCodeWithSig (line 1777) | func (p *WeiboPlugin) generateQRCodeWithSig() ([]byte, string, error) { method initCookieFromAlt (line 1849) | func (p *WeiboPlugin) initCookieFromAlt(alt string) (string, error) { method generateHash (line 1979) | func (p *WeiboPlugin) generateHash(input string) string { method isHexString (line 1989) | func (p *WeiboPlugin) isHexString(s string) bool { method startCleanupTask (line 2014) | func (p *WeiboPlugin) startCleanupTask() { method cleanupExpiredUsers (line 2026) | func (p *WeiboPlugin) cleanupExpiredUsers() int { method markInactiveUsers (line 2044) | func (p *WeiboPlugin) markInactiveUsers() int { type User (line 416) | type User struct type UserTask (line 432) | type UserTask struct function init (line 437) | func init() { function extractURLsFromComment (line 1404) | func extractURLsFromComment(htmlText string) []string { function fetchPageAndExtractLinks (line 1426) | func fetchPageAndExtractLinks(pageURL string, datetime time.Time) []mode... type Comment (line 1459) | type Comment struct function extractNetworkDriveLinks (line 1577) | func extractNetworkDriveLinks(text string, datetime time.Time) []model.L... function min (line 1642) | func min(a, b int) int { function cleanHTML (line 1649) | func cleanHTML(html string) string { type LoginResult (line 1657) | type LoginResult struct function respondSuccess (line 1998) | func respondSuccess(c *gin.Context, message string, data interface{}) { function respondError (line 2006) | func respondError(c *gin.Context, message string) { FILE: plugin/wuji/wuji.go constant BaseURL (line 22) | BaseURL = "https://xcili.net" constant SearchURL (line 25) | SearchURL = BaseURL + "/search?q=%s&page=%d" constant MaxRetries (line 28) | MaxRetries = 3 constant TimeoutSeconds (line 29) | TimeoutSeconds = 30 constant MaxConcurrency (line 32) | MaxConcurrency = 10 constant MaxPages (line 33) | MaxPages = 5 type magnetCacheEntry (line 47) | type magnetCacheEntry struct type WujiPlugin (line 60) | type WujiPlugin struct method Name (line 72) | func (p *WujiPlugin) Name() string { method DisplayName (line 77) | func (p *WujiPlugin) DisplayName() string { method Description (line 82) | func (p *WujiPlugin) Description() string { method Search (line 87) | func (p *WujiPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 96) | func (p *WujiPlugin) SearchWithResult(keyword string, ext map[string]i... method searchImpl (line 101) | func (p *WujiPlugin) searchImpl(client *http.Client, keyword string, e... method searchPage (line 170) | func (p *WujiPlugin) searchPage(client *http.Client, keyword string, p... method extractSearchResults (line 217) | func (p *WujiPlugin) extractSearchResults(doc *goquery.Document) []mod... method parseSearchResult (line 232) | func (p *WujiPlugin) parseSearchResult(s *goquery.Selection) model.Sea... method fetchMagnetLink (line 289) | func (p *WujiPlugin) fetchMagnetLink(client *http.Client, detailURL st... method cleanTitle (line 359) | func (p *WujiPlugin) cleanTitle(title string) string { method setRequestHeaders (line 372) | func (p *WujiPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 385) | func (p *WujiPlugin) doRequestWithRetry(req *http.Request, client *htt... method enrichWithMagnetLinks (line 404) | func (p *WujiPlugin) enrichWithMagnetLinks(results []model.SearchResul... function NewWujiPlugin (line 65) | func NewWujiPlugin() *WujiPlugin { function init (line 466) | func init() { FILE: plugin/xb6v/xb6v.go constant BaseURL (line 21) | BaseURL = "https://www.66ss.org" constant BackupURL (line 22) | BackupURL = "https://www.xb6v.com" constant SearchPath (line 23) | SearchPath = "/e/search/1index.php" constant UserAgent (line 24) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleW... constant MaxConcurrency (line 25) | MaxConcurrency = 50 constant MaxResults (line 26) | MaxResults = 50 type Xb6vPlugin (line 30) | type Xb6vPlugin struct method Name (line 64) | func (p *Xb6vPlugin) Name() string { method DisplayName (line 69) | func (p *Xb6vPlugin) DisplayName() string { method Description (line 74) | func (p *Xb6vPlugin) Description() string { method Search (line 79) | func (p *Xb6vPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 88) | func (p *Xb6vPlugin) SearchWithResult(keyword string, ext map[string]i... method setRequestHeaders (line 93) | func (p *Xb6vPlugin) setRequestHeaders(req *http.Request, referer stri... method doRequest (line 106) | func (p *Xb6vPlugin) doRequest(client *http.Client, method, url, postD... method searchImpl (line 145) | func (p *Xb6vPlugin) searchImpl(client *http.Client, keyword string, e... method getResponseReader (line 343) | func (p *Xb6vPlugin) getResponseReader(resp *http.Response) (io.Reader... method extractDetailURLs (line 365) | func (p *Xb6vPlugin) extractDetailURLs(doc *goquery.Document) []Detail... method isInSidebar (line 447) | func (p *Xb6vPlugin) isInSidebar(s *goquery.Selection) bool { method isValidContentURL (line 465) | func (p *Xb6vPlugin) isValidContentURL(href string) bool { method cleanTitle (line 491) | func (p *Xb6vPlugin) cleanTitle(title string) string { method fetchMagnetLinksFromDetails (line 543) | func (p *Xb6vPlugin) fetchMagnetLinksFromDetails(client *http.Client, ... method fetchDetailPageMagnetLinks (line 580) | func (p *Xb6vPlugin) fetchDetailPageMagnetLinks(client *http.Client, d... method extractMagnetLinks (line 690) | func (p *Xb6vPlugin) extractMagnetLinks(doc *goquery.Document, mainTit... method extractResourceID (line 774) | func (p *Xb6vPlugin) extractResourceID(detailURL string) string { method filterValidResults (line 787) | func (p *Xb6vPlugin) filterValidResults(results []model.SearchResult) ... type DetailPageInfo (line 39) | type DetailPageInfo struct function NewXb6vPlugin (line 45) | func NewXb6vPlugin() *Xb6vPlugin { type MagnetLinkInfo (line 684) | type MagnetLinkInfo struct function init (line 801) | func init() { FILE: plugin/xdpan/xdpan.go constant BaseURL (line 19) | BaseURL = "https://xiongdipan.com" constant UserAgent (line 20) | UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/... constant MaxConcurrency (line 21) | MaxConcurrency = 10 constant MaxRetries (line 22) | MaxRetries = 3 type XdpanPlugin (line 30) | type XdpanPlugin struct method Search (line 45) | func (p *XdpanPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 54) | func (p *XdpanPlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 59) | func (p *XdpanPlugin) searchImpl(client *http.Client, keyword string, ... method fetchSearchResults (line 89) | func (p *XdpanPlugin) fetchSearchResults(client *http.Client, keyword ... method extractSearchResults (line 127) | func (p *XdpanPlugin) extractSearchResults(doc *goquery.Document) []mo... method parseSearchResult (line 155) | func (p *XdpanPlugin) parseSearchResult(s *goquery.Selection) model.Se... method enrichWithDetailInfo (line 232) | func (p *XdpanPlugin) enrichWithDetailInfo(client *http.Client, result... method fetchDetailPageLinks (line 268) | func (p *XdpanPlugin) fetchDetailPageLinks(client *http.Client, detail... method extractDetailPageLinks (line 319) | func (p *XdpanPlugin) extractDetailPageLinks(doc *goquery.Document) []... method extractDetailURLFromContent (line 367) | func (p *XdpanPlugin) extractDetailURLFromContent(content string) stri... method parseTime (line 378) | func (p *XdpanPlugin) parseTime(timeStr string) time.Time { method doRequestWithRetry (line 404) | func (p *XdpanPlugin) doRequestWithRetry(req *http.Request, client *ht... method setRequestHeaders (line 435) | func (p *XdpanPlugin) setRequestHeaders(req *http.Request) { function NewXdpanPlugin (line 37) | func NewXdpanPlugin() *XdpanPlugin { type cacheItem (line 445) | type cacheItem struct function init (line 450) | func init() { FILE: plugin/xdyh/xdyh.go constant pluginName (line 19) | pluginName = "xdyh" constant apiURL (line 20) | apiURL = "https://ys.66ds.de/search" constant refererURL (line 21) | refererURL = "https://ys.66ds.de/" constant DefaultTimeout (line 24) | DefaultTimeout = 15 * time.Second constant MaxConcurrency (line 27) | MaxConcurrency = 10 constant MaxIdleConns (line 30) | MaxIdleConns = 100 constant MaxIdleConnsPerHost (line 31) | MaxIdleConnsPerHost = 30 constant MaxConnsPerHost (line 32) | MaxConnsPerHost = 50 constant IdleConnTimeout (line 33) | IdleConnTimeout = 90 * time.Second function init (line 44) | func init() { function startCacheCleaner (line 52) | func startCacheCleaner() { type XdyhAsyncPlugin (line 64) | type XdyhAsyncPlugin struct method Search (line 91) | func (p *XdyhAsyncPlugin) Search(keyword string, ext map[string]interf... method SearchWithResult (line 100) | func (p *XdyhAsyncPlugin) SearchWithResult(keyword string, ext map[str... method searchImpl (line 105) | func (p *XdyhAsyncPlugin) searchImpl(client *http.Client, keyword stri... method setRequestHeaders (line 184) | func (p *XdyhAsyncPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 196) | func (p *XdyhAsyncPlugin) doRequestWithRetry(req *http.Request, client... method convertToSearchResults (line 225) | func (p *XdyhAsyncPlugin) convertToSearchResults(apiResp APIResponse, ... method convertDriveLinks (line 270) | func (p *XdyhAsyncPlugin) convertDriveLinks(item SearchResultItem) []m... method parseDateTime (line 300) | func (p *XdyhAsyncPlugin) parseDateTime(dateStr string) time.Time { method buildContentDescription (line 320) | func (p *XdyhAsyncPlugin) buildContentDescription(item SearchResultIte... method extractTags (line 352) | func (p *XdyhAsyncPlugin) extractTags(title, sourceSite string) []stri... method isValidURL (line 386) | func (p *XdyhAsyncPlugin) isValidURL(urlStr string) bool { method determineCloudType (line 405) | func (p *XdyhAsyncPlugin) determineCloudType(url string) string { function createOptimizedHTTPClient (line 70) | func createOptimizedHTTPClient() *http.Client { function NewXdyhPlugin (line 83) | func NewXdyhPlugin() *XdyhAsyncPlugin { type SearchRequest (line 433) | type SearchRequest struct type APIResponse (line 442) | type APIResponse struct type Summary (line 453) | type Summary struct type SearchResultItem (line 463) | type SearchResultItem struct type Performance (line 476) | type Performance struct FILE: plugin/xiaoji/xiaoji.go constant pluginName (line 38) | pluginName = "xiaoji" constant baseURL (line 39) | baseURL = "https://www.xiaojitv.com" constant DefaultTimeout (line 42) | DefaultTimeout = 10 * time.Second constant DetailTimeout (line 43) | DetailTimeout = 8 * time.Second constant MaxConcurrency (line 46) | MaxConcurrency = 15 constant MaxIdleConns (line 49) | MaxIdleConns = 100 constant MaxIdleConnsPerHost (line 50) | MaxIdleConnsPerHost = 30 constant MaxConnsPerHost (line 51) | MaxConnsPerHost = 50 constant IdleConnTimeout (line 52) | IdleConnTimeout = 90 * time.Second function init (line 56) | func init() { function startCacheCleaner (line 64) | func startCacheCleaner() { type XiaojiAsyncPlugin (line 76) | type XiaojiAsyncPlugin struct method Search (line 103) | func (p *XiaojiAsyncPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 112) | func (p *XiaojiAsyncPlugin) SearchWithResult(keyword string, ext map[s... method searchImpl (line 117) | func (p *XiaojiAsyncPlugin) searchImpl(client *http.Client, keyword st... method setRequestHeaders (line 161) | func (p *XiaojiAsyncPlugin) setRequestHeaders(req *http.Request) { method doRequestWithRetry (line 172) | func (p *XiaojiAsyncPlugin) doRequestWithRetry(req *http.Request, clie... method parseSearchResults (line 201) | func (p *XiaojiAsyncPlugin) parseSearchResults(doc *goquery.Document, ... method parseSearchResultItem (line 216) | func (p *XiaojiAsyncPlugin) parseSearchResultItem(s *goquery.Selection... method fetchDetailPageLinks (line 291) | func (p *XiaojiAsyncPlugin) fetchDetailPageLinks(detailURL string) []m... method parseDetailPageLinks (line 336) | func (p *XiaojiAsyncPlugin) parseDetailPageLinks(doc *goquery.Document... method decodeGoLink (line 379) | func (p *XiaojiAsyncPlugin) decodeGoLink(goLink string) string { method isValidURL (line 423) | func (p *XiaojiAsyncPlugin) isValidURL(urlStr string) bool { method determineCloudType (line 452) | func (p *XiaojiAsyncPlugin) determineCloudType(url string) string { function createOptimizedHTTPClient (line 82) | func createOptimizedHTTPClient() *http.Client { function NewXiaojiPlugin (line 95) | func NewXiaojiPlugin() *XiaojiAsyncPlugin { FILE: plugin/xiaozhang/xiaozhang.go constant BaseURL (line 21) | BaseURL = "https://xzys.fun" constant SearchPath (line 22) | SearchPath = "/search.html" constant UserAgent (line 23) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleW... constant MaxConcurrency (line 24) | MaxConcurrency = 20 constant MaxPages (line 25) | MaxPages = 1 type XiaozhangPlugin (line 29) | type XiaozhangPlugin struct method Name (line 51) | func (p *XiaozhangPlugin) Name() string { method DisplayName (line 56) | func (p *XiaozhangPlugin) DisplayName() string { method Description (line 61) | func (p *XiaozhangPlugin) Description() string { method Search (line 66) | func (p *XiaozhangPlugin) Search(keyword string, ext map[string]interf... method SearchWithResult (line 75) | func (p *XiaozhangPlugin) SearchWithResult(keyword string, ext map[str... method setRequestHeaders (line 80) | func (p *XiaozhangPlugin) setRequestHeaders(req *http.Request, referer... method doRequest (line 93) | func (p *XiaozhangPlugin) doRequest(client *http.Client, url string, r... method searchImpl (line 135) | func (p *XiaozhangPlugin) searchImpl(client *http.Client, keyword stri... method extractSearchResults (line 201) | func (p *XiaozhangPlugin) extractSearchResults(doc *goquery.Document, ... method enrichWithDetailLinks (line 304) | func (p *XiaozhangPlugin) enrichWithDetailLinks(client *http.Client, r... method fetchDetailPageLinks (line 351) | func (p *XiaozhangPlugin) fetchDetailPageLinks(client *http.Client, de... method extractDetailPageLinks (line 423) | func (p *XiaozhangPlugin) extractDetailPageLinks(resp *http.Response, ... function NewXiaozhangPlugin (line 37) | func NewXiaozhangPlugin() *XiaozhangPlugin { function isValidPanLink (line 512) | func isValidPanLink(url string) bool { function determineLinkType (line 537) | func determineLinkType(url string) string { function init (line 561) | func init() { FILE: plugin/xinjuc/xinjuc.go constant DefaultTimeout (line 41) | DefaultTimeout = 10 * time.Second constant DetailTimeout (line 42) | DetailTimeout = 8 * time.Second constant MaxConcurrency (line 45) | MaxConcurrency = 15 constant MaxIdleConns (line 48) | MaxIdleConns = 50 constant MaxIdleConnsPerHost (line 49) | MaxIdleConnsPerHost = 20 constant MaxConnsPerHost (line 50) | MaxConnsPerHost = 30 constant IdleConnTimeout (line 51) | IdleConnTimeout = 90 * time.Second constant SiteURL (line 54) | SiteURL = "https://www.xinjuc.com" function init (line 58) | func init() { function startCacheCleaner (line 66) | func startCacheCleaner() { type XinjucPlugin (line 78) | type XinjucPlugin struct method Search (line 104) | func (p *XinjucPlugin) Search(keyword string, ext map[string]interface... method SearchWithResult (line 113) | func (p *XinjucPlugin) SearchWithResult(keyword string, ext map[string... method searchImpl (line 118) | func (p *XinjucPlugin) searchImpl(client *http.Client, keyword string,... method parseSearchItem (line 181) | func (p *XinjucPlugin) parseSearchItem(s *goquery.Selection, keyword s... method parseTime (line 245) | func (p *XinjucPlugin) parseTime(timeStr string) time.Time { method enhanceWithDetails (line 273) | func (p *XinjucPlugin) enhanceWithDetails(client *http.Client, results... method getDetailInfo (line 312) | func (p *XinjucPlugin) getDetailInfo(client *http.Client, detailURL st... method fetchDetailPage (line 344) | func (p *XinjucPlugin) fetchDetailPage(client *http.Client, detailURL ... method extractLinksFromDoc (line 394) | func (p *XinjucPlugin) extractLinksFromDoc(doc *goquery.Document) []mo... method isValidBaiduLink (line 480) | func (p *XinjucPlugin) isValidBaiduLink(link string) bool { method extractContent (line 500) | func (p *XinjucPlugin) extractContent(articleContent *goquery.Selectio... method doRequestWithRetry (line 522) | func (p *XinjucPlugin) doRequestWithRetry(req *http.Request, client *h... function createOptimizedHTTPClient (line 84) | func createOptimizedHTTPClient() *http.Client { function NewXinjucPlugin (line 96) | func NewXinjucPlugin() *XinjucPlugin { type DetailCacheData (line 337) | type DetailCacheData struct FILE: plugin/xuexizhinan/xuexizhinan.go constant SearchURL (line 21) | SearchURL = "https://xuexizhinan.com/?post_type=book&s=%s" constant DetailURLPattern (line 24) | DetailURLPattern = `https://xuexizhinan.com/book/(\d+)\.html` constant DefaultTimeout (line 27) | DefaultTimeout = 10 * time.Second constant MaxConcurrency (line 30) | MaxConcurrency = 8 type detailPageResponse (line 53) | type detailPageResponse struct type XuexizhinanPlugin (line 64) | type XuexizhinanPlugin struct method Search (line 96) | func (p *XuexizhinanPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 105) | func (p *XuexizhinanPlugin) SearchWithResult(keyword string, ext map[s... method doSearch (line 110) | func (p *XuexizhinanPlugin) doSearch(client *http.Client, keyword stri... method processDetailPage (line 256) | func (p *XuexizhinanPlugin) processDetailPage(client *http.Client, det... method detailResponseToResult (line 370) | func (p *XuexizhinanPlugin) detailResponseToResult(detailURL string, r... function NewXuexizhinanPlugin (line 69) | func NewXuexizhinanPlugin() *XuexizhinanPlugin { function init (line 76) | func init() { function startCacheCleaner (line 84) | func startCacheCleaner() { FILE: plugin/xys/xys.go constant PluginName (line 23) | PluginName = "xys" constant DisplayName (line 24) | DisplayName = "小云搜索" constant Description (line 25) | Description = "小云搜索 - 阿里云盘、夸克网盘、百度网盘等多网盘搜索引擎" constant BaseURL (line 26) | BaseURL = "https://www.yunso.net" constant TokenPath (line 27) | TokenPath = "/index/user/s" constant SearchPath (line 28) | SearchPath = "/api/validate/searchX2" constant UserAgent (line 29) | UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWe... constant MaxResults (line 30) | MaxResults = 50 type XysPlugin (line 34) | type XysPlugin struct method Name (line 75) | func (p *XysPlugin) Name() string { method DisplayName (line 80) | func (p *XysPlugin) DisplayName() string { method Description (line 85) | func (p *XysPlugin) Description() string { method Search (line 90) | func (p *XysPlugin) Search(keyword string, ext map[string]interface{})... method searchImpl (line 95) | func (p *XysPlugin) searchImpl(client *http.Client, keyword string, ex... method getToken (line 124) | func (p *XysPlugin) getToken(client *http.Client, keyword string) (str... method doRequestWithRetry (line 208) | func (p *XysPlugin) doRequestWithRetry(req *http.Request, client *http... method executeSearch (line 237) | func (p *XysPlugin) executeSearch(client *http.Client, token, keyword ... method parseSearchResults (line 296) | func (p *XysPlugin) parseSearchResults(htmlData, keyword string) ([]mo... method parseResultItem (line 331) | func (p *XysPlugin) parseResultItem(s *goquery.Selection, index int) *... method cleanTitle (line 406) | func (p *XysPlugin) cleanTitle(title string) string { method parseTime (line 427) | func (p *XysPlugin) parseTime(timeStr string) time.Time { method extractPlatform (line 446) | func (p *XysPlugin) extractPlatform(s *goquery.Selection, href string)... type TokenCache (line 42) | type TokenCache struct type SearchResponse (line 48) | type SearchResponse struct function init (line 56) | func init() { function NewXysPlugin (line 61) | func NewXysPlugin() *XysPlugin { function determineCloudType (line 451) | func determineCloudType(url string) string { FILE: plugin/yiove/yiove.go constant pluginName (line 20) | pluginName = "yiove" constant defaultPriority (line 21) | defaultPriority = 3 constant baseURL (line 23) | baseURL = "https://bbs.yiove.com" constant searchPathFormat (line 24) | searchPathFormat = baseURL + "/search-%s-1.htm" constant requestTimeout (line 25) | requestTimeout = 12 * time.Second constant detailTimeout (line 26) | detailTimeout = 12 * time.Second constant retryBaseDelay (line 27) | retryBaseDelay = 200 * time.Millisecond constant maxRequestRetries (line 28) | maxRequestRetries = 3 constant searchResultLimit (line 29) | searchResultLimit = 12 constant detailLinkLimit (line 30) | detailLinkLimit = 6 constant detailWorkerCount (line 31) | detailWorkerCount = 6 constant httpMaxIdleConns (line 32) | httpMaxIdleConns = 64 constant httpMaxIdlePerHost (line 33) | httpMaxIdlePerHost = 16 constant httpMaxConnsPerHost (line 34) | httpMaxConnsPerHost = 32 type YiovePlugin (line 67) | type YiovePlugin struct method Search (line 85) | func (p *YiovePlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 94) | func (p *YiovePlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 98) | func (p *YiovePlugin) searchImpl(client *http.Client, keyword string, ... method fetchSearchResults (line 214) | func (p *YiovePlugin) fetchSearchResults(client *http.Client, keyword ... method fetchDetail (line 295) | func (p *YiovePlugin) fetchDetail(client *http.Client, detailURL strin... method doRequestWithRetry (line 621) | func (p *YiovePlugin) doRequestWithRetry(req *http.Request, client *ht... function init (line 72) | func init() { function NewYiovePlugin (line 77) | func NewYiovePlugin() *YiovePlugin { type searchThread (line 208) | type searchThread struct type detailPayload (line 288) | type detailPayload struct function logDebug (line 349) | func logDebug(enabled bool, format string, args ...interface{}) { function collectTags (line 356) | func collectTags(doc *goquery.Document) []string { function extractDatetime (line 381) | func extractDatetime(doc *goquery.Document) time.Time { function extractLinks (line 404) | func extractLinks(selection *goquery.Selection) []model.Link { function classifyLink (line 457) | func classifyLink(raw string) (string, string) { function extractPassword (line 470) | func extractPassword(node *goquery.Selection) string { function matchPassword (line 496) | func matchPassword(text string) string { function limitLinks (line 509) | func limitLinks(links []model.Link, limit int) []model.Link { function applyWorkTitle (line 516) | func applyWorkTitle(links []model.Link, title string) []model.Link { function mergeTags (line 526) | func mergeTags(a, b []string) []string { function encodeKeyword (line 546) | func encodeKeyword(keyword string) string { function toAbsoluteURL (line 559) | func toAbsoluteURL(href string) string { function truncateText (line 573) | func truncateText(text string, limit int) string { function substring (line 582) | func substring(text string, start, end int) string { function buildUniqueID (line 592) | func buildUniqueID(detailURL string) string { function newHTTPClient (line 600) | func newHTTPClient() *http.Client { function setHTMLHeaders (line 613) | func setHTMLHeaders(req *http.Request, referer string) { FILE: plugin/ypfxw/ypfxw.go type cacheEntry (line 48) | type cacheEntry struct constant pluginName (line 54) | pluginName = "ypfxw" constant defaultPriority (line 55) | defaultPriority = 2 constant searchTimeout (line 56) | searchTimeout = 12 * time.Second constant detailTimeout (line 57) | detailTimeout = 10 * time.Second constant maxConcurrency (line 58) | maxConcurrency = 12 constant maxIdleConns (line 59) | maxIdleConns = 64 constant maxIdlePerHost (line 60) | maxIdlePerHost = 16 constant maxConnsPerHost (line 61) | maxConnsPerHost = 32 constant idleConnLifetime (line 62) | idleConnLifetime = 90 * time.Second constant tlsHandshakeTimeout (line 63) | tlsHandshakeTimeout = 10 * time.Second constant expectContinueTimeout (line 64) | expectContinueTimeout = 1 * time.Second constant searchMaxRetries (line 66) | searchMaxRetries = 3 constant detailMaxRetries (line 67) | detailMaxRetries = 2 constant retryBaseDelay (line 68) | retryBaseDelay = 200 * time.Millisecond type YpfxwPlugin (line 72) | type YpfxwPlugin struct method Search (line 91) | func (p *YpfxwPlugin) Search(keyword string, ext map[string]interface{... method SearchWithResult (line 100) | func (p *YpfxwPlugin) SearchWithResult(keyword string, ext map[string]... method searchImpl (line 120) | func (p *YpfxwPlugin) searchImpl(client *http.Client, keyword string, ... method fetchDetailLinks (line 251) | func (p *YpfxwPlugin) fetchDetailLinks(client *http.Client, detailURL,... method doRequestWithRetry (line 432) | func (p *YpfxwPlugin) doRequestWithRetry(req *http.Request, client *ht... function init (line 77) | func init() { function NewYpfxwPlugin (line 83) | func NewYpfxwPlugin() *YpfxwPlugin { function newHTTPClient (line 104) | func newHTTPClient() *http.Client { function extractArticleID (line 223) | func extractArticleID(detailURL string) string { function parsePublishTime (line 230) | func parsePublishTime(value string) time.Time { function extractNetDiskLinks (line 295) | func extractNetDiskLinks(doc *goquery.Document) []model.Link { function extractPlainTextLinks (line 340) | func extractPlainTextLinks(text string, seen map[string]struct{}) []mode... function substringWithBounds (line 366) | func substringWithBounds(text string, start, end int) string { function classifyLink (line 376) | func classifyLink(raw string) (string, string) { function extractPassword (line 385) | func extractPassword(link *goquery.Selection) string { function matchPassword (line 411) | func matchPassword(text string) string { function setCommonHeaders (line 424) | func setCommonHeaders(req *http.Request, referer string) { function startCacheCleaner (line 453) | func startCacheCleaner() { FILE: plugin/yuhuage/yuhuage.go constant BaseURL (line 22) | BaseURL = "https://www.iyuhuage.fun" constant SearchPath (line 23) | SearchPath = "/search/" constant UserAgent (line 24) | UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebK... constant MaxConcurrency (line 25) | MaxConcurrency = 5 constant MaxRetryCount (line 26) | MaxRetryCount = 2 type YuhuagePlugin (line 30) | type YuhuagePlugin struct method Search (line 48) | func (p *YuhuagePlugin) Search(keyword string, ext map[string]interfac... method SearchWithResult (line 57) | func (p *YuhuagePlugin) SearchWithResult(keyword string, ext map[strin... method searchImpl (line 62) | func (p *YuhuagePlugin) searchImpl(client *http.Client, keyword string... method parseSearchResults (line 137) | func (p *YuhuagePlugin) parseSearchResults(html string) ([]model.Searc... method fetchDetailsSync (line 195) | func (p *YuhuagePlugin) fetchDetailsSync(detailURLs []string, results ... method fetchDetailLinks (line 233) | func (p *YuhuagePlugin) fetchDetailLinks(detailURL string) []model.Link { method parseDetailLinks (line 300) | func (p *YuhuagePlugin) parseDetailLinks(html string) []model.Link { method extractHashFromURL (line 344) | func (p *YuhuagePlugin) extractHashFromURL(detailURL string) string { method cleanTitle (line 354) | func (p *YuhuagePlugin) cleanTitle(title string) string { method parseDateTime (line 366) | func (p *YuhuagePlugin) parseDateTime(timeStr string) time.Time { method doRequestWithRetry (line 389) | func (p *YuhuagePlugin) doRequestWithRetry(req *http.Request, client *... function init (line 38) | func init() { FILE: plugin/yunsou/yunsou.go constant pluginName (line 32) | pluginName = "yunsou" constant searchURLTemplate (line 35) | searchURLTemplate = "https://yunsou.xyz/s/%s.html" constant defaultPriority (line 38) | defaultPriority = 2 constant defaultTimeout (line 41) | defaultTimeout = 30 * time.Second constant maxRetries (line 44) | maxRetries = 3 constant timeLayout (line 47) | timeLayout = "2006-01-02" type YunsouAsyncPlugin (line 51) | type YunsouAsyncPlugin struct method Search (line 108) | func (p *YunsouAsyncPlugin) Search(keyword string, ext map[string]inte... method SearchWithResult (line 117) | func (p *YunsouAsyncPlugin) SearchWithResult(keyword string, ext map[s... method searchImpl (line 122) | func (p *YunsouAsyncPlugin) searchImpl(client *http.Client, keyword st... method extractJSONData (line 190) | func (p *YunsouAsyncPlugin) extractJSONData(htmlContent string) (strin... method convertToSearchResult (line 209) | func (p *YunsouAsyncPlugin) convertToSearchResult(item YunsouItem) mod... method convertNetDiskType (line 260) | func (p *YunsouAsyncPlugin) convertNetDiskType(isType int) string { method extractPwdFromURL (line 278) | func (p *YunsouAsyncPlugin) extractPwdFromURL(urlStr string) string { method doRequestWithRetry (line 287) | func (p *YunsouAsyncPlugin) doRequestWithRetry(req *http.Request, clie... type YunsouCategory (line 57) | type YunsouCategory struct type YunsouItem (line 63) | type YunsouItem struct function init (line 80) | func init() { function createOptimizedHTTPClient (line 85) | func createOptimizedHTTPClient() *http.Client { function NewYunsouAsyncPlugin (line 100) | func NewYunsouAsyncPlugin() *YunsouAsyncPlugin { FILE: plugin/zhizhen/zhizhen.go constant DefaultTimeout (line 21) | DefaultTimeout = 8 * time.Second constant DetailTimeout (line 22) | DetailTimeout = 6 * time.Second constant MaxConcurrency (line 25) | MaxConcurrency = 20 constant MaxIdleConns (line 28) | MaxIdleConns = 200 constant MaxIdleConnsPerHost (line 29) | MaxIdleConnsPerHost = 50 constant MaxConnsPerHost (line 30) | MaxConnsPerHost = 100 constant IdleConnTimeout (line 31) | IdleConnTimeout = 90 * time.Second constant cacheTTL (line 34) | cacheTTL = 1 * time.Hour function init (line 47) | func init() { type ZhizhenAsyncPlugin (line 81) | type ZhizhenAsyncPlugin struct method Search (line 111) | func (p *ZhizhenAsyncPlugin) Search(keyword string, ext map[string]int... method SearchWithResult (line 120) | func (p *ZhizhenAsyncPlugin) SearchWithResult(keyword string, ext map[... method searchImpl (line 125) | func (p *ZhizhenAsyncPlugin) searchImpl(client *http.Client, keyword s... method parseSearchItem (line 196) | func (p *ZhizhenAsyncPlugin) parseSearchItem(s *goquery.Selection, key... method isValidNetworkDriveURL (line 296) | func (p *ZhizhenAsyncPlugin) isValidNetworkDriveURL(url string) bool { method determineLinkType (line 324) | func (p *ZhizhenAsyncPlugin) determineLinkType(url string) string { method extractPassword (line 362) | func (p *ZhizhenAsyncPlugin) extractPassword(url string) string { method enhanceWithDetails (line 371) | func (p *ZhizhenAsyncPlugin) enhanceWithDetails(client *http.Client, r... method doRequestWithRetry (line 434) | func (p *ZhizhenAsyncPlugin) doRequestWithRetry(req *http.Request, cli... method fetchDetailLinksAndImages (line 463) | func (p *ZhizhenAsyncPlugin) fetchDetailLinksAndImages(client *http.Cl... method fetchDetailLinks (line 565) | func (p *ZhizhenAsyncPlugin) fetchDetailLinks(client *http.Client, ite... method GetPerformanceStats (line 579) | func (p *ZhizhenAsyncPlugin) GetPerformanceStats() map[string]interfac... function createOptimizedHTTPClient (line 87) | func createOptimizedHTTPClient() *http.Client { function NewZhizhenPlugin (line 103) | func NewZhizhenPlugin() *ZhizhenAsyncPlugin { function min (line 571) | func min(a, b int) int { FILE: plugin/zxzj/zxzj.go constant baseURL (line 21) | baseURL = "https://www.zxzjhd.com" constant searchPath (line 22) | searchPath = "/vodsearch/-------------.html" constant maxResults (line 23) | maxResults = 10 constant maxConcurrent (line 24) | maxConcurrent = 5 type ZXZJPlugin (line 27) | type ZXZJPlugin struct method Search (line 47) | func (p *ZXZJPlugin) Search(keyword string, ext map[string]interface{}... method SearchWithResult (line 55) | func (p *ZXZJPlugin) SearchWithResult(keyword string, ext map[string]i... method searchImpl (line 59) | func (p *ZXZJPlugin) searchImpl(client *http.Client, keyword string, e... method fetchSearchResults (line 86) | func (p *ZXZJPlugin) fetchSearchResults(searchURL string) ([]searchIte... method processDetailPages (line 144) | func (p *ZXZJPlugin) processDetailPages(items []searchItem) []model.Se... method processDetailPage (line 170) | func (p *ZXZJPlugin) processDetailPage(item searchItem) *model.SearchR... method extractPlayLinks (line 247) | func (p *ZXZJPlugin) extractPlayLinks(doc *goquery.Document) []playLink { method detectPanType (line 288) | func (p *ZXZJPlugin) detectPanType(title string) string { method fetchPanLinks (line 304) | func (p *ZXZJPlugin) fetchPanLinks(playLinks []playLink) []model.Link { method fetchSinglePanLink (line 330) | func (p *ZXZJPlugin) fetchSinglePanLink(pl playLink) *model.Link { method parsePlayerData (line 378) | func (p *ZXZJPlugin) parsePlayerData(body []byte) (string, string) { method extractPassword (line 402) | func (p *ZXZJPlugin) extractPassword(panURL string) string { method determinePanType (line 431) | func (p *ZXZJPlugin) determinePanType(panURL, lineType string) string { method buildAbsURL (line 454) | func (p *ZXZJPlugin) buildAbsURL(path string) string { method setHeaders (line 467) | func (p *ZXZJPlugin) setHeaders(req *http.Request, referer string) { method parseUpdateTime (line 475) | func (p *ZXZJPlugin) parseUpdateTime(text string) time.Time { method doRequestWithRetry (line 498) | func (p *ZXZJPlugin) doRequestWithRetry(req *http.Request, client *htt... function init (line 32) | func init() { type searchItem (line 80) | type searchItem struct type playLink (line 241) | type playLink struct type playerData (line 373) | type playerData struct FILE: service/cache_integration.go type CacheWriteIntegration (line 13) | type CacheWriteIntegration struct method createMainCacheUpdater (line 48) | func (c *CacheWriteIntegration) createMainCacheUpdater() func(string, ... method HandleCacheWrite (line 56) | func (c *CacheWriteIntegration) HandleCacheWrite(key string, results [... method getPluginPriority (line 85) | func (c *CacheWriteIntegration) getPluginPriority(pluginName string) i... method estimateDataSize (line 96) | func (c *CacheWriteIntegration) estimateDataSize(results []model.Searc... method Shutdown (line 102) | func (c *CacheWriteIntegration) Shutdown(timeout time.Duration) error { method GetStats (line 111) | func (c *CacheWriteIntegration) GetStats() interface{} { method SetStrategy (line 120) | func (c *CacheWriteIntegration) SetStrategy(strategy cache.CacheWriteS... method GetStrategy (line 125) | func (c *CacheWriteIntegration) GetStrategy() cache.CacheWriteStrategy { function NewCacheWriteIntegration (line 21) | func NewCacheWriteIntegration(mainCache *cache.EnhancedTwoLevelCache) (*... FILE: service/search_service.go function normalizeUrl (line 24) | func normalizeUrl(rawUrl string) string { function SetGlobalCacheWriteManager (line 38) | func SetGlobalCacheWriteManager(manager *cache.DelayedBatchWriteManager) { function GetGlobalCacheWriteManager (line 43) | func GetGlobalCacheWriteManager() *cache.DelayedBatchWriteManager { function GetEnhancedTwoLevelCache (line 48) | func GetEnhancedTwoLevelCache() *cache.EnhancedTwoLevelCache { function extractKeywordFromCacheKey (line 56) | func extractKeywordFromCacheKey(cacheKey string) string { function logAsyncCacheWithKeyword (line 63) | func logAsyncCacheWithKeyword(keyword, cacheKey string, format string, a... function init (line 93) | func init() { function mergeSearchResults (line 105) | func mergeSearchResults(existing []model.SearchResult, newResults []mode... function generateResultKey (line 142) | func generateResultKey(result model.SearchResult) string { function selectBetterResult (line 154) | func selectBetterResult(existing, new model.SearchResult) model.SearchRe... function calculateCompletenessScore (line 166) | func calculateCompletenessScore(result model.SearchResult) int { type SearchService (line 201) | type SearchService struct method Search (line 351) | func (s *SearchService) Search(keyword string, channels []string, conc... method searchChannel (line 591) | func (s *SearchService) searchChannel(keyword string, channel string) ... method searchTG (line 1211) | func (s *SearchService) searchTG(keyword string, channels []string, fo... method searchPlugins (line 1283) | func (s *SearchService) searchPlugins(keyword string, plugins []string... method GetPluginManager (line 1440) | func (s *SearchService) GetPluginManager() *plugin.PluginManager { function NewSearchService (line 206) | func NewSearchService(pluginManager *plugin.PluginManager) *SearchService { function injectMainCacheToAsyncPlugins (line 233) | func injectMainCacheToAsyncPlugins(pluginManager *plugin.PluginManager, ... function filterResponseByType (line 513) | func filterResponseByType(response model.SearchResponse, resultType stri... function sortResultsByTimeAndKeywords (line 542) | func sortResultsByTimeAndKeywords(results []model.SearchResult) { function getKeywordPriority (line 579) | func getKeywordPriority(title string) int { function extractLinkTitlePairs (line 631) | func extractLinkTitlePairs(content string) map[string]string { function extractLinkTitlePairsWithNewlines (line 642) | func extractLinkTitlePairsWithNewlines(content string) map[string]string { function extractLinkTitlePairsWithoutNewlines (line 751) | func extractLinkTitlePairsWithoutNewlines(content string) map[string]str... function extractTitleBeforeLink (line 860) | func extractTitleBeforeLink(text string) string { function isLinkLine (line 880) | func isLinkLine(line string) bool { function extractTitleFromLinkLine (line 891) | func extractTitleFromLinkLine(line string) string { function isLinkPrefix (line 910) | func isLinkPrefix(text string) bool { function cleanTitle (line 965) | func cleanTitle(title string) string { function isEmpty (line 983) | func isEmpty(line string) bool { function mergeResultsByType (line 988) | func mergeResultsByType(results []model.SearchResult, keyword string, cl... type ResultScore (line 1449) | type ResultScore struct function getResultSource (line 1463) | func getResultSource(result model.SearchResult) string { function getPluginLevelBySource (line 1478) | func getPluginLevelBySource(source string) int { function getPluginPriorityByName (line 1506) | func getPluginPriorityByName(pluginName string) int { function getPluginLevelScore (line 1515) | func getPluginLevelScore(source string) int { function calculateTimeScore (line 1533) | func calculateTimeScore(datetime time.Time) float64 { FILE: typescript/src/index.ts class PanSouMCPServer (line 24) | class PanSouMCPServer { method constructor (line 30) | constructor() { method setupHandlers (line 56) | private setupHandlers(): void { method getPluginsResource (line 190) | private async getPluginsResource() { method getChannelsResource (line 220) | private async getChannelsResource() { method getCloudTypesResource (line 249) | private async getCloudTypesResource() { method setupProcessHandlers (line 297) | private setupProcessHandlers(): void { method start (line 325) | public async start(): Promise { function main (line 364) | async function main(): Promise { FILE: typescript/src/tools/health.ts function executeHealthTool (line 20) | async function executeHealthTool(args: unknown, httpClient: HttpClient):... function formatHealthResult (line 40) | function formatHealthResult(healthData: any, serverUrl: string): string { function formatErrorResult (line 98) | function formatErrorResult(errorMessage: string, serverUrl: string): str... FILE: typescript/src/tools/search.ts type SearchToolArgs (line 21) | type SearchToolArgs = z.infer; function executeSearchTool (line 87) | async function executeSearchTool(args: unknown, httpClient: HttpClient):... function formatSearchResult (line 153) | function formatSearchResult(result: any, keyword: string, resultType: st... function formatMergedResults (line 183) | function formatMergedResults(mergedByType: Record): string { function formatDetailedResults (line 231) | function formatDetailedResults(results: any[]): string { FILE: typescript/src/tools/start-backend.ts type StartBackendArgs (line 28) | interface StartBackendArgs { function executeStartBackendTool (line 35) | async function executeStartBackendTool( FILE: typescript/src/utils/activity-monitor.ts class ActivityMonitor (line 4) | class ActivityMonitor { method constructor (line 11) | constructor(idleTimeout: number = 300000, enableIdleShutdown: boolean ... method recordActivity (line 20) | recordActivity(): void { method getLastActivityTime (line 28) | getLastActivityTime(): number { method getIdleTime (line 35) | getIdleTime(): number { method isIdleTimeout (line 42) | isIdleTimeout(): boolean { method setOnIdleCallback (line 49) | setOnIdleCallback(callback: () => void): void { method resetIdleTimer (line 57) | private resetIdleTimer(): void { method stop (line 79) | stop(): void { method updateConfig (line 90) | updateConfig(idleTimeout: number, enableIdleShutdown: boolean): void { method getStatus (line 99) | getStatus(): { function getActivityMonitor (line 122) | function getActivityMonitor(): ActivityMonitor { function initializeActivityMonitor (line 132) | function initializeActivityMonitor(idleTimeout: number, enableIdleShutdo... function stopActivityMonitor (line 143) | function stopActivityMonitor(): void { FILE: typescript/src/utils/backend-manager.ts class BackendManager (line 16) | class BackendManager { method constructor (line 27) | constructor(config: Config, httpClient: HttpClient) { method isBackendRunning (line 52) | async isBackendRunning(): Promise { method detectDockerContainer (line 63) | private async detectDockerContainer(): Promise { method detectDeploymentMode (line 88) | private async detectDeploymentMode(): Promise<'docker' | 'source' | 'u... method findGoExecutable (line 117) | private async findGoExecutable(): Promise { method startBackend (line 165) | async startBackend(): Promise { method waitForBackendReady (line 330) | private async waitForBackendReady(): Promise { method stopBackend (line 362) | async stopBackend(): Promise { method scheduleShutdown (line 408) | scheduleShutdown(): void { method cancelShutdown (line 424) | cancelShutdown(): void { method getStatus (line 435) | getStatus(): { method recordActivity (line 450) | recordActivity(): void { method getActivityStatus (line 459) | getActivityStatus(): any { method cleanup (line 466) | async cleanup(): Promise { function createBackendManager (line 479) | function createBackendManager(config: Config, httpClient: HttpClient): B... FILE: typescript/src/utils/config.ts type Config (line 4) | type Config = z.infer; function parseCommaSeparated (line 9) | function parseCommaSeparated(value: string | undefined): string[] { function loadConfig (line 19) | function loadConfig(): Config { FILE: typescript/src/utils/http-client.ts type SearchRequest (line 8) | interface SearchRequest { type Link (line 23) | interface Link { type SearchResult (line 32) | interface SearchResult { type MergedLink (line 47) | interface MergedLink { type MergedLinks (line 59) | type MergedLinks = Record; type SearchResponseData (line 64) | interface SearchResponseData { type ApiResponse (line 73) | interface ApiResponse { type HealthResponse (line 82) | interface HealthResponse { class HttpClient (line 94) | class HttpClient { method constructor (line 99) | constructor(config: Config) { method search (line 156) | async search(params: SearchRequest): Promise { method checkHealth (line 218) | async checkHealth(): Promise { method testConnection (line 239) | async testConnection(): Promise { method getServerUrl (line 251) | getServerUrl(): string { method updateConfig (line 258) | updateConfig(newConfig: Partial): void { method setSilentMode (line 269) | setSilentMode(silent: boolean): void { method isSilentMode (line 276) | isSilentMode(): boolean { function createHttpClient (line 284) | function createHttpClient(config: Config): HttpClient { FILE: typescript/src/utils/validators.ts constant SUPPORTED_CLOUD_TYPES (line 6) | const SUPPORTED_CLOUD_TYPES = [ type CloudType (line 22) | type CloudType = typeof SUPPORTED_CLOUD_TYPES[number]; constant SOURCE_TYPES (line 27) | const SOURCE_TYPES = ['all', 'tg', 'plugin'] as const; type SourceType (line 28) | type SourceType = typeof SOURCE_TYPES[number]; constant RESULT_TYPES (line 33) | const RESULT_TYPES = ['all', 'results', 'merge'] as const; type ResultType (line 34) | type ResultType = typeof RESULT_TYPES[number]; function validateCloudTypes (line 65) | function validateCloudTypes(cloudTypes: string[]): CloudType[] { function validateSourceType (line 87) | function validateSourceType(sourceType: string): SourceType { function validateResultType (line 97) | function validateResultType(resultType: string): ResultType { FILE: util/cache/cache_key.go function init (line 29) | func init() { function GenerateTGCacheKey (line 50) | func GenerateTGCacheKey(keyword string, channels []string) string { function GeneratePluginCacheKey (line 64) | func GeneratePluginCacheKey(keyword string, plugins []string) string { function GenerateCacheKey (line 78) | func GenerateCacheKey(keyword string, channels []string, sourceType stri... function getChannelsHash (line 107) | func getChannelsHash(channels []string) string { function getPluginsHash (line 146) | func getPluginsHash(plugins []string) string { function calculateListHash (line 211) | func calculateListHash(items []string) string { function GenerateCacheKeyV2 (line 221) | func GenerateCacheKeyV2(keyword string, channels []string, sourceType st... function GenerateCacheKeyLegacy (line 262) | func GenerateCacheKeyLegacy(query string, filters map[string]string) str... FILE: util/cache/delayed_batch_write_manager.go type CacheWriteStrategy (line 19) | type CacheWriteStrategy constant CacheStrategyImmediate (line 23) | CacheStrategyImmediate CacheWriteStrategy = "immediate" constant CacheStrategyHybrid (line 26) | CacheStrategyHybrid CacheWriteStrategy = "hybrid" type CacheOperation (line 30) | type CacheOperation struct type CacheWriteConfig (line 43) | type CacheWriteConfig struct method Initialize (line 70) | func (c *CacheWriteConfig) Initialize() error { method loadFromEnvironment (line 102) | func (c *CacheWriteConfig) loadFromEnvironment() { method calculateOptimalBatchInterval (line 136) | func (c *CacheWriteConfig) calculateOptimalBatchInterval() time.Durati... method calculateOptimalBatchSize (line 166) | func (c *CacheWriteConfig) calculateOptimalBatchSize() int { method calculateOptimalDataSize (line 196) | func (c *CacheWriteConfig) calculateOptimalDataSize() int { method validateAndConstraint (line 216) | func (c *CacheWriteConfig) validateAndConstraint() error { type DelayedBatchWriteManager (line 250) | type DelayedBatchWriteManager struct method Initialize (line 344) | func (m *DelayedBatchWriteManager) Initialize() error { method SetMainCacheUpdater (line 375) | func (m *DelayedBatchWriteManager) SetMainCacheUpdater(updater func(st... method HandleCacheOperation (line 380) | func (m *DelayedBatchWriteManager) HandleCacheOperation(op *CacheOpera... method handleWithGlobalBuffer (line 401) | func (m *DelayedBatchWriteManager) handleWithGlobalBuffer(op *CacheOpe... method flushGlobalBuffer (line 418) | func (m *DelayedBatchWriteManager) flushGlobalBuffer(bufferID string) ... method globalBufferMonitor (line 458) | func (m *DelayedBatchWriteManager) globalBufferMonitor() { method checkAndFlushExpiredBuffers (line 475) | func (m *DelayedBatchWriteManager) checkAndFlushExpiredBuffers() { method updateMemoryCache (line 507) | func (m *DelayedBatchWriteManager) updateMemoryCache(op *CacheOperatio... method immediateWriteToDisk (line 523) | func (m *DelayedBatchWriteManager) immediateWriteToDisk(op *CacheOpera... method enqueueForBatchWrite (line 543) | func (m *DelayedBatchWriteManager) enqueueForBatchWrite(op *CacheOpera... method backgroundProcessor (line 570) | func (m *DelayedBatchWriteManager) backgroundProcessor() { method timerFlushProcessor (line 593) | func (m *DelayedBatchWriteManager) timerFlushProcessor() { method autoTuningProcessor (line 611) | func (m *DelayedBatchWriteManager) autoTuningProcessor() { method Shutdown (line 627) | func (m *DelayedBatchWriteManager) Shutdown(timeout time.Duration) err... method flushAllGlobalBuffers (line 679) | func (m *DelayedBatchWriteManager) flushAllGlobalBuffers() error { method flushAllPendingData (line 698) | func (m *DelayedBatchWriteManager) flushAllPendingData() error { method shouldTriggerBatchWrite (line 721) | func (m *DelayedBatchWriteManager) shouldTriggerBatchWrite() (bool, st... method calculateBufferSize (line 760) | func (m *DelayedBatchWriteManager) calculateBufferSize() int { method calculateHighPriorityRatio (line 769) | func (m *DelayedBatchWriteManager) calculateHighPriorityRatio() float64 { method isSystemIdle (line 785) | func (m *DelayedBatchWriteManager) isSystemIdle() bool { method executeBatchWrite (line 795) | func (m *DelayedBatchWriteManager) executeBatchWrite(trigger string) e... method getCompressedOperations (line 851) | func (m *DelayedBatchWriteManager) getCompressedOperations() []*CacheO... method batchWriteToDisk (line 864) | func (m *DelayedBatchWriteManager) batchWriteToDisk(operations []*Cach... method emergencyFlush (line 887) | func (m *DelayedBatchWriteManager) emergencyFlush() error { method autoTuneParameters (line 895) | func (m *DelayedBatchWriteManager) autoTuneParameters() { method collectRecentStats (line 919) | func (m *DelayedBatchWriteManager) collectRecentStats() *WriteManagerS... method minDuration (line 924) | func (m *DelayedBatchWriteManager) minDuration(a, b time.Duration) tim... method maxDuration (line 929) | func (m *DelayedBatchWriteManager) maxDuration(a, b time.Duration) tim... method minInt (line 934) | func (m *DelayedBatchWriteManager) minInt(a, b int) int { method maxInt (line 939) | func (m *DelayedBatchWriteManager) maxInt(a, b int) int { method GetStats (line 945) | func (m *DelayedBatchWriteManager) GetStats() map[string]interface{} { method GetWriteManagerStats (line 969) | func (m *DelayedBatchWriteManager) GetWriteManagerStats() *WriteManage... type WriteManagerStats (line 285) | type WriteManagerStats struct function NewDelayedBatchWriteManager (line 312) | func NewDelayedBatchWriteManager() (*DelayedBatchWriteManager, error) { function isBufferNotExistError (line 500) | func isBufferNotExistError(err error) bool { FILE: util/cache/disk_cache.go type diskCacheMetadata (line 17) | type diskCacheMetadata struct type DiskCache (line 26) | type DiskCache struct method loadMetadata (line 57) | func (c *DiskCache) loadMetadata() { method saveMetadata (line 98) | func (c *DiskCache) saveMetadata(key string, meta *diskCacheMetadata) ... method getFilename (line 108) | func (c *DiskCache) getFilename(key string) string { method Set (line 114) | func (c *DiskCache) Set(key string, data []byte, ttl time.Duration) er... method Get (line 173) | func (c *DiskCache) Get(key string) ([]byte, bool, error) { method Delete (line 211) | func (c *DiskCache) Delete(key string) error { method Has (line 233) | func (c *DiskCache) Has(key string) bool { method cleanExpired (line 253) | func (c *DiskCache) cleanExpired() { method evictLRU (line 273) | func (c *DiskCache) evictLRU(requiredSpace int64) { method startCleanupTask (line 319) | func (c *DiskCache) startCleanupTask() { method Clear (line 327) | func (c *DiskCache) Clear() error { method GetLastModified (line 353) | func (c *DiskCache) GetLastModified(key string) (time.Time, bool) { function NewDiskCache (line 35) | func NewDiskCache(path string, maxSizeMB int) (*DiskCache, error) { FILE: util/cache/enhanced_two_level_cache.go type EnhancedTwoLevelCache (line 12) | type EnhancedTwoLevelCache struct method Set (line 48) | func (c *EnhancedTwoLevelCache) Set(key string, data []byte, ttl time.... method SetMemoryOnly (line 65) | func (c *EnhancedTwoLevelCache) SetMemoryOnly(key string, data []byte,... method SetBothLevels (line 75) | func (c *EnhancedTwoLevelCache) SetBothLevels(key string, data []byte,... method SetWithFinalFlag (line 86) | func (c *EnhancedTwoLevelCache) SetWithFinalFlag(key string, data []by... method Get (line 95) | func (c *EnhancedTwoLevelCache) Get(key string) ([]byte, bool, error) { method Delete (line 117) | func (c *EnhancedTwoLevelCache) Delete(key string) error { method Clear (line 126) | func (c *EnhancedTwoLevelCache) Clear() error { method SetSerializer (line 135) | func (c *EnhancedTwoLevelCache) SetSerializer(serializer Serializer) { method GetSerializer (line 142) | func (c *EnhancedTwoLevelCache) GetSerializer() Serializer { method FlushMemoryToDisk (line 149) | func (c *EnhancedTwoLevelCache) FlushMemoryToDisk() error { function NewEnhancedTwoLevelCache (line 20) | func NewEnhancedTwoLevelCache() (*EnhancedTwoLevelCache, error) { FILE: util/cache/global_buffer_manager.go type GlobalBufferStrategy (line 11) | type GlobalBufferStrategy constant BufferByKeyword (line 15) | BufferByKeyword GlobalBufferStrategy = "keyword" constant BufferByPlugin (line 18) | BufferByPlugin GlobalBufferStrategy = "plugin" constant BufferByPattern (line 21) | BufferByPattern GlobalBufferStrategy = "pattern" constant BufferHybrid (line 24) | BufferHybrid GlobalBufferStrategy = "hybrid" type SearchPattern (line 28) | type SearchPattern struct type GlobalBuffer (line 38) | type GlobalBuffer struct type GlobalBufferManager (line 64) | type GlobalBufferManager struct method Initialize (line 134) | func (g *GlobalBufferManager) Initialize() error { method AddOperation (line 150) | func (g *GlobalBufferManager) AddOperation(op *CacheOperation) (*Globa... method determineBufferID (line 180) | func (g *GlobalBufferManager) determineBufferID(op *CacheOperation) st... method createNewBuffer (line 204) | func (g *GlobalBufferManager) createNewBuffer(bufferID string, firstOp... method addOperationToBuffer (line 224) | func (g *GlobalBufferManager) addOperationToBuffer(buffer *GlobalBuffe... method shouldFlushBuffer (line 252) | func (g *GlobalBufferManager) shouldFlushBuffer(buffer *GlobalBuffer) ... method calculateHighPriorityRatio (line 286) | func (g *GlobalBufferManager) calculateHighPriorityRatio(buffer *Globa... method FlushBuffer (line 302) | func (g *GlobalBufferManager) FlushBuffer(bufferID string) ([]*CacheOp... method FlushAllBuffers (line 334) | func (g *GlobalBufferManager) FlushAllBuffers() map[string][]*CacheOpe... method cleanupRoutine (line 353) | func (g *GlobalBufferManager) cleanupRoutine() { method performCleanup (line 367) | func (g *GlobalBufferManager) performCleanup() { method updateMemoryUsage (line 403) | func (g *GlobalBufferManager) updateMemoryUsage() { method Shutdown (line 416) | func (g *GlobalBufferManager) Shutdown() error { method GetStats (line 436) | func (g *GlobalBufferManager) GetStats() *GlobalBufferStats { method GetBufferInfo (line 455) | func (g *GlobalBufferManager) GetBufferInfo() map[string]interface{} { method GetExpiredBuffersForFlush (line 483) | func (g *GlobalBufferManager) GetExpiredBuffersForFlush() []string { type GlobalBufferStats (line 88) | type GlobalBufferStats struct function NewGlobalBufferManager (line 111) | func NewGlobalBufferManager(strategy GlobalBufferStrategy) *GlobalBuffer... FILE: util/cache/memory_cache.go type memoryCacheItem (line 9) | type memoryCacheItem struct type MemoryCache (line 18) | type MemoryCache struct method Set (line 36) | func (c *MemoryCache) Set(key string, data []byte, ttl time.Duration) { method SetWithTimestamp (line 41) | func (c *MemoryCache) SetWithTimestamp(key string, data []byte, ttl ti... method Get (line 71) | func (c *MemoryCache) Get(key string) ([]byte, bool) { method GetWithTimestamp (line 98) | func (c *MemoryCache) GetWithTimestamp(key string) ([]byte, time.Time,... method GetLastModified (line 125) | func (c *MemoryCache) GetLastModified(key string) (time.Time, bool) { method evict (line 143) | func (c *MemoryCache) evict() { method CleanExpired (line 167) | func (c *MemoryCache) CleanExpired() { method StartCleanupTask (line 181) | func (c *MemoryCache) StartCleanupTask() { function NewMemoryCache (line 27) | func NewMemoryCache(maxItems int, maxSizeMB int) *MemoryCache { FILE: util/cache/serializer.go function init (line 13) | func init() { type Serializer (line 34) | type Serializer interface type GobSerializer (line 40) | type GobSerializer struct method Serialize (line 56) | func (s *GobSerializer) Serialize(v interface{}) ([]byte, error) { method Deserialize (line 72) | func (s *GobSerializer) Deserialize(data []byte, v interface{}) error { function NewGobSerializer (line 45) | func NewGobSerializer() *GobSerializer { type JSONSerializer (line 84) | type JSONSerializer struct method Serialize (line 96) | func (s *JSONSerializer) Serialize(v interface{}) ([]byte, error) { method Deserialize (line 101) | func (s *JSONSerializer) Deserialize(data []byte, v interface{}) error { function NewJSONSerializer (line 89) | func NewJSONSerializer() *JSONSerializer { FILE: util/cache/sharded_disk_cache.go type ShardedDiskCache (line 13) | type ShardedDiskCache struct method getShard (line 88) | func (c *ShardedDiskCache) getShard(key string) *DiskCache { method Set (line 97) | func (c *ShardedDiskCache) Set(key string, data []byte, ttl time.Durat... method Get (line 103) | func (c *ShardedDiskCache) Get(key string) ([]byte, bool, error) { method Delete (line 109) | func (c *ShardedDiskCache) Delete(key string) error { method Has (line 115) | func (c *ShardedDiskCache) Has(key string) bool { method Clear (line 121) | func (c *ShardedDiskCache) Clear() error { method GetLastModified (line 136) | func (c *ShardedDiskCache) GetLastModified(key string) (time.Time, boo... method cleanExpired (line 142) | func (c *ShardedDiskCache) cleanExpired() { method CleanExpired (line 152) | func (c *ShardedDiskCache) CleanExpired() { method StartCleanupTask (line 157) | func (c *ShardedDiskCache) StartCleanupTask() { method GetShards (line 164) | func (c *ShardedDiskCache) GetShards() []*DiskCache { method GetShardIndex (line 169) | func (c *ShardedDiskCache) GetShardIndex(key string) int { function NewShardedDiskCache (line 23) | func NewShardedDiskCache(baseDir string, shardCount, maxSizeMB int) (*Sh... function NewOptimizedShardedDiskCache (line 28) | func NewOptimizedShardedDiskCache(baseDir string, maxSizeMB int) (*Shard... function nextPowerOfTwoDisk (line 45) | func nextPowerOfTwoDisk(n int) int { function newShardedDiskCacheWithCount (line 59) | func newShardedDiskCacheWithCount(baseDir string, shardCount, maxSizeMB ... FILE: util/cache/sharded_memory_cache.go type cleanupTarget (line 20) | type cleanupTarget interface type shardedMemoryCacheItem (line 25) | type shardedMemoryCacheItem struct type memoryCacheShard (line 34) | type memoryCacheShard struct type ShardedMemoryCache (line 41) | type ShardedMemoryCache struct method getShard (line 102) | func (c *ShardedMemoryCache) getShard(key string) *memoryCacheShard { method Set (line 110) | func (c *ShardedMemoryCache) Set(key string, data []byte, ttl time.Dur... method SetWithTimestamp (line 115) | func (c *ShardedMemoryCache) SetWithTimestamp(key string, data []byte,... method Get (line 146) | func (c *ShardedMemoryCache) Get(key string) ([]byte, bool) { method GetWithTimestamp (line 172) | func (c *ShardedMemoryCache) GetWithTimestamp(key string) ([]byte, tim... method GetLastModified (line 198) | func (c *ShardedMemoryCache) GetLastModified(key string) (time.Time, b... method evictFromShard (line 217) | func (c *ShardedMemoryCache) evictFromShard(shard *memoryCacheShard) { method CleanExpired (line 252) | func (c *ShardedMemoryCache) CleanExpired() { method Delete (line 276) | func (c *ShardedMemoryCache) Delete(key string) { method Clear (line 288) | func (c *ShardedMemoryCache) Clear() { method StartCleanupTask (line 333) | func (c *ShardedMemoryCache) StartCleanupTask() { method SetDiskCacheReference (line 339) | func (c *ShardedMemoryCache) SetDiskCacheReference(diskCache *ShardedD... method getDiskCacheReference (line 346) | func (c *ShardedMemoryCache) getDiskCacheReference() *ShardedDiskCache { method GetAllItems (line 359) | func (c *ShardedMemoryCache) GetAllItems() map[string]*MemoryCacheItem { function NewShardedMemoryCache (line 53) | func NewShardedMemoryCache(maxItems int, maxSizeMB int) *ShardedMemoryCa... function nextPowerOfTwo (line 88) | func nextPowerOfTwo(n int) int { function startGlobalCleanupTask (line 306) | func startGlobalCleanupTask() { function registerForCleanup (line 326) | func registerForCleanup(cache cleanupTarget) { type MemoryCacheItem (line 353) | type MemoryCacheItem struct FILE: util/cache/utils.go function SerializeWithPool (line 18) | func SerializeWithPool(v interface{}) ([]byte, error) { function DeserializeWithPool (line 36) | func DeserializeWithPool(data []byte, v interface{}) error { FILE: util/compression.go type gzipResponseWriter (line 14) | type gzipResponseWriter struct method Write (line 20) | func (g *gzipResponseWriter) Write(data []byte) (int, error) { method WriteString (line 25) | func (g *gzipResponseWriter) WriteString(s string) (int, error) { method Close (line 30) | func (g *gzipResponseWriter) Close() { function GzipMiddleware (line 35) | func GzipMiddleware() gin.HandlerFunc { type bodyLogWriter (line 84) | type bodyLogWriter struct method Write (line 90) | func (w bodyLogWriter) Write(b []byte) (int, error) { method WriteString (line 96) | func (w bodyLogWriter) WriteString(s string) (int, error) { function CompressData (line 102) | func CompressData(data []byte) ([]byte, error) { function DecompressData (line 125) | func DecompressData(data []byte) ([]byte, error) { FILE: util/convert.go function StringToInt (line 8) | func StringToInt(s string) int { FILE: util/http_util.go function InitHTTPClient (line 20) | func InitHTTPClient() { function GetHTTPClient (line 75) | func GetHTTPClient() *http.Client { function FetchHTML (line 83) | func FetchHTML(targetURL string) (string, error) { function BuildSearchURL (line 117) | func BuildSearchURL(channel string, keyword string, nextPageParam string... FILE: util/json/json.go function init (line 11) | func init() { function Marshal (line 21) | func Marshal(v interface{}) ([]byte, error) { function Unmarshal (line 26) | func Unmarshal(data []byte, v interface{}) error { function MarshalString (line 31) | func MarshalString(v interface{}) (string, error) { function UnmarshalString (line 40) | func UnmarshalString(str string, v interface{}) error { function MarshalIndent (line 45) | func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) { FILE: util/jwt.go type Claims (line 11) | type Claims struct function GenerateToken (line 17) | func GenerateToken(username string, secret string, expiry time.Duration)... function ValidateToken (line 40) | func ValidateToken(tokenString string, secret string) (*Claims, error) { FILE: util/parser_util.go function normalizeUrl (line 13) | func normalizeUrl(rawUrl string) string { function isSupportedLink (line 24) | func isSupportedLink(url string) bool { function normalizeBaiduPanURL (line 67) | func normalizeBaiduPanURL(url string, password string) string { function normalizeTianyiPanURL (line 89) | func normalizeTianyiPanURL(url string, password string) string { function normalizeUCPanURL (line 99) | func normalizeUCPanURL(url string, password string) string { function normalize123PanURL (line 109) | func normalize123PanURL(url string, password string) string { function normalize115PanURL (line 119) | func normalize115PanURL(url string, password string) string { function ParseSearchResults (line 129) | func ParseSearchResults(html string, channel string) ([]model.SearchResu... function CutTitleByKeywords (line 547) | func CutTitleByKeywords(title string, keywords []string) string { function extractImageURLFromStyle (line 561) | func extractImageURLFromStyle(style string) string { function extractTitle (line 608) | func extractTitle(htmlContent string, textContent string) string { function extractWorkTitlesForLinks (line 681) | func extractWorkTitlesForLinks(links []model.Link, messageText string, d... function isSingleLineFormat (line 707) | func isSingleLineFormat(lines []string) bool { function extractWorkTitlesFromSingleLineFormat (line 726) | func extractWorkTitlesFromSingleLineFormat(links []model.Link, lines []s... function extractFirstURL (line 791) | func extractFirstURL(text string) string { function extractWorkTitleBeforeColon (line 808) | func extractWorkTitleBeforeColon(text string) string { function extractWorkTitlesFromContext (line 838) | func extractWorkTitlesFromContext(links []model.Link, messageText string... FILE: util/pool/object_pool.go function GetLink (line 34) | func GetLink() *model.Link { function ReleaseLink (line 39) | func ReleaseLink(l *model.Link) { function GetSearchResult (line 47) | func GetSearchResult() *model.SearchResult { function ReleaseSearchResult (line 52) | func ReleaseSearchResult(sr *model.SearchResult) { function GetMergedLink (line 64) | func GetMergedLink() *model.MergedLink { function ReleaseMergedLink (line 69) | func ReleaseMergedLink(ml *model.MergedLink) { FILE: util/pool/worker_pool.go type Task (line 10) | type Task type WorkerPool (line 13) | type WorkerPool struct method startWorkers (line 59) | func (p *WorkerPool) startWorkers() { method Submit (line 85) | func (p *WorkerPool) Submit(task Task) { method GetResults (line 90) | func (p *WorkerPool) GetResults(count int) []interface{} { method Close (line 108) | func (p *WorkerPool) Close() { function NewWorkerPool (line 23) | func NewWorkerPool(maxWorkers int) *WorkerPool { function NewWorkerPoolWithContext (line 41) | func NewWorkerPoolWithContext(ctx context.Context, maxWorkers int) *Work... function ExecuteBatch (line 123) | func ExecuteBatch(tasks []Task, maxWorkers int) []interface{} { function ExecuteBatchWithTimeout (line 147) | func ExecuteBatchWithTimeout(tasks []Task, maxWorkers int, timeout time.... FILE: util/regex_util.go function GetLinkType (line 36) | func GetLinkType(url string) string { function CleanBaiduPanURL (line 96) | func CleanBaiduPanURL(url string) string { function CleanTianyiPanURL (line 140) | func CleanTianyiPanURL(url string) string { function CleanUCPanURL (line 175) | func CleanUCPanURL(url string) string { function Clean123PanURL (line 217) | func Clean123PanURL(url string) string { function Clean115PanURL (line 286) | func Clean115PanURL(url string) string { function CleanAliyunPanURL (line 340) | func CleanAliyunPanURL(url string) string { function normalizeAliyunPanURL (line 396) | func normalizeAliyunPanURL(url string, password string) string { function ExtractPassword (line 406) | func ExtractPassword(content, url string) string { function isValidPassword (line 566) | func isValidPassword(password string) bool { function ExtractNetDiskLinks (line 576) | func ExtractNetDiskLinks(text string) []string { function normalizeURLForComparison (line 807) | func normalizeURLForComparison(url string) string {