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;
}
Example #4
0
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;
}
Example #5
0
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;
}