/usr/bin/lastcd is in ears 1.0.1-2.1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82  | #!/usr/bin/python
import sys
import os
import time
import getopt
import lastfm
import lastfm.client
import lastfm.marshaller
USAGE = """\
usage: lastcd [--stdout] [--debug] [--help]"""
if __name__ == '__main__':
    shortopts = 'sdh'
    longopts = [
        'stdout',
        'debug',
        'help',
        ]
    try:
        opts, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
    except getopt.GetoptError, e:
        print >>sys.stderr, 'lastcd: %s' % e
        print >>sys.stderr, USAGE
        sys.exit(1)
    debug = False
    stdout = False
    for opt, arg in opts:
        if opt in ('--stdout', '-s'):
            stdout = True
        elif opt in ('--debug', '-d'):
            debug = True
        elif opt in ('--help', '-h'):
            print USAGE
            sys.exit(0)
    cli = lastfm.client.Client('lastcd')
    cli.open_log(debug)
    songs = []
    for f in [file(name) for name in args] or [sys.stdin]:
        songs += lastfm.marshaller.load_documents(f)
    total_len = 0
    for s in songs:
        total_len += s['length']
    # We will simulate things as if the last track in our input just finished
    # playing right now.
    pos = time.time() - total_len
    subs = []
    for s in songs:
        l = s['length']
        if l:
            if l >= lastfm.MIN_LEN and l <= lastfm.MAX_LEN:
                date = pos + l / 2
                s['time'] = time.gmtime(pos)
                subs.append(s)
            pos = pos + l
        else:
            print >>sys.stderr, 'lastcd: track has zero length'
            sys.exit(1)
    if not subs:
        print >>sys.stderr, 'lastcd: no usable tracks found'
        sys.exit(1)
    if stdout:
        lastfm.marshaller.dump_documents(subs, sys.stdout)
    else:
        try:
            cli.log.info('Sending %s song(s) to daemon' % len(subs))
            cli.submit_many(subs)
        except IOError, e:
            print >>sys.stderr, 'lastcd: error writing: %s' % e
 |