Skip to content

Commit 7990d6e

Browse files
committed
feat: 使用队列更新cookie,避免线程冲突
1 parent 526d101 commit 7990d6e

2 files changed

Lines changed: 10 additions & 46 deletions

File tree

QCloudMusicApi/apihelper.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <QMetaMethod>
77
#include <QPluginLoader>
8+
#include <QThread>
89
#include <QUrl>
910
#include <QUrlQuery>
1011

@@ -63,7 +64,8 @@ void ApiHelper::afterInvoke(QVariantMap& ret)
6364

6465
QVariantMap ApiHelper::invoke(QString member, QVariantMap arg)
6566
{
66-
beforeInvoke(arg);
67+
auto connectionType = QThread::currentThread() == this->thread() ? Qt::DirectConnection : Qt::BlockingQueuedConnection;
68+
QMetaObject::invokeMethod(this, [&]() { beforeInvoke(arg); }, connectionType);
6769

6870
QVariantMap ret;
6971

@@ -79,12 +81,12 @@ QVariantMap ApiHelper::invoke(QString member, QVariantMap arg)
7981
}
8082
if (useNative) {
8183
QMetaObject::invokeMethod(this, member.toUtf8(),
82-
Qt::DirectConnection,
83-
Q_RETURN_ARG(QVariantMap, ret),
84-
Q_ARG(QVariantMap, arg));
84+
connectionType,
85+
Q_RETURN_ARG(QVariantMap, ret),
86+
Q_ARG(QVariantMap, arg));
8587
}
8688

87-
afterInvoke(ret);
89+
QMetaObject::invokeMethod(this, [&]() { afterInvoke(arg); }, connectionType);
8890

8991
return ret;
9092
}
@@ -102,9 +104,9 @@ QVariantMap ApiHelper::invokeUrl(QString url)
102104
arg[queryItem.first] = queryItem.second;
103105
}
104106
DEBUG << "host" << qurl.host()
105-
<< "port" << qurl.port()
106-
<< "member" << member
107-
<< "arg" << arg;
107+
<< "port" << qurl.port()
108+
<< "member" << member
109+
<< "arg" << arg;
108110
return invoke(member, arg);
109111
}
110112

QCloudMusicApi/definevaluehelper.h

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -28,42 +28,4 @@ Q_SIGNALS: \
2828
private: \
2929
type m_##valueName = defaultValue;
3030

31-
32-
#define DEFINE_VALUEADD(type, valueName, defaultValue) \
33-
Q_PROPERTY(type valueName READ READ_NAME(valueName) WRITE WRITE_NAME(valueName) NOTIFY NOTIFY_NAME(valueName)) \
34-
public: \
35-
type READ_NAME(valueName)() const { return m_##valueName; } \
36-
void WRITE_NAME(valueName)(type valueName) { \
37-
if(valueName == 0) { \
38-
return; \
39-
} \
40-
m_##valueName += valueName; \
41-
emit NOTIFY_NAME(valueName)(); \
42-
}; \
43-
void INIT_NAME(valueName)(type valueName){ \
44-
if(valueName == m_##valueName) { \
45-
return; \
46-
} \
47-
m_##valueName = valueName;\
48-
emit NOTIFY_NAME(valueName)(); \
49-
};\
50-
Q_SIGNALS: \
51-
void NOTIFY_NAME(valueName)(); \
52-
private: \
53-
type m_##valueName = defaultValue;
54-
55-
56-
#define DEFINE_VALUE_FORCE(type, valueName, defaultValue) \
57-
Q_PROPERTY(type valueName READ READ_NAME(valueName) WRITE WRITE_NAME(valueName) NOTIFY NOTIFY_NAME(valueName)) \
58-
public: \
59-
type READ_NAME(valueName)() const { return m_##valueName; } \
60-
void WRITE_NAME(valueName)(type valueName) { \
61-
m_##valueName = valueName; \
62-
emit NOTIFY_NAME(valueName)(); \
63-
} \
64-
Q_SIGNALS: \
65-
void NOTIFY_NAME(valueName)(); \
66-
private: \
67-
type m_##valueName = defaultValue;
68-
6931
#endif // DEFINEVALUEHELPER_H

0 commit comments

Comments
 (0)