mirror of
https://github.com/simon-ding/polaris.git
synced 2026-05-27 04:57:42 +08:00
feat: compare string use hamming method
This commit is contained in:
2
go.mod
2
go.mod
@@ -11,6 +11,8 @@ require (
|
|||||||
golang.org/x/net v0.25.0
|
golang.org/x/net v0.25.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
require github.com/adrg/strutil v0.3.1 // indirect
|
||||||
|
|
||||||
require (
|
require (
|
||||||
ariga.io/atlas v0.19.1-0.20240203083654-5948b60a8e43 // indirect
|
ariga.io/atlas v0.19.1-0.20240203083654-5948b60a8e43 // indirect
|
||||||
github.com/agext/levenshtein v1.2.1 // indirect
|
github.com/agext/levenshtein v1.2.1 // indirect
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -4,6 +4,8 @@ entgo.io/ent v0.13.1 h1:uD8QwN1h6SNphdCCzmkMN3feSUzNnVvV/WIkHKMbzOE=
|
|||||||
entgo.io/ent v0.13.1/go.mod h1:qCEmo+biw3ccBn9OyL4ZK5dfpwg++l1Gxwac5B1206A=
|
entgo.io/ent v0.13.1/go.mod h1:qCEmo+biw3ccBn9OyL4ZK5dfpwg++l1Gxwac5B1206A=
|
||||||
github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
|
github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
|
||||||
github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||||
|
github.com/adrg/strutil v0.3.1 h1:OLvSS7CSJO8lBii4YmBt8jiK9QOtB9CzCzwl4Ic/Fz4=
|
||||||
|
github.com/adrg/strutil v0.3.1/go.mod h1:8h90y18QLrs11IBffcGX3NW/GFBXCMcNg4M7H6MspPA=
|
||||||
github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8=
|
github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8=
|
||||||
github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
|
github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
|
||||||
github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw=
|
github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw=
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/adrg/strutil"
|
||||||
|
"github.com/adrg/strutil/metrics"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
@@ -71,7 +73,6 @@ func (s *Server) GetAllIndexers(c *gin.Context) (interface{}, error) {
|
|||||||
return indexers, nil
|
return indexers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (s *Server) getDownloadClient() (*transmission.Client, error) {
|
func (s *Server) getDownloadClient() (*transmission.Client, error) {
|
||||||
tr := s.db.GetTransmission()
|
tr := s.db.GetTransmission()
|
||||||
trc, err := transmission.NewClient(transmission.Config{
|
trc, err := transmission.NewClient(transmission.Config{
|
||||||
@@ -225,17 +226,17 @@ func (s *Server) SearchAvailableMovies(c *gin.Context) (interface{}, error) {
|
|||||||
if !strings.Contains(r.Name, strconv.Itoa(year)) && !strings.Contains(r.Name, strconv.Itoa(year+1)) && !strings.Contains(r.Name, strconv.Itoa(year-1)) {
|
if !strings.Contains(r.Name, strconv.Itoa(year)) && !strings.Contains(r.Name, strconv.Itoa(year+1)) && !strings.Contains(r.Name, strconv.Itoa(year-1)) {
|
||||||
continue //not the same movie, if year is not correct
|
continue //not the same movie, if year is not correct
|
||||||
}
|
}
|
||||||
lowerName := strings.ToLower(r.Name)
|
distCn := strutil.Similarity(strings.ToLower(r.Name), movieDetail.NameCn, metrics.NewHamming())
|
||||||
lowerEnName := strings.ToLower(movieDetail.NameEn)
|
distEn := strutil.Similarity(strings.ToLower(r.Name), strings.ToLower(movieDetail.NameEn), metrics.NewHamming())
|
||||||
if !strings.Contains(lowerName, movieDetail.NameCn) && !strings.Contains(lowerName, lowerEnName) {
|
if distCn == 0 && distEn == 0 {
|
||||||
continue //name not match
|
continue //name not match
|
||||||
}
|
}
|
||||||
searchResults = append(searchResults, TorznabSearchResult{
|
searchResults = append(searchResults, TorznabSearchResult{
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
Size: r.Size,
|
Size: r.Size,
|
||||||
Seeders: r.Seeders,
|
Seeders: r.Seeders,
|
||||||
Peers: r.Peers,
|
Peers: r.Peers,
|
||||||
Link: r.Magnet,
|
Link: r.Magnet,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if len(searchResults) == 0 {
|
if len(searchResults) == 0 {
|
||||||
@@ -247,9 +248,10 @@ func (s *Server) SearchAvailableMovies(c *gin.Context) (interface{}, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type downloadTorrentIn struct {
|
type downloadTorrentIn struct {
|
||||||
MediaID int `json:"media_id" binding:"required"`
|
MediaID int `json:"media_id" binding:"required"`
|
||||||
Link string `json:"link" binding:"required"`
|
Link string `json:"link" binding:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) DownloadMovieTorrent(c *gin.Context) (interface{}, error) {
|
func (s *Server) DownloadMovieTorrent(c *gin.Context) (interface{}, error) {
|
||||||
var in downloadTorrentIn
|
var in downloadTorrentIn
|
||||||
if err := c.ShouldBindJSON(&in); err != nil {
|
if err := c.ShouldBindJSON(&in); err != nil {
|
||||||
@@ -272,7 +274,7 @@ func (s *Server) DownloadMovieTorrent(c *gin.Context) (interface{}, error) {
|
|||||||
}
|
}
|
||||||
torrent.Start()
|
torrent.Start()
|
||||||
|
|
||||||
go func () {
|
go func() {
|
||||||
for {
|
for {
|
||||||
if !torrent.Exists() {
|
if !torrent.Exists() {
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user