]> git.sur5r.net Git - minitube/blob - src/global.h
2285b17351f491ecca9bad2d3850445ce34df5b3
[minitube] / src / global.h
1 #ifndef GLOBAL_H
2 #define GLOBAL_H
3
4 #include <QtGui>
5 #include <QStringList>
6 #include <QNetworkProxy>
7 #include <QNetworkAccessManager>
8 #include <QNetworkProxyFactory>
9 #include <cstdlib>
10 #include "networkaccess.h"
11
12 namespace The {
13
14     static QMap<QString, QAction*> *g_actions = 0;
15
16     QMap<QString, QAction*>* globalActions() {
17         if (!g_actions)
18             g_actions = new QMap<QString, QAction*>;
19         return g_actions;
20     }
21
22     static QMap<QString, QMenu*> *g_menus = 0;
23
24     QMap<QString, QMenu*>* globalMenus() {
25         if (!g_menus)
26             g_menus = new QMap<QString, QMenu*>;
27         return g_menus;
28     }
29
30     void maybeSetSystemProxy() {
31
32         QNetworkProxyQuery proxyQuery(QUrl("http://www"));
33         proxyQuery.setProtocolTag("http");
34         QList<QNetworkProxy> proxylist = QNetworkProxyFactory::systemProxyForQuery(proxyQuery);
35
36         for (int i = 0; i < proxylist.count(); i++) {
37             QNetworkProxy proxy = proxylist.at(i);
38
39             /*
40             qDebug() << i << " type:"<< proxy.type();
41             qDebug() << i << " host:" << proxy.hostName();
42             qDebug() << i << " port:" << proxy.port();
43             qDebug() << i << " user:" << proxy.user();
44             qDebug() << i << " pass:" << proxy.password();
45             */
46
47             if (!proxy.hostName().isEmpty()) {
48                 qDebug() << "Using proxy:" << proxy.hostName() << proxy.port();
49                 QNetworkProxy::setApplicationProxy(proxy);
50                 return;
51             }
52         }
53     }
54
55     void networkHttpProxySetting() {
56         char *http_proxy_env;
57         http_proxy_env = std::getenv("http_proxy");
58         if (!http_proxy_env) {
59             http_proxy_env = std::getenv("HTTP_PROXY");
60         }
61
62         if (http_proxy_env) {
63             QString proxy_host = "";
64             QString proxy_port = "";
65             QString proxy_user = "";
66             QString proxy_pass = "";
67             QString http_proxy = QString(http_proxy_env);
68             http_proxy.remove(QRegExp("^http://"));
69
70             // Remove trailing slash, if any
71             // Fix by Eduardo Suarez-Santana
72             http_proxy.remove(QRegExp("/$"));
73
74             // parse username and password
75             if (http_proxy.contains(QChar('@'))) {
76                 QStringList http_proxy_list = http_proxy.split(QChar('@'));
77                 QStringList http_proxy_user_pass = http_proxy_list[0].split(QChar(':'));
78                 if (http_proxy_user_pass.size() > 0) {
79                     proxy_user = QUrl::fromPercentEncoding(http_proxy_user_pass[0].toUtf8());
80                 }
81                 if (http_proxy_user_pass.size() == 2) {
82                     proxy_pass = QUrl::fromPercentEncoding(http_proxy_user_pass[1].toUtf8());
83                 }
84                 if (http_proxy_list.size() > 1) {
85                     http_proxy = http_proxy_list[1];
86                 }
87             }
88
89             // parse hostname and port
90             QStringList http_proxy_list = http_proxy.split(QChar(':'));
91             if (http_proxy_list.size() > 0) {
92                 proxy_host = http_proxy_list[0];
93             }
94             if (http_proxy_list.size() > 1) {
95                 proxy_port = http_proxy_list[1];
96             }
97
98             /*
99             qDebug() << "proxy_host: " << proxy_host;
100             qDebug() << "proxy_port: " << proxy_port;
101             qDebug() << "proxy_user: " << proxy_user;
102             qDebug() << "proxy_pass: " << proxy_pass;
103             */
104
105             // set proxy setting
106             if (!proxy_host.isEmpty()) {
107                 QNetworkProxy proxy;
108                 proxy.setType(QNetworkProxy::HttpProxy);
109                 proxy.setHostName(proxy_host);
110                 if (!proxy_port.isEmpty()) {
111                     proxy.setPort(proxy_port.toUShort());
112                 }
113                 if (!proxy_user.isEmpty()) {
114                     proxy.setUser(proxy_user);
115                 }
116                 if (!proxy_pass.isEmpty()) {
117                     proxy.setPassword(proxy_pass);
118                 }
119
120                 qDebug() << "Using HTTP proxy:" << http_proxy_env;
121                 QNetworkProxy::setApplicationProxy(proxy);
122             }
123         }
124     }
125
126     static QNetworkAccessManager *nam = 0;
127
128     QNetworkAccessManager* networkAccessManager() {
129         if (!nam) {
130             networkHttpProxySetting();
131             maybeSetSystemProxy();
132             nam = new QNetworkAccessManager();
133         }
134         return nam;
135     }
136
137     static NetworkAccess *g_http = 0;
138     NetworkAccess* http() {
139         if (!g_http) {
140             // qDebug() << "Creating NetworkAccess";
141             g_http = new NetworkAccess();
142         }
143         return g_http;
144     }
145
146 }
147
148 #endif // GLOBAL_H