/** * ly_aud_play: * * Set pipeline to be PLAYING. * * Returns: TRUE for success, others FALSE. */ gboolean ly_aud_play() { LyMdhMetadata *md=ly_pqm_get_current_md(); if(!md) return FALSE; GstElement *play=ly_ppl_get_playbin(); if(!play) return FALSE; GstState state; state=ly_aud_get_state(); if(state!=GST_STATE_PAUSED) { g_object_set(G_OBJECT(play),"uri",md->uri,NULL); if(!gst_element_set_state(play,GST_STATE_PLAYING)) { ly_mbs_put("file_missed", "core:aud", NULL); return FALSE; } if(md->flag==1) //cue play { g_usleep(0.1*G_USEC_PER_SEC); ly_aud_set_position(0); } } else { if(!gst_element_set_state(play,GST_STATE_PLAYING)) { ly_mbs_put("file_missed", "core:aud", NULL); return FALSE; } } ly_mbs_put("play", "core:aud", NULL); return TRUE; }
gpointer ly_3dnc_lrc_down(gpointer data) { if(g_str_equal((gchar *)data, "")) { g_mutex_unlock(ly_3dnc_lrc_mutex); ly_dbg_warning(_("Illegal url adress!")); return NULL; } char* path=NULL; LyMdhMetadata *md=ly_mdh_new(); g_strlcpy(md->title, ly_3dnc_lrc_title, sizeof(md->title)); g_strlcpy(md->artist, ly_3dnc_lrc_artist, sizeof(md->artist)); g_strlcpy(md->start, ly_3dnc_lrc_start, sizeof(md->start)); g_strlcpy(md->uri, ly_3dnc_lrc_uri, sizeof(md->uri)); path=ly_lrc_build_path(md); ly_mdh_free(md); FILE *fp=fopen(path, "w+"); if(!fp) { g_free(data); g_free(path); g_mutex_unlock(ly_3dnc_lrc_mutex); ly_dbg_warning(_("Cannot open file stream!")); return NULL; } CURL* pCurl = curl_easy_init(); curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, (void*)fp); curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, ly_3dnc_lrc_down_cb); curl_easy_setopt(pCurl, CURLOPT_URL, (gchar *)data); curl_easy_setopt(pCurl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"); curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 30L); curl_easy_perform(pCurl); curl_easy_cleanup(pCurl); fclose(fp); g_free(data); g_free(path); ly_mbs_put("lrc_update", "plugin:dnc", ""); g_mutex_unlock(ly_3dnc_lrc_mutex); return NULL; }
/** * ly_aud_init: * * Initialize the aud module, it will be called by #ly_cox_init. */ void ly_aud_init() { /* * mode */ gint random=0; gint repeat=1; gint single=0; if(!ly_reg_get("aud_mode","%d:%d:%d", &random,&repeat,&single)) ly_reg_set("aud_mode","%d:%d:%d",random, repeat, single); /* * volume */ double vol=0.3; if(!ly_reg_get("aud_volume","%lf",&vol)) { ly_reg_set("aud_volume","%lf",vol); } GstElement *ele=ly_ppl_audio_get_element("volume"); if(ele) { g_object_set(G_OBJECT(ele), "volume", vol, NULL); } /* * autoplay */ int autoplay=0; if(!ly_reg_get("aud_autoplay", "%d", &autoplay)) ly_reg_set("aud_autoplay", "%d", autoplay); if(autoplay) { ly_aud_play(); } ly_mbs_put("meta_changed", "core:aud", NULL); ly_mbs_bind("ppl_eos", "core:ppl", ly_aud_on_ppl_eos_cb, NULL); }
/** * ly_aud_pause: * * Set pipeline to be PAUSED. * * Returns: TRUE for success, others FALSE. */ gboolean ly_aud_pause() { LyMdhMetadata *md=ly_pqm_get_current_md(); if(!md) return FALSE; GstElement *play=ly_ppl_get_playbin(); if(!play) return FALSE; GstState state; state=ly_aud_get_state(); if((state!=GST_STATE_PAUSED)) { if(!gst_element_set_state(play,GST_STATE_PAUSED)) { ly_log_put_with_flag(G_LOG_LEVEL_WARNING, _("Gstreamer state wrong!")); return FALSE; } } ly_mbs_put("pause","core:aud",NULL); return TRUE; }
gpointer ly_3dnc_cov_down(gpointer data) { if(g_str_equal((gchar *)data, "")) { g_mutex_unlock(ly_3dnc_cov_mutex); ly_dbg_warning(_("Illegal url adress!")); return NULL; } gchar path[1024]=""; gchar *tmp; tmp=ly_gla_uri_get_suffix((gchar *)data); g_snprintf(path, sizeof(path), "%sinf/cover/%s-%s.%s",LY_GLB_USER_PIXDIR, ly_3dnc_cov_artist, ly_3dnc_cov_album, tmp); g_free(tmp); FILE *fp=fopen(path, "w+"); if(!fp) { g_mutex_unlock(ly_3dnc_cov_mutex); ly_dbg_warning(_("Cannot open file stream!")); return NULL; } CURL* pCurl = curl_easy_init(); curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, (void*)fp); curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, ly_3dnc_cov_down_cb); curl_easy_setopt(pCurl, CURLOPT_URL, (gchar *)data); curl_easy_setopt(pCurl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"); curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 30L); curl_easy_perform(pCurl); curl_easy_cleanup(pCurl); fclose(fp); g_free(data); ly_mbs_put("meta_update", "plugin:dnc", "cover"); g_mutex_unlock(ly_3dnc_cov_mutex); }
gboolean ly_3lrc_widget_on_get_button_clicked_cb(GtkWidget *widget, gpointer data) { ly_mbs_put("lrc_missing", "plugin:lrc", NULL); return FALSE; }
gboolean ly_3inf_on_get_button_clicked_cb(GtkWidget *widget, gpointer data) { ly_mbs_put("cov_missing", "plugin:inf", NULL); return FALSE; }
gboolean ly_ppl_bus_cb(GstBus *bus,GstMessage *message,gpointer data) { char *tag_codec=NULL; // char *tag_title=NULL; // char *tag_artist=NULL; // char *tag_album=NULL; char *tag_comment=NULL; char *tag_genre=NULL; char *tag_lrc=NULL; guint tag_bitrate=0; guint tag_track=0; GstBuffer *tag_cover=NULL; LyMdhMetadata *md=ly_pqm_get_current_md(); if(!md) return TRUE; GstTagList* tags; switch (message->type) { case GST_MESSAGE_EOS: ly_mbs_put("ppl_eos", "core:ppl", NULL); break; case GST_MESSAGE_TAG: { gst_message_parse_tag(message,&tags); //codec if(gst_tag_list_get_string(tags,GST_TAG_AUDIO_CODEC,&tag_codec)) { if(tag_codec!=NULL) g_strlcpy(md->codec, tag_codec, sizeof(md->codec)); ly_mbs_put("meta_update", "core:ppl", "codec"); } //comment if(gst_tag_list_get_string(tags,GST_TAG_COMMENT,&tag_comment)) { if(g_utf8_validate(tag_comment,-1,NULL)) { g_utf8_strncpy((char *)(md->comment), tag_comment, sizeof(md->comment)); } g_free(tag_comment); ly_mbs_put("meta_update", "core:ppl", "comment"); } //bitrate if(gst_tag_list_get_uint(tags, GST_TAG_BITRATE, &tag_bitrate)) { md->bitrate = tag_bitrate; ly_mbs_put("meta_update", "core:ppl", "bitrate"); } //track_number if(gst_tag_list_get_uint(tags, GST_TAG_TRACK_NUMBER, &tag_track)) { md->track = tag_track; ly_mbs_put("meta_update", "core:ppl", "track"); } //genre if(gst_tag_list_get_string(tags,GST_TAG_GENRE, &tag_genre)) { if(g_utf8_validate(tag_genre,-1,NULL)) { g_utf8_strncpy((gchar *)(md->genre),tag_genre, sizeof(md->genre)); } g_free(tag_genre); ly_mbs_put("meta_update", "core:ppl", "genre"); } //album cover if(gst_tag_list_get_buffer(tags,GST_TAG_IMAGE, &tag_cover)) { if(md->cover) gst_buffer_unref(md->cover); md->cover=tag_cover; ly_mbs_put("meta_update", "core:ppl", "cover"); } //lyrics if(gst_tag_list_get_string(tags,GST_TAG_LYRICS, &tag_lrc)) { if(g_utf8_validate(tag_lrc,-1,NULL)) { g_utf8_strncpy((gchar *)(md->lrc), tag_lrc, sizeof(md->lrc)); } g_free(tag_lrc); ly_mbs_put("meta_update", "core:ppl", "lrc"); } break; } default: break; } return TRUE; }