Newer
Older
zabov / adlist_single.go
package main

import (
	"bufio"
	"errors"
	"fmt"
	"net/http"
	"strings"
	"time"
)

func init() {
	go downloadThread()
}

//SingleIndexFilter puts the domains inside file
func SingleIndexFilter(durl string) error {

	fmt.Println("Retrieving DomainFile from: ", durl)

	var err error

	// Get the data
	resp, err := http.Get(durl)
	if err != nil {
		fmt.Println("HTTP Problem: ", err)
		return err
	}
	defer resp.Body.Close()

	if resp.StatusCode == 200 { // OK
		fmt.Println(durl + " Response: OK")
	} else {
		fmt.Println("Server <"+durl+"> returned status code: ", resp.StatusCode)
		return errors.New("Server <" + durl + "> returned status code: " + resp.Status)
	}

	scanner := bufio.NewScanner(resp.Body)
	splitter := func(c rune) bool {
		return c == ' ' || c == '\t'
	}

	var numLines int64

	for scanner.Scan() {

		line := scanner.Text()

		h := strings.FieldsFunc(line, splitter)

		if h == nil {
			continue
		}

		if len(h) < 1 {
			continue
		}

		if !strings.Contains(h[0], "#") {
			DomainKill(h[0], durl)
			// fmt.Println("MATCH: ", h[1])
			numLines++
		} else {
			incrementStats("Malformed DomainLines "+durl, 1)
			// fmt.Println("Malformed line: <" + line + ">")
		}

	}

	fmt.Println("Finished to parse: "+durl+" ,number of lines", numLines)

	return err

}

func getSingleFilters() {

	s := fileByLines(ZabovSingleBL)

	for _, a := range s {
		SingleIndexFilter(a)
	}

}

func downloadThread() {
	fmt.Println("Starting updater of SINGLE lists, each (hours): ", ZabovKillTTL)
	for {
		getSingleFilters()
		time.Sleep(time.Duration(ZabovKillTTL) * time.Hour)
	}

}