예제 #1
0
파일: aud.c 프로젝트: herenvarno/linnya
/**
 * 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;
}
예제 #2
0
파일: dnc_lrc.c 프로젝트: herenvarno/linnya
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;
}
예제 #3
0
파일: aud.c 프로젝트: herenvarno/linnya
/**
 * 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);
}
예제 #4
0
파일: aud.c 프로젝트: lovesnow/linnya
/**
 * 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;
}
예제 #5
0
파일: dnc_cov.c 프로젝트: herenvarno/linnya
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);
}
예제 #6
0
gboolean ly_3lrc_widget_on_get_button_clicked_cb(GtkWidget *widget, gpointer data)
{
	ly_mbs_put("lrc_missing", "plugin:lrc", NULL);
	return FALSE;
}
예제 #7
0
파일: inf.c 프로젝트: lovesnow/linnya
gboolean ly_3inf_on_get_button_clicked_cb(GtkWidget *widget, gpointer data)
{
	ly_mbs_put("cov_missing", "plugin:inf", NULL);
	return FALSE;
}
예제 #8
0
파일: ppl.c 프로젝트: lovesnow/linnya
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;
}