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()); } }
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; } }
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 }
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; }
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)); } }
void Subtitles::Subtitle::dump(void) const { MLIB_D(_C("%1: '%2'", time, text)); }