1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/job_list.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h"
8b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace drive {
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::string JobTypeToString(JobType type) {
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (type){
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_GET_ABOUT_RESOURCE:
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_GET_ABOUT_RESOURCE";
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_GET_APP_LIST:
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_GET_APP_LIST";
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_GET_ALL_RESOURCE_LIST:
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_GET_ALL_RESOURCE_LIST";
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_GET_RESOURCE_LIST_IN_DIRECTORY:
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_GET_RESOURCE_LIST_IN_DIRECTORY";
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_SEARCH:
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_SEARCH";
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_GET_CHANGE_LIST:
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_GET_CHANGE_LIST";
27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    case TYPE_GET_REMAINING_CHANGE_LIST:
28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return "TYPE_GET_REMAINING_CHANGE_LIST";
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    case TYPE_GET_REMAINING_FILE_LIST:
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return "TYPE_GET_REMAINING_FILE_LIST";
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case TYPE_GET_RESOURCE_ENTRY:
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return "TYPE_GET_RESOURCE_ENTRY";
33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    case TYPE_GET_SHARE_URL:
34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      return "TYPE_GET_SHARE_URL";
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case TYPE_TRASH_RESOURCE:
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return "TYPE_TRASH_RESOURCE";
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_COPY_RESOURCE:
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return "TYPE_COPY_RESOURCE";
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case TYPE_UPDATE_RESOURCE:
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return "TYPE_UPDATE_RESOURCE";
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_ADD_RESOURCE_TO_DIRECTORY:
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_ADD_RESOURCE_TO_DIRECTORY";
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_REMOVE_RESOURCE_FROM_DIRECTORY:
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_REMOVE_RESOURCE_FROM_DIRECTORY";
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_ADD_NEW_DIRECTORY:
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_ADD_NEW_DIRECTORY";
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_DOWNLOAD_FILE:
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_DOWNLOAD_FILE";
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_UPLOAD_NEW_FILE:
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_UPLOAD_NEW_FILE";
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_UPLOAD_EXISTING_FILE:
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_UPLOAD_EXISTING_FILE";
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case TYPE_CREATE_FILE:
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "TYPE_CREATE_FILE";
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TYPE_ADD_PERMISSION:
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      return "TYPE_ADD_PERMISSION";
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED();
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return "(unknown job type)";
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::string JobStateToString(JobState state) {
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (state) {
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case STATE_NONE:
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "STATE_NONE";
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case STATE_RUNNING:
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "STATE_RUNNING";
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case STATE_RETRY:
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return "STATE_RETRY";
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED();
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return "(unknown job state)";
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)JobInfo::JobInfo(JobType in_job_type)
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : job_type(in_job_type),
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      job_id(-1),
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      state(STATE_NONE),
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      num_completed_bytes(0),
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      num_total_bytes(0) {
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
83b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)std::string JobInfo::ToString() const {
84b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  std::string output = base::StringPrintf(
85b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      "%s %s [%d]",
86b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      JobTypeToString(job_type).c_str(),
87b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      JobStateToString(state).c_str(),
88b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      job_id);
89b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (job_type == TYPE_DOWNLOAD_FILE ||
90b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      job_type == TYPE_UPLOAD_NEW_FILE ||
91b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      job_type == TYPE_UPLOAD_EXISTING_FILE) {
92b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::StringAppendF(&output,
93b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                        " bytes: %s/%s",
94b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                        base::Int64ToString(num_completed_bytes).c_str(),
95b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                        base::Int64ToString(num_total_bytes).c_str());
96b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  }
97b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  return output;
98b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}
99b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool IsActiveFileTransferJobInfo(const JobInfo& job_info) {
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Using switch statement so that compiler can warn when new states or types
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // are added.
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  switch (job_info.job_type) {
10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_GET_ABOUT_RESOURCE:
10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_GET_APP_LIST:
10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_GET_ALL_RESOURCE_LIST:
10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_GET_RESOURCE_LIST_IN_DIRECTORY:
10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_SEARCH:
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_GET_CHANGE_LIST:
110424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    case TYPE_GET_REMAINING_CHANGE_LIST:
111424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    case TYPE_GET_REMAINING_FILE_LIST:
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case TYPE_GET_RESOURCE_ENTRY:
113bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    case TYPE_GET_SHARE_URL:
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    case TYPE_TRASH_RESOURCE:
11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_COPY_RESOURCE:
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case TYPE_UPDATE_RESOURCE:
11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_ADD_RESOURCE_TO_DIRECTORY:
11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_REMOVE_RESOURCE_FROM_DIRECTORY:
11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_ADD_NEW_DIRECTORY:
12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_CREATE_FILE:
12123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TYPE_ADD_PERMISSION:
12290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return false;
12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_DOWNLOAD_FILE:
12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_UPLOAD_NEW_FILE:
12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    case TYPE_UPLOAD_EXISTING_FILE:
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      break;
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return true;
13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace drive
133