package instagram import ( "log" "git.1750studios.com/AniNite/SocialDragon/database" ) var running bool // LoadNewInstas gets new media from Instagram 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 *ListResponse) 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.Graphql.ShortcodeMedia.IsAd { continue } var US database.User if database.Db.Model(database.User{}).Where("name = ? AND service = ?", post.Graphql.ShortcodeMedia.Owner.Username, database.Instagram).First(&US).Count(&count); count == 0 { US.DisplayName = post.Graphql.ShortcodeMedia.Owner.FullName US.Name = post.Graphql.ShortcodeMedia.Owner.Username US.Service = database.Instagram US.Blocked = false database.Db.Create(&US) } if post.Graphql.ShortcodeMedia.IsVideo { log.Printf("Found video %s from %s", post.Graphql.ShortcodeMedia.Shortcode, post.Graphql.ShortcodeMedia.Owner.Username) name, uname := ImageNameGenerator(post.Graphql.ShortcodeMedia.Shortcode) res, err := GetHTTPResource(post.Graphql.ShortcodeMedia.VideoURL) if err != nil { log.Printf("Can't load video %s: %+v", post.Graphql.ShortcodeMedia.Shortcode, 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.Graphql.ShortcodeMedia.Shortcode, err) continue } log.Printf("Loaded video %s, location %s!", post.Graphql.ShortcodeMedia.Shortcode, 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.Graphql.ShortcodeMedia.Shortcode database.Db.Create(&IT) } else { log.Printf("Found picture %s from %s", post.Graphql.ShortcodeMedia.Shortcode, post.Graphql.ShortcodeMedia.Owner.Username) name, uname := ImageNameGenerator(post.Graphql.ShortcodeMedia.Shortcode) res, err := GetHTTPResource(post.Graphql.ShortcodeMedia.DisplayURL) if err != nil { log.Printf("Can't load picture %s: %+v", post.Graphql.ShortcodeMedia.Shortcode, 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.Graphql.ShortcodeMedia.Shortcode, err) continue } log.Printf("Loaded picture %s, location %s!", post.Graphql.ShortcodeMedia.Shortcode, 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.Graphql.ShortcodeMedia.Shortcode database.Db.Create(&IT) } } return token }