bool CFloatingWindow::OnQueueFinished(CFileQueueUploader*) { m_bIsUploading = false; bool usedDirectLink = true; if ( uploadType_ == utImage ) { CString url; if ((Settings.UseDirectLinks || lastUploadedItem_.fileListItem.downloadUrl.empty()) && !lastUploadedItem_.fileListItem.imageUrl.empty() ) url = Utf8ToWstring(lastUploadedItem_.fileListItem.imageUrl).c_str(); else if ((!Settings.UseDirectLinks || lastUploadedItem_.fileListItem.imageUrl.empty()) && !lastUploadedItem_.fileListItem.downloadUrl.empty() ) { url = Utf8ToWstring(lastUploadedItem_.fileListItem.downloadUrl).c_str(); usedDirectLink = false; } if (url.IsEmpty()) { ShowBaloonTip(TR("Не удалось загрузить снимок :("), _T("Image Uploader")); return true; } CHistoryManager* mgr = ZBase::get()->historyManager(); std_tr::shared_ptr<CHistorySession> session = mgr->newSession(); HistoryItem hi; hi.localFilePath = source_file_name_; hi.serverName = server_name_; hi.directUrl = (lastUploadedItem_.fileListItem.imageUrl); hi.thumbUrl = (lastUploadedItem_.fileListItem.thumbUrl); hi.viewUrl = (lastUploadedItem_.fileListItem.downloadUrl); hi.uploadFileSize = lastUploadedItem_.fileListItem.fileSize; // IuCoreUtils::getFileSize(WCstringToUtf8(ImageFileName)); session->AddItem(hi); if ( Settings.TrayIconSettings.ShortenLinks ) { std_tr::shared_ptr<UrlShorteningTask> task(new UrlShorteningTask(WCstringToUtf8(url))); CUploadEngineData *ue = Settings.urlShorteningServer.uploadEngineData(); if ( !ue ) { ShowImageUploadedMessage(url); return false; } CAbstractUploadEngine * e = _EngineList->getUploadEngine(ue,Settings.urlShorteningServer.serverSettings()); if ( !e ) { ShowImageUploadedMessage(url); return false; } e->setUploadData(ue); ServerSettingsStruct& settings = Settings.urlShorteningServer.serverSettings(); e->setServerSettings(settings); e->setUploadData(ue); uploadType_ = utShorteningImageUrl; UploadTaskUserData* uploadTaskUserData = new UploadTaskUserData; uploadTaskUserData->linkTypeToShorten = usedDirectLink ? _T("ImageUrl") : _T("DownloadUrl"); m_FileQueueUploader->AddUploadTask(task, reinterpret_cast<UploadTaskUserData*>(uploadTaskUserData), e); m_FileQueueUploader->start(); } else { ShowImageUploadedMessage(url); } } return true; }
FILE * fopen_utf8(const char * filename, const char * mode) { #ifdef _WIN32 return _wfopen(Utf8ToWstring(filename).c_str(), Utf8ToWstring(mode).c_str()); #else return fopen(Utf8ToSystemLocale(filename).c_str(), mode); #endif }
CUrlListItem fromHistoryItem(HistoryItem historyItem) { CUrlListItem it; it.ImageUrl = Utf8ToWstring(historyItem.directUrl).c_str(); it.ThumbUrl = Utf8ToWstring(historyItem.thumbUrl).c_str(); it.DownloadUrl = Utf8ToWstring(historyItem.viewUrl).c_str(); return it; }
bool CFileDownloader::getNextJob(DownloadFileListItem& item) { bool result = false; m_CS.Lock(); if (!m_fileList.empty() && !m_NeedStop) { item = *m_fileList.begin(); std::string url; url = item.url; m_fileList.erase(m_fileList.begin()); std::string ext = IuCoreUtils::ExtractFileExt(url); std::string fileName = IuCoreUtils::ExtractFileName(url); CString wFileName = GetUniqFileName(IuCommonFunctions::IUTempFolder + Utf8ToWstring(fileName.c_str()).c_str()); std::string filePath = WCstringToUtf8(wFileName); // Creating file FILE* f = _tfopen(wFileName, L"wb"); if (f) fclose(f); item.fileName = filePath; result = true; } m_CS.Unlock(); return result; }
void DebugMessage(const std::string& msg, bool isResponseBody) { if (!isResponseBody) MessageBox(0, Utf8ToWCstring(msg.c_str()), _T("Uploader"), MB_ICONINFORMATION); else { CTextViewDlg TextViewDlg(Utf8ToWstring(msg).c_str(), CString(_T("Server reponse")), CString(_T("Server reponse:")), _T("Save to file?")); if (TextViewDlg.DoModal(GetActiveWindow()) == IDOK) { CFileDialog fd(false, 0, 0, 4 | 2, _T("*.*\0*.*\0\0"), GetActiveWindow()); lstrcpy(fd.m_szFileName, _T("file.html")); if (fd.DoModal() == IDOK) { FILE* f = _tfopen(fd.m_szFileName, _T("wb")); if (f) { // WORD BOM = 0xFEFF; // fwrite(&BOM, sizeof(BOM),1,f); fwrite(msg.c_str(), msg.size(), sizeof(char), f); fclose(f); } } } } }
std::string Utf8ToSystemLocale(const Utf8String& str) { std::wstring wideStr = Utf8ToWstring(str); std::locale const oloc = std::locale (""); std::string out; std::codecvt_base::result r = fromWstring (wideStr, oloc, out); return out; }
bool FileExists(const Utf8String& fileName) { #ifdef WIN32 if(GetFileAttributes(Utf8ToWstring(fileName).c_str())== (unsigned long)-1) return false; #else if(getFileSize(fileName) == -1) return false; // TODO #endif return true; }
int64_t getFileSize(Utf8String utf8Filename) { #ifdef _WIN32 #ifdef _MSC_VER _stat64 stats; #else _stati64 stats; #endif _wstati64(Utf8ToWstring(utf8Filename).c_str(), &stats); #else struct stat64 stats; std::string path = Utf8ToSystemLocale(utf8Filename); if(-1 == stat64(path.c_str(), &stats)) { return -1; } #endif return stats.st_size; }
LRESULT CFloatingWindow::OnShortenUrlClipboard(WORD wNotifyCode, WORD wID, HWND hWndCtl) { if ( m_FileQueueUploader && m_FileQueueUploader->IsRunning() ) { return false; } delete m_FileQueueUploader; m_FileQueueUploader = new CFileQueueUploader; m_FileQueueUploader->setCallback(this); CString url; WinUtils::GetClipboardText(url); if ( !url.IsEmpty() && !WebUtils::DoesTextLookLikeUrl(url) ) { return false; } std_tr::shared_ptr<UrlShorteningTask> task(new UrlShorteningTask(WCstringToUtf8(url))); CUploadEngineData *ue = Settings.urlShorteningServer.uploadEngineData(); CAbstractUploadEngine * e = _EngineList->getUploadEngine(ue, Settings.urlShorteningServer.serverSettings()); if ( !e ) { return false; } e->setUploadData(ue); ServerSettingsStruct& settings = Settings.urlShorteningServer.serverSettings(); e->setServerSettings(settings); e->setUploadData(ue); uploadType_ = utUrl; m_FileQueueUploader->AddUploadTask(task, 0, e); m_FileQueueUploader->start(); CString msg; msg.Format(TR("Cокращаю ссылку \"%s\" с помощью %s"), (LPCTSTR)url, (LPCTSTR)Utf8ToWstring(ue->Name).c_str()); ShowBaloonTip(msg, _T("Image Uploader")); return 0; }
void CFloatingWindow::UploadScreenshot(const CString& realName, const CString& displayName) { delete m_FileQueueUploader; m_FileQueueUploader = 0; lastUploadedItem_.fileListItem = CFileQueueUploader::FileListItem(); lastUploadedItem_.imageUrlShortened.Empty(); lastUploadedItem_.downloadUrlShortened.Empty(); m_FileQueueUploader = new CFileQueueUploader(); m_FileQueueUploader->setCallback(this); ServerProfile &serverProfile = Settings.quickScreenshotServer; CUploadEngineData* engineData = serverProfile.uploadEngineData(); if (!engineData) engineData = _EngineList->byIndex(_EngineList->getRandomImageServer()); if (!engineData) return; CImageConverter imageConverter; Thumbnail thumb; CString templateName = Settings.quickScreenshotServer.getImageUploadParams().getThumb().TemplateName; if ( templateName.IsEmpty() ) { templateName = _T("default"); } CString thumbTemplateFileName = IuCommonFunctions::GetDataFolder() + _T("\\Thumbnails\\") + templateName + _T(".xml"); if (!thumb.LoadFromFile(WCstringToUtf8(thumbTemplateFileName))) { WriteLog(logError, _T("CFloatingWindow"), TR("Не могу загрузить файл миниатюры!")+CString(_T("\r\n")) + thumbTemplateFileName); return; } imageConverter.setEnableProcessing(Settings.quickScreenshotServer.getImageUploadParams().ProcessImages); imageConverter.setImageConvertingParams(Settings.ConvertProfiles[Settings.quickScreenshotServer.getImageUploadParams().ImageProfileName]); imageConverter.setThumbCreatingParams(Settings.quickScreenshotServer.getImageUploadParams().getThumb()); bool GenThumbs = Settings.quickScreenshotServer.getImageUploadParams().CreateThumbs && ((!Settings.quickScreenshotServer.getImageUploadParams().UseServerThumbs) || (!engineData->SupportThumbnails)); imageConverter.setThumbnail(&thumb); imageConverter.setGenerateThumb(GenThumbs); imageConverter.Convert(realName); CAbstractUploadEngine* engine = _EngineList->getUploadEngine(engineData, serverProfile.serverSettings()); if (!engine) return; m_FileQueueUploader->setUploadSettings(engine); source_file_name_ = WCstringToUtf8(realName); server_name_ = engineData->Name; std::string utf8FileName = WCstringToUtf8(imageConverter.getImageFileName()); lastUploadedItem_.fileListItem.fileSize = IuCoreUtils::getFileSize(utf8FileName); m_FileQueueUploader->AddFile(utf8FileName, WCstringToUtf8(displayName), 0, engine); CString thumbFileName = imageConverter.getThumbFileName(); if (!thumbFileName.IsEmpty()) m_FileQueueUploader->AddFile(WCstringToUtf8(thumbFileName), WCstringToUtf8(thumbFileName), reinterpret_cast<void*>(1), engine); m_bIsUploading = true; uploadType_ = utImage; m_FileQueueUploader->start(); CString msg; msg.Format(TR("Идет загрузка \"%s\" на сервер %s"), (LPCTSTR) GetOnlyFileName(displayName), (LPCTSTR)Utf8ToWstring(engineData->Name).c_str()); ShowBaloonTip(msg, TR("Загрузка снимка")); }
LRESULT CFloatingWindow::OnTrayIcon(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { if (!EnableClicks ) return 0; if (LOWORD(lParam) == WM_LBUTTONDOWN) { m_bStopCapturingWindows = true; } if (LOWORD(lParam) == WM_MOUSEMOVE) { if (!m_bStopCapturingWindows) { HWND wnd = GetForegroundWindow(); if (wnd != m_hWnd) m_PrevActiveWindow = GetForegroundWindow(); } } if (LOWORD(lParam) == WM_RBUTTONUP) { if (m_bIsUploading && Settings.Hotkeys[Settings.TrayIconSettings.RightClickCommand].commandId != IDM_CONTEXTMENU) return 0; SendMessage(WM_COMMAND, MAKEWPARAM(Settings.Hotkeys[Settings.TrayIconSettings.RightClickCommand].commandId, 0)); } else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) { EnableClicks = false; KillTimer(1); SetTimer(2, GetDoubleClickTime()); if (m_bIsUploading && Settings.Hotkeys[Settings.TrayIconSettings.LeftDoubleClickCommand].commandId != IDM_CONTEXTMENU) return 0; SendMessage(WM_COMMAND, MAKEWPARAM(Settings.Hotkeys[Settings.TrayIconSettings.LeftDoubleClickCommand].commandId, 0)); } else if (LOWORD(lParam) == WM_LBUTTONUP) { m_bStopCapturingWindows = false; if (m_bIsUploading && Settings.Hotkeys[Settings.TrayIconSettings.LeftDoubleClickCommand].commandId != IDM_CONTEXTMENU) return 0; if (!Settings.Hotkeys[Settings.TrayIconSettings.LeftDoubleClickCommand].commandId) SendMessage(WM_COMMAND, MAKEWPARAM(Settings.Hotkeys[Settings.TrayIconSettings.LeftClickCommand].commandId, 0)); else SetTimer(1, (UINT) (1.2 * GetDoubleClickTime())); } else if (LOWORD(lParam) == WM_MBUTTONUP) { if (m_bIsUploading && Settings.Hotkeys[Settings.TrayIconSettings.MiddleClickCommand].commandId != IDM_CONTEXTMENU) return 0; SendMessage(WM_COMMAND, MAKEWPARAM(Settings.Hotkeys[Settings.TrayIconSettings.MiddleClickCommand].commandId, 0)); } else if (LOWORD(lParam) == NIN_BALLOONUSERCLICK) { CAtlArray<CUrlListItem> items; CUrlListItem it; it.ImageUrl = Utf8ToWstring(lastUploadedItem_.fileListItem.imageUrl).c_str(); it.ImageUrlShortened = lastUploadedItem_.imageUrlShortened; it.ThumbUrl = Utf8ToWstring(lastUploadedItem_.fileListItem.thumbUrl).c_str(); it.DownloadUrl = Utf8ToWstring(lastUploadedItem_.fileListItem.downloadUrl).c_str(); it.DownloadUrlShortened = lastUploadedItem_.downloadUrlShortened; items.Add(it); if (it.ImageUrl.IsEmpty() && it.DownloadUrl.IsEmpty()) return 0; CResultsWindow rp( pWizardDlg, items, false); rp.DoModal(m_hWnd); } return 0; }