source: server/lib/TODO @ 1b6dc13

no-cups
Last change on this file since 1b6dc13 was 1b6dc13, checked in by Jessica B. Hamrick <jhamrick@…>, 12 years ago

TODO organization

  • Property mode set to 100644
File size: 3.8 KB
Line 
1* This is a scrap todo file while the new IPP server based Gutenbach is
2* being developed.  Once this branch is released and becomes master,
3* items in this file will be merged into the Trac.
4
5- finish implementing a bunch of the IPP handlers
6     [ ] print job
7     [ ] validate job
8     [ ] pause printer
9     [ ] resume printer
10     [ ] set printer attributes
11     [ ] send uri
12     [ ] set job attributes
13     [ ] restart job
14     [ ] promote job
15     [ ] cups get document
16
17- add support in printer.py for:
18     [x] print job
19     [x] validate job
20     [x] pause printer
21     [x] resume printer
22     [\] set printer attributes
23     [\] send uri
24     [\] set job attributes
25     [X] restart job
26     [\] promote job
27
28- add support in job.py for:
29     [X] restart job
30     [x] resume job
31
32- server stuff
33     [ ] write convenience client-side API
34     [ ] setuptools entry points for notification system (e.g. zephyr)
35     [ ] deal with queue management/reordering
36     [ ] add support for volume management
37     [ ] support authentication/security
38
39- client-ish stuff
40     [ ] rewrite gbr/gbq/etc. scripts to use client API
41     [ ] rewrite server-side queue display to use API
42
43- misc
44     [ ] make sure all CUPS commands are compatible
45     [ ] deal with all the code marked 'XXX'
46
47- documentation and testing
48     [ ] finish test cases for printer.py
49     [ ] write test cases for requests.py
50     [ ] write test cases for future client API
51     [ ] all the documentation
52     [ ] check test case coverage ( http://nedbatchelder.com/code/coverage/ )
53     [ ] why doesn't the bug tracker work?! relatedly, figure out a
54         solution that makes it easier for non-MIT developers to contribute
55
56Ponies
57   - gapless playback
58   - display video
59   - youtube
60   - pandora
61   - last.fm
62   - local streaming
63   - generic streaming
64   - zephyr control (e.g. youtube link)
65
66Tickets that should be fixed by this new version:
67   [ ] http://gutenbach.mit.edu/ticket/21
68   [ ] http://gutenbach.mit.edu/ticket/2
69   [ ] http://gutenbach.mit.edu/ticket/7
70   [ ] http://gutenbach.mit.edu/ticket/39
71   [ ] http://gutenbach.mit.edu/ticket/47
72   [ ] http://gutenbach.mit.edu/ticket/48
73   [ ] http://gutenbach.mit.edu/ticket/8
74   [ ] http://gutenbach.mit.edu/ticket/34
75   [x] http://gutenbach.mit.edu/ticket/38
76   [ ] http://gutenbach.mit.edu/ticket/41
77   [ ] http://gutenbach.mit.edu/ticket/18
78
79 === CONSIDERATIONS FOR MPD ===
80
81We are considering using MPD (the Music Player Daemon) for playback, instead
82of mplayer.  This gives us a pony (gapless playback), and makes some other
83things, like keeping track of the queue, much easier.  There is a lot of work
84needed to make this work, though.
85
86THIS ADDS A DEPENDENCY:  python-mpd
87
88We will have to re-implement all the functions in jobs.py, and completely
89re-structure player.py
90
91If we want video playback eventually (and we do), there will be some hackery
92involved.  We will pause mpd playback, do the video playback completely
93separately, and then resume mpd playback.
94
95Some almost-pseudocode:
96
97startup:
98  client = MPDClient()
99  client.connect(**{'host':'/var/run/mpd/socket', 'port':'6600'})
100
101adding a song to the queue:
102  Receive job
103  Put it into a file                    [gutenbach/FILENAME]
104  Tell MPD to add it to the queue       [client.addid('gutenbach/FILENAME')]
105  Find out what the id is
106  Store all the data [including the temporary filename]
107  IF WE ARE SUPPOSED TO BE PLAYING, MAKE SURE WE *ARE* PLAYING
108    In particular, if the queue was empty, start playback   [gutenbach.play()]
109
110when a job completes playing:
111  Remove the file                       [rm gutenbach/FILENAME]
112
113getting the queue:
114  get playlist, parse return            [client.playlistid()]
115
116removing a job:
117  dequeue it                  [client.deleteid('NUMBER')]
118  remove the file
119  tell them what you did
120
121restart song:
122  client.seek(0,1)   [0% through song 1...]
123
Note: See TracBrowser for help on using the repository browser.