|
|
#1 |
|
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 457
Karma: 1287375
Join Date: Jan 2013
Location: West Gardiner, Maine
Device: Touch (5.3.7)
|
Alsaplayer
WIP - works with the fronter extension only from the command line, as there is no way to kill it (yet).
To play files, I can run it like: Code:
LD_LIBRARY_PATH=/mnt/us/extensions/alsaplayer/usr/lib ./alsaplayer I was trying for the old "press the power button to kill it" thing like on the draw extension, but it locks up always. I have not looked into a quit button yet like twobob did on rgbpaint (awesome!), but that seems the way to go. If you configure, make sure you have libmad0-dev installed, as that is the mp3 lib. ![]() attachment removed: https://www.mobileread.com/forums/sho...d.php?t=224097 Twobob did it again! Last edited by brianinmaine; 10-05-2013 at 05:45 AM. |
|
|
|
|
|
#2 |
|
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Thanks Brian
![]() EDIT: FULL PORT IS HERE MATE --> https://www.mobileread.com/forums/sho...d.php?t=224097 Enjoy (I did the diff like you asked) Last edited by twobob; 10-04-2013 at 11:37 PM. |
|
|
|
|
|
#3 |
|
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
A note on getting started patching...
jump into debian, cd to /usr/local/src, get the sources root@dev:/usr/local/src# apt-get source alsaplayer get the build-dep's root@dev:/usr/local/src# apt-get build-dep alsaplayer jump into the sources folder and check for references to title. root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "title" ./* Code:
./alsaplayer/Playlist.h: std::string title;
./alsaplayer/playitem.h: gchar *title;
./alsaplayer/playitem.h:void ap_playitem_set_title (ApPlayItem *playitem,
./alsaplayer/playitem.h: const gchar *title);
./alsaplayer/playitem.h:G_CONST_RETURN gchar* ap_playitem_get_title (ApPlayItem *playitem);
./alsaplayer/input_plugin.h: * The song title.
./alsaplayer/input_plugin.h: char title[128];
./alsaplayer/control.h:int ap_get_title(int session, char *str);
./app/ControlSocket.cpp: if (item->title.size()) {
./app/ControlSocket.cpp: sprintf(tmp, "%s %s", item->title.c_str(),
./app/ControlSocket.cpp: ap_message_add_string(reply, "string", info.title);
./app/Playlist.cpp:// t - sort by title in descending direction,
./app/Playlist.cpp:// T - sort by title in ascending direction,
./app/Playlist.cpp: case 't': // Compare titles, descending
./app/Playlist.cpp: COMPARE(title, DESCENDING);
./app/Playlist.cpp: case 'T': // Compare titles, ascending
./app/Playlist.cpp: COMPARE(title, ASCENDING);
./app/Playlist.cpp: (*p).title = info.title;
./app/Playlist.cpp: /* Ignore title/length lines */
./app/Main.cpp: if (ap_get_title(use_session, res) && strlen(res))
./app/Main.cpp: fprintf(stdout, "title: %s\n", res);
./ChangeLog:* Madej: fixed song title in title bar when unknow name
./ChangeLog:* Madej: song title in title bar with preference option
./ChangeLog: the title bar and the quit menu.
./ChangeLog:* Song artist - title - time displaying in the playlist.
./debian/alsaplayer-gtk.menu:?package(alsaplayer-gtk,alsaplayer-common):needs="X11" section="Applications/Sound" title="AlsaPlayer" \
./debian/alsaplayer-gtk.menu: longtitle="AlsaPlayer (GTK interface)" command="/usr/bin/alsaplayer -i gtk2"
./debian/alsaplayer-daemon.menu: title="AlsaPlayer (daemon)" \
./debian/alsaplayer-daemon.menu: longtitle="AlsaPlayer (daemon interface)" \
./debian/alsaplayer-xosd.menu: title="AlsaPlayer (xosd)" \
./debian/alsaplayer-xosd.menu: longtitle="AlsaPlayer (xosd daemon interface)" \
./examples/speed.c: char title[AP_TITLE_MAX];
./examples/speed.c: if (ap_get_title(session_id, title) &&
./examples/speed.c: printf("File playing: %s - %s\n", title, artist);
./input/vorbis/vorbis_engine.c: t = vorbis_comment_query(comment, "title", 0);
./input/vorbis/vorbis_engine.c: snprintf(info->title, sizeof(info->title), "%s", t ? t : "");
./input/vorbis/vorbis_engine.c: snprintf(info->title, sizeof(info->title), "%s", data->path);
./input/audiofile/audiofile_engine.c: strcpy(info->title, data->filename);
./input/sndfile/sndfile_engine.c: strcpy(info->title, data->filename);
./input/mad/mad_engine.c: fill_from_id3v2 (info->title, buf + name_size + start,
./input/mad/mad_engine.c: sizeof (info->title), size - start);
./input/mad/mad_engine.c: /* title */
./input/mad/mad_engine.c: strncpy (info->title, buf + 3, 30);
./input/mad/mad_engine.c: rstrip (info->title);
./input/mad/mad_engine.c: sprintf(data->sinfo.title, "%s", data->filename);
./input/mad/mad_engine.c: if ((len = strlen(data->sinfo.title))) {
./input/mad/mad_engine.c: s = data->sinfo.title + (len - 1);
./input/mad/mad_engine.c: while (s != data->sinfo.title && *s == ' ')
./input/mad/mad_engine.c: snprintf(data->sinfo.title, 128, "%s", s);
./input/cdda/cdda_engine.c: * open the filename and put music title's into the global variable
./input/cdda/cdda_engine.c: info->title[0] = 0;
./input/cdda/cdda_engine.c: sprintf(info->title, "Full CD length playback");
./input/cdda/cdda_engine.c: sprintf(info->title, "%s", data->tracks[data->track_nr].track);
./input/cdda/cdda_engine.c: //alsaplayer_error("title = %s\nalbum = %s\nartist = %s",
./input/cdda/cdda_engine.c: // info->title, info->album, info->artist);
./input/flac/FlacPlugin.cpp: if (t && ! t->title ().empty ())
./input/flac/FlacPlugin.cpp: strncpy (info->title, t->title ().c_str (), 128);
./input/flac/FlacPlugin.cpp: strncpy (info->title, fname, 128);
./input/flac/FlacPlugin.cpp: info->title[0] = 0;
./input/flac/FlacPlugin.cpp: info->title[0] = 0;
./input/flac/FlacId3v1Tag.cpp: char title[31];
./input/flac/FlacId3v1Tag.cpp: memcpy(tag.title, tag.raw+3, 30);
./input/flac/FlacId3v1Tag.cpp: _title = tag.title;
./input/flac/FlacMetadataTag.cpp: { "TITLE", &FlacMetadataTag::_title },
./input/flac/FlacTag.h: const std::string title ();
./input/flac/FlacTag.h: std::string _title;
./input/flac/FlacTag.h:FlacTag::title ()
./input/flac/FlacTag.h: return _title;
./input/mikmod/mikmod_engine.c: strcpy (info->title, (data->mf->songname[0]) ? data->mf->songname : data->fname);
./input/wav/wav_engine.c: info->title[0] = 0;
./interface/xosd/xosd.cpp: if (*info.title)
./interface/xosd/xosd.cpp: xosd_display(osd, 1, XOSD_string, info.title);
./interface/xosd/xosd.cpp: xosd_display(osd, 1, XOSD_string, "Playing unknown title");
./interface/gtk2/info_window.h: GtkWidget *title;
./interface/gtk2/info_window.h: void set_title(const gchar*);
./interface/gtk2/gtk_interface.cpp: char title_string[256];
./interface/gtk2/gtk_interface.cpp: sprintf(info.title, _("No stream"));
./interface/gtk2/gtk_interface.cpp: sprintf(title_string, "%s - %s", info.artist, info.title);
./interface/gtk2/gtk_interface.cpp: infowindow->set_title(title_string);
./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0))
./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string);
./interface/gtk2/gtk_interface.cpp: } else if (strlen(info.title)) {
./interface/gtk2/gtk_interface.cpp: sprintf(title_string, "%s", info.title);
./interface/gtk2/gtk_interface.cpp: infowindow->set_title(title_string);
./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0))
./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string);
./interface/gtk2/gtk_interface.cpp: infowindow->set_title(p);
./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0))
./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), p);
./interface/gtk2/gtk_interface.cpp: infowindow->set_title(info.path);
./interface/gtk2/gtk_interface.cpp: if (prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", 0))
./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), info.path);
./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer");
./interface/gtk2/info_window.cpp: GtkWidget *title_label;
./interface/gtk2/info_window.cpp: title_label = gtk_label_new(NULL);
./interface/gtk2/info_window.cpp: g_object_set_data(G_OBJECT(frame), "title_label", title_label);
./interface/gtk2/info_window.cpp: gtk_layout_put(GTK_LAYOUT(main_box), title_label, 0, 0);
./interface/gtk2/info_window.cpp: title = GTK_WIDGET(g_object_get_data(G_OBJECT(window), "title_label"));
./interface/gtk2/info_window.cpp: gtk_widget_set_size_request (this->title, width - x - this->rightwidth - this->labelheight, -1);
./interface/gtk2/info_window.cpp: gtk_layout_move(GTK_LAYOUT(this->layout), this->title, x, y);
./interface/gtk2/info_window.cpp:void InfoWindow::set_title(const gchar *text)
./interface/gtk2/info_window.cpp: gtk_label_set_text (GTK_LABEL(this->title), text);
./interface/gtk2/info_window.cpp: gtk_widget_modify_fg(this->title, GTK_STATE_NORMAL, &color);
./interface/gtk2/info_window.cpp: gtk_widget_modify_font(this->title, fonts);
./interface/gtk2/PlaylistWindow.cpp: if (item->title.size())
./interface/gtk2/PlaylistWindow.cpp: list_item[2] = g_strdup(item->title.c_str());
./interface/gtk2/PlaylistWindow.cpp: column = gtk_tree_view_column_new_with_attributes("title", renderer, "text", 2, NULL);
./interface/gtk2/PreferencesWindow.cpp: GtkWidget *title = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_play_on_title"));
./interface/gtk2/PreferencesWindow.cpp: what = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title));
./interface/gtk2/PreferencesWindow.cpp: prefs_set_bool(ap_prefs, "gtk2_interface", "play_on_title", what);
./interface/gtk2/PreferencesWindow.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer");
./interface/gtk2/PreferencesWindow.cpp: GtkWidget *pref_play_on_title;
./interface/gtk2/PreferencesWindow.cpp: pref_play_on_title = gtk_check_button_new_with_label(_("Show title in title-bar"));
./interface/gtk2/PreferencesWindow.cpp: gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(pref_play_on_title), prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", FALSE));
./interface/gtk2/PreferencesWindow.cpp: g_object_set_data(G_OBJECT(dialog), "pref_play_on_title", pref_play_on_title);
./interface/gtk2/PreferencesWindow.cpp: gtk_box_pack_start(GTK_BOX(pref_play), pref_play_on_title, FALSE, FALSE, 0);
./interface/text/text.cpp: // single title loop
./interface/text/text.cpp: snprintf(out_text, i, "%s - %s", info.artist, info.title);
./interface/text/text.cpp: else if (*info.title)
./interface/text/text.cpp: snprintf(out_text, i, "%s", info.title);
./interface/text/text.cpp: snprintf(out_text, i, "(no title information available)");
./libalsaplayer/message.c:int ap_get_title(int session, char *str)
./po/de.po:msgid "Show title in title-bar"
./po/en_GB.po:msgid "Show title in title-bar"
./po/fr.po:msgid "Show title in title-bar"
./po/alsaplayer.pot:msgid "Show title in title-bar"
./po/pl.po:msgid "Show title in title-bar"
./po/sv.po:msgid "Show title in title-bar"
./scopes2/logbarfft/logbarfft.c: gtk_window_set_title(GTK_WINDOW(fftscope_win), "logFFTscope");
./scopes2/monoscope/monoscope.c: gtk_window_set_title(GTK_WINDOW(monoscope_win), "Monoscope");
./scopes2/synaescope/synaescope.c: gtk_window_set_title(GTK_WINDOW(synaescope_win), "Synaescope");
./scopes2/spacescope/spacescope.c: gtk_window_set_title(GTK_WINDOW(spacescope_win), "Spacescope");
./scopes2/blurscope/blurscope.c: gtk_window_set_title(GTK_WINDOW(window),"Blurscope");
./scopes2/levelmeter/levelmeter.c: gtk_window_set_title(GTK_WINDOW(levelmeter_win), "Levelmeter");
Oh so a couple then... Any way we can get that list down a bit??? root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_window_set_title" ./* Code:
./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), title_string); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), p); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(playlist_window->GetWindow())), info.path); ./interface/gtk2/gtk_interface.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer"); ./interface/gtk2/PreferencesWindow.cpp: gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer"); ./scopes2/logbarfft/logbarfft.c: gtk_window_set_title(GTK_WINDOW(fftscope_win), "logFFTscope"); ./scopes2/monoscope/monoscope.c: gtk_window_set_title(GTK_WINDOW(monoscope_win), "Monoscope"); ./scopes2/synaescope/synaescope.c: gtk_window_set_title(GTK_WINDOW(synaescope_win), "Synaescope"); ./scopes2/spacescope/spacescope.c: gtk_window_set_title(GTK_WINDOW(spacescope_win), "Spacescope"); ./scopes2/blurscope/blurscope.c: gtk_window_set_title(GTK_WINDOW(window),"Blurscope"); ./scopes2/levelmeter/levelmeter.c: gtk_window_set_title(GTK_WINDOW(levelmeter_win), "Levelmeter"); would be a bare minimum I would think. anything else we should be looking at? root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_message_dialog_new" ./* Code:
./interface/gtk2/gtk_interface.cpp: md = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error !"));
./interface/gtk2/gtk_interface.cpp: md = gtk_message_dialog_new(GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, _("Warning !"));
./interface/gtk2/gtk_interface.cpp: md = gtk_message_dialog_new(GTK_WINDOW(parent), (GtkDialogFlags) (GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT), GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Excuse me !"));
I would start there. Then see what I missed. ALSO: ./interface/gtk2/AboutWindow.cpp: I kind of recall there being no obvious way to set the "default about" windows sub-title - so perhaps think about eliding it. Hope it helps. Last edited by twobob; 10-04-2013 at 06:26 AM. |
|
|
|
|
|
#4 |
|
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_dialog_new_with_buttons" ./*
Code:
./interface/gtk2/ScopesWindow.cpp: scopes_window = gtk_dialog_new_with_buttons(_("Scopes"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
./interface/gtk2/PreferencesWindow.cpp: dialog = gtk_dialog_new_with_buttons(_("Preferences"), GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT,
root@dev:/usr/local/src/alsaplayer-0.99.80# grep -R "gtk_file_chooser_dialog_new" ./* Code:
./interface/gtk2/PlaylistWindow.cpp: filechooser = gtk_file_chooser_dialog_new("Choose playlist" , main_window, GTK_FILE_CHOOSER_ACTION_OPEN,
./interface/gtk2/PlaylistWindow.cpp: filechooser = gtk_file_chooser_dialog_new("Save playlist" , main_window, GTK_FILE_CHOOSER_ACTION_SAVE,
./interface/gtk2/PlaylistWindow.cpp: filechooser = gtk_file_chooser_dialog_new(_("Choose file or URL"), main_window, GTK_FILE_CHOOSER_ACTION_OPEN,
Last edited by twobob; 10-04-2013 at 12:53 PM. |
|
|
|
|
|
#5 | ||||
|
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Hack up the titles (including the ones with spaces)
example: Quote:
and maybe that should be strlen... fix the -fpermissive errors in /usr/local/src/alsaplayer-0.99.80/input/flac/FlacPlugin.cpp Quote:
![]() also usr/local/src/alsaplayer-0.99.80/app/ControlSocket.cpp:245:21: error: ‘PATH_MAX’ was not declared in this scope ControlSocket.cpp:246:15: error: ‘save_path’ was not declared in this scope Quote:
root@dev:/usr/local/src/alsaplayer-0.99.80# ./configure --prefix=/mnt/us/extensions/alsaplayer --enable-gtk2 --disable-jack --disable-esd --disable-sparc --disable-sgi --disable-opengl --enable-static --enable-threads=posix --disable-nls --with-gnu-ld Quote:
root@dev:/usr/local/src/alsaplayer-0.99.80# make install Now.... I didn't check a whole host of stuff and you would probably want :PC_N on the titles. This isn't meant to be a complete guide. Just thought I would help you quickly over the stumbling blocks. regards, |
||||
|
|
|
|
|
#6 |
|
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Here's quick guide for the libs you will need to kill the missing symbols
[root@kindle root]# ls -p /mnt/us/extensions/alsaplayer/lib | grep -v "/" Code:
libFLAC.so.8 libX11.so.6 libXcomposite.so.1 libXcursor.so.1 libalsaplayer.so libalsaplayer.so.0 libalsaplayer.so.0.0.2 libgdk-x11-2.0.so.0 libgdk_pixbuf-2.0.so.0 libgdk_pixbuf_xlib-2.0.so.0 libglib-2.0.so.0 libgobject-2.0.so.0 libgthread-2.0.so.0 libgtk-x11-2.0.so.0 libid3tag.so.0 libmad.so.0 libmikmod.so.2 libpcre.so.3 libsndfile.so.1 libvorbis.so.0 libvorbisenc.so.2 libvorbisfile.so.3 Last edited by twobob; 10-04-2013 at 02:57 PM. |
|
|
|
|
|
#7 |
|
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 457
Karma: 1287375
Join Date: Jan 2013
Location: West Gardiner, Maine
Device: Touch (5.3.7)
|
Looks like your on the way! Go ahead - save me a patch like rgbpaint if you would, that was great! Any idea how to add a quit button? Is that the same also, adding it into the toolbar?
|
|
|
|
|
|
#8 |
|
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
okay.
I'll get it done then. The quit button has been there the whole time. Code:
gboolean alsaplayer_button_press(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
if (event->button == 3) {
gtk_menu_popup (GTK_MENU (data), NULL, NULL, NULL, NULL,
event->button, event->time);
return true;
}
return false;
}
I'll hi-jack the pointless CD button then - try welding it onto there. This was just supposed to be a help-you-along guide. There is probably a RAFT of other things that need tweaking... Hey ho. I'll give it go. |
|
|
|
|
|
#9 |
|
Evangelist
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 457
Karma: 1287375
Join Date: Jan 2013
Location: West Gardiner, Maine
Device: Touch (5.3.7)
|
|
|
|
|
|
|
#10 |
|
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Tır
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
|
Most welcome. might wanna take down that top attachment now...
To save confusion. |
|
|
|
![]() |
| Thread Tools | Search this Thread |
|