Merge lp:~rockstar/entertainer/documentation-cleanup into lp:entertainer

Proposed by Paul Hummer
Status: Merged
Merged at revision: not available
Proposed branch: lp:~rockstar/entertainer/documentation-cleanup
Merge into: lp:entertainer
Diff against target: None lines
To merge this branch: bzr merge lp:~rockstar/entertainer/documentation-cleanup
Reviewer Review Type Date Requested Status
Matt Layman Approve
Review via email: mp+3291@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Paul Hummer (rockstar) wrote :

This branch removes a lot of old, antequated documentation, converts the
HACKING file to restructured text, and consolidates the COPYING and LICENSE
files into one file. It also adds a new make target to generate a dependency
graph (and adds the current dependency graph). That part requires sfood, which
I will package when I have time, but it's not a priority. Basicaly, I'm using
the make target to store my recipe for generating the graph. I also thought we
could use it to see where we can make changes and make those dependencies less
hairy crazy.

--
Paul Hummer
http://theironlion.net
1024/862FF08F C921 E962 58F8 5547 6723 0E8C 1C4D 8AC5 862F F08F

Revision history for this message
Matt Layman (mblayman) wrote :

1) I don't understand why the to_dict stuff had to be merged in this branch. It seem unnecessary.

2) There is still a developer_documentation.pdf file that was left behind (now with no source file!).

3) Do we really need the user_guide.tex? It's outdated (it still refers to the 0.1 release); it's basically unmaintained; and we maintain the wiki.

4) The dependency png is basically unreadable. It's interesting to see the web of relationships, but it doesn't have the resolution to actually tell what we're looking at. Any tips for installing sfood to play around with it?

Those issues aside, the branch seems fine to me.

review: Approve
Revision history for this message
Matt Layman (mblayman) wrote :

"1) I don't understand why the to_dict stuff had to be merged in this branch. It seem unnecessary.

2) There is still a developer_documentation.pdf file that was left behind (now with no source file!).

3) Do we really need the user_guide.tex? It's outdated (it still refers to the 0.1 release); it's basically unmaintained; and we maintain the wiki.

4) The dependency png is basically unreadable. It's interesting to see the web of relationships, but it doesn't have the resolution to actually tell what we're looking at. Any tips for installing sfood to play around with it?

Those issues aside, the branch seems fine to me."

After a second glance at the diff, it looks like you're gzipping the man page too late. When you run the gzip command, the man page has already been installed in /usr and it's probably been installed uncompressed.

Revision history for this message
Paul Hummer (rockstar) wrote :

Matt-

> 1) I don't understand why the to_dict stuff had to be merged in this
> branch. It seem unnecessary.

Well, I branched from a local mirror of trunk that already had the to_dict
stuff merged in. Somehow, that never got pushed. The merge proposal itself
sent an email with the actual diff, as well as placed it where it can be seen
from the web ui, so merging it into your copy of trunk was probably a bit
misleading.

>
> 2) There is still a developer_documentation.pdf file that was left behind
> (now with no source file!).

Yeah, after looking over that, I thought it might be good to keep it while I
hacked through a replacement backend (for reference). That's why to source
file was removed, but I kept the pdf. Eventually, I'll also delete that.

>
> 3) Do we really need the user_guide.tex? It's outdated (it still refers to
> the 0.1 release); it's basically unmaintained; and we maintain the wiki.
>

Well, I wasn't sure if we'd want to keep it. If nothing else, that information
would probably be better in the man page anyway. I've removed it for now.

> 4) The dependency png is basically unreadable. It's interesting to see the
> web of relationships, but it doesn't have the resolution to actually tell
> what we're looking at. Any tips for installing sfood to play around with it?

Well, I just downloaded the tarball, put the package in my pythonpath and
used the scripts in came with. The dependency graph is kinda unreadable now,
but I think I just need to limit the amount of nodes it shows, or find a way to
generate many smaller dependency graphs. I think it will help to see how our
package organization is bass-ackwards -- I want to reorganize as I slowly
remove entertainerlib.backend, but I wanted a snapshot of what it looked like
before, if nothing else.

I'm working on the man page zipping now.

--
Paul Hummer
http://theironlion.net
1024/862FF08F C921 E962 58F8 5547 6723 0E8C 1C4D 8AC5 862F F08F

347. By Paul Hummer

Changed when the man page gets gzipped

348. By Paul Hummer

