diff --git a/deviantion.go b/deviantion.go index f2a85e6..c7640e8 100644 --- a/deviantion.go +++ b/deviantion.go @@ -104,7 +104,7 @@ func UrlFromMedia(m Media, thumb ...int) string { for _, t := range m.Types { if t.T == "fullview" { url.WriteString(m.BaseUri) - if m.BaseUri[len(m.BaseUri)-3:] != "gif" && t.W*t.H < 33177600 { + if l := len(m.BaseUri); l != 0 && (m.BaseUri[l-3:] != "gif" && t.W*t.H < 33177600) { if len(thumb) != 0 { subtractWidthHeight(thumb[0], &t.W, &t.H) } diff --git a/misc.go b/misc.go index 094fe2e..720b4c8 100644 --- a/misc.go +++ b/misc.go @@ -88,17 +88,23 @@ func PerformSearch(query string, page int, scope rune, user ...string) (ss Searc buildurl.WriteString("dabrowse/search/all?q=") case 't': // поиск артов по тегам buildurl.WriteString("dabrowse/networkbar/tag/deviations?tag=") - case 'g': // поиск артов пользователя или группы - if user != nil { - buildurl.WriteString("dashared/gallection/search?username=") - buildurl.WriteString(user[0]) - buildurl.WriteString("&type=gallery&order=most-recent&init=true&limit=50&q=") - } else { + case 'g', 'f': // поиск артов пользователя или группы + if user == nil { e = errors.New("missing username (last argument)") return } + + buildurl.WriteString("dashared/gallection/search?username=") + buildurl.WriteString(user[0]) + buildurl.WriteString("&type=") + if scope == 'g' { + buildurl.WriteString("gallery") + } else { + buildurl.WriteString("collection") + } + buildurl.WriteString("&order=most-recent&init=true&limit=50&q=") default: - log.Fatalln("Invalid type.\n- 'a' -- all;\n- 't' -- tag;\n- 'g' - gallery.") + log.Fatalln("Invalid type.\n- 'a' -- all;\n- 't' -- tag;\n- 'g' - gallery\n- 'f' - folders.") } buildurl.WriteString(url.QueryEscape(query)) @@ -112,11 +118,11 @@ func PerformSearch(query string, page int, scope rune, user ...string) (ss Searc ujson(buildurl.String(), &ss) - if scope == 'g' { + if ss.Results == nil { ss.Results = ss.ResultsGalleryTemp } - // расчёт, сколько всего страниц по запросу. без токена 417 страниц - максимум + // расчёт, сколько всего страниц по запросу. без токена, 417 страниц - максимум totalfloat := int(math.Round(float64(ss.Total / 25))) for x := 0; x < totalfloat; x++ { if x <= 417 { diff --git a/user-group.go b/user-group.go index c6b53ee..f1f2af5 100644 --- a/user-group.go +++ b/user-group.go @@ -46,10 +46,11 @@ type Gallery struct { Folders struct { HasMore bool Results []struct { - FolderId int - Size int - Name string - Thumb Deviation + Deviations int `json:"totalItemCount"` + FolderId int + Size int + Name string + Thumb Deviation } } @@ -74,7 +75,7 @@ type Group struct { } // подходит как группа, так и пользователь -func (s Group) GetGroup() (g GRuser, err error) { +func (s Group) Get() (g GRuser, err error) { if s.Name == "" { return g, errors.New("missing Name field") } @@ -83,8 +84,33 @@ func (s Group) GetGroup() (g GRuser, err error) { return } +func (s Group) Favourites(page int, all bool, folderid ...int) (g Group) { + var url strings.Builder + + if fid := folderid[0]; fid > 0 || all { + url.WriteString("dashared/gallection/contents") + if all { + url.WriteString("?all_folder=true") + } else { + url.WriteString("?folderid=") + url.WriteString(strconv.Itoa(fid)) + } + url.WriteString("&type=collection&") + } else { + url.WriteString("dauserprofile/init/favourites?deviations_") + } + + url.WriteString("limit=50&username=") + url.WriteString(s.Name) + url.WriteString("&with_subfolders=true&offset=") + url.WriteString(strconv.Itoa(page * 50)) + + ujson(url.String(), &g.Content) + return +} + // гарелея пользователя или группы -func (s Group) GetGallery(page int, folderid ...int) (g Group, err error) { +func (s Group) Gallery(page int, folderid ...int) (g Group, err error) { if s.Name == "" { return g, errors.New("missing Name field") }