%PDF- %PDF-
| Direktori : /home/waritko/go/src/github.com/odeke-em/drive/src/ |
| Current File : //home/waritko/go/src/github.com/odeke-em/drive/src/about.go |
// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package drive
import (
"fmt"
"github.com/odeke-em/log"
drive "google.golang.org/api/drive/v2"
)
const Version = "0.3.9.1"
const (
Barely = iota
AlmostExceeded
HalfwayExceeded
Exceeded
Unknown
)
const (
AboutNone = 1 << iota
AboutQuota
AboutFileSizes
AboutFeatures
)
func (g *Commands) About(mask int) (err error) {
if mask == AboutNone {
return nil
}
about, err := g.rem.About()
if err != nil {
return err
}
printSummary(g.log, about, mask)
return nil
}
func quotaRequested(mask int) bool {
return (mask & AboutQuota) != 0
}
func fileSizesRequested(mask int) bool {
return (mask & AboutFileSizes) != 0
}
func featuresRequested(mask int) bool {
return (mask & AboutFeatures) != 0
}
func printSummary(logy *log.Logger, about *drive.About, mask int) {
if quotaRequested(mask) {
quotaInformation(logy, about)
}
if fileSizesRequested(mask) {
fileSizesInfo(logy, about)
}
if featuresRequested(mask) {
featuresInformation(logy, about)
}
}
func fileSizesInfo(logy *log.Logger, about *drive.About) {
if len(about.MaxUploadSizes) >= 1 {
logy.Logln("\n* Maximum upload sizes per file type *")
logy.Logf("%-50s %-20s\n", "FileType", "Size")
for _, uploadInfo := range about.MaxUploadSizes {
logy.Logf("%-50s %-20s\n", uploadInfo.Type, prettyBytes(uploadInfo.Size))
}
logy.Logln()
}
return
}
func featuresInformation(logy *log.Logger, about *drive.About) {
if len(about.Features) >= 1 {
logy.Logf("%-30s %-30s\n", "Feature", "Request limit (queries/second)")
for _, feature := range about.Features {
if feature.FeatureName == "" {
continue
}
logy.Logf("%-30s %-30f\n", feature.FeatureName, feature.FeatureRate)
}
logy.Logln()
}
}
func quotaInformation(logy *log.Logger, about *drive.About) {
freeBytes := about.QuotaBytesTotal - about.QuotaBytesUsed
logy.Logf(
"Name: %s\nAccount type:\t%s\nBytes Used:\t%-20d (%s)\n"+
"Bytes Free:\t%-20d (%s)\nBytes InTrash:\t%-20d (%s)\n"+
"Total Bytes:\t%-20d (%s)\n",
about.Name, about.QuotaType,
about.QuotaBytesUsed, prettyBytes(about.QuotaBytesUsed),
freeBytes, prettyBytes(freeBytes),
about.QuotaBytesUsedInTrash, prettyBytes(about.QuotaBytesUsedInTrash),
about.QuotaBytesTotal, prettyBytes(about.QuotaBytesTotal))
if len(about.QuotaBytesByService) >= 1 {
logy.Logln("\n* Space used by Google Services *")
logy.Logf("%-36s %-36s\n", "Service", "Bytes")
for _, quotaService := range about.QuotaBytesByService {
logy.Logf("%-36s %-36s\n", quotaService.ServiceName, prettyBytes(quotaService.BytesUsed))
}
logy.Logf("%-36s %-36s\n", "Space used by all Google Apps",
prettyBytes(about.QuotaBytesUsedAggregate))
}
logy.Logln()
}
func (g *Commands) QuotaStatus(query int64) (status int, err error) {
if query < 0 {
return Unknown, err
}
about, err := g.rem.About()
if err != nil {
return Unknown, err
}
// Sanity check
if about.QuotaBytesTotal < 1 {
return Unknown, fmt.Errorf("QuotaBytesTotal < 1")
}
toBeUsed := query + about.QuotaBytesUsed
if toBeUsed >= about.QuotaBytesTotal {
return Exceeded, nil
}
percentage := float64(toBeUsed) / float64(about.QuotaBytesTotal)
if percentage < 0.5 {
return Barely, nil
}
if percentage < 0.8 {
return HalfwayExceeded, nil
}
return AlmostExceeded, nil
}