qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
corefile.h
Go to the documentation of this file.
1 /*
2  Copyright © 2015-2019 by The qTox Project Contributors
3 
4  This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6  qTox is libre software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  qTox is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with qTox. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 
21 #pragma once
22 
23 #include <tox/tox.h>
24 
25 #include "toxfile.h"
26 #include "src/core/core.h"
27 #include "src/core/toxpk.h"
28 #include "src/model/status.h"
29 
30 #include "util/compatiblerecursivemutex.h"
31 
32 #include <QHash>
33 #include <QMutex>
34 #include <QObject>
35 #include <QString>
36 
37 #include <cstddef>
38 #include <cstdint>
39 #include <memory>
40 
41 struct Tox;
42 class CoreFile;
43 
44 using CoreFilePtr = std::unique_ptr<CoreFile>;
45 
46 class CoreFile : public QObject
47 {
48  Q_OBJECT
49 
50 public:
51  void handleAvatarOffer(uint32_t friendId, uint32_t fileId, bool accept, uint64_t filesize);
52  static CoreFilePtr makeCoreFile(Core* core, Tox* tox, CompatibleRecursiveMutex& coreLoopLock);
53 
54  void sendFile(uint32_t friendId, QString filename, QString filePath,
55  long long filesize);
56  void sendAvatarFile(uint32_t friendId, const QByteArray& data);
57  void pauseResumeFile(uint32_t friendId, uint32_t fileId);
58  void cancelFileSend(uint32_t friendId, uint32_t fileId);
59 
60  void cancelFileRecv(uint32_t friendId, uint32_t fileId);
61  void rejectFileRecvRequest(uint32_t friendId, uint32_t fileId);
62  void acceptFileRecvRequest(uint32_t friendId, uint32_t fileId, QString path);
63 
64  unsigned corefileIterationInterval();
65 
66 signals:
76  void fileNameChanged(const ToxPk& friendPk);
77  void fileSendFailed(uint32_t friendId, const QString& fname);
78 
79 private:
80  CoreFile(Tox* core, CompatibleRecursiveMutex& coreLoopLock);
81 
82  ToxFile* findFile(uint32_t friendId, uint32_t fileId);
83  void addFile(uint32_t friendId, uint32_t fileId, const ToxFile& file);
84  void removeFile(uint32_t friendId, uint32_t fileId);
85  static constexpr uint64_t getFriendKey(uint32_t friendId, uint32_t fileId)
86  {
87  return (static_cast<std::uint64_t>(friendId) << 32) + fileId;
88  }
89 
90  static void connectCallbacks(Tox& tox);
91  static void onFileReceiveCallback(Tox* tox, uint32_t friendId, uint32_t fileId, uint32_t kind,
92  uint64_t filesize, const uint8_t* fname, size_t fnameLen,
93  void* vCore);
94  static void onFileControlCallback(Tox* tox, uint32_t friendId, uint32_t fileId,
95  Tox_File_Control control, void* vCore);
96  static void onFileDataCallback(Tox* tox, uint32_t friendId, uint32_t fileId, uint64_t pos,
97  size_t length, void* vCore);
98  static void onFileRecvChunkCallback(Tox* tox, uint32_t friendId, uint32_t fileId, uint64_t position,
99  const uint8_t* data, size_t length, void* vCore);
100 
101  static QString getCleanFileName(QString filename);
102 
103 private slots:
104  void onConnectionStatusChanged(uint32_t friendId, Status::Status state);
105 
106 private:
108  Tox* tox;
109  CompatibleRecursiveMutex* coreLoopLock = nullptr;
110 };
CoreFile::removeFile
void removeFile(uint32_t friendId, uint32_t fileId)
Definition: corefile.cpp:298
Status::Status
Status
Definition: status.h:28
toxfile.h
CoreFile::fileTransferAccepted
void fileTransferAccepted(ToxFile file)
CoreFile::onConnectionStatusChanged
void onConnectionStatusChanged(uint32_t friendId, Status::Status state)
HistMessageContentType::file
@ file
CoreFilePtr
std::unique_ptr< CoreFile > CoreFilePtr
Definition: corefile.h:44
CoreFile::cancelFileSend
void cancelFileSend(uint32_t friendId, uint32_t fileId)
Definition: corefile.cpp:208
toxpk.h
CoreFile::sendAvatarFile
void sendAvatarFile(uint32_t friendId, const QByteArray &data)
Definition: corefile.cpp:92
CoreFile::onFileControlCallback
static void onFileControlCallback(Tox *tox, uint32_t friendId, uint32_t fileId, Tox_File_Control control, void *vCore)
CoreFile::rejectFileRecvRequest
void rejectFileRecvRequest(uint32_t friendId, uint32_t fileId)
Definition: corefile.cpp:239
CoreFile::fileTransferPaused
void fileTransferPaused(ToxFile file)
ToxPk
This class represents a Tox Public Key, which is a part of Tox ID.
Definition: toxpk.h:26
CoreFile::CoreFile
CoreFile(Tox *core, CompatibleRecursiveMutex &coreLoopLock)
Definition: corefile.cpp:53
CoreFile::fileReceiveRequested
void fileReceiveRequested(ToxFile file)
CoreFile::fileTransferInfo
void fileTransferInfo(ToxFile file)
CoreFile::pauseResumeFile
void pauseResumeFile(uint32_t friendId, uint32_t fileId)
Definition: corefile.cpp:173
CoreFile::onFileRecvChunkCallback
static void onFileRecvChunkCallback(Tox *tox, uint32_t friendId, uint32_t fileId, uint64_t position, const uint8_t *data, size_t length, void *vCore)
CoreFile::fileNameChanged
void fileNameChanged(const ToxPk &friendPk)
CoreFile::onFileDataCallback
static void onFileDataCallback(Tox *tox, uint32_t friendId, uint32_t fileId, uint64_t pos, size_t length, void *vCore)
CoreFile::fileTransferCancelled
void fileTransferCancelled(ToxFile file)
CoreFile::fileTransferBrokenUnbroken
void fileTransferBrokenUnbroken(ToxFile file, bool broken)
CoreFile::getCleanFileName
static QString getCleanFileName(QString filename)
Definition: corefile.cpp:309
QHash< uint64_t, ToxFile >
CoreFile::tox
Tox * tox
Definition: corefile.h:108
CoreFile::cancelFileRecv
void cancelFileRecv(uint32_t friendId, uint32_t fileId)
Definition: corefile.cpp:224
CoreFile::sendFile
void sendFile(uint32_t friendId, QString filename, QString filePath, long long filesize)
Definition: corefile.cpp:144
CoreFile::fileTransferRemotePausedUnpaused
void fileTransferRemotePausedUnpaused(ToxFile file, bool paused)
CoreFile::fileSendStarted
void fileSendStarted(ToxFile file)
CoreFile::makeCoreFile
static CoreFilePtr makeCoreFile(Core *core, Tox *tox, CompatibleRecursiveMutex &coreLoopLock)
Definition: corefile.cpp:42
CoreFile::getFriendKey
static constexpr uint64_t getFriendKey(uint32_t friendId, uint32_t fileId)
Definition: corefile.h:85
CoreFile::acceptFileRecvRequest
void acceptFileRecvRequest(uint32_t friendId, uint32_t fileId, QString path)
Definition: corefile.cpp:254
core.h
CoreFile::addFile
void addFile(uint32_t friendId, uint32_t fileId, const ToxFile &file)
Definition: corefile.cpp:286
CoreFile::corefileIterationInterval
unsigned corefileIterationInterval()
Get corefile iteration interval.
Definition: corefile.cpp:65
CoreFile::fileTransferFinished
void fileTransferFinished(ToxFile file)
CoreFile::findFile
ToxFile * findFile(uint32_t friendId, uint32_t fileId)
Definition: corefile.cpp:273
CoreFile::fileMap
QHash< uint64_t, ToxFile > fileMap
Definition: corefile.h:107
CoreFile::connectCallbacks
static void connectCallbacks(Tox &tox)
Definition: corefile.cpp:83
ToxFile
Definition: toxfile.h:32
CoreFile::handleAvatarOffer
void handleAvatarOffer(uint32_t friendId, uint32_t fileId, bool accept, uint64_t filesize)
CoreFile::onFileReceiveCallback
static void onFileReceiveCallback(Tox *tox, uint32_t friendId, uint32_t fileId, uint32_t kind, uint64_t filesize, const uint8_t *fname, size_t fnameLen, void *vCore)
MessageState::broken
@ broken
CoreFile::fileSendFailed
void fileSendFailed(uint32_t friendId, const QString &fname)
CoreFile
Manages the file transfer service of toxcore.
Definition: corefile.h:46
status.h
Core
Definition: core.h:59
CoreFile::coreLoopLock
CompatibleRecursiveMutex * coreLoopLock
Definition: corefile.h:109