Beispiel #1
0
UploadRequest* UploadRequest::popRequest(uint32_t client_id,
                                         uint32_t account_id,
                                         uint32_t guild_sid,
                                         uint32_t one_time_password,
                                         const std::string& gameServerName) {
	UploadRequest* ret;
	std::unordered_map<uint32_t, UploadRequest*>::iterator it;

	uv_mutex_lock(&mapLock);

	it = pendingRequests.find(client_id);
	if(it != pendingRequests.end()) {
		ret = it->second;
		if(ret->getAccountId() == account_id && ret->getGuildId() == guild_sid &&
		   ret->getOneTimePassword() == one_time_password && ret->getGameServer()->getName() == gameServerName) {
			pendingRequests.erase(it);
		} else {
			ret = nullptr;
		}
	} else {
		ret = nullptr;
	}

	uv_mutex_unlock(&mapLock);

	return ret;
}
Beispiel #2
0
void SmugMug::cancelFailedUploads()
{
	ScopedLock sl(lock);
	for (int i = 0; i < uploadQueue.size(); i++)
	{
		UploadRequest* ur = uploadQueue[i];
		for (int j = 0; j < ur->getNumImages(); j++)
		{
			UploadFile& uf = ur->getImageFileInfo(j);
			if (uf.status == UploadFile::Failed)
				uf.status = UploadFile::Cancelled;
		}
	}
}
Beispiel #3
0
void UploadRequest::removeServer(GameServerSession* server) {
	std::unordered_map<uint32_t, UploadRequest*>::const_iterator it, itEnd;

	uv_mutex_lock(&mapLock);
	for(it = pendingRequests.begin(), itEnd = pendingRequests.end(); it != itEnd;) {
		UploadRequest* client = it->second;
		if(client->getGameServer() == server) {
			it = pendingRequests.erase(it);
			delete client;
		} else {
			++it;
		}
	}
	uv_mutex_unlock(&mapLock);
}
Beispiel #4
0
void SmugMug::cancelUploads()
{
	ScopedLock sl(lock);

	for (int i = 0; i < uploadQueue.size(); i++)
	{
		UploadRequest* ur = uploadQueue[i];
		for (int j = 0; j < ur->getNumImages(); j++)
		{
			UploadFile& uf = ur->getImageFileInfo(j);
			uf.status = UploadFile::Cancelled;
		}
	}

	addLogEntry(("Info: all uploads cancelled"));
}
Beispiel #5
0
int SmugMug::getNumFailedUploads()
{
	ScopedLock sl(lock);
	int failed = 0;
	for (int i = 0; i < uploadQueue.size(); i++)
	{
		UploadRequest* ur = uploadQueue[i];
		for (int j = 0; j < ur->getNumImages(); j++)
		{
			UploadFile& uf = ur->getImageFileInfo(j);
			if (uf.status == UploadFile::Failed)
				failed++;
		}
	}
	return failed;
}
Beispiel #6
0
int64 SmugMug::getTotalBytesToUpload()
{
	ScopedLock sl(lock);
	int uploaded = 0;
	for (int i = 0; i < uploadQueue.size(); i++)
	{
		UploadRequest* ur = uploadQueue[i];
		if (!ur->getIgnore())
		{
			for (int j = 0; j < ur->getNumImages(); j++)
			{
				UploadFile& uf = ur->getImageFileInfo(j);
				if (uf.status == UploadFile::Finished || uf.status == UploadFile::Uploading || uf.status == UploadFile::Waiting)
					uploaded += uf.size;
			}
		}
	}
	return uploaded;
}
Beispiel #7
0
bool SmugMug::getNextFileToDo(int& queue, int& index)
{
	lock.enter();
	for (int i = 0; i < uploadQueue.size(); i++)
	{
		UploadRequest* ur = uploadQueue[i];
		for (int j = 0; j < ur->getNumImages(); j++)
		{
			UploadFile& uf = ur->getImageFileInfo(j);
			if (uf.status == UploadFile::Waiting)
			{
				queue = i;
				index = j;
				lock.exit();
				return true;
			}
		}
	}
	lock.exit();
	return false;
}
Beispiel #8
0
void SmugMug::reSubmitFailedUploads()
{
	ScopedLock sl(lock);

	for (int i = 0; i < uploadQueue.size(); i++)
	{
		UploadRequest* ur = uploadQueue[i];
		for (int j = 0; j < ur->getNumImages(); j++)
		{
			UploadFile& uf = ur->getImageFileInfo(j);
			if (uf.status == UploadFile::Failed)
				uf.status = UploadFile::Waiting;
		}
	}

	while (uploadThreads.size() < Settings::getInstance()->uploadThreads)
	{
		UploadThread* ut = NULL;
		uploadThreads.add(ut = new UploadThread(this));
		ut->startThread();
	}

	addLogEntry(("Info: failed uploads readded to queue"));
}
Beispiel #9
0
void UploadThread::run()
{
	while (1)
	{
		int queue = 0;
		int index = 0;
		UploadRequest* ur = NULL;
		smugMug->lock.enter();	
		bool res = smugMug->getNextFileToDo(queue, index);
		if (res)
		{
			ur = smugMug->uploadQueue[queue];
			ur->getImageFileInfo(index).status = UploadFile::Uploading;
		}
		smugMug->lock.exit();

		if (!res)
		{
			smugMug->lock.enter();
			smugMug->uploadThreads.removeFirstMatchingValue(this);
			smugMug->lock.exit();
			triggerAsyncUpdate();
			return;
		}
		SmugID id = smugMug->uploadFile(queue, index);

		ur->getImageFileInfo(index).id = id;		
		if (ur->getOpenBrowser())
		{
			bool done = true;
			String url;
			for (int i = 0; i < ur->getNumImages(); i++)
			{
				UploadFile& uf = ur->getImageFileInfo(i);
				if (uf.status == UploadFile::Waiting || uf.status == UploadFile::Uploading)
				{
					done = false;
					break;
				}
				else if (url.isEmpty())
				{
					url = uf.url;
				}
			}
			if (done && url.isNotEmpty())
			{
				URL(url).launchInDefaultBrowser();
			}
		}
	}
}
Beispiel #10
0
void UploadWindow::filesDropped(const StringArray& filenames, int mouseX, int mouseY)
{
	StringArray extensions;
	extensions.addTokens(".jpg;.jpeg;.jpe;.png;.tif;.tiff;.png;.gif;.mpg;.mpeg;.mpe;.mov;.qt;.avi;.wmv", ";", "");

	UploadRequest* ur = new UploadRequest();
	for (int i = 0; i < filenames.size(); i++)
	{
		File imageFile(File::getCurrentWorkingDirectory().getChildFile (filenames[i]));
        
		if (imageFile.existsAsFile() && extensions.contains(imageFile.getFileExtension(), true))
		{
			ur->addImageFile(imageFile);
		}
		else if (imageFile.isDirectory())
		{
			Array<File> results;			
			imageFile.findChildFiles(results, File::findFiles, true);

			for (int i = 0; i < results.size(); i++)
			{
				if (extensions.contains(results[i].getFileExtension(), true))
					ur->addImageFile(results[i]);
			}
		}
	}

	if (ur->getNumImages() > 0)
	{
		Settings* settings = Settings::getInstance();
		if (settings->password.isEmpty() || settings->email.isEmpty())
			settings->showSettingsDialog();

		if (settings->password.isEmpty() || settings->email.isEmpty())
			return;

		if (!smugMug.isLoggedIn())
			smugMug.login(Settings::getInstance()->email, Settings::getInstance()->password);

		if (!smugMug.isLoggedIn())
		{
			AlertWindow::showMessageBox(AlertWindow::WarningIcon, "Komodo Drop", "Error: Unable to connect to Smugmug.");
			return;
		}

		String defaultAlbumName;
		File root(filenames[0]);
		if (filenames.size() == 1 && root.isDirectory())
			defaultAlbumName = root.getFileName();
		else 
			defaultAlbumName = root.getParentDirectory().getFileName();

#ifdef JUCE_DEBUG
		defaultAlbumName = defaultAlbumName.replaceCharacter('_', ' ');
#endif

		SmugID albumId;
		bool open = false;
		if (Settings::getInstance()->silentUpload)
		{
			OwnedArray<Album> albums;
			smugMug.getAlbumList(albums);
			
			for (int i = 0; i < albums.size(); i++)
			{
				if (albums[i]->title == defaultAlbumName)
				{
					albumId = albums[i]->id;
					break;
				}
			}
			if (albumId.id == -1)
			{
				StringPairArray params;
				albumId = smugMug.createAlbum(defaultAlbumName, 0, params);
			}
			ur->setName(defaultAlbumName);
		}
		else
		{
			bool newAlbum;
			int catId;
			String title;
			StringPairArray params;

			UploadDialog* ud = new UploadDialog(&smugMug, defaultAlbumName, newAlbum, title, albumId, catId, params, open);
			if (ud->runModalLoop() == 1)
			{
				ur->setName(title);
				if (newAlbum)
					albumId = smugMug.createAlbum(title, catId, params);
			}
			else
			{
				return;
			}
		}

		if (albumId.id != -1)
		{
			ur->setOpenBrowser(open);
			ur->setAlbumId(albumId);
			smugMug.uploadImages(ur);
			startTimer(333);
			repaint();
		}
		else
		{
			delete ur;
		}
	}
	else
	{
		delete ur;
	}
	return;
}
Beispiel #11
0
	void paintItem (Graphics& g, int width, int height)
	{
		g.setColour(Colours::black);
		UploadRequest* ur = sm->getUploadQueue()[idx];
		g.drawText(ur->getName(), 0, 0, width, height, Justification::centredLeft, true);
	}