mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-12 19:39:32 -05:00
Merge pull request #225 from aboodman/width
flickr: import width and height too
This commit is contained in:
+26
-11
@@ -11,6 +11,7 @@ import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/attic-labs/noms/Godeps/_workspace/src/github.com/garyburd/go-oauth/oauth"
|
||||
@@ -203,7 +204,7 @@ func getAlbumPhotos(id string) SetOfPhoto {
|
||||
|
||||
photos := types.NewSet()
|
||||
for _, p := range response.Photoset.Photo {
|
||||
url := getOriginalUrl(p.Id)
|
||||
url, w, h := getOriginalUrl(p.Id)
|
||||
fmt.Printf(" . %v\n", url)
|
||||
photoReader := getPhotoReader(url)
|
||||
defer photoReader.Close()
|
||||
@@ -211,10 +212,12 @@ func getAlbumPhotos(id string) SetOfPhoto {
|
||||
d.Chk.NoError(err)
|
||||
photo := NewPhoto().
|
||||
SetId(types.NewString(p.Id)).
|
||||
SetImage(b).
|
||||
SetTags(getTags(p.Tags)).
|
||||
SetTitle(types.NewString(p.Title)).
|
||||
SetUrl(types.NewString(url)).
|
||||
SetTags(getTags(p.Tags)).
|
||||
SetImage(b)
|
||||
SetWidth(types.UInt32(w)).
|
||||
SetHeight(types.UInt32(h))
|
||||
// The photo is big, so write it out now to release the memory.
|
||||
r := types.WriteValue(photo.NomsValue(), ds.Store())
|
||||
photos = photos.Insert(types.Ref{r})
|
||||
@@ -233,16 +236,15 @@ func getTags(tagStr string) (res SetOfString) {
|
||||
return res
|
||||
}
|
||||
|
||||
func getOriginalUrl(id string) string {
|
||||
func getOriginalUrl(id string) (string, uint32, uint32) {
|
||||
response := struct {
|
||||
flickrCall
|
||||
Sizes struct {
|
||||
Size []struct {
|
||||
Label string `json:"label"`
|
||||
Source string `json:"source"`
|
||||
// TODO: For some reason json unmarshalling was getting confused about types. Not sure why.
|
||||
// Width int `json:"width"`
|
||||
// Height int `json:"height"`
|
||||
Label string `json:"label"`
|
||||
Source string `json:"source"`
|
||||
Width interface{} `json:"width"`
|
||||
Height interface{} `json:"height"`
|
||||
} `json:"size"`
|
||||
} `json:"sizes"`
|
||||
}{}
|
||||
@@ -254,11 +256,24 @@ func getOriginalUrl(id string) string {
|
||||
|
||||
for _, p := range response.Sizes.Size {
|
||||
if p.Label == "Original" {
|
||||
return p.Source
|
||||
dim := func(v interface{}) uint32 {
|
||||
switch v := v.(type) {
|
||||
case float64:
|
||||
return uint32(v)
|
||||
case string:
|
||||
i, err := strconv.Atoi(v)
|
||||
d.Chk.NoError(err)
|
||||
return uint32(i)
|
||||
default:
|
||||
d.Chk.Fail("Unexpected value for image width or height: %+v", v)
|
||||
return 0
|
||||
}
|
||||
}
|
||||
return p.Source, dim(p.Width), dim(p.Height)
|
||||
}
|
||||
}
|
||||
d.Chk.Fail(fmt.Sprintf("No Original image size found photo: %v", id))
|
||||
return "NOT REACHED"
|
||||
return "NOT REACHED", 0, 0
|
||||
}
|
||||
|
||||
func getPhotoReader(url string) io.ReadCloser {
|
||||
|
||||
+85
-69
@@ -68,6 +68,75 @@ func (m MapOfStringToAlbum) Iter(cb MapOfStringToAlbumIterCallback) {
|
||||
})
|
||||
}
|
||||
|
||||
// User
|
||||
|
||||
type User struct {
|
||||
m types.Map
|
||||
}
|
||||
|
||||
func NewUser() User {
|
||||
return User{
|
||||
types.NewMap(types.NewString("$name"), types.NewString("User")),
|
||||
}
|
||||
}
|
||||
|
||||
func UserFromVal(v types.Value) User {
|
||||
return User{v.(types.Map)}
|
||||
}
|
||||
|
||||
// TODO: This was going to be called Value() but it collides with root.value. We need some other place to put the built-in fields like Value() and Equals().
|
||||
func (s User) NomsValue() types.Map {
|
||||
return s.m
|
||||
}
|
||||
|
||||
func (s User) Equals(p User) bool {
|
||||
return s.m.Equals(p.m)
|
||||
}
|
||||
|
||||
func (s User) Ref() ref.Ref {
|
||||
return s.m.Ref()
|
||||
}
|
||||
|
||||
func (s User) OAuthToken() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("oAuthToken")))
|
||||
}
|
||||
|
||||
func (s User) SetOAuthToken(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("oAuthToken"), p))
|
||||
}
|
||||
|
||||
func (s User) Name() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("name")))
|
||||
}
|
||||
|
||||
func (s User) SetName(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("name"), p))
|
||||
}
|
||||
|
||||
func (s User) Albums() MapOfStringToAlbum {
|
||||
return MapOfStringToAlbumFromVal(s.m.Get(types.NewString("albums")))
|
||||
}
|
||||
|
||||
func (s User) SetAlbums(p MapOfStringToAlbum) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("albums"), p.NomsValue()))
|
||||
}
|
||||
|
||||
func (s User) Id() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("id")))
|
||||
}
|
||||
|
||||
func (s User) SetId(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("id"), p))
|
||||
}
|
||||
|
||||
func (s User) OAuthSecret() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("oAuthSecret")))
|
||||
}
|
||||
|
||||
func (s User) SetOAuthSecret(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("oAuthSecret"), p))
|
||||
}
|
||||
|
||||
// Album
|
||||
|
||||
type Album struct {
|
||||
@@ -232,6 +301,14 @@ func (s Photo) Ref() ref.Ref {
|
||||
return s.m.Ref()
|
||||
}
|
||||
|
||||
func (s Photo) Width() types.UInt32 {
|
||||
return types.UInt32FromVal(s.m.Get(types.NewString("width")))
|
||||
}
|
||||
|
||||
func (s Photo) SetWidth(p types.UInt32) Photo {
|
||||
return PhotoFromVal(s.m.Set(types.NewString("width"), p))
|
||||
}
|
||||
|
||||
func (s Photo) Title() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("title")))
|
||||
}
|
||||
@@ -256,6 +333,14 @@ func (s Photo) SetTags(p SetOfString) Photo {
|
||||
return PhotoFromVal(s.m.Set(types.NewString("tags"), p.NomsValue()))
|
||||
}
|
||||
|
||||
func (s Photo) Height() types.UInt32 {
|
||||
return types.UInt32FromVal(s.m.Get(types.NewString("height")))
|
||||
}
|
||||
|
||||
func (s Photo) SetHeight(p types.UInt32) Photo {
|
||||
return PhotoFromVal(s.m.Set(types.NewString("height"), p))
|
||||
}
|
||||
|
||||
func (s Photo) Image() types.Blob {
|
||||
return types.BlobFromVal(s.m.Get(types.NewString("image")))
|
||||
}
|
||||
@@ -354,72 +439,3 @@ func (s SetOfString) fromElemSlice(p []types.String) []types.Value {
|
||||
return r
|
||||
}
|
||||
|
||||
// User
|
||||
|
||||
type User struct {
|
||||
m types.Map
|
||||
}
|
||||
|
||||
func NewUser() User {
|
||||
return User{
|
||||
types.NewMap(types.NewString("$name"), types.NewString("User")),
|
||||
}
|
||||
}
|
||||
|
||||
func UserFromVal(v types.Value) User {
|
||||
return User{v.(types.Map)}
|
||||
}
|
||||
|
||||
// TODO: This was going to be called Value() but it collides with root.value. We need some other place to put the built-in fields like Value() and Equals().
|
||||
func (s User) NomsValue() types.Map {
|
||||
return s.m
|
||||
}
|
||||
|
||||
func (s User) Equals(p User) bool {
|
||||
return s.m.Equals(p.m)
|
||||
}
|
||||
|
||||
func (s User) Ref() ref.Ref {
|
||||
return s.m.Ref()
|
||||
}
|
||||
|
||||
func (s User) OAuthToken() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("oAuthToken")))
|
||||
}
|
||||
|
||||
func (s User) SetOAuthToken(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("oAuthToken"), p))
|
||||
}
|
||||
|
||||
func (s User) Name() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("name")))
|
||||
}
|
||||
|
||||
func (s User) SetName(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("name"), p))
|
||||
}
|
||||
|
||||
func (s User) Albums() MapOfStringToAlbum {
|
||||
return MapOfStringToAlbumFromVal(s.m.Get(types.NewString("albums")))
|
||||
}
|
||||
|
||||
func (s User) SetAlbums(p MapOfStringToAlbum) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("albums"), p.NomsValue()))
|
||||
}
|
||||
|
||||
func (s User) Id() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("id")))
|
||||
}
|
||||
|
||||
func (s User) SetId(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("id"), p))
|
||||
}
|
||||
|
||||
func (s User) OAuthSecret() types.String {
|
||||
return types.StringFromVal(s.m.Get(types.NewString("oAuthSecret")))
|
||||
}
|
||||
|
||||
func (s User) SetOAuthSecret(p types.String) User {
|
||||
return UserFromVal(s.m.Set(types.NewString("oAuthSecret"), p))
|
||||
}
|
||||
|
||||
|
||||
@@ -15,11 +15,14 @@ func init() {
|
||||
PhotoTypeDef = types.NewMap(
|
||||
types.NewString("$type"), types.NewString("noms.StructDef"),
|
||||
types.NewString("$name"), types.NewString("Photo"),
|
||||
types.NewString("height"), types.NewString("uint32"),
|
||||
types.NewString("id"), types.NewString("string"),
|
||||
types.NewString("image"), types.NewString("blob"),
|
||||
types.NewString("tags"), stringSet,
|
||||
types.NewString("title"), types.NewString("string"),
|
||||
types.NewString("url"), types.NewString("string"),
|
||||
types.NewString("image"), types.NewString("blob"),
|
||||
types.NewString("tags"), stringSet)
|
||||
types.NewString("width"), types.NewString("uint32"),
|
||||
)
|
||||
|
||||
PhotoSetTypeDef = types.NewMap(
|
||||
types.NewString("$type"), types.NewString("noms.SetDef"),
|
||||
|
||||
Reference in New Issue
Block a user