Gstreamer 1.0 and wxWidgets 3.0 porting bug reports.
  • Please post here all gstreamer 1.0 and wxWidgets 3.0 related bugs...

    The patch for the gstreamer 1.0 is already out but need wxWidgets 2.8 and it is not available for Ubuntu 16.04. I expect the wxWidgets 3.0 patch to be out in a week or two... There are tons of details that need attention.

    * The patch for wx3.0 is out. Please let me know anything wrong with it.
    * Changed player controls. Now should look better.
    * Changed the tabs and views close button
    * Fixed bug in Tunein stations search that caused random segfaults
    * Added option to save a Radio as User Radio
    * Added audio cd support. You can now play audio cds and import them to your collections.
    * Vumeters show Rms power also...

    Packages are available from launchpad ppa:anonbeat/guayadeque

    sudo add-apt-repository ppa:anonbeat/guayadeque
    sudo apt-get update
    sudo apt-get install guayadeque


    Thanks in advance
  • How to install from git repository:

    First go to a folder where you have write permissions. In this folder you are going to create a guayadeque folder and compile it from there.

    sudo apt-get install git build-essential cmake gettext
    sudo apt-get install libwxgtk3.0-dev libtag1-dev libwxsqlite3-3.0-dev libsqlite3-dev
    sudo apt-get install libcurl4-openssl-dev libdbus-1-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgpod-dev libindicate-dev
    cd folder_where_to_create_the_program
    git clone https://github.com/anonbeat/guayadeque.git
    cd guayadeque
    ./build
    sudo make install


    To Update
    cd ~/guayadeque
    git pull
    ./build
    sudo make install


    With that you should have it compiled from source and installed.

    Thanks for your help
  • Hi,

    thank you for the update!

    I tried to build on opensuse leap with gstreamer 1.8.1 and wxgtk3 3.0.2 (gst 0.10 and wxw 2.8 are still available in the repos, the old guayadeque can thus still be used). Got the following error during compilation:


    [...]
    -- Found wxWidgets: -L/usr/lib64;-pthread;;;-lwx_baseu-3.0;-lwx_gtk3u_core-3.0;-lwx_gtk3u_adv-3.0;-lwx_baseu_net-3.0;-lwx_gtk3u_html-3.0;-lwx_baseu_xml-3.0;-lwx_gtk3u_aui-3.0;-lwx_gtk3u_qa-3.0 (found version "3.0.2")
    -- Checking for module 'gstreamer-1.0'
    -- Found gstreamer-1.0, version 1.8.1
    [...]
    [ 15%] Building CXX object src/CMakeFiles/guayadeque.dir/MainFrame.o
    /home/philipp/Programs/compile/guayadeque-git/src/MainFrame.cpp: In member function ‘void guMainFrame::OnCreateNewLayout(wxCommandEvent&)’:
    /home/philipp/Programs/compile/guayadeque-git/src/MainFrame.cpp:3816:112: error: no matching function for call to ‘guEditWithOptions::guEditWithOptions(guMainFrame* const, const wxString&, const wxString&, wxString, wxSortedArrayString&)’
    _( "Layout:" ), wxString::Format( _( "Layout %lu" ), m_LayoutNames.GetCount() + 1 ), m_LayoutNames );
    ^
    /home/philipp/Programs/compile/guayadeque-git/src/MainFrame.cpp:3816:112: note: candidate is:
    In file included from /home/philipp/Programs/compile/guayadeque-git/src/MainFrame.cpp:27:0:
    /home/philipp/Programs/compile/guayadeque-git/src/EditWithOptions.h:43:5: note: guEditWithOptions::guEditWithOptions(wxWindow*, const wxString&, const wxString&, const wxString&, const wxArrayString&)
    guEditWithOptions( wxWindow * parent, const wxString &title, const wxString &label, const wxString &defval, const wxArrayString &items );
    ^
    /home/philipp/Programs/compile/guayadeque-git/src/EditWithOptions.h:43:5: note: no known conversion for argument 5 from ‘wxSortedArrayString’ to ‘const wxArrayString&’
    src/CMakeFiles/guayadeque.dir/build.make:590: recipe for target 'src/CMakeFiles/guayadeque.dir/MainFrame.o' failed


    Cheers,
    Philipp
  • @radiometer: Can you post the initial part of the build process please?

  • -- Using install prefix /usr ...
    -- Found PkgConfig: /usr/bin/pkg-config (found version "0.28")
    -- Found wxWidgets: -L/usr/lib64;-pthread;;;-lwx_baseu-3.0;-lwx_gtk3u_core-3.0;-lwx_gtk3u_adv-3.0;-lwx_baseu_net-3.0;-lwx_gtk3u_html-3.0;-lwx_baseu_xml-3.0;-lwx_gtk3u_aui-3.0;-lwx_gtk3u_qa-3.0 (found version "3.0.2")
    -- Checking for module 'gstreamer-1.0'
    -- Found gstreamer-1.0, version 1.8.1
    -- Checking for module 'sqlite3'
    -- Found sqlite3, version 3.8.10.2
    -- Checking for module 'libcurl'
    -- Found libcurl, version 7.37.0
    -- Checking for module 'taglib>=1.6.4'
    -- Found taglib, version 1.9.1
    -- Checking for module 'dbus-1'
    -- Found dbus-1, version 1.8.16
    -- Checking for module 'gdk-pixbuf-2.0'
    -- Found gdk-pixbuf-2.0, version 2.31.6
    -- Checking for module 'gio-2.0'
    -- Found gio-2.0, version 2.44.1
    -- Checking for module 'libgpod-1.0'
    -- Found libgpod-1.0, version 0.8.3
    -- Checking for module 'indicate-0.7'
    -- No package 'indicate-0.7' found
    -- Checking for module 'indicate-0.6'
    -- No package 'indicate-0.6' found
    -- Checking for module 'indicate'
    -- No package 'indicate' found
    libindicate library not found! No sound menu support!!
    -- Checking for module 'appindicator-0.1'
    -- No package 'appindicator-0.1' found
    -- Checking for module 'wxsqlite3'
    -- No package 'wxsqlite3' found
    -- Checking for module 'wxsqlite3-3.0'
    -- No package 'wxsqlite3-3.0' found
    -- * Using internal wxSqlite support
    Including extra wxsqlite folder
    -- Found Gettext: /usr/bin/msgmerge (found version "0.19.2")
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/philipp/Programs/compile/guayadeque-git
  • radiometer : install libwxsqlite3-dev package please

    see this post http://guayadeque.org/index.php?p=/discussion/1868/gstreamer-1-0-and-wxwidgets-3-0-porting-bug-reports-#Item_2

    internal wxsqlite support have been dropped.
  • Unfortunately, this package is not available in the repositories (I also didn't find a 3rd party repo that contains it). So I built it myself (version 3.3.1 from https://sourceforge.net/projects/wxcode/files/Components). This installed the library libwxcode_gtk3u_wxsqlite3-3.0.so and the header files

    wxsqlite3def.h
    wxsqlite3.h
    wxsqlite3dyn.h
    wxsqlite3opt.h

    Guayadeque's build system still doesn't find wxsqlite3. Everything is installed in the default paths, but also setting CPATH and LIBRARY_PATH manually didn't help.
  • you need to install pkg-config configuration file for this package...

    This is the file from ubuntu

    # Package Information for pkg-config

    prefix=/usr
    wxver=3.0
    includedir=${prefix}/include/wx-${wxver}/
    libdir=${prefix}/lib/x86_64-linux-gnu

    Name: wxsqlite3-3.0
    Description: SQLite3 C++ wrapper for use in programs based on the wxWidgets
    Version:
    Requires: sqlite3
    Libs: -L${libdir} -lwxsqlite3-3.0
    Libs.private: -lpthread
    Cflags: -I${includedir}


  • I adjusted the paths and libname in the pkg-config file to match those on my system. Now I'm back to square one: same error message as in my first post.
  • Just found this on http://docs.wxwidgets.org/3.0/overview_container.html
    wxSortedArrayString and wxArrayString are separate classes now and the former doesn't derive from the latter. If you need to convert a sorted array to a normal one, you must copy all the elements.

  • And I can build it here with no problem? I cant understand it

    This is the wxgtk version Im using here

    libwxgtk3.0-dev 3.0.2+dfsg-1.3

    What version are you using?
  • The package is wxGTK3-3.0-devel 3.0.2.

    As I understand the wxWidgets3 reference manual, the implicit conversion does not exist (anymore). No idea why it works for you. Maybe the package maintainer for Ubuntu or Debian included a patch to restore compatibility with some old code.

    I tinkered a little with the Guayadeque source code and got it compiling after the following modifications (see details below):
    * guEditWithOptions: wxArrayString->wxSortedArrayString in the signature, then convert wxSortedArrayString->wxArrayString manually.
    * In a few places an explicit convertsion from const wxString->const wxChar* is required, because the implicit conversion also doesn't exist (anymore). I just used c_str() for that, because wxChar is the same as wchar_t.

    Well, now it compiles, but I've still got a problem with gstreamer 1.0 at runtime. Needs some further investigation before I can tell you any details.

    EditWithOptions.h:43
    -    guEditWithOptions( wxWindow * parent, const wxString &title, const wxString &label, const wxString &defval, const wxArrayString &items );
    + guEditWithOptions( wxWindow * parent, const wxString &title, const wxString &label, const wxString &defval, const wxSortedArrayString &items );

    EditWithOptions.cpp:23
    -guEditWithOptions::guEditWithOptions( wxWindow * parent, const wxString &title, const wxString &label, const wxString &defval, const wxArrayString &items ) :
    +guEditWithOptions::guEditWithOptions( wxWindow * parent, const wxString &title, const wxString &label, const wxString &defval, const wxSortedArrayString &items ) :

    EditWithOptions.cpp:40
    -    m_EditComboBox->Append( items );
    + wxArrayString tmp;
    + for (size_t k=0; k < items.GetCount(); ++k) {
    + tmp.Add(items.Item(k));
    + }
    + m_EditComboBox->Append( tmp );

    MediaCtrl.cpp:1363
    -        argvGST[ i ] = wxStrdupA( wxConvUTF8.cWX2MB( wxTheApp->argv[ i ] ) );
    + argvGST[ i ] = wxStrdupA( wxConvUTF8.cWX2MB( wxTheApp->argv[ i ].c_str() ) );

    Transcode.h:75
    -    guTranscodeThread( const guTrack * track, const wxChar * target, const int format, const int quality );
    + guTranscodeThread( const guTrack * track, const wxString &target, const int format, const int quality );

    Transcode.cpp:130
    -guTranscodeThread::guTranscodeThread( const guTrack * track, const wxChar * target, const int format, const int quality )
    +guTranscodeThread::guTranscodeThread( const guTrack * track, const wxString &target, const int format, const int quality )

    Transcode.cpp:140
    -    guLogMessage( wxT( "Transcode %i - %i '%s' => '%s'\n:::: %i => %i" ), format, quality, track->m_FileName.c_str(), target, m_StartPos, m_Length );
    + guLogMessage( wxT( "Transcode %i - %i '%s' => '%s'\n:::: %i => %i" ), format, quality, track->m_FileName.c_str(), target.c_str(), m_StartPos, m_Length );

    curl/base.cpp
    -        pBuf->Write((const wxChar*)szVerboseMessage, szVerboseMessage.Len() * sizeof(wxChar));
    + pBuf->Write(szVerboseMessage.c_str(), szVerboseMessage.Len() * sizeof(wxChar));

  • Thank for your effor and the patch. I will take a look and include it if all is fine.

    Yes please tell me what is the problem with gstreamer... Also if you want to contact me via email it is anonbeat@gmail.com

    Thanks again
  • Currently I am working to adding again support to MusicBrainz tagging capabilities to the Track Editor.
  • Do you update with same commands.

    cd ~/guayadeque

    svn update

    ./build

    sudo make install
  • nope to update its different commands... now you must use git

    cd ~/guayadeque
    git pull
    ./build

  • The musicbrainz support is almost done. Right now the acousticid is working and search perfectly for the known tracks.

    Need more testing to publish it.
  • I got back to the problem with gstreamer 1.0 on opensuse leap. It seems that the gstreamer 1.0 packages from leap don't work properly, but those from opensuse tumbleweed do. I.e. the problem is solved in the sense that this isn't guayadeques fault.

    The patches regarding wxWidgets from above are still required, though. They should be regarded as a hack, since I'm not familiar with wx and therefore I have no idea on how to do this in a "clean" way (i.e. the way wx should be used).

    A note to all KDE Plasma 5 users: the GTK3 version of the (default) Breeze theme is more or less broken as of Plasma 5.6 so that the Guayadeque GUI looks totally messed up. The Adwaita theme (this was the default in KDE 4) works fine.
  • Thanks for reporting back.. I will fix the wxSortedStringArray problem soon
  • The MusicBrainz support is back. Now I will do some code cleanup and refactoring...
  • Trying to build from source in Xubuntu 16.04.

    When trying to build, following error occurs:

    src/CMakeFiles/guayadeque.dir/build.make:62: recipe for target
    src/CMakeFiles/guayadeque.dir/AlListBox.o' failed
    make[2]: *** [src/CMakeFiles/guayadeque.dir/AlListBox.o] Error 1
    CMakeFiles/Makefile2:181: recipe for target 'src/CMakeFiles/guayadeque.dir/all' failed
    make[1]: *** [src/CMakeFiles/guayadeque.dir/all] Error 2
    Makefile:116: recipe for target 'all' failed
    make: *** [all] Error 2
  • Could you please post the whole build process ?
  • Updated the player controls with a new look..
    Please try it out and let me know what you think...

    Thanks for your help
    JRIos
  • I think that you should change the hover over color from white to something else. The thing is, since those widgets are not themable, I prefer to use adwaita (or some other light theme) and white really looks out of place now.
    Black looks bad on dark themes..... Don't know what to do but since player background is themable maybe you can make the controls also themable so that it won't matter which theme someone wants to use.
  • I have been checking some themes but Im using xubuntu 16.04. I downloaded some dark themes and even when I dont like the result 100% I think it is way better now than with the old buttons.
  • Sorry, don't know how exactly it was before...... I mostly use media keys on my laptop and light themes. I just checked that out since you mentioned it. Me personally, don't care much. But since I'm not the only user and you know how people today want "beautiful" software....
    I liked the squeareish one from the early days more anyway.
    Maybe disable that hover color since there is a description also. Or hardcode the whole player sincexwidgets are not themable anyway. Dark themes just make a mess.
    http://i65.tinypic.com/2regmjk.jpg
    It is way better with light theme
    http://i64.tinypic.com/2d2dg02.jpg
  • Minimum radio allowed bit rate can't be adjusted with the mouse. It does go up but not down.
    Player online buffer size can.
  • kinggo said:

    Minimum radio allowed bit rate can't be adjusted with the mouse. It does go up but not down.
    Player online buffer size can.


    Will take a look asap... It works as expected here... can you give me more details about your system? can you try with keyboard?

    Thanks for your help
  • kinggo said:

    Sorry, don't know how exactly it was before...... I mostly use media keys on my laptop and light themes. I just checked that out since you mentioned it. Me personally, don't care much. But since I'm not the only user and you know how people today want "beautiful" software....
    I liked the squeareish one from the early days more anyway.
    Maybe disable that hover color since there is a description also. Or hardcode the whole player sincexwidgets are not themable anyway. Dark themes just make a mess.
    http://i65.tinypic.com/2regmjk.jpg
    It is way better with light theme
    http://i64.tinypic.com/2d2dg02.jpg




    Yeahh it looks way better... I think it worth the change. Maybe I can check if the theme color is close enough for the button and invert colors...
  • anonbeat said:

    kinggo said:

    Minimum radio allowed bit rate can't be adjusted with the mouse. It does go up but not down.
    Player online buffer size can.


    Will take a look asap... It works as expected here... can you give me more details about your system? can you try with keyboard?

    Thanks for your help

    It does not with keyboard either, only when selecting the slider with mouse and drag it to the left. One slider works the other does not.
    Ubuntu gnome 16.04 and ancient vostro 3500
  • It goes doing steps from one value to another...
    0 ___ 16 ___ 32 ___ 64 ___ 96 ___ 128 ...

    It doesnt stop in other places...

    Sorry if you already know that
  • I know that. Maybe I didn't explain it properly.
    When you select Bitrate slider (or hover over it with cursor) you can move value up (in values that are common for mp3 bitrate), but only up, with keyboard and mouse. To decrease bitrate you either have to grab the dot with mouse and drag it back or click with mouse anywhere on that slider. There's no way to decrease value with keyboard or mouse wheel.
    On the other hand, it does work for buffer.
    Also works for replaygain, silence detector and crossfaders.
    So, every other slider can be controlled up/down with scroll wheel when cursor hovers over it or with keyborad L/R UP/DOWN keys when selected.
  • Now I see what the problem is... Will try to fix it asap.
    This should be fixed...
    Thanks for your help
  • I got back to the problem with gstreamer 1.0 on opensuse leap. It seems that the gstreamer 1.0 packages from leap don't work properly, but those from opensuse tumbleweed do. I.e. the problem is solved in the sense that this isn't guayadeques fault.

    The patches regarding wxWidgets from above are still required, though. They should be regarded as a hack, since I'm not familiar with wx and therefore I have no idea on how to do this in a "clean" way (i.e. the way wx should be used).

    A note to all KDE Plasma 5 users: the GTK3 version of the (default) Breeze theme is more or less broken as of Plasma 5.6 so that the Guayadeque GUI looks totally messed up. The Adwaita theme (this was the default in KDE 4) works fine.



    With latest commit it should compile now without any problems... Just need the wxsqlite3 package

    Thanks you for your help
  • anonbeat said:

    Now I see what the problem is... Will try to fix it asap.
    This should be fixed...
    Thanks for your help


    nope, still the same here.
  • You updated? here it is working as expected now...
  • yes, I did. I would really like that some others try this also. I don't care about the bug and if it is specific because of something on my side only then you don't have to bother.
  • In the about box appears now the short commit revision id to check if needed...
  • strange, I did another git pull, build it again and now it is fine.
    rev is 0.4.1-6724783
  • Thank you for reporting it kinggo
  • A package for xenial is available in my ppa ppa:anonbeat/guayadeque
  • Thanks Anonbeat, I really appreciate your work. There is no other player like Guayadeque and it's great to have it back! Thank you!!
  • Great to have Guayadeque back. On start up I get a message window - insertion failed with /usr/include/wx-3.0/wx/strvararg.h(456): assert "(argtype & (wxFormatStringSpecifier::value)) == argtype" failed in wxArgNormalizer(): format specifier doesn't match argument type, and when continue is pressed it sometimes runs and sometimes not, and has to be restarted. Using Mate 16.04. Thoughts?


  • 'insertion' above should read 'assertion'
  • Can you post here the log it shows ? if you press the details you can copy the error lines
  • Added audio cd support.

    To compile from source you need to add libgstreamer-plugins-base1.0-dev
  • ASSERT INFO:
    /usr/include/wx-3.0/wx/strvararg.h(456): assert "(argtype & (wxFormatStringSpecifier::value)) == argtype" failed in wxArgNormalizer(): format specifier doesn't match argument type

    BACKTRACE:
    [1] Guayadeque::LenToString(unsigned long long)
    [2] Guayadeque::guSoListBox::OnGetItemText(int, int) const
    [3] Guayadeque::guListViewClient::DoDrawItem(wxDC&, wxRect const&, int, int) const
    [4] Guayadeque::guListViewClient::OnDrawItem(wxDC&, wxRect const&, unsigned int) const
    [5] Guayadeque::guListViewClient::OnPaint(wxPaintEvent&)
    [6] wxAppConsoleBase::HandleEvent(wxEvtHandler*, void (wxEvtHandler::*)(wxEvent&), wxEvent&) const
    [7] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const
    [8] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
    [9] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
    [10] wxEvtHandler::TryHereOnly(wxEvent&)
    [11] wxEvtHandler::ProcessEventLocally(wxEvent&)
    [12] wxEvtHandler::ProcessEvent(wxEvent&)
    [13] wxVarScrollHelperEvtHandler::ProcessEvent(wxEvent&)
    [14] wxEvtHandler::SafelyProcessEvent(wxEvent&)
    [15] wxWindowBase::HandleWindowEvent(wxEvent&) const
    [16] wxWindow::GTKSendPaintEvents(_GdkRegion const*)
    [17] g_closure_invoke
    [18] g_signal_emit_valist
    [19] g_signal_emit
    [20] gtk_main_do_event
    [21] gdk_window_process_all_updates
    [22] g_main_context_dispatch
    [23] g_main_loop_run
    [24] gtk_main
    [25] wxGUIEventLoop::DoRun()
    [26] wxEventLoopBase::Run()
    [27] wxAppConsoleBase::MainLoop()
    [28] wxAppConsoleBase::OnRun()
    [29] wxAppBase::OnRun()
    [30] wxEntry(int&, wchar_t**)
    [31] wxEntry(int&, char**)
    [32] main
    [33] __libc_start_main
    [34] _start


  • What is your system specs? 32bits?
  • probably more than you need -
    /0/0 memory 64KiB BIOS
    /0/4 processor Pentium(R) Dual-Core CPU E5
    /0/4/5 memory 64KiB L1 cache
    /0/4/6 memory 2MiB L2 cache
    /0/4/0.1 processor Logical CPU
    /0/4/0.2 processor Logical CPU
    /0/d memory 2GiB System Memory
    /0/d/0 memory 2GiB DIMM SDRAM Synchronous
    /0/d/1 memory DIMM [empty]
    /0/1 processor
    /0/1/0.1 processor Logical CPU
    /0/1/0.2 processor Logical CPU
    /0/100 bridge 82G33/G31/P35/P31 Express DRAM Co
    /0/100/1 bridge 82G33/G31/P35/P31 Express PCI Exp
    /0/100/1/0 display GT215 [GeForce GT 240]
    /0/100/1/0.1 multimedia High Definition Audio Controller
    /0/100/1b multimedia NM10/ICH7 Family High Definition
    /0/100/1c bridge NM10/ICH7 Family PCI Express Port
    /0/100/1c/0 ens32 network Attansic L2 Fast Ethernet
    /0/100/1d bus NM10/ICH7 Family USB UHCI Control
    /0/100/1d/1 usb2 bus UHCI Host Controller
    /0/100/1d.1 bus NM10/ICH7 Family USB UHCI Control
    /0/100/1d.1/1 usb3 bus UHCI Host Controller
    /0/100/1d.2 bus NM10/ICH7 Family USB UHCI Control
    /0/100/1d.2/1 usb4 bus UHCI Host Controller
    /0/100/1d.3 bus NM10/ICH7 Family USB UHCI Control
    /0/100/1d.3/1 usb5 bus UHCI Host Controller
    /0/100/1d.7 bus NM10/ICH7 Family USB2 EHCI Contro
    /0/100/1d.7/1 usb1 bus EHCI Host Controller
    /0/100/1d.7/1/2 scsi11 storage HUAWEI Mobile
    /0/100/1d.7/1/2/0 /dev/sr1 disk Mass Storage
    /0/100/1d.7/1/2/0/0 /dev/sr1 disk
    /0/100/1d.7/1/2/0/0/1 volume 1KiB Apple partition map
    /0/100/1d.7/1/2/0/0/2 volume 24MiB Apple HFS
    /0/100/1d.7/1/2/1 /dev/sdb disk SCSI Disk
    /0/100/1e bridge 82801 PCI Bridge
    /0/100/1e/2 multimedia SB X-Fi
    /0/100/1f bridge 82801GB/GR (ICH7 Family) LPC Inte
    /0/100/1f.1 storage 82801G (ICH7 Family) IDE Controll
    /0/100/1f.2 storage NM10/ICH7 Family SATA Controller
    /0/100/1f.3 bus NM10/ICH7 Family SMBus Controller
    /0/2 scsi2 storage
    /0/2/0.0.0 /dev/sda disk 250GB ST3250318AS
    /0/2/0.0.0/1 /dev/sda1 volume 230GiB EXT4 volume
    /0/2/0.0.0/2 /dev/sda2 volume 2046MiB Extended partition
    /0/2/0.0.0/2/5 /dev/sda5 volume 2046MiB Linux swap / Solaris part
    /0/3 scsi3 storage
    /0/3/0.0.0 /dev/cdrom disk DVDRAM GH22LS40
  • Please check with latest commit. It should be fixed.

    Thanks for your help

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In with OpenID

In this Discussion