Merge from trunk

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2008-12-19 05:29:55 +0000
3+++ Makefile 2009-02-01 19:35:11 +0000
4@@ -24,6 +24,7 @@
5 TOOLS_DIR=cd tools
6 TRANSLATE= ${PYTHON} translations_generator.py
7
8+
9 check: test lint
10
11 lint:
12@@ -53,3 +54,12 @@
13 clean:
14 ${DOCS_DIR};${DOCS_CLEAN}
15 ${CTAGS_CLEAN}
16+
17+depgraph:
18+ sfood entertainerlib > /tmp/entertainer.deps
19+ cd entertainerlib ; ls -1d * > /tmp/entertainer-clusters
20+ cat /tmp/entertainer.deps | sfood-cluster -f /tmp/entertainer-clusters > /tmp/clustered
21+ cat /tmp/clustered | sfood-graph -p | dot -T png > docs/entertainer-depgraph.png
22+
23+
24+
25
26=== modified file 'docs/COPYING'
27--- docs/COPYING 2008-06-25 02:15:19 +0000
28+++ docs/COPYING 2009-02-01 05:26:57 +0000
29@@ -1,4 +1,344 @@
30-Entertainer copyrights can be found within the individual source files.
31+ GNU GENERAL PUBLIC LICENSE
32+ Version 2, June 1991
33+
34+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
35+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
36+ Everyone is permitted to copy and distribute verbatim copies
37+ of this license document, but changing it is not allowed.
38+
39+ Preamble
40+
41+ The licenses for most software are designed to take away your
42+freedom to share and change it. By contrast, the GNU General Public
43+License is intended to guarantee your freedom to share and change free
44+software--to make sure the software is free for all its users. This
45+General Public License applies to most of the Free Software
46+Foundation's software and to any other program whose authors commit to
47+using it. (Some other Free Software Foundation software is covered by
48+the GNU Lesser General Public License instead.) You can apply it to
49+your programs, too.
50+
51+ When we speak of free software, we are referring to freedom, not
52+price. Our General Public Licenses are designed to make sure that you
53+have the freedom to distribute copies of free software (and charge for
54+this service if you wish), that you receive source code or can get it
55+if you want it, that you can change the software or use pieces of it
56+in new free programs; and that you know you can do these things.
57+
58+ To protect your rights, we need to make restrictions that forbid
59+anyone to deny you these rights or to ask you to surrender the rights.
60+These restrictions translate to certain responsibilities for you if you
61+distribute copies of the software, or if you modify it.
62+
63+ For example, if you distribute copies of such a program, whether
64+gratis or for a fee, you must give the recipients all the rights that
65+you have. You must make sure that they, too, receive or can get the
66+source code. And you must show them these terms so they know their
67+rights.
68+
69+ We protect your rights with two steps: (1) copyright the software, and
70+(2) offer you this license which gives you legal permission to copy,
71+distribute and/or modify the software.
72+
73+ Also, for each author's protection and ours, we want to make certain
74+that everyone understands that there is no warranty for this free
75+software. If the software is modified by someone else and passed on, we
76+want its recipients to know that what they have is not the original, so
77+that any problems introduced by others will not reflect on the original
78+authors' reputations.
79+
80+ Finally, any free program is threatened constantly by software
81+patents. We wish to avoid the danger that redistributors of a free
82+program will individually obtain patent licenses, in effect making the
83+program proprietary. To prevent this, we have made it clear that any
84+patent must be licensed for everyone's free use or not licensed at all.
85+
86+ The precise terms and conditions for copying, distribution and
87+modification follow.
88+
89+ GNU GENERAL PUBLIC LICENSE
90+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
91+
92+ 0. This License applies to any program or other work which contains
93+a notice placed by the copyright holder saying it may be distributed
94+under the terms of this General Public License. The "Program", below,
95+refers to any such program or work, and a "work based on the Program"
96+means either the Program or any derivative work under copyright law:
97+that is to say, a work containing the Program or a portion of it,
98+either verbatim or with modifications and/or translated into another
99+language. (Hereinafter, translation is included without limitation in
100+the term "modification".) Each licensee is addressed as "you".
101+
102+Activities other than copying, distribution and modification are not
103+covered by this License; they are outside its scope. The act of
104+running the Program is not restricted, and the output from the Program
105+is covered only if its contents constitute a work based on the
106+Program (independent of having been made by running the Program).
107+Whether that is true depends on what the Program does.
108+
109+ 1. You may copy and distribute verbatim copies of the Program's
110+source code as you receive it, in any medium, provided that you
111+conspicuously and appropriately publish on each copy an appropriate
112+copyright notice and disclaimer of warranty; keep intact all the
113+notices that refer to this License and to the absence of any warranty;
114+and give any other recipients of the Program a copy of this License
115+along with the Program.
116+
117+You may charge a fee for the physical act of transferring a copy, and
118+you may at your option offer warranty protection in exchange for a fee.
119+
120+ 2. You may modify your copy or copies of the Program or any portion
121+of it, thus forming a work based on the Program, and copy and
122+distribute such modifications or work under the terms of Section 1
123+above, provided that you also meet all of these conditions:
124+
125+ a) You must cause the modified files to carry prominent notices
126+ stating that you changed the files and the date of any change.
127+
128+ b) You must cause any work that you distribute or publish, that in
129+ whole or in part contains or is derived from the Program or any
130+ part thereof, to be licensed as a whole at no charge to all third
131+ parties under the terms of this License.
132+
133+ c) If the modified program normally reads commands interactively
134+ when run, you must cause it, when started running for such
135+ interactive use in the most ordinary way, to print or display an
136+ announcement including an appropriate copyright notice and a
137+ notice that there is no warranty (or else, saying that you provide
138+ a warranty) and that users may redistribute the program under
139+ these conditions, and telling the user how to view a copy of this
140+ License. (Exception: if the Program itself is interactive but
141+ does not normally print such an announcement, your work based on
142+ the Program is not required to print an announcement.)
143+
144+These requirements apply to the modified work as a whole. If
145+identifiable sections of that work are not derived from the Program,
146+and can be reasonably considered independent and separate works in
147+themselves, then this License, and its terms, do not apply to those
148+sections when you distribute them as separate works. But when you
149+distribute the same sections as part of a whole which is a work based
150+on the Program, the distribution of the whole must be on the terms of
151+this License, whose permissions for other licensees extend to the
152+entire whole, and thus to each and every part regardless of who wrote it.
153+
154+Thus, it is not the intent of this section to claim rights or contest
155+your rights to work written entirely by you; rather, the intent is to
156+exercise the right to control the distribution of derivative or
157+collective works based on the Program.
158+
159+In addition, mere aggregation of another work not based on the Program
160+with the Program (or with a work based on the Program) on a volume of
161+a storage or distribution medium does not bring the other work under
162+the scope of this License.
163+
164+ 3. You may copy and distribute the Program (or a work based on it,
165+under Section 2) in object code or executable form under the terms of
166+Sections 1 and 2 above provided that you also do one of the following:
167+
168+ a) Accompany it with the complete corresponding machine-readable
169+ source code, which must be distributed under the terms of Sections
170+ 1 and 2 above on a medium customarily used for software interchange; or,
171+
172+ b) Accompany it with a written offer, valid for at least three
173+ years, to give any third party, for a charge no more than your
174+ cost of physically performing source distribution, a complete
175+ machine-readable copy of the corresponding source code, to be
176+ distributed under the terms of Sections 1 and 2 above on a medium
177+ customarily used for software interchange; or,
178+
179+ c) Accompany it with the information you received as to the offer
180+ to distribute corresponding source code. (This alternative is
181+ allowed only for noncommercial distribution and only if you
182+ received the program in object code or executable form with such
183+ an offer, in accord with Subsection b above.)
184+
185+The source code for a work means the preferred form of the work for
186+making modifications to it. For an executable work, complete source
187+code means all the source code for all modules it contains, plus any
188+associated interface definition files, plus the scripts used to
189+control compilation and installation of the executable. However, as a
190+special exception, the source code distributed need not include
191+anything that is normally distributed (in either source or binary
192+form) with the major components (compiler, kernel, and so on) of the
193+operating system on which the executable runs, unless that component
194+itself accompanies the executable.
195+
196+If distribution of executable or object code is made by offering
197+access to copy from a designated place, then offering equivalent
198+access to copy the source code from the same place counts as
199+distribution of the source code, even though third parties are not
200+compelled to copy the source along with the object code.
201+
202+ 4. You may not copy, modify, sublicense, or distribute the Program
203+except as expressly provided under this License. Any attempt
204+otherwise to copy, modify, sublicense or distribute the Program is
205+void, and will automatically terminate your rights under this License.
206+However, parties who have received copies, or rights, from you under
207+this License will not have their licenses terminated so long as such
208+parties remain in full compliance.
209+
210+ 5. You are not required to accept this License, since you have not
211+signed it. However, nothing else grants you permission to modify or
212+distribute the Program or its derivative works. These actions are
213+prohibited by law if you do not accept this License. Therefore, by
214+modifying or distributing the Program (or any work based on the
215+Program), you indicate your acceptance of this License to do so, and
216+all its terms and conditions for copying, distributing or modifying
217+the Program or works based on it.
218+
219+ 6. Each time you redistribute the Program (or any work based on the
220+Program), the recipient automatically receives a license from the
221+original licensor to copy, distribute or modify the Program subject to
222+these terms and conditions. You may not impose any further
223+restrictions on the recipients' exercise of the rights granted herein.
224+You are not responsible for enforcing compliance by third parties to
225+this License.
226+
227+ 7. If, as a consequence of a court judgment or allegation of patent
228+infringement or for any other reason (not limited to patent issues),
229+conditions are imposed on you (whether by court order, agreement or
230+otherwise) that contradict the conditions of this License, they do not
231+excuse you from the conditions of this License. If you cannot
232+distribute so as to satisfy simultaneously your obligations under this
233+License and any other pertinent obligations, then as a consequence you
234+may not distribute the Program at all. For example, if a patent
235+license would not permit royalty-free redistribution of the Program by
236+all those who receive copies directly or indirectly through you, then
237+the only way you could satisfy both it and this License would be to
238+refrain entirely from distribution of the Program.
239+
240+If any portion of this section is held invalid or unenforceable under
241+any particular circumstance, the balance of the section is intended to
242+apply and the section as a whole is intended to apply in other
243+circumstances.
244+
245+It is not the purpose of this section to induce you to infringe any
246+patents or other property right claims or to contest validity of any
247+such claims; this section has the sole purpose of protecting the
248+integrity of the free software distribution system, which is
249+implemented by public license practices. Many people have made
250+generous contributions to the wide range of software distributed
251+through that system in reliance on consistent application of that
252+system; it is up to the author/donor to decide if he or she is willing
253+to distribute software through any other system and a licensee cannot
254+impose that choice.
255+
256+This section is intended to make thoroughly clear what is believed to
257+be a consequence of the rest of this License.
258+
259+ 8. If the distribution and/or use of the Program is restricted in
260+certain countries either by patents or by copyrighted interfaces, the
261+original copyright holder who places the Program under this License
262+may add an explicit geographical distribution limitation excluding
263+those countries, so that distribution is permitted only in or among
264+countries not thus excluded. In such case, this License incorporates
265+the limitation as if written in the body of this License.
266+
267+ 9. The Free Software Foundation may publish revised and/or new versions
268+of the General Public License from time to time. Such new versions will
269+be similar in spirit to the present version, but may differ in detail to
270+address new problems or concerns.
271+
272+Each version is given a distinguishing version number. If the Program
273+specifies a version number of this License which applies to it and "any
274+later version", you have the option of following the terms and conditions
275+either of that version or of any later version published by the Free
276+Software Foundation. If the Program does not specify a version number of
277+this License, you may choose any version ever published by the Free Software
278+Foundation.
279+
280+ 10. If you wish to incorporate parts of the Program into other free
281+programs whose distribution conditions are different, write to the author
282+to ask for permission. For software which is copyrighted by the Free
283+Software Foundation, write to the Free Software Foundation; we sometimes
284+make exceptions for this. Our decision will be guided by the two goals
285+of preserving the free status of all derivatives of our free software and
286+of promoting the sharing and reuse of software generally.
287+
288+ NO WARRANTY
289+
290+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
291+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
292+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
293+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
294+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
295+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
296+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
297+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
298+REPAIR OR CORRECTION.
299+
300+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
301+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
302+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
303+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
304+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
305+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
306+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
307+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
308+POSSIBILITY OF SUCH DAMAGES.
309+
310+ END OF TERMS AND CONDITIONS
311+
312+ How to Apply These Terms to Your New Programs
313+
314+ If you develop a new program, and you want it to be of the greatest
315+possible use to the public, the best way to achieve this is to make it
316+free software which everyone can redistribute and change under these terms.
317+
318+ To do so, attach the following notices to the program. It is safest
319+to attach them to the start of each source file to most effectively
320+convey the exclusion of warranty; and each file should have at least
321+the "copyright" line and a pointer to where the full notice is found.
322+
323+ <one line to give the program's name and a brief idea of what it does.>
324+ Copyright (C) <year> <name of author>
325+
326+ This program is free software; you can redistribute it and/or modify
327+ it under the terms of the GNU General Public License as published by
328+ the Free Software Foundation; either version 2 of the License, or
329+ (at your option) any later version.
330+
331+ This program is distributed in the hope that it will be useful,
332+ but WITHOUT ANY WARRANTY; without even the implied warranty of
333+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
334+ GNU General Public License for more details.
335+
336+ You should have received a copy of the GNU General Public License along
337+ with this program; if not, write to the Free Software Foundation, Inc.,
338+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
339+
340+Also add information on how to contact you by electronic and paper mail.
341+
342+If the program is interactive, make it output a short notice like this
343+when it starts in an interactive mode:
344+
345+ Gnomovision version 69, Copyright (C) year name of author
346+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
347+ This is free software, and you are welcome to redistribute it
348+ under certain conditions; type `show c' for details.
349+
350+The hypothetical commands `show w' and `show c' should show the appropriate
351+parts of the General Public License. Of course, the commands you use may
352+be called something other than `show w' and `show c'; they could even be
353+mouse-clicks or menu items--whatever suits your program.
354+
355+You should also get your employer (if you work as a programmer) or your
356+school, if any, to sign a "copyright disclaimer" for the program, if
357+necessary. Here is a sample; alter the names:
358+
359+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
360+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
361+
362+ <signature of Ty Coon>, 1 April 1989
363+ Ty Coon, President of Vice
364+
365+This General Public License does not permit incorporating your program into
366+proprietary programs. If your program is a subroutine library, you may
367+consider it more useful to permit linking proprietary applications with the
368+library. If this is what you want to do, use the GNU Lesser General
369+Public License instead of this License.
370+
371+== Entertainer Caveats ==
372
373 This program is free software; you can redistribute it and/or modify
374 it under the terms of the GNU General Public License as published by
375@@ -18,8 +358,4 @@
376 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
377 GNU General Public License for more details.
378
379-You should have received a copy of the GNU General Public License
380-along with this program; if not, write to the Free Software
381-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
382-MA 02110-1301, USA.
383
384
385=== modified file 'docs/DEPENDENCIES'
386--- docs/DEPENDENCIES 2009-01-06 23:52:09 +0000
387+++ docs/DEPENDENCIES 2009-02-01 05:32:19 +0000
388@@ -1,6 +1,17 @@
389-To install all dependencies in Hardy:
390-
391-sudo apt-get install python-gobject python-gtk2 python-gst0.10 python-clutter \
392-python-pysqlite2 python-cddb python-glade2 python-cairo python-feedparser \
393-python-eyed3 python-pyvorbis python-imaging python-imdbpy python-notify
394+python-cairo
395+python-cddb
396+python-clutter
397+python-eyed3
398+python-feedparser
399+python-glade2
400+python-gobject
401+python-gst0.10
402+python-gtk2
403+python-imaging
404+python-imdbpy
405+python-notify
406+python-pysqlite2
407+python-pyvorbis
408+python-storm
409+python-twisted
410
411
412=== modified file 'docs/HACKING'
413--- docs/HACKING 2008-10-06 01:33:50 +0000
414+++ docs/HACKING 2009-02-01 06:07:50 +0000
415@@ -1,4 +1,5 @@
416-== Introduction ==
417+Introduction
418+============
419
420 This document will detail a list of best practices and guidelines for
421 developers. We would like to encourage community development of Entertainer,
422@@ -10,86 +11,14 @@
423 tools of the Entertainer developers, and will be the best method of
424 communication with other developers.
425
426-== Bug Workflow ==
427-
428-Each launchpad project probably uses the bug management system in slightly
429-different ways. The following information describes how Entertainer uses lp's
430-bug system.
431-
432-1) New bugs come in. Bugs from regular users will always come in with a status
433-of New and Undecided. Entertainer developers have the ability to set new bugs
434-to have some status other than New and Undecided, but we try to adopt a policy
435-of letting other developers confirm our bugs (this is a way to keep us
436-accountable and to ensure that the bug is, in fact, true for others too).
437-
438-2) If someone else wrote the bug, we check it to see what kind of information
439-it has. It may have tracebacks, but sometimes reporters don't give us useful
440-stuff. If that is the case, we request more information (like the log file in
441-~/.config/entertainer) and mark it "Incomplete" and leave the priority
442-Undecided.
443-
444-3) If you see a new bug, and can verify it, but have no idea how it should be
445-fixed, it should be marked as "Confirmed". If you can provide extra new
446-information that might help someone else figure out the problem, please add
447-that to the bug. You may mark the priority at this time if you have a good
448-feeling for what it should be.
449-
450-4) If you see a new bug, and can verify it, and you have a good idea about
451-where/how the bug can be fixed, mark it as "Triaged". At this time, use your
452-best judgment about setting the priority. You can see from our bug page that
453-most of the bugs are in the Triaged state (we just don't have the manpower to
454-handle them all).
455-
456-5) From the list of Triaged bugs, you would assign yourself work (or
457-potentially assign someone else work). For example, problems with the RSS feeds
458-are typically assigned to Josh Scotton since he was the initial developer of
459-that functionality. For bugs that you're actually working on, you should assign
460-yourself the bug, and change the state to "In Progress". If you're not going to
461-work the bug yet, leave the state as "Triaged."
462-
463-6) At this point, the bug flow basically halts while you work on your branches
464-in bazaar. We recommend that you create specific branches and link them to bugs
465-that you are fixing. A good rule of thumb is one branch per bug, but this is
466-not set in stone. You write your code, go through the merge proposal review
467-process, and your code gets committed to the trunk.
468-
469-7) Now, either you (the developer who was working the bug) or a member of the
470-Release Team (either Paul Hummer or Matt Layman) will set the bug to Fix
471-Committed after the branch has landed in the trunk. Note: We do NOT mark bugs
472-as Fix Committed until they land in the trunk. Everyone's first tendency is to
473-mark a bug as Fix Committed as soon as it is done in their branch. Fix
474-Committed does not mean "committed to my branch." We want it to mean "committed
475-to the trunk."
476-
477-8) When we finish the release and make source tarballs and packages available,
478-a member of the Release Team will mark all the Fix Committed bugs that were in
479-that release as Fix Released.
480-
481-== Development Process ==
482+
483+Development Process
484+===================
485
486 In order to have your branch merged into trunk, there is a workflow you'll need
487 to follow. This facilitates the help of the community in working with
488 Entertainer.
489
490-When a bug or feature is to be implemented, a branch of
491-lp:~entertainer-releases/entertainer/devel is created, named bug-<bugno> or
492-<feature-name>. Once it is branched, it needs to be registered on Launchpad
493-and pushed to. The easiest way to create a branch to work from is to run:
494-`bzr branch lp:entertainer <your branch name here>`
495-
496-The bug or feature is then developed. In order for a branch to be complete,
497-and ready to merge, it must have sufficient tests, pass all of the tests in the
498-test suite, and passes all lint tests. The latter two criteria can be checked
499-by typing `make check` in the branch's top level directory.
500-
501-When you feel your branch is ready, you'll submit a branch merge proposal in
502-Launchpad, where your branch should be reviewed by at least two developers.
503-Please be sure to submit review requests to two core developers who you believe
504-will be able to review your code. Once it is reviewed and signed off, a member
505-of the Entertainer Release team will merge your branch into trunk.
506-
507-== Design and Documentation ==
508-
509 When adding a new feature or fixing a large bug, unless it is less than five
510 lines, please make it known on the Entertainer Developers Mailing List and
511 give us some details on your implementation. This way, discussion can take
512@@ -102,20 +31,99 @@
513 trunk without documentation, please be prepared when your change is
514 removed from the trunk, pending documentation.
515
516-== Coding Styles ==
517+When a bug or feature is to be implemented, a branch of
518+lp:~entertainer-releases/entertainer/devel is created. Once it is branched, it
519+needs to be registered on Launchpad and pushed to. The easiest way to create
520+a branch to work from is to run:
521+
522+``bzr branch lp:entertainer <your branch name here>``
523+
524+The bug or feature is then developed. In order for a branch to be complete,
525+and ready to merge, it must have sufficient tests, pass all of the tests in the
526+test suite, and passes all lint tests. The latter two criteria can be checked
527+by typing `make check` in the branch's top level directory.
528+
529+When you feel your branch is ready, you'll submit a branch merge proposal in
530+Launchpad, where your branch should be reviewed by a member of the Entertainer
531+Releases team. Please be sure to submit review requests to two core developers
532+who you believe will be able to review your code. Once it is reviewed and
533+signed off, a member of the Entertainer Release team will merge your branch
534+into trunk.
535+
536+
537+Bug Workflow
538+============
539+
540+The following information describes how Entertainer uses Launchpad's bug
541+system.
542+
543+**New Bugs** Bugs from regular users will always come in with a status
544+of New and Undecided. Entertainer developers have the ability to set new bugs
545+to have some status other than New and Undecided, but we try to adopt a policy
546+of letting other developers confirm our bugs (this is a way to keep us
547+accountable and to ensure that the bug is, in fact, true for others too).
548+
549+**Information Audit** If someone else wrote the bug, we check it to see what
550+kind of information it has. It may have tracebacks, but sometimes reporters
551+don't give us useful stuff. If that is the case, we request more information
552+(like the log file in ~/.config/entertainer) and mark it "Incomplete" and
553+leave the priority Undecided.
554+
555+**Bug Triage** If you see a new bug, and can verify it, but have no idea how
556+it should be fixed, it should be marked as "Confirmed". If you can provide
557+extra new information that might help someone else figure out the problem,
558+please add that to the bug. You may mark the priority at this time if you
559+have a good feeling for what it should be.
560+
561+If you see a new bug, and can verify it, and you have a good idea about
562+where/how the bug can be fixed, mark it as "Triaged". At this time, use your
563+best judgment about setting the priority. You can see from our bug page that
564+most of the bugs are in the Triaged state (we just don't have the manpower to
565+handle them all).
566+
567+**Accepting Work** From the list of Triaged bugs, you would assign yourself
568+work (or potentially assign someone else work). For example, problems with
569+the RSS feeds are typically assigned to Josh Scotton since he was the initial
570+developer of that functionality. For bugs that you're actually working on,
571+you should assign yourself the bug, and change the state to "In Progress".
572+If you're not going to work the bug yet, leave the state as "Triaged."
573+
574+If you are working on a bug, but then find you won't be able to fix it, and
575+abandon the effort, please make sure to set the bug from "In Progress" to
576+"Triaged" and leave any notes that might help the next bug squisher in their
577+quest to fix the bug.
578+
579+**Fix the bug**At this point, the bug flow basically halts while you work on
580+your branches in Bazaar. We recommend that you create specific branches and
581+link them to bugs that you are fixing. A good rule of thumb is one branch per
582+bug, but this is not set in stone. You write your code, go through the merge
583+proposal review process, and your code gets committed to the trunk.
584+
585+**Fix Lands in Trunk** Now, either you (the developer who was working the bug)
586+or a member of the Release Team will set the bug to Fix Committed after the
587+branch has landed in the trunk. Note: We do NOT mark bugs as Fix Committed
588+until they land in the trunk. Everyone's first tendency is to mark a bug as
589+Fix Committed as soon as it is done in their branch. Fix Committed does not
590+mean "committed to my branch." We want it to mean "committed to the trunk."
591+
592+**Release!** When we finish the release and make source tarballs and packages
593+available, a member of the Release Team will mark all the Fix Committed bugs
594+that were in that release as Fix Released.
595+
596+Coding Styles
597+=============
598
599 For the most part, Entertainer code adheres to PEP 0008, with a few more
600 specifics:
601
602- * Spaces, not tabs
603- * Four spaces to be exact
604+ * Spaces, not tabs.
605+ * Four spaces to be exact.
606 * Maximum line length of 80 characters, unless your code gets more
607- confusing by breaking the line (be prepared to justify this)
608- * No trailing whitespace at the end of a line, or blank lines that contain
609- spaces in them
610+ confusing by breaking the line (be prepared to justify this).
611+ * No trailing whitespace at the end of a line.
612 * Make sure copyright notices are found in EVERY source file
613 * If code is "borrowed" from another source, please annotate that. It's
614- just good practice
615+ just good practice.
616 * Strings that will be displayed to the end-user must be wrapped like this
617 _("Example String") this is so it is picked up to be translated.
618 * Formatted strings such as "Track %s of %s" % (number, total) that need
619@@ -123,13 +131,18 @@
620 _("Track %(track)s of %(album)s") % {'track': number, 'album': total}
621 * Docstrings are written compliant with PEP 0257
622
623-== Debugging ==
624+
625+Tips and Tricks
626+===============
627+
628+**Debugging**
629
630 Paul Hummer wrote a blog post on the best practices for working with the pdb
631 debugger, specifically based on his experience using it with Entertainer. It
632-can be found at http://theironlion.net/blog/howto-python-debugging-pdb/
633+can be found at `http://theironlion.net/archive/howto-python-debugging-pdb/
634+<http://theironlion.net/archive/howto-python-debugging-pdb/>`_
635
636-== Testing ==
637+**Testing**
638
639 When starting development, please stop off at src/tests and write a unittest
640 for the feature to be implemented (yes, before developing the feature), or add
641@@ -138,47 +151,43 @@
642 and helps maintain quality code for Entertainer.
643
644 Here is an example unit test, using python's built in unittest module:
645------------------------------------------------------------------------
646-import os
647-import unittest
648-
649-class TestFoo(unittest.TestCase):
650-
651- def setUp(self):
652- '''setUp is for any preliminary things that need to be done
653- prior to actually running the tests, like instantiating objects
654- and database test fixtures'''
655- self.fh = open('foo.file', 'wb')
656- self.foo_to_test = Foo(fh)
657-
658- def testDoStuff(self):
659- self.foo_to_test.doStuff()
660- self.assertTrue(self.foo_to_test.didStuff)
661-
662- def tearDown(self):
663- '''tearDown is the method called after all tests are run, and
664- is used for clean up from anything generated by setUp'''
665- self.foo_to_test.close()
666- self.fh.close()
667- os.remove('foo.file')
668------------------------------------------------------------------------
669+
670+ import os
671+ import unittest
672+
673+ class TestFoo(unittest.TestCase):
674+
675+ def setUp(self):
676+ '''setUp is for any preliminary things that need to be done
677+ prior to actually running the tests, like instantiating objects
678+ and database test fixtures'''
679+ self.fh = open('foo.file', 'wb')
680+ self.foo_to_test = Foo(fh)
681+
682+ def testDoStuff(self):
683+ self.foo_to_test.doStuff()
684+ self.assertTrue(self.foo_to_test.didStuff)
685+
686+ def tearDown(self):
687+ '''tearDown is the method called after all tests are run, and
688+ is used for clean up from anything generated by setUp'''
689+ self.foo_to_test.close()
690+ self.fh.close()
691+ os.remove('foo.file')
692+
693
694 There are a few things that need to be pointed out. First, the test should
695 always inherit from unittest.TestCase?. The run_tests.py script looks for
696-tests that inherit from unittest.TestCase? and runs those tests. Second, the
697+tests that inherit from ``unittest.TestCase`` and runs those tests. Second, the
698 test never prints anything to stdout or stderr. If the test needs to log to a
699 file, that is fine, but please don't print anything to stdout or stderr.
700 Lastly, the tearDown removed a file that was created by the test (and is not
701 checked into svn).
702
703-After the test is written, please run run_tests.py in the src/tests folder,
704-and make sure the test is failing correctly before moving on to development.
705-
706-For more information about the unittest module, and how to use it, please see:
707-
708- * http://docs.python.org/lib/module-unittest.html
709- * http://docs.python.org/lib/doctest-unittest-api.html
710- * http://agiletesting.blogspot.com/2005/01/python-unit-testing-part-1-unittest.html
711- * http://www.onlamp.com/pub/a/python/2004/12/02/tdd_pyunit.html
712- * ...or pretty much anything Grig Gheoghiu or Titus Brown have to say about testing...
713+After the test is written, run the test and make sure the test is failing
714+correctly before moving on to development. To run the whole test suite, run
715+``make check`` in the root of the branch. To run a single test, you can use
716+trial. For instance, to run all the music tests, you'd use
717+``trial entertainerlib.tests.test_music``.
718+
719
720
721=== removed file 'docs/LICENSE'
722--- docs/LICENSE 2008-06-25 02:15:19 +0000
723+++ docs/LICENSE 1970-01-01 00:00:00 +0000
724@@ -1,339 +0,0 @@
725- GNU GENERAL PUBLIC LICENSE
726- Version 2, June 1991
727-
728- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
729- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
730- Everyone is permitted to copy and distribute verbatim copies
731- of this license document, but changing it is not allowed.
732-
733- Preamble
734-
735- The licenses for most software are designed to take away your
736-freedom to share and change it. By contrast, the GNU General Public
737-License is intended to guarantee your freedom to share and change free
738-software--to make sure the software is free for all its users. This
739-General Public License applies to most of the Free Software
740-Foundation's software and to any other program whose authors commit to
741-using it. (Some other Free Software Foundation software is covered by
742-the GNU Lesser General Public License instead.) You can apply it to
743-your programs, too.
744-
745- When we speak of free software, we are referring to freedom, not
746-price. Our General Public Licenses are designed to make sure that you
747-have the freedom to distribute copies of free software (and charge for
748-this service if you wish), that you receive source code or can get it
749-if you want it, that you can change the software or use pieces of it
750-in new free programs; and that you know you can do these things.
751-
752- To protect your rights, we need to make restrictions that forbid
753-anyone to deny you these rights or to ask you to surrender the rights.
754-These restrictions translate to certain responsibilities for you if you
755-distribute copies of the software, or if you modify it.
756-
757- For example, if you distribute copies of such a program, whether
758-gratis or for a fee, you must give the recipients all the rights that
759-you have. You must make sure that they, too, receive or can get the
760-source code. And you must show them these terms so they know their
761-rights.
762-
763- We protect your rights with two steps: (1) copyright the software, and
764-(2) offer you this license which gives you legal permission to copy,
765-distribute and/or modify the software.
766-
767- Also, for each author's protection and ours, we want to make certain
768-that everyone understands that there is no warranty for this free
769-software. If the software is modified by someone else and passed on, we
770-want its recipients to know that what they have is not the original, so
771-that any problems introduced by others will not reflect on the original
772-authors' reputations.
773-
774- Finally, any free program is threatened constantly by software
775-patents. We wish to avoid the danger that redistributors of a free
776-program will individually obtain patent licenses, in effect making the
777-program proprietary. To prevent this, we have made it clear that any
778-patent must be licensed for everyone's free use or not licensed at all.
779-
780- The precise terms and conditions for copying, distribution and
781-modification follow.
782-
783- GNU GENERAL PUBLIC LICENSE
784- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
785-
786- 0. This License applies to any program or other work which contains
787-a notice placed by the copyright holder saying it may be distributed
788-under the terms of this General Public License. The "Program", below,
789-refers to any such program or work, and a "work based on the Program"
790-means either the Program or any derivative work under copyright law:
791-that is to say, a work containing the Program or a portion of it,
792-either verbatim or with modifications and/or translated into another
793-language. (Hereinafter, translation is included without limitation in
794-the term "modification".) Each licensee is addressed as "you".
795-
796-Activities other than copying, distribution and modification are not
797-covered by this License; they are outside its scope. The act of
798-running the Program is not restricted, and the output from the Program
799-is covered only if its contents constitute a work based on the
800-Program (independent of having been made by running the Program).
801-Whether that is true depends on what the Program does.
802-
803- 1. You may copy and distribute verbatim copies of the Program's
804-source code as you receive it, in any medium, provided that you
805-conspicuously and appropriately publish on each copy an appropriate
806-copyright notice and disclaimer of warranty; keep intact all the
807-notices that refer to this License and to the absence of any warranty;
808-and give any other recipients of the Program a copy of this License
809-along with the Program.
810-
811-You may charge a fee for the physical act of transferring a copy, and
812-you may at your option offer warranty protection in exchange for a fee.
813-
814- 2. You may modify your copy or copies of the Program or any portion
815-of it, thus forming a work based on the Program, and copy and
816-distribute such modifications or work under the terms of Section 1
817-above, provided that you also meet all of these conditions:
818-
819- a) You must cause the modified files to carry prominent notices
820- stating that you changed the files and the date of any change.
821-
822- b) You must cause any work that you distribute or publish, that in
823- whole or in part contains or is derived from the Program or any
824- part thereof, to be licensed as a whole at no charge to all third
825- parties under the terms of this License.
826-
827- c) If the modified program normally reads commands interactively
828- when run, you must cause it, when started running for such
829- interactive use in the most ordinary way, to print or display an
830- announcement including an appropriate copyright notice and a
831- notice that there is no warranty (or else, saying that you provide
832- a warranty) and that users may redistribute the program under
833- these conditions, and telling the user how to view a copy of this
834- License. (Exception: if the Program itself is interactive but
835- does not normally print such an announcement, your work based on
836- the Program is not required to print an announcement.)
837-
838-These requirements apply to the modified work as a whole. If
839-identifiable sections of that work are not derived from the Program,
840-and can be reasonably considered independent and separate works in
841-themselves, then this License, and its terms, do not apply to those
842-sections when you distribute them as separate works. But when you
843-distribute the same sections as part of a whole which is a work based
844-on the Program, the distribution of the whole must be on the terms of
845-this License, whose permissions for other licensees extend to the
846-entire whole, and thus to each and every part regardless of who wrote it.
847-
848-Thus, it is not the intent of this section to claim rights or contest
849-your rights to work written entirely by you; rather, the intent is to
850-exercise the right to control the distribution of derivative or
851-collective works based on the Program.
852-
853-In addition, mere aggregation of another work not based on the Program
854-with the Program (or with a work based on the Program) on a volume of
855-a storage or distribution medium does not bring the other work under
856-the scope of this License.
857-
858- 3. You may copy and distribute the Program (or a work based on it,
859-under Section 2) in object code or executable form under the terms of
860-Sections 1 and 2 above provided that you also do one of the following:
861-
862- a) Accompany it with the complete corresponding machine-readable
863- source code, which must be distributed under the terms of Sections
864- 1 and 2 above on a medium customarily used for software interchange; or,
865-
866- b) Accompany it with a written offer, valid for at least three
867- years, to give any third party, for a charge no more than your
868- cost of physically performing source distribution, a complete
869- machine-readable copy of the corresponding source code, to be
870- distributed under the terms of Sections 1 and 2 above on a medium
871- customarily used for software interchange; or,
872-
873- c) Accompany it with the information you received as to the offer
874- to distribute corresponding source code. (This alternative is
875- allowed only for noncommercial distribution and only if you
876- received the program in object code or executable form with such
877- an offer, in accord with Subsection b above.)
878-
879-The source code for a work means the preferred form of the work for
880-making modifications to it. For an executable work, complete source
881-code means all the source code for all modules it contains, plus any
882-associated interface definition files, plus the scripts used to
883-control compilation and installation of the executable. However, as a
884-special exception, the source code distributed need not include
885-anything that is normally distributed (in either source or binary
886-form) with the major components (compiler, kernel, and so on) of the
887-operating system on which the executable runs, unless that component
888-itself accompanies the executable.
889-
890-If distribution of executable or object code is made by offering
891-access to copy from a designated place, then offering equivalent
892-access to copy the source code from the same place counts as
893-distribution of the source code, even though third parties are not
894-compelled to copy the source along with the object code.
895-
896- 4. You may not copy, modify, sublicense, or distribute the Program
897-except as expressly provided under this License. Any attempt
898-otherwise to copy, modify, sublicense or distribute the Program is
899-void, and will automatically terminate your rights under this License.
900-However, parties who have received copies, or rights, from you under
901-this License will not have their licenses terminated so long as such
902-parties remain in full compliance.
903-
904- 5. You are not required to accept this License, since you have not
905-signed it. However, nothing else grants you permission to modify or
906-distribute the Program or its derivative works. These actions are
907-prohibited by law if you do not accept this License. Therefore, by
908-modifying or distributing the Program (or any work based on the
909-Program), you indicate your acceptance of this License to do so, and
910-all its terms and conditions for copying, distributing or modifying
911-the Program or works based on it.
912-
913- 6. Each time you redistribute the Program (or any work based on the
914-Program), the recipient automatically receives a license from the
915-original licensor to copy, distribute or modify the Program subject to
916-these terms and conditions. You may not impose any further
917-restrictions on the recipients' exercise of the rights granted herein.
918-You are not responsible for enforcing compliance by third parties to
919-this License.
920-
921- 7. If, as a consequence of a court judgment or allegation of patent
922-infringement or for any other reason (not limited to patent issues),
923-conditions are imposed on you (whether by court order, agreement or
924-otherwise) that contradict the conditions of this License, they do not
925-excuse you from the conditions of this License. If you cannot
926-distribute so as to satisfy simultaneously your obligations under this
927-License and any other pertinent obligations, then as a consequence you
928-may not distribute the Program at all. For example, if a patent
929-license would not permit royalty-free redistribution of the Program by
930-all those who receive copies directly or indirectly through you, then
931-the only way you could satisfy both it and this License would be to
932-refrain entirely from distribution of the Program.
933-
934-If any portion of this section is held invalid or unenforceable under
935-any particular circumstance, the balance of the section is intended to
936-apply and the section as a whole is intended to apply in other
937-circumstances.
938-
939-It is not the purpose of this section to induce you to infringe any
940-patents or other property right claims or to contest validity of any
941-such claims; this section has the sole purpose of protecting the
942-integrity of the free software distribution system, which is
943-implemented by public license practices. Many people have made
944-generous contributions to the wide range of software distributed
945-through that system in reliance on consistent application of that
946-system; it is up to the author/donor to decide if he or she is willing
947-to distribute software through any other system and a licensee cannot
948-impose that choice.
949-
950-This section is intended to make thoroughly clear what is believed to
951-be a consequence of the rest of this License.
952-
953- 8. If the distribution and/or use of the Program is restricted in
954-certain countries either by patents or by copyrighted interfaces, the
955-original copyright holder who places the Program under this License
956-may add an explicit geographical distribution limitation excluding
957-those countries, so that distribution is permitted only in or among
958-countries not thus excluded. In such case, this License incorporates
959-the limitation as if written in the body of this License.
960-
961- 9. The Free Software Foundation may publish revised and/or new versions
962-of the General Public License from time to time. Such new versions will
963-be similar in spirit to the present version, but may differ in detail to
964-address new problems or concerns.
965-
966-Each version is given a distinguishing version number. If the Program
967-specifies a version number of this License which applies to it and "any
968-later version", you have the option of following the terms and conditions
969-either of that version or of any later version published by the Free
970-Software Foundation. If the Program does not specify a version number of
971-this License, you may choose any version ever published by the Free Software
972-Foundation.
973-
974- 10. If you wish to incorporate parts of the Program into other free
975-programs whose distribution conditions are different, write to the author
976-to ask for permission. For software which is copyrighted by the Free
977-Software Foundation, write to the Free Software Foundation; we sometimes
978-make exceptions for this. Our decision will be guided by the two goals
979-of preserving the free status of all derivatives of our free software and
980-of promoting the sharing and reuse of software generally.
981-
982- NO WARRANTY
983-
984- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
985-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
986-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
987-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
988-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
989-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
990-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
991-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
992-REPAIR OR CORRECTION.
993-
994- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
995-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
996-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
997-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
998-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
999-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
1000-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
1001-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
1002-POSSIBILITY OF SUCH DAMAGES.
1003-
1004- END OF TERMS AND CONDITIONS
1005-
1006- How to Apply These Terms to Your New Programs
1007-
1008- If you develop a new program, and you want it to be of the greatest
1009-possible use to the public, the best way to achieve this is to make it
1010-free software which everyone can redistribute and change under these terms.
1011-
1012- To do so, attach the following notices to the program. It is safest
1013-to attach them to the start of each source file to most effectively
1014-convey the exclusion of warranty; and each file should have at least
1015-the "copyright" line and a pointer to where the full notice is found.
1016-
1017- <one line to give the program's name and a brief idea of what it does.>
1018- Copyright (C) <year> <name of author>
1019-
1020- This program is free software; you can redistribute it and/or modify
1021- it under the terms of the GNU General Public License as published by
1022- the Free Software Foundation; either version 2 of the License, or
1023- (at your option) any later version.
1024-
1025- This program is distributed in the hope that it will be useful,
1026- but WITHOUT ANY WARRANTY; without even the implied warranty of
1027- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1028- GNU General Public License for more details.
1029-
1030- You should have received a copy of the GNU General Public License along
1031- with this program; if not, write to the Free Software Foundation, Inc.,
1032- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1033-
1034-Also add information on how to contact you by electronic and paper mail.
1035-
1036-If the program is interactive, make it output a short notice like this
1037-when it starts in an interactive mode:
1038-
1039- Gnomovision version 69, Copyright (C) year name of author
1040- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
1041- This is free software, and you are welcome to redistribute it
1042- under certain conditions; type `show c' for details.
1043-
1044-The hypothetical commands `show w' and `show c' should show the appropriate
1045-parts of the General Public License. Of course, the commands you use may
1046-be called something other than `show w' and `show c'; they could even be
1047-mouse-clicks or menu items--whatever suits your program.
1048-
1049-You should also get your employer (if you work as a programmer) or your
1050-school, if any, to sign a "copyright disclaimer" for the program, if
1051-necessary. Here is a sample; alter the names:
1052-
1053- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
1054- `Gnomovision' (which makes passes at compilers) written by James Hacker.
1055-
1056- <signature of Ty Coon>, 1 April 1989
1057- Ty Coon, President of Vice
1058-
1059-This General Public License does not permit incorporating your program into
1060-proprietary programs. If your program is a subroutine library, you may
1061-consider it more useful to permit linking proprietary applications with the
1062-library. If this is what you want to do, use the GNU Lesser General
1063-Public License instead of this License.
1064
1065=== removed file 'docs/backend_core.tex'
1066--- docs/backend_core.tex 2008-12-14 19:58:40 +0000
1067+++ docs/backend_core.tex 1970-01-01 00:00:00 +0000
1068@@ -1,25 +0,0 @@
1069-Backend uses \emph{message-bus architecure}. Core of the backend consists of
1070-\emph{message bus}, \emph{messages}, \emph{message scheduler}, \emph{connection server} and \emph{message bus proxy}. All components of the backend are registered to message bus. Backend components communicate with each other by sending messages to the message bus. Also client processes can register them selves to the message bus via message-bus proxy. This way clients can trasparently communicate with backend components. Behind the curtains this communication is implemented using sockets, but clients doesn't need to know that. All they know is that they can send and receive messages. Figure \ref{fig:backend_arch} illustrates the architecture with a high level diagram. In the following sections we dicuss each component in more detail.
1071-
1072-\begin{figure}[htb]
1073- \begin{center}
1074- \includegraphics[angle=0,scale=0.4]{diagrams/Backend/high_level.png}
1075- \caption{Backend architecure}
1076- \label{fig:backend_arch}
1077- \end{center}
1078-\end{figure}
1079-
1080-\subsubsection{Message bus}
1081-Message bus is an object (type of \texttt{MessageBus}) that is resposible of transmitting messages between registered components. Every component has to implement \texttt{MessageHandler} interface so that it can receive messages properly. \texttt{MessageBus} has more also more advanced features than just trasmitting messages to all components. Every component has to determine message types that it is interested in. Components also determine the priority level for each message type. This way \texttt{MessageBus} doesn't have to transmit all messages to all components. Instead, it notifies only those components that are really interested in some particular message type. For more, \texttt{MessageBus} notifies those components in the order of priorites. For example, it is more critical to start recording as soon as possible than display notification bubble that recording has been started. That's why DVB-recorder tells the \texttt{MessageBus} that it has \texttt{VERY\_HIGH} priori
1082 ty for \texttt{START\_RECORDING} message type and similary notification system says that it has \texttt{VERY\_LOW} priority. Now, when \texttt{START\_RECORDING} message occurs, the \texttt{MessageBus} knows that it should first notify DVB-recorder and after that notification system. MessageBus is locked in such a way that only one message can occur at the time on the bus.
1083-
1084-\subsubsection{Message}
1085-Message is an object of \texttt{Message} type. These are the objects that are transmitted via \texttt{MessageBus}. Each Message has a message type and possibly some user data. Data part can contain arbitary data or it can be empty. Message types are defined in \texttt{MessageType} class. I suggest to take a look of that class, because it provides more information about the meaning of different message types. When component wants to send a \texttt{Message} to the \texttt{MessageBus} it needs to create a Message object and after that call \texttt{MessageBus}-object's \texttt{notifyMessage(message\_obj)} method.
1086-
1087-\subsubsection{Message scheduler}
1088-\texttt{MessageScheduler} object generates messages to the message bus. When backend starts, it registers message types and intervals to the \texttt{MessageScheduler}. After that messages are generated to the message bus in given time intervals. When message types are registered to the \texttt{MessageScheduler}, it creates a random time interval for each message type. This prevents all messages to be generated at the same time to the message bus. Random time interval is waited only the first time. After this messages are generated with given time interval. This scheduler is used for updateing guide and feed cache every now and then. It is also easy to add new features that require frequent updates.
1089-
1090-\subsubsection{Connection server}
1091-\texttt{ConnectionServer} listens incoming client connections and binds connected clients to the MessageBus. Every client is handled in it's own thread. This class is strictly binded to the MessageBusProxy class which we will discuss in next section.
1092-
1093-\subsubsection{Message bus proxy}
1094-\texttt{MessageBusProxy} object hides the complexity of sockets. \texttt{MessageBusProxy} is used in client process (Frontend for example) and it is abstraction of backend's \texttt{MessageBus}. In other words, client processes can act like backend components simply by using object of this class. This makes communication between components very easy no matter in which process the components are actually running.
1095
1096=== removed file 'docs/cache.tex'
1097--- docs/cache.tex 2008-12-14 19:58:40 +0000
1098+++ docs/cache.tex 1970-01-01 00:00:00 +0000
1099@@ -1,79 +0,0 @@
1100-Entertainer has a cache almost for every data type that it handles including
1101-images, videos, music, feeds, tv-guide and recordings. All caches are
1102-implemented as SQLite databases. Every cache is stored in it's own file that
1103-has \texttt{db} extension. Caches are stored in the following directory:
1104-\texttt{$\sim$/.entertainer/cache}.
1105-
1106-\subsection{Descriptions}
1107-
1108-\subsubsection{Image cache}
1109-Image cache contains all information of the images. It has two tables:
1110-\texttt{Image} and \texttt{Album}. Album has a title and description and it
1111-contains images. Image table contains information on images. One row matches
1112-to one file. Entertainer considers folder as an album and images in that folder
1113-belog to that album. Subfolder are own albums and there is no deep hierarcy in
1114-image cache. In figure \ref{fig:image_er} is ER-diagram of the image cache database.
1115-This database is stored in \texttt{$\sim$/.entertainer/cache/image.db}.
1116-
1117-\subsubsection{Music cache}
1118-Music cache contains everything related to the music library. Entertainer's
1119-music library contains Albums, Tracks, Artists and Playlists. All this data
1120-is stored in music cache database, which is stored in
1121-\texttt{$\sim$/.entertainer/cache/music.db} -file. In figure \ref{fig:music_er}
1122-you can see the structure of the cache. As you can see, there is only \texttt{Track}
1123-and \texttt{Playlist} tables. MusicLibrary handels the abstraction of albums and
1124-artists. This cache is created in \texttt{backend/components/mediacache/music\_cache.py}.
1125-
1126-\subsubsection{Video cache}
1127-Video cache contains information on video files. These do NOT include recorded
1128-TV-shows, but only the files that are in video library. Video cache contains two
1129-tabels \texttt{videofile} and \texttt{metadata} (actually these should be merged).
1130-\texttt{Videofile} table contains basic information on video and \texttt{metadata}
1131-some extrnal information. Metadata table contains type field, which determinse
1132-the type of the videofile. Allowed values are \texttt{MOVIE}, \texttt{CLIP} and
1133-\texttt{TV-SERIES}. According to this field the video is represnted as a
1134-\texttt{Movie}, \texttt{TVEpisode} or \texttt{VideoClip} object in VideoLibrary
1135-(client side). This cache database is stored in \texttt{$\sim$/.entertainer/cache/video.db}.
1136-In figure \ref{fig:video_er}
1137-
1138-\subsubsection{Feed cache}
1139-Feed cache includes all feeds and entries of those feeds. Entry is a one ''post''
1140-of the feed. Backend fetches feeds time to time and updates the cache. Cache keeps
1141-up to 50 entries per feed. In figure \ref{fig:feed_er} you can see the structure
1142-of the Feed cache. Cache is stored in \texttt{$\sim$/.entertainer/cache/feed.db}
1143-
1144-\subsection{ER-diagrams}
1145-\begin{comment}
1146-
1147-\begin{figure}[htb]
1148- \begin{center}
1149- \includegraphics[angle=0,scale=0.6]{diagrams/ER/image_library_er.png}
1150- \caption{ER-diagram of the image cache.}
1151- \label{fig:image_er}
1152- \end{center}
1153-\end{figure}
1154-
1155-\begin{figure}[htb]
1156- \begin{center}
1157- \includegraphics[angle=0,scale=0.6]{diagrams/ER/music_library_er.png}
1158- \caption{ER-diagram of the music cache.}
1159- \label{fig:music_er}
1160- \end{center}
1161-\end{figure}
1162-
1163-\begin{figure}[htb]
1164- \begin{center}
1165- \includegraphics[angle=0,scale=0.6]{diagrams/ER/feed_library_er.png}
1166- \caption{ER-diagram of the video cache.}
1167- \label{fig:video_er}
1168- \end{center}
1169-\end{figure}
1170-
1171-\begin{figure}[htb]
1172- \begin{center}
1173- \includegraphics[angle=0,scale=0.6]{diagrams/ER/feed_library_er.png}
1174- \caption{ER-diagram of the feed cache.}
1175- \label{fig:feed_er}
1176- \end{center}
1177-\end{figure}
1178-\end{comment}
1179
1180=== removed file 'docs/components.tex'
1181--- docs/components.tex 2008-12-14 19:58:40 +0000
1182+++ docs/components.tex 1970-01-01 00:00:00 +0000
1183@@ -1,8 +0,0 @@
1184-\subsubsection{System tray icon}
1185-(Partly depricated information) System tray icon is a small icon that is usually displayed in notification area. \texttt{SystemTrayIcon} class implements this icon and it's pop-up menu, which allows user to manage Entertainer media center. Pop-up menu contains Log viewer, which can be used to see Entertainer's log. It also allowes easy way to execute configuration GUIs and frontend process. SystemTrayIcon class implements MessageHandler and it is interested of messages \texttt{RECORDING\_STARTED} and \texttt{RECORDING\_STOPPED}. When Entertainer is recording a TV-show the system tray icon changes to the recording icon. This way user can easily see that Entertainer is currently recording.
1186-
1187-\subsubsection{Notification system}
1188-Notification system displays notification bubbels on the desktop. Notification system is implemented with \texttt{Notify} class that uses \emph{libnotify} library. Notification bubbles are displayed when Entertainer backend begins or ends recording and also if there are conflicts between scheduled recordings. It's easy to add new notifications by modifying the \texttt{Notify} class. \texttt{Notify} implements \texttt{MessageHandler} and it's registered to the message bus when backend starts.
1189-
1190-\subsubsection{Feed manager}
1191-Feed manager is responsible of updateing feed cache. At the moment, only RSS-feeds are supported. \texttt{FeedManager} and \texttt{FeedFetcher} classes implements this feature. \texttt{FeedManager} implements \texttt{MessageHandler} interface and it is registered to the message bus. When \texttt{FeedManager} receives \texttt{UPDATE\_FEEDS} message, it executes a new \texttt{FeedFetcher} thread that does the actually cache updating. When update is done, \texttt{FEED\_CACHE\_UPDATED} message is emitted to the message bus.
1192
1193=== removed file 'docs/content_management_gui.tex'
1194--- docs/content_management_gui.tex 2008-12-14 19:58:40 +0000
1195+++ docs/content_management_gui.tex 1970-01-01 00:00:00 +0000
1196@@ -1,1 +0,0 @@
1197-Content Management GUI is exactly like Preferences GUI, but it is used to manage content of the Entertainer. This GUI application allows user to add and remove content of the Entertainer easily. Content Management GUI edits the \texttt{/.entertainer/content.cfg} -file and also notifies the backend when changes occur. Just like the Preferences GUI.
1198
1199=== removed file 'docs/developer_documentation.aux'
1200--- docs/developer_documentation.aux 2008-12-14 19:58:40 +0000
1201+++ docs/developer_documentation.aux 1970-01-01 00:00:00 +0000
1202@@ -1,38 +0,0 @@
1203-\relax
1204-\select@language{english}
1205-\@writefile{toc}{\select@language{english}}
1206-\@writefile{lof}{\select@language{english}}
1207-\@writefile{lot}{\select@language{english}}
1208-\@writefile{toc}{\contentsline {section}{\numberline {1}INTRODUCTION}{1}}
1209-\@writefile{toc}{\contentsline {section}{\numberline {2}HIGH LEVEL ARCHITECTURE}{2}}
1210-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces High-level architecure}}{2}}
1211-\newlabel{fig:high_level_arch}{{1}{2}}
1212-\@writefile{toc}{\contentsline {section}{\numberline {3}CACHE}{4}}
1213-\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Descriptions}{4}}
1214-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}Image cache}{4}}
1215-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.2}Music cache}{4}}
1216-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.3}Video cache}{5}}
1217-\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.4}Feed cache}{5}}
1218-\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}ER-diagrams}{5}}
1219-\@writefile{toc}{\contentsline {section}{\numberline {4}BACKEND}{6}}
1220-\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Core}{6}}
1221-\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Backend architecure}}{6}}
1222-\newlabel{fig:backend_arch}{{2}{6}}
1223-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}Message bus}{7}}
1224-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2}Message}{7}}
1225-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.3}Message scheduler}{7}}
1226-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.4}Connection server}{8}}
1227-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.5}Message bus proxy}{8}}
1228-\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Components}{8}}
1229-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.1}System tray icon}{8}}
1230-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2}Notification system}{9}}
1231-\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.3}Feed manager}{9}}
1232-\@writefile{toc}{\contentsline {section}{\numberline {5}FRONTEND}{10}}
1233-\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Architecture}{10}}
1234-\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Graphical User Interface}{10}}
1235-\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Entertainer GUI layers.}}{11}}
1236-\newlabel{fig:layers}{{3}{11}}
1237-\@writefile{toc}{\contentsline {section}{\numberline {6}EXTRA TOOLS FOR ENTERTAINER}{13}}
1238-\@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Preferences GUI}{13}}
1239-\@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Content management GUI}{13}}
1240-\@writefile{toc}{\contentsline {subsection}{\numberline {6.3}Message bus notifier}{13}}
1241
1242=== removed file 'docs/developer_documentation.tex'
1243--- docs/developer_documentation.tex 2008-12-14 19:58:40 +0000
1244+++ docs/developer_documentation.tex 1970-01-01 00:00:00 +0000
1245@@ -1,94 +0,0 @@
1246-\documentclass[12pt,a4paper]{article}
1247-\usepackage[utf8]{inputenc}
1248-\usepackage[english]{babel}
1249-
1250-\usepackage{graphicx}
1251-\usepackage{verbatim}
1252-\usepackage{cite}
1253-
1254-% Marginal (left/right)
1255-\setlength{\hoffset}{0mm}
1256-\setlength{\marginparsep}{0mm}
1257-\setlength{\marginparwidth}{0mm}
1258-\setlength{\textwidth}{\paperwidth}
1259-\addtolength\textwidth{-60 mm}
1260-\setlength{\oddsidemargin}{-1 in}
1261-\addtolength\oddsidemargin{40 mm}
1262-
1263-% Marginal (top/down)
1264-\setlength{\voffset}{0 mm}
1265-\setlength{\topmargin}{0 mm}
1266-\setlength{\headheight}{12 pt}
1267-\setlength{\headsep}{24 pt}
1268-\setlength{\textheight}{230mm}
1269-\setlength{\footnotesep}{12 pt}
1270-
1271-\setlength{\parindent}{0pt}
1272-\setlength{\parskip}{0.05cm}
1273-\linespread{1.3}
1274-
1275-\title{Entertainer - Developer's documentation}
1276-\author{Lauri Taimila}
1277-\date{05/27/2007}
1278-
1279-\begin{document}
1280-
1281- % Cover page
1282- \pagestyle{empty}
1283- \maketitle
1284- \pagebreak
1285-
1286- % Page numbering for contents
1287- \setcounter{page}{1}
1288- \pagestyle{plain}
1289- \markright{Latex-dokumentti}
1290- \pagenumbering{roman}
1291-
1292- \renewcommand{\baselinestretch}{1.2}
1293- \tableofcontents
1294- \pagebreak
1295-
1296- % Start page numbering from Introduction page
1297- \newpage
1298- \setcounter{page}{1}
1299- \pagenumbering{arabic}
1300- \pagestyle{plain}
1301-
1302- \renewcommand{\baselinestretch}{1.655}
1303- \setlength{\parskip}{0.7cm plus3mm minus3mm}
1304-
1305- \section{INTRODUCTION}
1306- \input{introduction.tex}
1307- \newpage
1308-
1309- \section{HIGH LEVEL ARCHITECTURE}
1310- \input{high_level_architecture.tex}
1311- \newpage
1312-
1313- \section{CACHE}
1314- \input{cache.tex}
1315- \newpage
1316-
1317- \section{BACKEND}
1318- \subsection{Core}
1319- \input{backend_core.tex}
1320- \subsection{Components}
1321- \input{components.tex}
1322-
1323- \newpage
1324- \section{FRONTEND}
1325- \subsection{Architecture}
1326- \input{frontend_architecture.tex}
1327- \subsection{Graphical User Interface}
1328- \input{gui.tex}
1329-
1330- \newpage
1331- \section{EXTRA TOOLS FOR ENTERTAINER}
1332- \subsection{Preferences GUI}
1333- \input{preferences_gui.tex}
1334- \subsection{Content management GUI}
1335- \input{content_management_gui.tex}
1336- \subsection{Message bus notifier}
1337- \input{message_bus_notifier.tex}
1338-\end{document}
1339-
1340
1341=== removed file 'docs/developer_documentation.toc'
1342--- docs/developer_documentation.toc 2008-12-14 19:58:40 +0000
1343+++ docs/developer_documentation.toc 1970-01-01 00:00:00 +0000
1344@@ -1,28 +0,0 @@
1345-\select@language {english}
1346-\contentsline {section}{\numberline {1}INTRODUCTION}{1}
1347-\contentsline {section}{\numberline {2}HIGH LEVEL ARCHITECTURE}{2}
1348-\contentsline {section}{\numberline {3}CACHE}{4}
1349-\contentsline {subsection}{\numberline {3.1}Descriptions}{4}
1350-\contentsline {subsubsection}{\numberline {3.1.1}Image cache}{4}
1351-\contentsline {subsubsection}{\numberline {3.1.2}Music cache}{4}
1352-\contentsline {subsubsection}{\numberline {3.1.3}Video cache}{5}
1353-\contentsline {subsubsection}{\numberline {3.1.4}Feed cache}{5}
1354-\contentsline {subsection}{\numberline {3.2}ER-diagrams}{5}
1355-\contentsline {section}{\numberline {4}BACKEND}{6}
1356-\contentsline {subsection}{\numberline {4.1}Core}{6}
1357-\contentsline {subsubsection}{\numberline {4.1.1}Message bus}{7}
1358-\contentsline {subsubsection}{\numberline {4.1.2}Message}{7}
1359-\contentsline {subsubsection}{\numberline {4.1.3}Message scheduler}{7}
1360-\contentsline {subsubsection}{\numberline {4.1.4}Connection server}{8}
1361-\contentsline {subsubsection}{\numberline {4.1.5}Message bus proxy}{8}
1362-\contentsline {subsection}{\numberline {4.2}Components}{8}
1363-\contentsline {subsubsection}{\numberline {4.2.1}System tray icon}{8}
1364-\contentsline {subsubsection}{\numberline {4.2.2}Notification system}{9}
1365-\contentsline {subsubsection}{\numberline {4.2.3}Feed manager}{9}
1366-\contentsline {section}{\numberline {5}FRONTEND}{10}
1367-\contentsline {subsection}{\numberline {5.1}Architecture}{10}
1368-\contentsline {subsection}{\numberline {5.2}Graphical User Interface}{10}
1369-\contentsline {section}{\numberline {6}EXTRA TOOLS FOR ENTERTAINER}{13}
1370-\contentsline {subsection}{\numberline {6.1}Preferences GUI}{13}
1371-\contentsline {subsection}{\numberline {6.2}Content management GUI}{13}
1372-\contentsline {subsection}{\numberline {6.3}Message bus notifier}{13}
1373
1374=== removed directory 'docs/diagrams'
1375=== removed directory 'docs/diagrams/Backend'
1376=== removed file 'docs/diagrams/Backend/Backend_classes_in_detail.dia'
1377Binary files docs/diagrams/Backend/Backend_classes_in_detail.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/Backend_classes_in_detail.dia 1970-01-01 00:00:00 +0000 differ
1378=== removed file 'docs/diagrams/Backend/Backend_classes_in_detail.png'
1379Binary files docs/diagrams/Backend/Backend_classes_in_detail.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/Backend_classes_in_detail.png 1970-01-01 00:00:00 +0000 differ
1380=== removed file 'docs/diagrams/Backend/backend_class_diagram.dia'
1381Binary files docs/diagrams/Backend/backend_class_diagram.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/backend_class_diagram.dia 1970-01-01 00:00:00 +0000 differ
1382=== removed file 'docs/diagrams/Backend/backend_class_diagram.png'
1383Binary files docs/diagrams/Backend/backend_class_diagram.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/backend_class_diagram.png 1970-01-01 00:00:00 +0000 differ
1384=== removed file 'docs/diagrams/Backend/backend_class_diagram_new.dia'
1385Binary files docs/diagrams/Backend/backend_class_diagram_new.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/backend_class_diagram_new.dia 1970-01-01 00:00:00 +0000 differ
1386=== removed file 'docs/diagrams/Backend/backend_class_diagram_new.png'
1387Binary files docs/diagrams/Backend/backend_class_diagram_new.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/backend_class_diagram_new.png 1970-01-01 00:00:00 +0000 differ
1388=== removed file 'docs/diagrams/Backend/backend_hi_level_arch.dia'
1389Binary files docs/diagrams/Backend/backend_hi_level_arch.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/backend_hi_level_arch.dia 1970-01-01 00:00:00 +0000 differ
1390=== removed file 'docs/diagrams/Backend/high_level.png'
1391Binary files docs/diagrams/Backend/high_level.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/high_level.png 1970-01-01 00:00:00 +0000 differ
1392=== removed file 'docs/diagrams/Backend/image_cache_sequece_diagram.dia'
1393Binary files docs/diagrams/Backend/image_cache_sequece_diagram.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/image_cache_sequece_diagram.dia 1970-01-01 00:00:00 +0000 differ
1394=== removed file 'docs/diagrams/Backend/image_cache_sequece_diagram.png'
1395Binary files docs/diagrams/Backend/image_cache_sequece_diagram.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/image_cache_sequece_diagram.png 1970-01-01 00:00:00 +0000 differ
1396=== removed file 'docs/diagrams/Backend/media_indexer_class_diagram.dia'
1397Binary files docs/diagrams/Backend/media_indexer_class_diagram.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/media_indexer_class_diagram.dia 1970-01-01 00:00:00 +0000 differ
1398=== removed file 'docs/diagrams/Backend/media_indexer_class_diagram.png'
1399Binary files docs/diagrams/Backend/media_indexer_class_diagram.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Backend/media_indexer_class_diagram.png 1970-01-01 00:00:00 +0000 differ
1400=== removed directory 'docs/diagrams/ER'
1401=== removed file 'docs/diagrams/ER/feed_library_er.dia'
1402Binary files docs/diagrams/ER/feed_library_er.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/ER/feed_library_er.dia 1970-01-01 00:00:00 +0000 differ
1403=== removed file 'docs/diagrams/ER/feed_library_er.png'
1404Binary files docs/diagrams/ER/feed_library_er.png 2008-12-14 19:58:40 +0000 and docs/diagrams/ER/feed_library_er.png 1970-01-01 00:00:00 +0000 differ
1405=== removed file 'docs/diagrams/ER/image_library_er.dia'
1406Binary files docs/diagrams/ER/image_library_er.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/ER/image_library_er.dia 1970-01-01 00:00:00 +0000 differ
1407=== removed file 'docs/diagrams/ER/image_library_er.png'
1408Binary files docs/diagrams/ER/image_library_er.png 2008-12-14 19:58:40 +0000 and docs/diagrams/ER/image_library_er.png 1970-01-01 00:00:00 +0000 differ
1409=== removed file 'docs/diagrams/ER/music_library_er.dia'
1410Binary files docs/diagrams/ER/music_library_er.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/ER/music_library_er.dia 1970-01-01 00:00:00 +0000 differ
1411=== removed file 'docs/diagrams/ER/music_library_er.png'
1412Binary files docs/diagrams/ER/music_library_er.png 2008-12-14 19:58:40 +0000 and docs/diagrams/ER/music_library_er.png 1970-01-01 00:00:00 +0000 differ
1413=== removed directory 'docs/diagrams/Frontend'
1414=== removed file 'docs/diagrams/Frontend/frontend_class_diagram.dia'
1415Binary files docs/diagrams/Frontend/frontend_class_diagram.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/frontend_class_diagram.dia 1970-01-01 00:00:00 +0000 differ
1416=== removed file 'docs/diagrams/Frontend/frontend_class_diagram.png'
1417Binary files docs/diagrams/Frontend/frontend_class_diagram.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/frontend_class_diagram.png 1970-01-01 00:00:00 +0000 differ
1418=== removed file 'docs/diagrams/Frontend/frontend_class_diagram_high.dia'
1419Binary files docs/diagrams/Frontend/frontend_class_diagram_high.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/frontend_class_diagram_high.dia 1970-01-01 00:00:00 +0000 differ
1420=== removed file 'docs/diagrams/Frontend/frontend_class_diagram_high.png'
1421Binary files docs/diagrams/Frontend/frontend_class_diagram_high.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/frontend_class_diagram_high.png 1970-01-01 00:00:00 +0000 differ
1422=== removed file 'docs/diagrams/Frontend/gui.dia'
1423Binary files docs/diagrams/Frontend/gui.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/gui.dia 1970-01-01 00:00:00 +0000 differ
1424=== removed directory 'docs/diagrams/Frontend/medialibrary'
1425=== removed file 'docs/diagrams/Frontend/medialibrary/feed_library.dia'
1426Binary files docs/diagrams/Frontend/medialibrary/feed_library.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/feed_library.dia 1970-01-01 00:00:00 +0000 differ
1427=== removed file 'docs/diagrams/Frontend/medialibrary/feed_library.png'
1428Binary files docs/diagrams/Frontend/medialibrary/feed_library.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/feed_library.png 1970-01-01 00:00:00 +0000 differ
1429=== removed file 'docs/diagrams/Frontend/medialibrary/image_library.dia'
1430Binary files docs/diagrams/Frontend/medialibrary/image_library.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/image_library.dia 1970-01-01 00:00:00 +0000 differ
1431=== removed file 'docs/diagrams/Frontend/medialibrary/image_library.png'
1432Binary files docs/diagrams/Frontend/medialibrary/image_library.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/image_library.png 1970-01-01 00:00:00 +0000 differ
1433=== removed file 'docs/diagrams/Frontend/medialibrary/music_library.dia'
1434Binary files docs/diagrams/Frontend/medialibrary/music_library.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/music_library.dia 1970-01-01 00:00:00 +0000 differ
1435=== removed file 'docs/diagrams/Frontend/medialibrary/music_library.png'
1436Binary files docs/diagrams/Frontend/medialibrary/music_library.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/music_library.png 1970-01-01 00:00:00 +0000 differ
1437=== removed file 'docs/diagrams/Frontend/medialibrary/video_library.dia'
1438Binary files docs/diagrams/Frontend/medialibrary/video_library.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/video_library.dia 1970-01-01 00:00:00 +0000 differ
1439=== removed file 'docs/diagrams/Frontend/medialibrary/video_library.png'
1440Binary files docs/diagrams/Frontend/medialibrary/video_library.png 2008-12-14 19:58:40 +0000 and docs/diagrams/Frontend/medialibrary/video_library.png 1970-01-01 00:00:00 +0000 differ
1441=== removed file 'docs/diagrams/Frontend/weather.dia'
1442Binary files docs/diagrams/Frontend/weather.dia 2008-03-08 16:42:27 +0000 and docs/diagrams/Frontend/weather.dia 1970-01-01 00:00:00 +0000 differ
1443=== removed file 'docs/diagrams/gui_layers.png'
1444Binary files docs/diagrams/gui_layers.png 2008-01-12 22:26:09 +0000 and docs/diagrams/gui_layers.png 1970-01-01 00:00:00 +0000 differ
1445=== removed file 'docs/diagrams/high-level-diagram.dia'
1446Binary files docs/diagrams/high-level-diagram.dia 2008-12-14 19:58:40 +0000 and docs/diagrams/high-level-diagram.dia 1970-01-01 00:00:00 +0000 differ
1447=== removed file 'docs/diagrams/high-level-diagram.png'
1448Binary files docs/diagrams/high-level-diagram.png 2008-12-14 19:58:40 +0000 and docs/diagrams/high-level-diagram.png 1970-01-01 00:00:00 +0000 differ
1449=== added file 'docs/entertainer-depgraph.png'
1450Binary files docs/entertainer-depgraph.png 1970-01-01 00:00:00 +0000 and docs/entertainer-depgraph.png 2009-02-01 19:35:11 +0000 differ
1451=== renamed file 'docs/entertainer.1.gz' => 'docs/entertainer.1'
1452Binary files docs/entertainer.1.gz 2008-12-16 03:37:47 +0000 and docs/entertainer.1 2009-02-01 06:12:43 +0000 differ
1453=== removed file 'docs/frontend_architecture.tex'
1454--- docs/frontend_architecture.tex 2008-01-12 22:26:09 +0000
1455+++ docs/frontend_architecture.tex 1970-01-01 00:00:00 +0000
1456@@ -1,1 +0,0 @@
1457-Not written yet...
1458
1459=== removed file 'docs/gui.tex'
1460--- docs/gui.tex 2008-01-12 22:26:09 +0000
1461+++ docs/gui.tex 1970-01-01 00:00:00 +0000
1462@@ -1,68 +0,0 @@
1463-Graphical user interface is one of the most important parts of the Media Center
1464-application. Entertainer user interface is implemented with Clutter and GTK. Frontend
1465-consists of GTK-window that contains toolbar, menu bar, status bar and the most
1466-important part ,\textit{Clutter stage}, which is displayed via Clutter-GTK widget.
1467-Frontend also includes preferences dialog, content management dialog and log viewer.
1468-All these three sub components can be also executed as separated processes without
1469-executing the whole frontend. These dialogs are discussed more depth in chapter 6.
1470-
1471-In this chapter we concentrate to the Clutter part of the GUI. The main class of
1472-the GUI is \textit{UserInterface} that is responsible of managing screen changes
1473-and creating all screens. \textit{UserInterface} object also receives all user
1474-actions. When key press is received, UserInterface object method \texttt{handle\_key\_press\_event()}
1475-is called. This method decides how to react to key press action. Usually it just
1476-forwards event to the current screen. Current screen has internal logic for events.
1477-
1478-\subsubsection*{Entertainer UI layers}
1479-Entertainer UI can be thinked as a set of layers that are piled on to each other.
1480-This screen stack is illustrated in the figure \ref{fig:layers}.
1481-
1482-\begin{figure}[htb]
1483- \begin{center}
1484- \includegraphics[angle=0,scale=0.7]{diagrams/gui_layers.png}
1485- \caption{Entertainer GUI layers.}
1486- \label{fig:layers}
1487- \end{center}
1488-\end{figure}
1489-
1490-Figure above shows how video is always displayd under menu overlay and screen
1491-widgets. If video is not running the whole layer doesn't exists. In this case
1492-the background layer is displayed through menu overlay image. If current screen
1493-is OSD type, then menu overlay layer is hidden. This way OSD screens allow user
1494-to see video playback on screen as it should be seen. Menu overlay layer is drawn
1495-only when user is navigating in menus. This figure omits the possibility of two
1496-screens to be displayed at the same time. This happends when another screen is
1497-type of DIALOG. Dialogs are shown on top of the current screen.
1498-
1499-\subsubsection*{Screen life cycle}
1500-Entertainer has two important concepts: \textit{Screen} and \textit{Transition}.
1501-These both are also interfaces that many classes implement. Screen is a set of
1502-Clutter actors, which together create one view. View is what users sees on screen.
1503-Transition is a mechanism to animate screen switches. Say, when user selects
1504-photo album from the photo album list, we need to switch from the photo screen
1505-to the album screen. When this happens. We call UserInterface objects's c\texttt{hangeScreen()}.
1506-This call creates a new screen (in this case album screen) and then gives current
1507-screen and new screen to the Transition object, which animates screen switch.
1508-
1509-Screen is created when it is needed, in other words, when user enters to that screen.
1510-When screen object is created it is added to the Clutter stage object. It's also
1511-pushed into the \textit{Screen history}, which is a stack of Screen objects.
1512-\texttt{ScreenHistory} object keeps record of recent screens. This allows user
1513-to navigate "back" just like in web-browsers. History size can be changed from
1514-the preferences dialog. Screen is added to the stage when it is created, but
1515-when we remove it? There are two possibilites: When history size is exceeded the
1516-oldest screen is removed. Also when user navigates to "back", the current screen
1517-is NOT added into the history and it is removed from stage immediately. If we would
1518-add screens into the history when navigating back, then we would create an endless
1519-loop of two screens.
1520-
1521-\subsubsection*{Creating a new Screen or Transition effect}
1522-If you want to create a new view to the Entertainer, say e-mail reader, you need
1523-to write a new \texttt{EmailScreen} class that implements \texttt{Screen} interface.
1524-If you want to create a new transition effect you just implement \texttt{Transition}
1525-interface which contains only two methods. It's recommended to look into the
1526- \texttt{FadeTransition} class to get the idea how transitions effects work.
1527-\textbf{Notice} that if animation direction is "backwards" then you need to
1528-remove old screen from the stage after animation has been displayed. This can
1529-be done by using 'completed' signal with Clutter \texttt{Timeline} object.
1530-
1531
1532=== removed file 'docs/high_level_architecture.tex'
1533--- docs/high_level_architecture.tex 2008-12-14 19:58:40 +0000
1534+++ docs/high_level_architecture.tex 1970-01-01 00:00:00 +0000
1535@@ -1,13 +0,0 @@
1536-Entertainer uses client-server achitecture and it has two main components called \emph{frontend} and \emph{backend}. The backend is a daemon (kind of) server process that runs in the background all the time. It is respossible of keeping the \emph{media library cache}, RSS-feeds and TV-Guide up to date and recording scheduled TV-shows. In other words, backend is respossible of everything else, but displaying media on the screen and interacting with the user. Frontend is a GUI part of the application and it displays photographs, plays music and videos. Frontend can be used via remote control and keyboard. Figure \ref{fig:high_level_arch} illustrates the high level architecture of the Entertainer media center application. There are also other processes included to the Entertainer. Those extra processes offer stuff like system tray icon and GTK-interfaces for preferences.
1537-
1538-\begin{figure}[htb]
1539- \begin{center}
1540- \includegraphics[angle=0,scale=0.5]{diagrams/high-level-diagram.png}
1541- \caption{High-level architecure}
1542- \label{fig:high_level_arch}
1543- \end{center}
1544-\end{figure}
1545-
1546-As figure \ref{fig:high_level_arch} shows, the high-level components of the Entertainer are \emph{Frontend}, \emph{Backend}, \emph{Media library Cache} and \emph{Configuration tools}. Backend can communicate with other processes via sockets. Frontend connects to backend when it's executed. It sends simple messages to backend as needed. For example, when user selects a TV-show for recording the frontend sends a message to the backend, which handels the scheduling and recording of the show. Also configration tools notify backend that config files has been changed. This way backend knows to read them again and update it's internal state.
1547-
1548-Content can be imagined in between of backend and frontend processes. Backend process indexes files, downloads metadata and generates thumbnails. This activity keeps cache files, which are SQLite databases, up to date. Frontend reads the cache and doesn't care about backend. Backend does also scheduled operations including updating feed cache and guide, which both are SQLite databases as well.
1549
1550=== removed file 'docs/introduction.tex'
1551--- docs/introduction.tex 2008-12-14 19:58:40 +0000
1552+++ docs/introduction.tex 1970-01-01 00:00:00 +0000
1553@@ -1,7 +0,0 @@
1554-This document is written for those, who are interested in technical side of the Entertainer Media Center application. Entertainer aims to be a full solution for accessing your multimedia easily via remote control right from your livingroom couch. In this document multimedia refers to music, photographs and videos. Entertainer also includes a private video recorder, which means that Entertainer can be used to watch Live TV and it records your favourite shows for later viewing.
1555-
1556-Entertainer is designed to be easily extensible, robust, easy to use and install. The most important keywords of the prject are \emph{simplicity} and \emph{usability}. Media Center application shouldn't require any config file modifications from user. That's why Entertainer provides easy to use GUI-applications for this purpose. Entertainer uses GTK-library for graphical user interface, which means that it's most suitable for GNOME and XFce environments, but it also works on other desktop environments like KDE. Why I chose GTK over QT... well Kentertainer just sounds stupid. ;)
1557-
1558-Entertainer uses many existing projects like \texttt{Gstreamer}, \texttt{Clutter}, \texttt{SQLite} and\linebreak\texttt{Universal feed parser} just to name few. Most of the external projects are implemented with C, but Entertainer itself is implemented with a high level language called \emph{Python}. The whole application is implemented strictly in object-oriented manner. This means that everything is modeled as an object.
1559-
1560-Entertainer is an open source project released under GPL-licence version 2. This means that you don't have to pay for it and you are allowed to modify the source code and redistribute it under certain limitations. Please, see GPL-licence for more information.
1561
1562=== removed file 'docs/message_bus_notifier.tex'
1563--- docs/message_bus_notifier.tex 2008-12-14 19:58:40 +0000
1564+++ docs/message_bus_notifier.tex 1970-01-01 00:00:00 +0000
1565@@ -1,12 +0,0 @@
1566-This is a small command-line application that allows user (or other processes)
1567-to send messages to the backend's message bus. This was written mainly for debug
1568-purposes, but it can be used for other things too. The usage of this application
1569-is straight forward. Command line tool takes only one paramter, which is the
1570-type of the message that will be emitted to the message bus. Here is an example
1571-how to force feed cache to be updated immediately:
1572-\begin{center}
1573- \begin{verbatim}
1574- entertainer-messagebus-notifier.py --message=UPDATE_FEEDS
1575- \end{verbatim}
1576-\end{center}
1577-
1578
1579=== removed file 'docs/preferences_gui.tex'
1580--- docs/preferences_gui.tex 2008-12-14 19:58:40 +0000
1581+++ docs/preferences_gui.tex 1970-01-01 00:00:00 +0000
1582@@ -1,1 +0,0 @@
1583-Preferences GUI allows user to configure Entertainer the easy way. Actually it's just a simple GUI for editing \texttt{/.entertainer/preferences.cfg} -configuration file and all the same things can be done with text editor directly. Regardless of this, it is still recommended to use GUI application, because it notifies the backend process that changes has been made. This way backend knows to reload configurations. If changes are made by hand with the text editor, then backend needs to be restarted to changes take effect. Preferences GUI is a standalone application and it can be used even if Entertainer is not running.
1584
1585=== modified file 'docs/user_guide.tex'
1586--- docs/user_guide.tex 2008-06-05 15:31:06 +0000
1587+++ docs/user_guide.tex 2009-02-01 06:24:28 +0000
1588@@ -15,32 +15,28 @@
1589 \tableofcontents
1590 \pagebreak
1591 \section{Introduction}
1592-This guide aims to introduce you to the installation and use of the Entertainer Media Center 0.1, the first relase of the program.
1593-
1594-As this is an early release of Entertainer you may want certain features added or you may even find some problems (we call them bugs) with the program. If you do, please let us know about them by reporting them at http://bugs.launchpad.net/entertainer.
1595-
1596-We've put a lot of work into creating this program and hope that you will enjoy using it.
1597+This guide aims to introduce you to the installation and use of the Entertainer
1598+Media Center 0.1, the first relase of the program.
1599+
1600+As this is an early release of Entertainer you may want certain features added
1601+or you may even find some problems (we call them bugs) with the program. If
1602+you do, please let us know about them by reporting them at
1603+http://bugs.launchpad.net/entertainer.
1604+
1605 \pagebreak
1606 \part{Installation}
1607 \section{Ubuntu}
1608 \index{Ubuntu}
1609-If you are using Ubuntu Hardy you are in luck as Ubuntu is the easiest linux distribution to install Entertainer on.
1610-
1611-Please follow the following steps to install Entertainer on Ubuntu Hardy:
1612-\begin{enumerate}
1613- \item \#FIXME Install guide for Hardy goes here
1614-\end{enumerate}
1615-
1616-\section{Other Linux Distributions}
1617-\#FIXME need some help here
1618-
1619-\section{Windows}
1620-Unfortunately, Entertainer is currently Linux only so no versions will work on Windows.
1621+For Ubuntu, Entertainer can be installed from the Entertainer-Releases PPA,
1622+which can be browsed at
1623+https://edge.launchpad.net/~entertainer-releases/+archive/ppa
1624
1625 \section{From Source}
1626-If you are really brave you can try installing Entertainer from the development code. You can download this from http://code.launchpad.net/entertainer
1627+To download the Entertainer source, you can download a tarball from
1628+http://code.launchpad.net/entertainer
1629
1630-Because the development code can change rapidly as features are added or modified and bugs are fixed, this guide won't be covering installation or using Entertainer from development code. However if you are interested in installating the code please feel free to drop by the \#entertainer IRC channel on irc.freenode.org and we'll do our best to help you.
1631+To install on other Linux distributions, unpack the tarball and run python
1632+setup.py install which should install Entertainer.
1633
1634 \pagebreak
1635 \part{Configuring Entertainer}
1636@@ -64,7 +60,7 @@
1637 \item Matt Layman
1638 \item Joshua Scotton
1639 \item Jamie Bennett
1640- \item Micahel Charclo
1641+ \item Michael Charclo
1642 \item Blutack (from Launchpad)
1643 \item Everybody who helped testing and bug reporting...
1644 \end{itemize}
1645
1646=== modified file 'setup.py'
1647--- setup.py 2009-01-26 17:33:36 +0000
1648+++ setup.py 2009-02-01 06:30:14 +0000
1649@@ -27,6 +27,8 @@
1650 log.info("Updating icon cache in %s" % target)
1651 call(['gtk-update-icon-cache', '-f', '-t', target])
1652
1653+ call(['gzip', '-9', 'docs/entertainer.1'])
1654+
1655 def find_files(dirs, dest_root='share'):
1656 '''Walk files and directories and return them in a form for data_files'''
1657 # pylint: disable-msg=W0621

Subscribers

People subscribed via source and target branches