Ejemplo n.º 1
0
QLocale get_system_locale(void)
{
	QLocale locale = QLocale::system();

#ifdef Q_OS_UNIX
	// Qt's locale detection under UNIX works wrong -->
	{
		QMap<QString,QString> env_vars;

		Q_FOREACH(const QString& var, QProcess::systemEnvironment())
		{
			int pos = var.indexOf('=');
			QString name = var.mid(0, pos);
			QString value = var.mid(pos + 1);
			env_vars[name] = value;
			MLIB_DV("Gotten an environment variable: '%1'='%2'.", name, value);
		}

		if(!env_vars["LC_ALL"].isEmpty())
		{
			locale = QLocale(env_vars["LC_ALL"]);
			MLIB_D("Setting the locale to LC_ALL's value '%1'.", locale.name());
		}
		else if(!env_vars["LC_MESSAGES"].isEmpty())
		{
			locale = QLocale(env_vars["LC_MESSAGES"]);
			MLIB_D("Setting the locale to LC_MESSAGES's value '%1'.", locale.name());
		}
		else if(!env_vars["LANG"].isEmpty())
		{
			locale = QLocale(env_vars["LANG"]);
			MLIB_D("Setting the locale to LANG's value '%1'.", locale.name());
		}
	}
Ejemplo n.º 2
0
QByteArray Subtitles_parser::find_codec_for(const QByteArray& data, const QString& language) const
{
	MLIB_D("Finding suitable text codec...");

	QByteArray best_codec = QTextCodec::codecForLocale()->name();
	QList<const char*> language_codecs;

	if(language == "ru")
	{
		language_codecs << "Windows-1251";
		language_codecs << "KOI8-R";
	}

	Q_FOREACH(const char* codec_name, language_codecs)
	{
		MLIB_D("Trying %1...", codec_name);

		QTextCodec* codec = QTextCodec::codecForName(codec_name);

		if(!codec)
		{
			MLIB_SW(tr("Unable to load text codec %1."), codec_name);
			continue;
		}

		QTextCodec::ConverterState state;
		codec->toUnicode(data.data(), data.size(), &state);

		if(!state.invalidChars)
		{
			best_codec = codec_name;
			break;
		}
	}
Ejemplo n.º 3
0
void Get_feed_list::process_current_state(void)
{
	MLIB_D("Getting Google Reader's %1 list...", this->state_list_name());

	#if GROV_OFFLINE_DEVELOPMENT
		QFile list(this->state_list_name() + ".list");

		if(list.open(QIODevice::ReadOnly))
			this->request_finished(NULL, "", list.readAll());
		else
			this->request_finished(NULL, _F("Error while reading '%1'.", list.fileName()), "");
	#else
		QString url;

		switch(this->state)
		{
			case STATE_GETTING_TAG_LIST:
			case STATE_GETTING_STREAM_PREFERENCE_LIST:
			case STATE_GETTING_SUBSCRIPTION_LIST:
				url = "https://www.google.com/reader/api/0/" + this->state_list_name() + "/list";
				break;

			default:
				this->failed(tr("Logical error."));
				return;
				break;
		}

		this->get( url + "?output=xml&client=" + QUrl::toPercentEncoding(get_user_agent()) );
	#endif
}
Ejemplo n.º 4
0
bool Main_window::on_window_state_changed_callback(const GdkEventWindowState* state)
{
	MLIB_D(_C(
		"Window state has been changed to %1 (%2).",
		state->new_window_state, state->changed_mask)
	);

	if(state->changed_mask & GDK_WINDOW_STATE_ICONIFIED)
	{
		// Сохраняем текущее состояние окна
		this->gui->iconified = state->new_window_state & GDK_WINDOW_STATE_ICONIFIED;

		// Если окно свернули, то скрываем окно в трей, если этого требуют
		// настройки. При восстановлении окна всегда отображаем его - настройки
		// могли поменяться, пока оно было свернуто.
		if(
			!this->gui->iconified ||
			( get_client_settings().gui.show_tray_icon && get_client_settings().gui.minimize_to_tray )
		)
			this->set_visible_in_wm(!this->gui->iconified);

		if(!this->gui->iconified)
			this->update_gui(false);
	}

	return true;
}
Ejemplo n.º 5
0
void Get_feed_list::request_finished(QNetworkReply* reply, const QString& error, const QByteArray& data)
{
	MLIB_D("Google Reader's %1 list request finished.", this->state_list_name());

	try
	{
		try
		{
			// Checking for errors -->
				if(this->throw_if_fatal_error(error))
				{
					MLIB_D("Request failed. Trying again...");
					this->process_current_state();
					return;
				}
			// Checking for errors <--

		#if GROV_DEVELOP_MODE && !GROV_OFFLINE_DEVELOPMENT
			// For offline development -->
			{
				QFile list(this->state_list_name() + ".list");
				list.open(QIODevice::WriteOnly);
				list.write(data);
			}
			// For offline development <--
		#endif

			// Parsing the list -->
				try
				{
					switch(this->state)
					{
						case STATE_GETTING_TAG_LIST:
							this->label_sort_ids = Gr_xml_parser().tag_list(data);
							break;

						case STATE_GETTING_STREAM_PREFERENCE_LIST:
							this->orderings = Gr_xml_parser().stream_preference_list(data);
							break;

						case STATE_GETTING_SUBSCRIPTION_LIST:
							this->feeds = Gr_xml_parser().subscription_list(data);
							break;

						default:
							M_THROW(tr("Logical error."));
							break;
					}
				}
				catch(m::Exception& e)
				{
					M_THROW(PAM( tr("Parsing error."), EE(e) ));
				}
			// Parsing the list <--
		}
		catch(m::Exception& e)
		{
			M_THROW(PAM( _F(tr("Unable to get Google Reader's %1 list."), state_list_name()), EE(e) ));
		}

		// Changing the current state -->
			switch(this->state)
			{
				case STATE_GETTING_TAG_LIST:
				case STATE_GETTING_STREAM_PREFERENCE_LIST:
					this->reset_fails();
					this->state = static_cast<State>(this->state + 1);;
					this->process_current_state();
					break;

				case STATE_GETTING_SUBSCRIPTION_LIST:
				{
					// Throws m::Exception
					this->storage->add_feeds(this->label_sort_ids, this->feeds, this->orderings);

					this->finish();
					emit this->feeds_gotten();
				}
				break;

				default:
					M_THROW(tr("Logical error."));
					break;
			}
		// Changing the current state <--
	}
	catch(m::Exception& e)
	{
		this->failed(EE(e));
	}
}
Ejemplo n.º 6
0
	void Subtitles::Subtitle::dump(void) const
	{
		MLIB_D(_C("%1: '%2'", time, text));
	}