Пример #1
0
        private NameValueCollection GetAuthHeaders()
        {
            NameValueCollection headers = GoogleAuth.GetAuthHeaders();

            headers.Add("GData-Version", "3");
            return(headers);
        }
Пример #2
0
        public override UploadResult Upload(Stream stream, string fileName)
        {
            if (!CheckAuthorization())
            {
                return(null);
            }

            UploadResult result = new UploadResult();

            if (IsPublic)
            {
                AlbumID = CreateAlbum(fileName).id;

                GooglePhotosAlbumOptions albumOptions = new GooglePhotosAlbumOptions();

                string serializedAlbumOptions         = JsonConvert.SerializeObject(albumOptions);
                string serializedAlbumOptionsResponse = SendRequest(HttpMethod.POST, $"https://photoslibrary.googleapis.com/v1/albums/{AlbumID}:share", content: serializedAlbumOptions, headers: GoogleAuth.GetAuthHeaders(), contentType: UploadHelpers.ContentTypeJSON);
                GooglePhotosAlbumOptionsResponse albumOptionsResponse = JsonConvert.DeserializeObject <GooglePhotosAlbumOptionsResponse>(serializedAlbumOptionsResponse);

                result.URL = albumOptionsResponse.shareInfo.shareableUrl;
            }

            NameValueCollection uploadTokenHeaders = new NameValueCollection
            {
                { "X-Goog-Upload-File-Name", fileName },
                { "X-Goog-Upload-Protocol", "raw" },
                { "Authorization", GoogleAuth.GetAuthHeaders()["Authorization"] }
            };

            string uploadToken = SendRequest(HttpMethod.POST, "https://photoslibrary.googleapis.com/v1/uploads", stream, contentType: UploadHelpers.ContentTypeOctetStream, headers: uploadTokenHeaders);

            GooglePhotosNewMediaItemRequest newMediaItemRequest = new GooglePhotosNewMediaItemRequest
            {
                albumId       = AlbumID,
                newMediaItems = new GooglePhotosNewMediaItem[]
                {
                    new  GooglePhotosNewMediaItem
                    {
                        simpleMediaItem = new GooglePhotosSimpleMediaItem
                        {
                            uploadToken = uploadToken
                        }
                    }
                }
            };

            string serializedNewMediaItemRequest = JsonConvert.SerializeObject(newMediaItemRequest);

            result.Response = SendRequest(HttpMethod.POST, "https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate", serializedNewMediaItemRequest, headers: GoogleAuth.GetAuthHeaders(), contentType: UploadHelpers.ContentTypeJSON);

            GooglePhotosNewMediaItemResults newMediaItemResult = JsonConvert.DeserializeObject <GooglePhotosNewMediaItemResults>(result.Response);

            if (!IsPublic)
            {
                result.URL = newMediaItemResult.newMediaItemResults[0].mediaItem.productUrl;
            }

            return(result);
        }
Пример #3
0
        public override UploadResult Upload(Stream stream, string fileName)
        {
            if (!CheckAuthorization())
            {
                return(null);
            }

            string metadata = GetMetadata(fileName, FolderID, DriveID);

            UploadResult result = SendRequestFile("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id,webViewLink,webContentLink&supportsAllDrives=true",
                                                  stream, fileName, "file", headers: GoogleAuth.GetAuthHeaders(), contentType: "multipart/related", relatedData: metadata);

            if (!string.IsNullOrEmpty(result.Response))
            {
                GoogleDriveFile upload = JsonConvert.DeserializeObject <GoogleDriveFile>(result.Response);

                if (upload != null)
                {
                    AllowReportProgress = false;

                    if (IsPublic)
                    {
                        SetPermissions(upload.id, GoogleDrivePermissionRole.reader, GoogleDrivePermissionType.anyone, false);
                    }

                    if (DirectLink)
                    {
                        Uri webContentLink = new Uri(upload.webContentLink);

                        string leftPart = webContentLink.GetLeftPart(UriPartial.Path);

                        NameValueCollection queryString = HttpUtility.ParseQueryString(webContentLink.Query);
                        queryString.Remove("export");

                        result.URL = $"{leftPart}?{queryString}";
                    }
                    else
                    {
                        result.URL = upload.webViewLink;
                    }
                }
            }

            return(result);
        }
Пример #4
0
        public override UploadResult Upload(Stream stream, string fileName)
        {
            if (!CheckAuthorization())
            {
                return(null);
            }

            if (!Helpers.IsVideoFile(fileName))
            {
                Errors.Add("YouTube only supports video files");
                return(null);
            }

            string metadata = GetMetadata(fileName);

            UploadResult result = SendRequestFile("https://www.googleapis.com/upload/youtube/v3/videos?part=id,snippet,status", stream, fileName,
                                                  headers: GoogleAuth.GetAuthHeaders(), metadata: metadata);

            if (!string.IsNullOrEmpty(result.Response))
            {
                YouTubeVideo upload = JsonConvert.DeserializeObject <YouTubeVideo>(result.Response);

                if (upload != null)
                {
                    AllowReportProgress = false;

                    result.URL = "https://youtu.be/" + upload.id;

                    switch (upload.status.uploadStatus)
                    {
                    case YouTubeVideoStatus.UploadFailed:
                        Errors.Add("Upload failed: " + upload.status.failureReason);
                        break;

                    case YouTubeVideoStatus.UploadRejected:
                        Errors.Add("Upload rejected: " + upload.status.rejectionReason);
                        break;
                    }
                }
            }

            return(result);
        }
