AcManager.LargeFilesSharing.GoogleDrive.GoogleDriveUploader.Prepare C# (CSharp) Method

Prepare() public method

public Prepare ( CancellationToken cancellation ) : Task
cancellation System.Threading.CancellationToken
return Task
        public override async Task Prepare(CancellationToken cancellation) {
            if (IsReady && DateTime.Now < _authExpiration) return;

            var data = InternalUtils.GetGoogleDriveCredentials();
            var clientId = data.Item1.Substring(2);
            var clientSecret = data.Item2.Substring(2);

            var enc = ValuesStorage.GetEncryptedString(KeyAuthToken);
            if (enc == null) return;
            
            try {
                _authToken = JsonConvert.DeserializeObject<AuthResponse>(enc);
            } catch (Exception) {
                Logging.Warning("Can’t load auth token");
                return;
            }

            if (DateTime.Now < _authExpiration) {
                IsReady = true;
                return;
            }

            var refresh = await Request.Post<RefreshResponse>(@"https://www.googleapis.com/oauth2/v4/token", new NameValueCollection {
                { @"client_id", clientId },
                { @"client_secret", clientSecret },
                { @"refresh_token", _authToken.RefreshToken },
                { @"grant_type", @"refresh_token" }
            }.GetQuery(), null, cancellation);
            if (cancellation.IsCancellationRequested) return;

            if (refresh == null) {
                ValuesStorage.Remove(KeyAuthToken);
            } else {
                _authToken.AccessToken = refresh.AccessToken;
                _authExpiration = DateTime.Now + TimeSpan.FromSeconds(refresh.ExpiresIn) - TimeSpan.FromSeconds(20);
                ValuesStorage.SetEncrypted(KeyAuthToken, JsonConvert.SerializeObject(_authToken));
                ValuesStorage.Set(KeyAuthExpiration, _authExpiration);
                IsReady = true;
            }
        }