static gboolean soundmenu_lastfm_connect_idle (gpointer data) { SoundmenuLastfm *lastfm = data; if (g_str_empty0(lastfm->lastfm_user) || g_str_empty0(lastfm->lastfm_pass)) return FALSE; lastfm->session_id = LASTFM_init(LASTFM_API_KEY, LASTFM_SECRET); if (lastfm->session_id != NULL) { lastfm->status = LASTFM_login (lastfm->session_id, lastfm->lastfm_user, lastfm->lastfm_pass); if (lastfm->status != LASTFM_STATUS_OK) { LASTFM_dinit(lastfm->session_id); lastfm->session_id = NULL; } } soundmenu_update_lastfm_menu (lastfm); return FALSE; }
void lastfm_track_unlove_action (GtkWidget *widget, SoundmenuPlugin *soundmenu) { Mpris2Metadata *metadata = NULL; SoundmenuLastfm *lastfm = NULL; LastfmData *data = NULL; if (mpris2_client_get_playback_status (soundmenu->mpris2) == STOPPED) return; lastfm = soundmenu->clastfm; if (lastfm->status != LASTFM_STATUS_OK) { g_critical("No connection Last.fm has been established."); return; } metadata = mpris2_client_get_metadata (soundmenu->mpris2); if (g_str_empty0(mpris2_metadata_get_artist(metadata)) || g_str_empty0(mpris2_metadata_get_title(metadata))) return; data = soundmenu_lastfm_data_new (soundmenu, metadata, 0); set_watch_cursor (GTK_WIDGET(soundmenu->plugin)); soundmenu_async_launch(do_lastfm_current_song_unlove, soundmenu_async_set_idle_message, data); }
void soundmenu_update_playback_lastfm (SoundmenuPlugin *soundmenu) { Mpris2Metadata *metadata = NULL; LastfmData *data1 = NULL, *data2 = NULL; gint length, delay_time; time_t started_t; SoundmenuLastfm *lastfm = soundmenu->clastfm; if (lastfm->scroble_handler_id) { g_source_remove (lastfm->scroble_handler_id); lastfm->scroble_handler_id = 0; } if (lastfm->update_handler_id) { g_source_remove (lastfm->update_handler_id); lastfm->update_handler_id = 0; } if (mpris2_client_get_playback_status (soundmenu->mpris2) != PLAYING) return; if (lastfm->status != LASTFM_STATUS_OK) return; metadata = mpris2_client_get_metadata (soundmenu->mpris2); if (g_str_empty0(mpris2_metadata_get_artist(metadata)) || g_str_empty0(mpris2_metadata_get_album(metadata))) return; length = mpris2_metadata_get_length (metadata); if (length < 30) return; time (&started_t); data1 = soundmenu_lastfm_data_new (soundmenu, metadata, started_t); lastfm->update_handler_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, WAIT_UPDATE, soundmenu_lastfm_now_playing_handler, data1, NULL); data2 = soundmenu_lastfm_data_new (soundmenu, metadata, started_t); delay_time = ((length / 2) > 240) ? 240 : (length / 2); lastfm->scroble_handler_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, delay_time, soundmenu_lastfm_scrobble_handler, data2, NULL); }
static void gb_source_view_update_search (GbSourceView *view) { GbSourceViewPrivate *priv; GRegexCompileFlags flags = 0; GtkTextBuffer *buffer; GtkTextIter begin; GtkTextIter end; GMatchInfo *match_info = NULL; GtkTextTag *search_tag; gboolean has_matches = FALSE; GRegex *regex = NULL; gchar *text; gchar *escaped; g_assert(GB_IS_SOURCE_VIEW(view)); priv = view->priv; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); gtk_text_buffer_get_bounds(buffer, &begin, &end); search_tag = gb_source_view_ref_search_tag(view); gtk_text_buffer_remove_tag(buffer, search_tag, &begin, &end); if (g_str_empty0(priv->search_text) && !priv->search_regex) { goto cleanup; } if (priv->search_text) { if (!priv->search_case_sensitive) { flags = G_REGEX_CASELESS; } escaped = g_regex_escape_string(priv->search_text, -1); regex = g_regex_new(escaped, flags, 0, NULL); g_free(escaped); } else if (priv->search_regex) { regex = g_regex_ref(priv->search_regex); } if (regex) { text = gtk_text_buffer_get_text(buffer, &begin, &end, TRUE); if (g_regex_match(regex, text, 0, &match_info)) { guint count; guint i; gint begin_pos; gint end_pos; do { count = g_match_info_get_match_count(match_info); for (i = 0; i < count; i++) { if (g_match_info_fetch_pos(match_info, i, &begin_pos, &end_pos)) { gtk_text_buffer_get_iter_at_offset(buffer, &begin, begin_pos); gtk_text_buffer_get_iter_at_offset(buffer, &end, end_pos); gtk_text_buffer_apply_tag(buffer, search_tag, &begin, &end); has_matches = TRUE; } } } while (g_match_info_next(match_info, NULL)); } g_match_info_free(match_info); g_regex_unref(regex); g_free(text); } cleanup: if (priv->has_matches != has_matches) { priv->has_matches = has_matches; g_object_notify_by_pspec(G_OBJECT(view), gParamSpecs[PROP_HAS_MATCHES]); } gtk_widget_queue_draw(GTK_WIDGET(view)); g_object_unref(search_tag); }