bool KviXmmsInterface::playMrl(const QString &mrl) { void (*sym)(int,char *) = (void (*)(int,char *))lookupSymbol("xmms_remote_playlist_add_url_string"); QByteArray tmp = mrl.toLocal8Bit(); if(!tmp.isEmpty()) { if(sym) { sym(0,tmp.data()); int (*sym1)(int) = (int (*)(int))lookupSymbol("xmms_remote_get_playlist_length"); if(sym1) { int len = sym1(0); if(len > 0) { void (*sym2)(int,int) = (void (*)(int,int))lookupSymbol("xmms_remote_set_playlist_pos"); if(sym2) { sym2(0,len - 1); } else return false; } else return false; } else return false; } else return false; } return true; }
bool KviXmmsInterface::setShuffle(bool &bVal) { bool (*sym1)(int) = (bool (*)(int))lookupSymbol("xmms_remote_is_shuffle"); if(!sym1)return false; bool bNow = sym1(0); if(bNow != bVal) { void (*sym2)(int) = (void (*)(int))lookupSymbol("xmms_remote_toggle_shuffle"); if(!sym2)return false; sym2(0); } return true; }
MpInterface::PlayerStatus KviXmmsInterface::status() { bool (*sym1)(int) = (bool (*)(int))lookupSymbol("xmms_remote_is_paused"); if(sym1) { if(sym1(0))return MpInterface::Paused; bool (*sym2)(int) = (bool (*)(int))lookupSymbol("xmms_remote_is_playing"); if(sym2) { if(sym2(0))return MpInterface::Playing; else return MpInterface::Stopped; } } return MpInterface::Unknown; }
bool testLossy(const std::string& identifier) { symbol::Symbol sym1(identifier); symbol::Symbol sym2(identifier); // make sure it's consistent (non-random) if ( sym1 != sym2 ) { std::cout << "unreliable encoding of " << identifier << std::endl; return false; } // make sure high bit was set static const unsigned long HIGH_BIT = (1UL << 63); static const unsigned long PENULTIMATE_BIT = (1UL << 62); if ( (sym1.code() & HIGH_BIT ) != HIGH_BIT ) { std::cout << "high bit of encoded " << identifier << " -> " << sym1.code() << " not set" << std::endl; return false; } if ( sym1.code() & PENULTIMATE_BIT ) { std::cout << "second-highest of encoded " << identifier << " -> " << sym1.code() << " is set" << std::endl; return false; } if ( !sym1.is_lossy() ) { std::cout << "symbol " << identifier << " does not self-report as lossy." << std::endl; } if ( verbose ) { std::cout << "lossy encoding: " << identifier << " -> " << sym1.code() << " -> " << sym1.decode() << std::endl; } // passed! if ( verbose ) { std::cout << "reliably encoded long identifier " << identifier << " as " << sym1.code() << std::endl; } return true; }