ShareDirModel::ShareDirModel(QObject *parent){ QDirModel::setParent(parent); QDirModel::setFilter((QDir::AllDirs | QDir::NoDotAndDotDot)); StringPairList directories = ShareManager::getInstance()->getDirectories(); for (auto it = directories.begin(); it != directories.end(); ++it){ QString path = it->second.c_str(); if (path.endsWith(QDir::separator())) path = path.left(path.lastIndexOf(QDir::separator())); emit expandMe(index(path)); checked.insert(path); } }
int ahc_echo(void* servctx, MHD_Connection* connection, const char* url, const char* method, const char* version, const char* upload_data, size_t* upload_data_size, void** reqctx) { static int dummy; if (reqctx == NULL) { // The first time only the headers are valid, do not respond in the first round. *reqctx = &dummy; return MHD_YES; } ServerContext* pServCtx = (ServerContext*)servctx; // Not used yet printf("%s %s %s\n", method, url, version); if (strcmp(method, "GET") == 0) { if (*upload_data_size != 0) return MHD_NO; // No upload data expected in HTTP GET method // Parse headers puts("[HEADERS]"); MHD_get_connection_values(connection, MHD_HEADER_KIND, &print_out_key, NULL); // Parse GET parameters puts("[GET PARAMS]"); StringPairList spl; MHD_get_connection_values(connection, MHD_GET_ARGUMENT_KIND, &print_out_key, &spl); std::string text = "<html><body>\n"; text += "<p>URL="; text += url; text += "</p>\n<p>Parameters</p>\n<ul>\n"; for (StringPairList::iterator it = spl.begin(); it != spl.end(); ++it) { text += "<li>"; text += it->first; text += '='; text += it->second; text += "</li>\n"; } text += "</body></html>\n"; MHD_Response* response = MHD_create_response_from_buffer(text.size(), (void*)text.c_str(), MHD_RESPMEM_MUST_COPY); MHD_add_response_header(response, "Content-Type", "text/html"); int ret = MHD_queue_response(connection, MHD_HTTP_OK, response); MHD_destroy_response(response); *reqctx = NULL; // clear context pointer return ret; } else return MHD_NO; // Not supported yet }
void SettingsSharing::updateShareView(){ if (checkBox_SIMPLE_SHARE_MODE->isChecked()){ treeWidget_SIMPLE_MODE->clear(); StringPairList directories = ShareManager::getInstance()->getDirectories(); for (auto it = directories.begin(); it != directories.end(); ++it){ QTreeWidgetItem *item = new QTreeWidgetItem(treeWidget_SIMPLE_MODE); item->setText(0, it->second.c_str()); item->setText(1, it->first.c_str()); item->setText(2, Util::formatBytes(ShareManager::getInstance()->getShareSize(it->second)).c_str()); item->setText(3, QString().setNum(ShareManager::getInstance()->getShareSize(it->second))); } } label_TOTALSHARED->setText(tr("Total shared: %1") .arg(WulforUtil::formatBytes(ShareManager::getInstance()->getShareSize()))); }
LRESULT FavoriteDirsPage::onInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { PropPage::translate((HWND)(*this), texts); ctrlDirectories.Attach(GetDlgItem(IDC_FAVORITE_DIRECTORIES)); ctrlDirectories.SetExtendedListViewStyle(LVS_EX_LABELTIP | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER); // Prepare shared dir list CRect rc; ctrlDirectories.GetClientRect(rc); ctrlDirectories.InsertColumn(0, CTSTRING(FAVORITE_DIR_NAME), LVCFMT_LEFT, rc.Width()/4, 0); ctrlDirectories.InsertColumn(1, CTSTRING(DIRECTORY), LVCFMT_LEFT, rc.Width()*3 /4, 1); StringPairList directories = FavoriteManager::getInstance()->getFavoriteDirs(); for(StringPairIter j = directories.begin(); j != directories.end(); j++) { int i = ctrlDirectories.insert(ctrlDirectories.GetItemCount(), Text::toT(j->second)); ctrlDirectories.SetItemText(i, 1, Text::toT(j->first).c_str()); } return TRUE; }
FavoriteDirsPage::FavoriteDirsPage(dwt::Widget* parent) : PropPage(parent) { createDialog(IDD_FAVORITE_DIRSPAGE); setHelpId(IDH_FAVORITE_DIRSPAGE); WinUtil::setHelpIds(this, helpItems); PropPage::translate(handle(), texts); attachChild(directories, IDC_FAVORITE_DIRECTORIES); directories->setTableStyle(LVS_EX_LABELTIP | LVS_EX_FULLROWSELECT); TStringList columns; columns.push_back(T_("Favorite name")); columns.push_back(T_("Directory")); directories->createColumns(columns); directories->setColumnWidth(0, 100); directories->setColumnWidth(1, directories->getSize().x - 120); StringPairList dirs = FavoriteManager::getInstance()->getFavoriteDirs(); for(StringPairIter j = dirs.begin(); j != dirs.end(); j++) { TStringList row; row.push_back(Text::toT(j->second)); row.push_back(Text::toT(j->first)); directories->insert(row); } directories->onDblClicked(std::tr1::bind(&FavoriteDirsPage::handleDoubleClick, this)); directories->onKeyDown(std::tr1::bind(&FavoriteDirsPage::handleKeyDown, this, _1)); directories->onRaw(std::tr1::bind(&FavoriteDirsPage::handleItemChanged, this, _1, _2), dwt::Message(WM_NOTIFY, LVN_ITEMCHANGED)); onDragDrop(std::tr1::bind(&FavoriteDirsPage::handleDragDrop, this, _1)); attachChild<Button>(IDC_RENAME)->onClicked(std::tr1::bind(&FavoriteDirsPage::handleRenameClicked, this)); attachChild<Button>(IDC_REMOVE)->onClicked(std::tr1::bind(&FavoriteDirsPage::handleRemoveClicked, this)); attachChild<Button>(IDC_ADD)->onClicked(std::tr1::bind(&FavoriteDirsPage::handleAddClicked, this)); }
websocketpp::http::status_code::value FileServer::handleGetRequest(const websocketpp::http::parser::request& aRequest, string& output_, StringPairList& headers_, const SessionPtr& aSession) noexcept { const auto& requestUrl = aRequest.get_uri(); dcdebug("Requesting file %s\n", requestUrl.c_str()); // Get the disk path string filePath; try { if (requestUrl.length() >= 6 && requestUrl.compare(0, 6, "/view/") == 0) { filePath = parseViewFilePath(requestUrl.substr(6), headers_, aSession); } else { filePath = parseResourcePath(requestUrl, aRequest, headers_); } } catch (const RequestException& e) { output_ = e.what(); return e.getCode(); } auto fileSize = File::getSize(filePath); int64_t startPos = 0, endPos = fileSize - 1; auto partialContent = parsePartialRange(aRequest.get_header("Range"), startPos, endPos); // Read file try { File f(filePath, File::READ, File::OPEN); f.setPos(startPos); output_ = f.read(static_cast<size_t>(endPos) + 1); } catch (const FileException& e) { dcdebug("Failed to serve the file %s: %s\n", filePath.c_str(), e.getError().c_str()); output_ = e.getError(); return websocketpp::http::status_code::not_found; } catch (const std::bad_alloc&) { output_ = "Not enough memory on the server to serve this request"; return websocketpp::http::status_code::internal_server_error; } { const auto ext = Util::getFileExt(filePath); if (ext == ".nfo") { string encoding; // Platform-independent encoding conversion function could be added if there is more use for it #ifdef _WIN32 encoding = "CP.437"; #else encoding = "cp437"; #endif output_ = Text::toUtf8(output_, encoding); } else if (ext == ".gz" && aRequest.get_header("Accept-Encoding").find("gzip") != string::npos) { headers_.emplace_back("Content-Encoding", "gzip"); } } { // Get the mime type (but get it from the original request with gzipped content) auto usingEncoding = find_if(headers_.begin(), headers_.end(), CompareFirst<string, string>("Content-Encoding")) != headers_.end(); auto type = getMimeType(usingEncoding ? requestUrl : filePath); if (type) { headers_.emplace_back("Content-Type", type); } } if (partialContent) { headers_.emplace_back("Content-Range", formatPartialRange(startPos, endPos, fileSize)); headers_.emplace_back("Accept-Ranges", "bytes"); return websocketpp::http::status_code::partial_content; } return websocketpp::http::status_code::ok; }