perjantai 30. joulukuuta 2016

Tämä biisi vielä loppuun

Monta kertaa kun haluan lopettaa kuuntelemani Spotify soittolistan soittamisen haluaisin kuunnella jo soivan biisin loppuun ja pysäyttää toiston vasta sitten. Valitettavasti Spotifyssä ei ole tällaista toiminnallisuutta enkä ole ainoa joka tällaista toiminnallisuutta kaipaa Spotifyn idea-foorumilla.

En jaksanut odottaa että Spotify joskus lisäisi ominaisuuden sovellukseensa vaan päätin yrittää ratkaista ongelman itse. Minulla oli kolme ongelmaa ratkaistavana: 1. miten saada tieto kappaleen päättymisestä? 2. miten ohjata Spotify lopettamaan kappaleen toisto? ja 3. miten lisätä toiminto medianäppäimistöni stop-nappiin.

Tiesin aikaisemmin Spotifyn foorumilla käymäni keskustelun perusteella, että käyttämäni Spotifyn Linux työpöytä sovellus tarjoaa standardin Media Player Remote Interfacing Specification (MPRIS2) rajapinnan, jolla mediasoittimia voi hallita muilla ohjelmilla. Tämä rajapinta tarjoaa ratkaisun 1. ja 2. ongelmaan. Spotify ilmoittaa ko. rajapinnan kautta aina kun toistossa tapahtuu jokin muutos ja sen kautta pystyn käskemään toiston lopetuksen.
Lyhyen Googletuksen jälkeen löysin riittävät esimerkit MPRIS2 rajapinnan käyttöön Pythonilla ja kokosin alla olevan ohjelmalistauksen. Se avaa Spotifyn tarjoman rajapinnan ja jää kuuntelemaan siinä tapahtuvia muutoksia. Kun se havaitsee muutoksen lähettää se Spotifylle Stop-komennon ja pysäyttää toiston.


import dbus

from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GLib

DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()

def properties_changed(self, *args, **kw):
    player = dbus.SessionBus().get_object('org.mpris.MediaPlayer2.spotify', '/org/mpris/MediaPlayer2')
    player.Stop(dbus_interface='org.mpris.MediaPlayer2.Player')
    loop.quit()

bus.add_signal_receiver(properties_changed, dbus_interface="org.freedesktop.DBus.Properties",signal_name="PropertiesChanged" )

loop = GLib.MainLoop()
loop.run()

Tämä ohjelma on raaka ja pysäyttää Spotifyn toiston aina kun jokin muukin kuin Spotify generoi tarvittavan signaalin. Mutta toistaiseksi minun käytössä tätä ongelmaa ei ole tullut vastaan.

3. ongelman ratkaisuksi lisäsin KDE työpöytäympäristööni globaalin oikotien, joka aktivoituu kun työpöytäympäristö havaitsee Stop-napin painalluksesta syntyvän signaalin. Tämä oikotie käynnistää ylläolevan Python skriptin, joka jää odottamaan kappaleen vaihtumista ja sen vaihduttua lopettaa toiston ja lopettaa skriptin suorituksen.

torstai 15. joulukuuta 2016

Korjasin itse ja säästin

Nettiyhteyttä käyttävät laitteeni alkoivat ajoittain ilmoittelemaan yhteysvirheistä ja välillä netti katkesi hetkeksi kokonaan. Aina kun ongelmat esiintyivät lähdin eteisen kaapille, missä ADSL-modeemini ja muut verkon aktiivilaitteet ovat, mutta aina kun avasin oven kaikkien laitteiden ledit vilkkuivat oikein osoittaen kaiken olevan kunnossa ja netti toimi taas. Lopulta seuraamalla reitittimen logia havaitsin että verkkoyhteys käy vähän väliä alhaalla ja nousee taas alle minuutissa ylös, joten vian oli oltava joko reitittimen WAN portissa tai ADSL-modeemissa. Otin kannettavan mukaan kaapille ja kytkin sen suoraan modeemiin, jolloin todellinen vika löytyi. Modeemin LAN ledi ei vilkuttanut liikennettä vaan se vilkkui siitä syystä että yhteys katkesi ja yhdistyi yhä uudelleen. Vaihdoin tilalle toisen modeemin ja yhteys pysyi ylhäällä.






Varamodeemini ei vain ole yhtä nopea kuin vikaantunut, joten minulla oli edessä uuden modeemin hankinta. Hankinta ei olisi ollut suuri investointi, sillä se olisi kustantanut vain 29€. Modeemi toimi välillä, joten vika ei voinut olla suuri ja todennäköisesti jotenkin virransyöttöön liittyvä. Päätin avata rikkinäisen modeemin, sillä eihän siinä ollut enää mitään menetettävää. Onnistuin avaamaan muovikotelon katkaisematta ainoatakaan muoviklipsua ja vain pienillä ruuvimeisselin jäljillä. Saatuani piirilevyn näkyviin vika oli selvä lähes saman tien. Yksi elektrolyyttikapasitori oli pullistunut, joten sen vaihtamalla modeemi lähtisi luultavasti taas toimimaan.


viallinen konkka

Seuraava ongelma olikin mistä löytäisin sopivan varaosan. Voisin ostaa uuden, mutta saisinko ostettua vain yhden vai pitäisikö minun ostaa useampi kerralla. Onneksi en ole "ehtinyt" viemään elektroniikkaromujani kierrätykseen ja romulaatikosta löytyikin rikkinäinen näytönohjain, jossa oli ulkoapäin ehjännäköinen vastaava kapasitori.
elinluovuttaja


Ei muuta kuin juotin kuumaksi ja irroittamaan modeemista ja näytönohjaimesta kapasitorit ja juottamaan näytönohjaimesta irroitettu modeemiin. Testasin modeemin vielä ennen kuin ruuvasin kuoret kiinni ja onneksi LAN yhteys pysyi ylhäällä ja toimintasavut laitteen sisällä. Kasasin modeemin kokoon ja palautin eteisen kaappiin, jossa se yhä vilkuttaa ledejä, mutta ainakin toistaiseksi vain liikennöinnin merkiksi.

syyllinen