~sebastien-amardeilh/yarock/1.x

« back to all changes in this revision

Viewing changes to src/networkaccess.cpp

  • Committer: sebastien amardeilh
  • Date: 2015-08-15 11:51:11 UTC
  • Revision ID: sebastien.amardeilh@gmail.com-20150815115111-zspyza3dnc1dsoz4
- add radionomy radio service (replace shoutcase)
- add cover support for all radio service
- improve radio cover management (save/restore)

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#include "config.h"
21
21
#include "debug.h"
22
22
 
23
 
const QString USER_AGENT = QString( QString(APP_NAME) + " " + QString(VERSION) );
 
23
const QString USER_AGENT = QString( QString(APP_NAME) + "/" + QString(VERSION) );
24
24
 
25
25
static QMap< QThread*, QNetworkAccessManager* > s_threadNamHash;
26
26
 
38
38
    redirectCount = 0;
39
39
 
40
40
    connectReplySignals();
41
 
 
42
41
}
43
42
 
44
43
void NetworkReply::connectReplySignals()
48
47
    connect( m_reply, SIGNAL( destroyed( QObject* ) ), SLOT( deletedByParent() ) );
49
48
}
50
49
 
 
50
 
 
51
 
51
52
void
52
53
NetworkReply::deletedByParent()
53
54
{
77
78
 
78
79
    QUrl redirection = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
79
80
    
 
81
    //Debug::debug() << Q_FUNC_INFO << " REDIRECTION " << redirection ;
 
82
    //Debug::debug() << Q_FUNC_INFO << " host() " << redirection.host() ;
 
83
    //Debug::debug() << Q_FUNC_INFO << " scheme() " << redirection.scheme() ;
 
84
    //Debug::debug() << Q_FUNC_INFO << " request url " << m_reply->request().url() ;
 
85
    
80
86
    if (redirection.isValid() && redirectCount < MAX_REDIRECTS) 
81
87
    {
82
88
        if ( m_reply->operation() == QNetworkAccessManager::GetOperation ||
83
89
             m_reply->operation() == QNetworkAccessManager::HeadOperation) 
84
 
        {
85
 
            Debug::debug() << "NETWORK start redirect";
86
 
 
87
 
            QNetworkReply *redirectReply = HTTP()->request(redirection, m_reply->operation());
 
90
        {            
 
91
            Debug::debug() << "NETWORK: Start redirect";
 
92
            // Because the redirection url can be relative, 
 
93
            // we have to use the previous one to resolve it 
 
94
            QUrl newUrl = m_reply->url().resolved(redirection);
 
95
    
 
96
            
 
97
            QNetworkReply *redirectReply = HTTP()->request(newUrl, m_reply->operation());
88
98
            setParent(redirectReply);
89
99
            m_reply->deleteLater();
90
100
            m_reply = redirectReply;
 
101
            
91
102
            connectReplySignals();
92
103
            redirectCount++;
93
104
            return;
99
110
    }
100
111
    else if (redirectCount >= MAX_REDIRECTS)
101
112
    {
 
113
      Debug::debug() << "NETWORK: Max redirection reached !";
102
114
      emit finished(m_reply);
103
115
    }
104
116
    else 
105
117
    {
106
 
      //Debug::debug() << Q_FUNC_INFO << " emit finished";
 
118
      Debug::debug() << "NETWORK: finished";
107
119
      emit finished(m_reply);
108
120
      emit data(m_reply->readAll());
109
121
    }
136
148
QNetworkRequest NetworkAccess::buildRequest(QUrl url)
137
149
{
138
150
    //Debug::debug() << Q_FUNC_INFO << url.toString();
139
 
 
 
151
    
140
152
    QNetworkRequest request(url);
141
 
    request.setRawHeader("User-Agent", USER_AGENT.toUtf8());
 
153
#if QT_VERSION < QT_VERSION_CHECK( 5, 0, 0 )
 
154
    // fix issue for radionomy website access
 
155
    if(url.toString().contains("radionomy"))
 
156
        request.setRawHeader("User-Agent", "Wget/1.16.0");
 
157
    else
 
158
        request.setRawHeader("User-Agent", USER_AGENT.toUtf8());        
 
159
#else
 
160
    request.setRawHeader("User-Agent", USER_AGENT.toUtf8());    
 
161
#endif    
142
162
    request.setRawHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
143
163
    request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
144
164
    request.setRawHeader("Accept-Language", "en-us,en;q=0.5");
145
165
    request.setRawHeader("Connection", "Keep-Alive");
146
 
    
 
166
 
147
167
    return request;
148
168
}
149
169
 
154
174
    QNetworkRequest request = buildRequest(url);
155
175
 
156
176
    QNetworkReply *networkReply;
157
 
    switch (operation) {
158
 
 
159
 
    case QNetworkAccessManager::GetOperation:
160
 
        networkReply = manager->get(request);
161
 
        Debug::debug() << "NETWORK get " << url.toString();
162
 
        break;
163
 
 
164
 
    case QNetworkAccessManager::HeadOperation:
165
 
        networkReply = manager->head(request);
166
 
        break;
167
 
 
168
 
    case QNetworkAccessManager::PostOperation:
169
 
        request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
170
 
        networkReply = manager->post(request, data);
171
 
        break;
172
 
 
173
 
    default:
174
 
        Debug::warning() << "NETWORK: Unknown operation:" << operation;
175
 
        return 0;
 
177
    switch (operation) 
 
178
    {
 
179
        case QNetworkAccessManager::GetOperation:
 
180
            networkReply = manager->get(request);
 
181
            Debug::debug() << "NETWORK: get " << url.toString();
 
182
            break;
 
183
 
 
184
        case QNetworkAccessManager::HeadOperation:
 
185
            networkReply = manager->head(request);
 
186
            break;
 
187
 
 
188
        case QNetworkAccessManager::PostOperation:
 
189
            request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
 
190
            networkReply = manager->post(request, data);
 
191
            break;
 
192
 
 
193
        default:
 
194
            Debug::warning() << "NETWORK: Unknown operation:" << operation;
 
195
            return 0;
176
196
    }
177
197
 
 
198
    /* QT4 issue with ssl handshake */
 
199
    networkReply->ignoreSslErrors();
 
200
    
178
201
    return networkReply;
179
202
}
180
203
 
231
254
        return s_threadNamHash[ QThread::currentThread() ];
232
255
    }  
233
256
}
234
 
 
235