kodi
FileOperationJob.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "FileItem.h"
12 #include "filesystem/IFileTypes.h"
13 #include "utils/ProgressJob.h"
14 
15 #include <string>
16 #include <vector>
17 
19 {
20 public:
22  {
23  ActionCopy = 1,
24  ActionMove,
25  ActionDelete,
27  ActionCreateFolder,
28  ActionDeleteFolder,
29  };
30 
33  const std::string& strDestFile,
34  bool displayProgress = false,
35  int errorHeading = 0, int errorLine = 0);
36 
37  static std::string GetActionString(FileAction action);
38 
39  // implementations of CJob
40  bool DoWork() override;
41  const char* GetType() const override { return m_displayProgress ? "filemanager" : ""; }
42  bool operator==(const CJob *job) const override;
43 
44  void SetFileOperation(FileAction action,
45  const CFileItemList& items,
46  const std::string& strDestFile);
47 
48  const std::string &GetAverageSpeed() const { return m_avgSpeed; }
49  const std::string &GetCurrentOperation() const { return m_currentOperation; }
50  const std::string &GetCurrentFile() const { return m_currentFile; }
51  const CFileItemList &GetItems() const { return m_items; }
52  FileAction GetAction() const { return m_action; }
53  int GetHeading() const { return m_heading; }
54  int GetLine() const { return m_line; }
55 
56 private:
57  class CFileOperation : public XFILE::IFileCallback
58  {
59  public:
60  CFileOperation(FileAction action, const std::string &strFileA, const std::string &strFileB, int64_t time);
61 
62  bool OnFileCallback(void* pContext, int ipercent, float avgSpeed) override;
63 
64  bool ExecuteOperation(CFileOperationJob *base, double &current, double opWeight);
65 
66  private:
67  FileAction m_action;
68  std::string m_strFileA, m_strFileB;
69  int64_t m_time;
70  };
71  friend class CFileOperation;
72 
73  typedef std::vector<CFileOperation> FileOperationList;
74  bool DoProcess(FileAction action,
75  const CFileItemList& items,
76  const std::string& strDestFile,
77  FileOperationList& fileOperations,
78  double& totalTime);
79  bool DoProcessFolder(FileAction action, const std::string& strPath, const std::string& strDestFile, FileOperationList &fileOperations, double &totalTime);
80  bool DoProcessFile(FileAction action, const std::string& strFileA, const std::string& strFileB, FileOperationList &fileOperations, double &totalTime);
81 
82  static inline bool CanBeRenamed(const std::string &strFileA, const std::string &strFileB);
83 
84  FileAction m_action = ActionCopy;
85  CFileItemList m_items;
86  std::string m_strDestFile;
87  std::string m_avgSpeed, m_currentOperation, m_currentFile;
88  bool m_displayProgress = false;
89  int m_heading = 0;
90  int m_line = 0;
91 };
Base class for jobs that are executed asynchronously.
Definition: Job.h:109
Definition: FileOperationJob.h:18
Copy, emptying any existing destination directories first.
Definition: FileOperationJob.h:26
Represents a list of files.
Definition: FileItem.h:702
const char * GetType() const override
Function that returns the type of job.
Definition: FileOperationJob.h:41
bool DoWork() override
Main workhorse function of CJob instances.
Definition: FileOperationJob.cpp:66
FileAction
Definition: FileOperationJob.h:21
Definition: IFileTypes.h:112
Basic implementation of a CJob with a progress bar to indicate the progress of the job being processe...
Definition: ProgressJob.h:22