1package anaconda
2
3import (
4	"net/url"
5	"strconv"
6)
7
8type Media struct {
9	MediaID       int64  `json:"media_id"`
10	MediaIDString string `json:"media_id_string"`
11	Size          int    `json:"size"`
12	Image         Image  `json:"image"`
13}
14
15type Image struct {
16	W         int    `json:"w"`
17	H         int    `json:"h"`
18	ImageType string `json:"image_type"`
19}
20
21type ChunkedMedia struct {
22	MediaID          int64  `json:"media_id"`
23	MediaIDString    string `json:"media_id_string"`
24	ExpiresAfterSecs int    `json:"expires_after_secs"`
25}
26
27type Video struct {
28	VideoType string `json:"video_type"`
29}
30
31type VideoMedia struct {
32	MediaID          int64  `json:"media_id"`
33	MediaIDString    string `json:"media_id_string"`
34	Size             int    `json:"size"`
35	ExpiresAfterSecs int    `json:"expires_after_secs"`
36	Video            Video  `json:"video"`
37}
38
39func (a TwitterApi) UploadMedia(base64String string) (media Media, err error) {
40	v := url.Values{}
41	v.Set("media_data", base64String)
42
43	var mediaResponse Media
44
45	response_ch := make(chan response)
46	a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &mediaResponse, _POST, response_ch}
47	return mediaResponse, (<-response_ch).err
48}
49
50func (a TwitterApi) UploadVideoInit(totalBytes int, mimeType string) (chunkedMedia ChunkedMedia, err error) {
51	v := url.Values{}
52	v.Set("command", "INIT")
53	v.Set("media_type", mimeType)
54	v.Set("total_bytes", strconv.FormatInt(int64(totalBytes), 10))
55
56	var mediaResponse ChunkedMedia
57
58	response_ch := make(chan response)
59	a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &mediaResponse, _POST, response_ch}
60	return mediaResponse, (<-response_ch).err
61}
62
63func (a TwitterApi) UploadVideoAppend(mediaIdString string,
64	segmentIndex int, base64String string) error {
65
66	v := url.Values{}
67	v.Set("command", "APPEND")
68	v.Set("media_id", mediaIdString)
69	v.Set("media_data", base64String)
70	v.Set("segment_index", strconv.FormatInt(int64(segmentIndex), 10))
71
72	var emptyResponse interface{}
73
74	response_ch := make(chan response)
75	a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &emptyResponse, _POST, response_ch}
76	return (<-response_ch).err
77}
78
79func (a TwitterApi) UploadVideoFinalize(mediaIdString string) (videoMedia VideoMedia, err error) {
80	v := url.Values{}
81	v.Set("command", "FINALIZE")
82	v.Set("media_id", mediaIdString)
83
84	var mediaResponse VideoMedia
85
86	response_ch := make(chan response)
87	a.queryQueue <- query{UploadBaseUrl + "/media/upload.json", v, &mediaResponse, _POST, response_ch}
88	return mediaResponse, (<-response_ch).err
89}
90