source: server/lib/TODO

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

Update TODO

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