Пример #5
0
        public List <GoogleDriveSharedDrive> GetDrives()
        {
            if (!CheckAuthorization())
            {
                return(null);
            }

            Dictionary <string, string>   args   = new Dictionary <string, string>();
            List <GoogleDriveSharedDrive> drives = new List <GoogleDriveSharedDrive>();
            string pageToken = "";

            // Make sure we get all the pages of results
            do
            {
                args["pageToken"] = pageToken;
                string response = SendRequest(HttpMethod.GET, "https://www.googleapis.com/drive/v3/drives", args, GoogleAuth.GetAuthHeaders());
                pageToken = "";

                if (!string.IsNullOrEmpty(response))
                {
                    GoogleDriveSharedDriveList driveList = JsonConvert.DeserializeObject <GoogleDriveSharedDriveList>(response);

                    if (driveList != null)
                    {
                        drives.AddRange(driveList.drives);
                        pageToken = driveList.nextPageToken;
                    }
                }
            }while (!string.IsNullOrEmpty(pageToken));

            return(drives);
        }
Пример #6
0
        public List <GoogleDriveFile> GetFolders(string driveID = "", bool trashed = false, bool writer = true)
        {
            if (!CheckAuthorization())
            {
                return(null);
            }

            string query = "mimeType = 'application/vnd.google-apps.folder'";

            if (!trashed)
            {
                query += " and trashed = false";
            }

            if (writer && string.IsNullOrEmpty(driveID))
            {
                query += " and 'me' in writers";
            }

            Dictionary <string, string> args = new Dictionary <string, string>();

            args.Add("q", query);
            args.Add("fields", "nextPageToken,files(id,name,description)");
            if (!string.IsNullOrEmpty(driveID))
            {
                args.Add("driveId", driveID);
                args.Add("corpora", "drive");
                args.Add("supportsAllDrives", "true");
                args.Add("includeItemsFromAllDrives", "true");
            }

            List <GoogleDriveFile> folders = new List <GoogleDriveFile>();
            string pageToken = "";

            // Make sure we get all the pages of results
            do
            {
                args["pageToken"] = pageToken;
                string response = SendRequest(HttpMethod.GET, "https://www.googleapis.com/drive/v3/files", args, GoogleAuth.GetAuthHeaders());
                pageToken = "";

                if (!string.IsNullOrEmpty(response))
                {
                    GoogleDriveFileList fileList = JsonConvert.DeserializeObject <GoogleDriveFileList>(response);

                    if (fileList != null)
                    {
                        folders.AddRange(fileList.files);
                        pageToken = fileList.nextPageToken;
                    }
                }
            }while (!string.IsNullOrEmpty(pageToken));

            return(folders);
        }
Пример #7
0
        private void SetPermissions(string fileID, GoogleDrivePermissionRole role, GoogleDrivePermissionType type, bool allowFileDiscovery)
        {
            if (!CheckAuthorization())
            {
                return;
            }

            string url = string.Format("https://www.googleapis.com/drive/v3/files/{0}/permissions", fileID);

            string json = JsonConvert.SerializeObject(new
            {
                role = role.ToString(),
                type = type.ToString(),
                allowFileDiscovery = allowFileDiscovery.ToString()
            });

            string response = SendRequest(HttpMethod.POST, url, json, RequestHelpers.ContentTypeJSON, null, GoogleAuth.GetAuthHeaders());
        }
Пример #8
0
        public List <GooglePhotosAlbumInfo> GetAlbumList()
        {
            if (!CheckAuthorization())
            {
                return(null);
            }

            List <GooglePhotosAlbumInfo> albumList = new List <GooglePhotosAlbumInfo>();

            Dictionary <string, string> albumListArgs = new Dictionary <string, string>
            {
                { "excludeNonAppCreatedData", "true" },
                { "fields", "albums(id,title,shareInfo),nextPageToken" }
            };

            string pageToken = "";

            do
            {
                albumListArgs["pageToken"] = pageToken;
                string response = SendRequest(HttpMethod.GET, "https://photoslibrary.googleapis.com/v1/albums", albumListArgs, GoogleAuth.GetAuthHeaders());
                pageToken = "";

                if (!string.IsNullOrEmpty(response))
                {
                    GooglePhotosAlbums albumsResponse = JsonConvert.DeserializeObject <GooglePhotosAlbums>(response);

                    if (albumsResponse.albums != null)
                    {
                        foreach (GooglePhotosAlbum album in albumsResponse.albums)
                        {
                            GooglePhotosAlbumInfo AlbumInfo = new GooglePhotosAlbumInfo
                            {
                                ID   = album.id,
                                Name = album.title
                            };

                            if (album.shareInfo == null)
                            {
                                albumList.Add(AlbumInfo);
                            }
                        }
                    }
                    pageToken = albumsResponse.nextPageToken;
                }
            }while (!string.IsNullOrEmpty(pageToken));

            return(albumList);
        }
Пример #9
0
        public GooglePhotosAlbum CreateAlbum(string albumName)
        {
            GooglePhotosNewAlbum newItemAlbum = new GooglePhotosNewAlbum
            {
                album = new GooglePhotosAlbum
                {
                    title = albumName
                }
            };

            Dictionary <string, string> newItemAlbumArgs = new Dictionary <string, string>
            {
                { "fields", "id" }
            };

            string            serializedNewItemAlbum         = JsonConvert.SerializeObject(newItemAlbum);
            string            serializedNewItemAlbumResponse = SendRequest(HttpMethod.POST, "https://photoslibrary.googleapis.com/v1/albums", serializedNewItemAlbum, UploadHelpers.ContentTypeJSON, newItemAlbumArgs, GoogleAuth.GetAuthHeaders());
            GooglePhotosAlbum newItemAlbumResponse           = JsonConvert.DeserializeObject <GooglePhotosAlbum>(serializedNewItemAlbumResponse);

            return(newItemAlbumResponse);
        }