package instagram import ( "log" "git.1750studios.com/AniNite/SocialDragon/database" ) var running bool func LoadNewInstas() { log.Printf("Loading new Instas...") var count int if running { count = 5 } else { count = 1 running = true } token := "" for i := 0; i < count; i++ { list, err := LoadList(token) if err != nil { log.Printf("Can't load Instagram feed: %+v", err) return } token = iterList(list) if token == "" { break } } log.Printf("Finished looking for new Instas.") } func iterList(list *InstagramListResponse) string { var token string for _, image := range list.Tag.Media.Nodes { var count int if database.Db.Model(database.Item{}).Where("original_id = ?", image.Code).Count(&count); count > 0 { token = "" continue } token = list.Tag.Media.PageInfo.EndCursor post, err := LoadPost(image.Code) if err != nil { log.Printf("Can't load Instagram post %s: %+v", image.Code, err) continue } if post.Media.IsAd { continue } var US database.User if database.Db.Model(database.User{}).Where("name = ? AND service = ?", post.Media.Owner.Username, database.Instagram).First(&US).Count(&count); count == 0 { US.DisplayName = post.Media.Owner.FullName US.Name = post.Media.Owner.Username US.Service = database.Instagram US.Blocked = false database.Db.Create(&US) } if post.Media.IsVideo { log.Printf("Found video %s from %s", post.Media.Code, post.Media.Owner.Username) name, uname := ImageNameGenerator(post.Media.Code) res, err := GetHTTPResource(post.Media.VideoURL) if err != nil { log.Printf("Can't load video %s: %+v", post.Media.Code, err) continue } defer res.Body.Close() ext, err := DownloadMedia(res.Body, name, true) if err != nil { log.Printf("Can't load video %s: %+v", post.Media.Code, err) continue } log.Printf("Loaded video %s, location %s!", post.Media.Code, uname+ext) var IT database.Item IT.UserID = US.ID IT.Service = database.Instagram if US.Blocked { IT.State = database.Rejected } else { IT.State = database.Inbox } IT.IsVideo = true IT.Path = uname + ext IT.OriginalID = post.Media.Code database.Db.Create(&IT) } else { log.Printf("Found picture %s from %s", post.Media.Code, post.Media.Owner.Username) name, uname := ImageNameGenerator(post.Media.Code) res, err := GetHTTPResource(post.Media.DisplaySrc) if err != nil { log.Printf("Can't load picture %s: %+v", post.Media.Code, err) continue } defer res.Body.Close() ext, err := DownloadMedia(res.Body, name, false) if err != nil { log.Printf("Can't load picture %s: %+v", post.Media.Code, err) continue } log.Printf("Loaded picture %s, location %s!", post.Media.Code, uname+ext) var IT database.Item IT.UserID = US.ID IT.Service = database.Instagram if US.Blocked { IT.State = database.Rejected } else { IT.State = database.Inbox } IT.IsVideo = false IT.Path = uname + ext IT.OriginalID = post.Media.Code database.Db.Create(&IT) } } return token }