Mercurial > audlegacy-plugins
view src/sid/xs_title.c @ 611:3f7a52adfe0e trunk
[svn] merge recent changes from yaz's branch.
- stable shoutcast playback.
- tag handling improvement.
- view track detail on streaming won't crash. (disabled.)
- filepopup for streaming is partially supported. filepopup displays track name and stream name, but not updated automatically.
author | yaz |
---|---|
date | Tue, 06 Feb 2007 12:11:42 -0800 |
parents | 3da1b8942b8b |
children | 6c3c7b841382 |
line wrap: on
line source
/* XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS) Titlestring handling Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org> (C) Copyright 1999-2005 Tecnic Software productions (TNSP) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "xs_title.h" #include "xs_support.h" #include "xs_config.h" #include "audacious/titlestring.h" /* * Create a title string based on given information and settings. */ #define VPUTCH(MCH) \ if (iIndex < XS_BUF_SIZE) tmpBuf[iIndex++] = MCH; #define VPUTSTR(MSTR) { \ if (MSTR) { \ if ((iIndex + strlen(MSTR) + 1) < XS_BUF_SIZE) { \ strcpy(&tmpBuf[iIndex], MSTR); \ iIndex += strlen(MSTR); \ } else \ iIndex = XS_BUF_SIZE; \ } \ } gchar *xs_make_titlestring(gchar * pcFilename, gint iSubTune, gint nSubTunes, gint iSidModel, const gchar * formatString, const gchar * infoString0, const gchar * infoString1, const gchar * infoString2) { gchar *tmpFilename, *tmpFilePath, *tmpFileExt, *pcStr, *pcResult, tmpStr[XS_BUF_SIZE], tmpBuf[XS_BUF_SIZE]; gint iIndex; #ifdef HAVE_XMMSEXTRA TitleInput *ptInput; #endif /* Split the filename into path */ tmpFilePath = g_strdup(pcFilename); tmpFilename = xs_strrchr(tmpFilePath, '/'); if (tmpFilename) tmpFilename[1] = 0; /* Filename */ tmpFilename = xs_strrchr(pcFilename, '/'); if (tmpFilename) tmpFilename = g_strdup(tmpFilename + 1); else tmpFilename = g_strdup(pcFilename); tmpFileExt = xs_strrchr(tmpFilename, '.'); tmpFileExt[0] = 0; /* Extension */ tmpFileExt = xs_strrchr(pcFilename, '.'); #ifdef HAVE_XMMSEXTRA /* Check if the titles are overridden or not */ if (!xs_cfg.titleOverride) { /* Use generic XMMS titles */ /* XMMS_NEW_TITLEINPUT(ptInput); * We duplicate and add typecast to the code here due to XMMS's braindead headers */ ptInput = (TitleInput *) g_malloc0(sizeof(TitleInput)); ptInput->__size = XMMS_TITLEINPUT_SIZE; ptInput->__version = XMMS_TITLEINPUT_VERSION; /* Create the input fields */ ptInput->file_name = tmpFilename; ptInput->file_ext = tmpFileExt; ptInput->file_path = tmpFilePath; ptInput->track_name = g_strdup(infoString0); ptInput->track_number = iSubTune; ptInput->album_name = NULL; ptInput->performer = g_strdup(infoString1); ptInput->date = g_strdup((iSidModel == XS_SIDMODEL_6581) ? "SID6581" : "SID8580"); ptInput->year = 0; ptInput->genre = g_strdup("SID-tune"); ptInput->comment = g_strdup(infoString2); /* Create the string */ pcResult = xmms_get_titlestring(xmms_get_gentitle_format(), ptInput); /* Dispose all allocated memory */ g_free(ptInput->track_name); g_free(ptInput->performer); g_free(ptInput->comment); g_free(ptInput->date); g_free(ptInput->genre); g_free(ptInput); } else #endif { /* Create the string */ pcStr = xs_cfg.titleFormat; iIndex = 0; while (*pcStr && (iIndex < XS_BUF_SIZE)) { if (*pcStr == '%') { pcStr++; switch (*pcStr) { case '%': VPUTCH('%'); break; case 'f': VPUTSTR(tmpFilename); break; case 'F': VPUTSTR(tmpFilePath); break; case 'e': VPUTSTR(tmpFileExt); break; case 'p': VPUTSTR(infoString1); break; case 't': VPUTSTR(infoString0); break; case 'c': VPUTSTR(infoString2); break; case 's': VPUTSTR(formatString); break; case 'm': switch (iSidModel) { case XS_SIDMODEL_6581: VPUTSTR("6581"); break; case XS_SIDMODEL_8580: VPUTSTR("8580"); break; default: VPUTSTR("Unknown"); break; } break; case 'n': snprintf(tmpStr, XS_BUF_SIZE, "%i", iSubTune); VPUTSTR(tmpStr); break; case 'N': snprintf(tmpStr, XS_BUF_SIZE, "%i", nSubTunes); VPUTSTR(tmpStr); break; } } else { VPUTCH(*pcStr); } pcStr++; } tmpBuf[iIndex] = 0; /* Make resulting string */ pcResult = g_strdup(tmpBuf); } /* Free temporary strings */ g_free(tmpFilename); g_free(tmpFilePath); return pcResult; }