Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F2577884
kazv-io-manager.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
kazv-io-manager.cpp
View Options
/*
* This file is part of kazv.
* SPDX-FileCopyrightText: 2022-2023 nannanko <nannanko@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#include
"kazv-io-manager.hpp"
#include
"kazv-io-job.hpp"
#include
"matrix-room.hpp"
#include
"upload-job-model.hpp"
#include
<api/csapi/content-repo.hpp>
#include
<file-desc.hpp>
#include
<QObject>
#include
<QIODevice>
#include
<QFile>
#include
<QSaveFile>
#include
<QPointer>
#include
<QSharedPointer>
#include
<QUrl>
#include
<QMap>
#include
<QMultiMap>
#include
<string>
static
const
QString
ROOMLESS
=
QStringLiteral
(
"not-a-room"
);
struct
KazvIOManagerPrivate
{
QMap
<
QString
,
QSharedPointer
<
KazvIODownloadJob
>>
downloadJobs
;
QMap
<
QString
,
QSharedPointer
<
UploadJobModel
>>
uploadJobs
;
};
KazvIOManager
::
KazvIOManager
(
QObject
*
parent
)
:
QObject
(
parent
)
,
m_d
(
new
KazvIOManagerPrivate
)
{
}
KazvIOManager
::~
KazvIOManager
()
=
default
;
KazvIOBaseJob
*
KazvIOManager::startNewDownloadJob
(
const
QUrl
&
serverUrl
,
const
QUrl
&
localFileUrl
,
const
QString
&
jobId
)
{
auto
downloadJob
=
QSharedPointer
<
KazvIODownloadJob
>
(
new
KazvIODownloadJob
(
localFileUrl
.
toLocalFile
(),
serverUrl
,
this
));
m_d
->
downloadJobs
[
jobId
]
=
downloadJob
;
return
downloadJob
.
data
();
}
KazvIOBaseJob
*
KazvIOManager::startNewUploadJob
(
const
QUrl
&
serverUrl
,
const
QUrl
&
localFileUrl
,
const
QString
&
token
,
const
QString
&
roomId
,
MatrixRoomList
*
roomList
)
{
auto
uploadJob
=
QPointer
<
KazvIOUploadJob
>
(
new
KazvIOUploadJob
(
localFileUrl
.
toLocalFile
(),
serverUrl
,
roomList
,
roomId
,
token
,
this
));
if
(
!
m_d
->
uploadJobs
.
contains
(
roomId
)
||
m_d
->
uploadJobs
[
roomId
].
isNull
())
{
m_d
->
uploadJobs
[
roomId
].
reset
(
new
UploadJobModel
(
this
));
}
m_d
->
uploadJobs
[
roomId
]
->
addJob
(
uploadJob
);
return
uploadJob
.
data
();
}
KazvIOBaseJob
*
KazvIOManager::startNewRoomlessUploadJob
(
const
QUrl
&
serverUrl
,
const
QUrl
&
localFileUrl
,
const
QString
&
token
)
{
return
startNewUploadJob
(
serverUrl
,
localFileUrl
,
token
,
ROOMLESS
,
0
);
}
KazvIOBaseJob
*
KazvIOManager::getDownloadJob
(
const
QString
&
jobId
)
{
auto
targetJob
=
m_d
->
downloadJobs
.
find
(
jobId
);
if
(
targetJob
==
m_d
->
downloadJobs
.
end
())
{
return
nullptr
;
}
return
targetJob
.
value
().
data
();
}
void
KazvIOManager::deleteDownloadJob
(
const
QString
&
jobId
)
{
m_d
->
downloadJobs
.
remove
(
jobId
);
}
UploadJobModel
*
KazvIOManager::getUploadJobs
(
const
QString
&
roomId
)
{
if
(
!
m_d
->
uploadJobs
.
contains
(
roomId
)
||
m_d
->
uploadJobs
[
roomId
].
isNull
())
{
m_d
->
uploadJobs
[
roomId
].
reset
(
new
UploadJobModel
(
this
));
}
return
m_d
->
uploadJobs
[
roomId
].
data
();
}
void
KazvIOManager::deleteUploadJob
(
const
QString
&
roomId
,
KazvIOBaseJob
*
job
)
{
m_d
->
uploadJobs
[
roomId
]
->
removeJob
(
QPointer
<
KazvIOUploadJob
>
(
qobject_cast
<
KazvIOUploadJob
*>
(
job
)));
}
void
KazvIOManager::deleteRoomlessUploadJob
(
KazvIOBaseJob
*
job
)
{
deleteUploadJob
(
ROOMLESS
,
job
);
}
void
KazvIOManager::deleteModelIfEmpty
(
const
QString
&
roomId
)
{
if
(
!
m_d
->
uploadJobs
.
contains
(
roomId
))
{
return
;
}
if
(
m_d
->
uploadJobs
[
roomId
]
->
rowCount
()
==
0
)
{
m_d
->
uploadJobs
.
remove
(
roomId
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Tue, Jun 24, 4:08 PM (1 d, 18 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
234922
Default Alt Text
kazv-io-manager.cpp (3 KB)
Attached To
Mode
rK kazv
Attached
Detach File
Event Timeline
Log In to Comment