From 9dde295b7c20acbbd0be76186e970b11f4757d88 Mon Sep 17 00:00:00 2001
From: Justin Li <jli.justinli@gmail.com>
Date: Thu, 17 Jul 2014 01:10:50 -0400
Subject: [PATCH] Move AnnounceResponse and ScrapeResponse to models

---
 http/writer.go           |  9 ++++-----
 tracker/announce.go      | 10 +++++-----
 tracker/models/models.go | 16 ++++++++++++++++
 tracker/responses.go     | 31 -------------------------------
 tracker/scrape.go        |  2 +-
 tracker/tracker.go       |  7 +++++++
 6 files changed, 33 insertions(+), 42 deletions(-)
 delete mode 100644 tracker/responses.go

diff --git a/http/writer.go b/http/writer.go
index 241a055..18061fa 100644
--- a/http/writer.go
+++ b/http/writer.go
@@ -9,7 +9,6 @@ import (
 	"net/http"
 
 	"github.com/chihaya/bencode"
-	"github.com/chihaya/chihaya/tracker"
 	"github.com/chihaya/chihaya/tracker/models"
 )
 
@@ -25,7 +24,7 @@ func (w *Writer) WriteError(err error) error {
 	return bencoder.Encode(dict)
 }
 
-func (w *Writer) WriteAnnounce(res *tracker.AnnounceResponse) error {
+func (w *Writer) WriteAnnounce(res *models.AnnounceResponse) error {
 	dict := bencode.NewDict()
 	dict["complete"] = res.Complete
 	dict["incomplete"] = res.Incomplete
@@ -45,7 +44,7 @@ func (w *Writer) WriteAnnounce(res *tracker.AnnounceResponse) error {
 	return bencoder.Encode(dict)
 }
 
-func (w *Writer) WriteScrape(res *tracker.ScrapeResponse) error {
+func (w *Writer) WriteScrape(res *models.ScrapeResponse) error {
 	dict := bencode.NewDict()
 	dict["files"] = filesDict(res.Files)
 
@@ -53,7 +52,7 @@ func (w *Writer) WriteScrape(res *tracker.ScrapeResponse) error {
 	return bencoder.Encode(dict)
 }
 
-func compactPeers(ipv6 bool, peers tracker.PeerList) []byte {
+func compactPeers(ipv6 bool, peers models.PeerList) []byte {
 	var compactPeers bytes.Buffer
 
 	if ipv6 {
@@ -75,7 +74,7 @@ func compactPeers(ipv6 bool, peers tracker.PeerList) []byte {
 	return compactPeers.Bytes()
 }
 
-func peersList(ipv4s, ipv6s tracker.PeerList) (peers []bencode.Dict) {
+func peersList(ipv4s, ipv6s models.PeerList) (peers []bencode.Dict) {
 	for _, peer := range ipv4s {
 		peers = append(peers, peerDict(&peer))
 	}
diff --git a/tracker/announce.go b/tracker/announce.go
index f668dda..c2246d2 100644
--- a/tracker/announce.go
+++ b/tracker/announce.go
@@ -166,11 +166,11 @@ func handleEvent(c Conn, ann *models.Announce, p *models.Peer, u *models.User, t
 	return
 }
 
-func newAnnounceResponse(ann *models.Announce, announcer *models.Peer, t *models.Torrent) *AnnounceResponse {
+func newAnnounceResponse(ann *models.Announce, announcer *models.Peer, t *models.Torrent) *models.AnnounceResponse {
 	seedCount := len(t.Seeders)
 	leechCount := len(t.Leechers)
 
-	res := &AnnounceResponse{
+	res := &models.AnnounceResponse{
 		Complete:    seedCount,
 		Incomplete:  leechCount,
 		Interval:    ann.Config.Announce.Duration,
@@ -185,8 +185,8 @@ func newAnnounceResponse(ann *models.Announce, announcer *models.Peer, t *models
 	return res
 }
 
-func getPeers(ann *models.Announce, announcer *models.Peer, t *models.Torrent, wanted int) (ipv4s, ipv6s PeerList) {
-	ipv4s, ipv6s = PeerList{}, PeerList{}
+func getPeers(ann *models.Announce, announcer *models.Peer, t *models.Torrent, wanted int) (ipv4s, ipv6s models.PeerList) {
+	ipv4s, ipv6s = models.PeerList{}, models.PeerList{}
 
 	if ann.Left == 0 {
 		// If they're seeding, give them only leechers.
@@ -198,7 +198,7 @@ func getPeers(ann *models.Announce, announcer *models.Peer, t *models.Torrent, w
 	return appendPeers(ipv4s, ipv6s, announcer, t.Leechers, wanted-len(ipv4s)-len(ipv6s))
 }
 
-func appendPeers(ipv4s, ipv6s PeerList, announcer *models.Peer, peers map[string]models.Peer, wanted int) (PeerList, PeerList) {
+func appendPeers(ipv4s, ipv6s models.PeerList, announcer *models.Peer, peers map[string]models.Peer, wanted int) (models.PeerList, models.PeerList) {
 	count := 0
 
 	for _, peer := range peers {
diff --git a/tracker/models/models.go b/tracker/models/models.go
index 694ad6b..642b40e 100644
--- a/tracker/models/models.go
+++ b/tracker/models/models.go
@@ -34,6 +34,8 @@ type Peer struct {
 	LastAnnounce int64  `json:"last_announce"`
 }
 
+type PeerList []Peer
+
 // NewPeer returns the Peer representation of an Announce. When provided nil
 // for the announce parameter, it panics. When provided nil for the user or
 // torrent parameter, it returns a Peer{UserID: 0} or Peer{TorrentID: 0}
@@ -165,6 +167,15 @@ type AnnounceDelta struct {
 	Downloaded uint64
 }
 
+// AnnounceResponse contains the information needed to fulfill an announce.
+type AnnounceResponse struct {
+	Complete, Incomplete  int
+	Interval, MinInterval time.Duration
+	IPv4Peers, IPv6Peers  PeerList
+
+	Compact bool
+}
+
 // NewAnnounceDelta calculates a Peer's download and upload deltas between
 // Announces and generates an AnnounceDelta.
 func NewAnnounceDelta(a *Announce, p *Peer, u *User, t *Torrent, created, snatched bool) *AnnounceDelta {
@@ -206,3 +217,8 @@ type Scrape struct {
 	Passkey    string
 	Infohashes []string
 }
+
+// ScrapeResponse contains the information needed to fulfill a scrape.
+type ScrapeResponse struct {
+	Files []*Torrent
+}
diff --git a/tracker/responses.go b/tracker/responses.go
deleted file mode 100644
index 5764061..0000000
--- a/tracker/responses.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2014 The Chihaya Authors. All rights reserved.
-// Use of this source code is governed by the BSD 2-Clause license,
-// which can be found in the LICENSE file.
-
-package tracker
-
-import (
-	"time"
-
-	"github.com/chihaya/chihaya/tracker/models"
-)
-
-type PeerList []models.Peer
-
-type AnnounceResponse struct {
-	Complete, Incomplete  int
-	Interval, MinInterval time.Duration
-	IPv4Peers, IPv6Peers  PeerList
-
-	Compact bool
-}
-
-type ScrapeResponse struct {
-	Files []*models.Torrent
-}
-
-type Writer interface {
-	WriteError(error) error
-	WriteAnnounce(*AnnounceResponse) error
-	WriteScrape(*ScrapeResponse) error
-}
diff --git a/tracker/scrape.go b/tracker/scrape.go
index d53fe6d..2ca1c91 100644
--- a/tracker/scrape.go
+++ b/tracker/scrape.go
@@ -36,5 +36,5 @@ func (t *Tracker) HandleScrape(scrape *models.Scrape, w Writer) error {
 		torrents = append(torrents, torrent)
 	}
 
-	return w.WriteScrape(&ScrapeResponse{torrents})
+	return w.WriteScrape(&models.ScrapeResponse{torrents})
 }
diff --git a/tracker/tracker.go b/tracker/tracker.go
index 24aeaad..6509854 100644
--- a/tracker/tracker.go
+++ b/tracker/tracker.go
@@ -9,6 +9,7 @@ package tracker
 import (
 	"github.com/chihaya/chihaya/config"
 	"github.com/chihaya/chihaya/drivers/backend"
+	"github.com/chihaya/chihaya/tracker/models"
 )
 
 type Tracker struct {
@@ -41,3 +42,9 @@ func New(cfg *config.Config) (*Tracker, error) {
 		backend: bc,
 	}, nil
 }
+
+type Writer interface {
+	WriteError(error) error
+	WriteAnnounce(*models.AnnounceResponse) error
+	WriteScrape(*models.ScrapeResponse) error
+}