├── .gitignore
├── .gitmodules
├── LICENSE.txt
├── README.md
├── ToDo
├── addon.xml
├── changelog.txt
├── default.py
├── friends.py
├── icon.png
├── instant_sync.py
├── nbhttpconnection.py
├── nbhttpsconnection.py
├── notification_service.py
├── rating.py
├── raw_xbmc_database.py
├── recommend.py
├── resources
├── language
│ ├── Dutch
│ │ └── string.xml
│ ├── English
│ │ └── strings.xml
│ ├── German
│ │ └── strings.xml
│ ├── Polish
│ │ └── strings.xml
│ └── Portuguese (Brazil)
│ │ └── strings.xml
├── settings.xml
└── skins
│ ├── Default
│ ├── 720p
│ │ ├── Font.xml
│ │ ├── includes.xml
│ │ ├── movie.xml
│ │ ├── movies.xml
│ │ ├── rate.xml
│ │ └── tvshows.xml
│ └── media
│ │ ├── current-hate.png
│ │ ├── current-love.png
│ │ ├── current-no-rating.png
│ │ ├── hate.png
│ │ ├── hate_f.png
│ │ ├── local.png
│ │ ├── love.png
│ │ ├── love_f.png
│ │ ├── skip-rating.png
│ │ ├── w1x1.png
│ │ └── watchlist.png
│ ├── skin.aeon.nox
│ ├── 720p
│ │ ├── movie.xml
│ │ ├── movies.xml
│ │ ├── rate.xml
│ │ └── tvshows.xml
│ └── media
│ │ ├── current-hate.png
│ │ ├── current-love.png
│ │ ├── current-no-rating.png
│ │ ├── dontknow.png
│ │ ├── dontknow_f.png
│ │ ├── hate.png
│ │ ├── hate_f.png
│ │ ├── icon.png
│ │ ├── local.png
│ │ ├── love.png
│ │ ├── love_f.png
│ │ ├── skip-rating.png
│ │ └── watchlist.png
│ └── skin.aeonmq.3
│ ├── 720p
│ ├── movie.xml
│ ├── movies.xml
│ ├── rate.xml
│ └── tvshows.xml
│ └── media
│ ├── current-hate.png
│ ├── current-love.png
│ ├── current-no-rating.png
│ ├── dontknow.png
│ ├── dontknow_f.png
│ ├── hate.png
│ ├── hate_f.png
│ ├── icon.png
│ ├── local.png
│ ├── love.png
│ ├── love_f.png
│ └── watchlist.png
├── scrobbler.py
├── service.py
├── sync_update.py
├── trending.py
├── utilities.py
├── watchlist.py
└── windows.py
/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyo
2 | *.pyc
3 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/.gitmodules
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 |
2 | GNU GENERAL PUBLIC LICENSE
3 | Version 2, June 1991
4 |
5 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.
6 | 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
7 | Everyone is permitted to copy and distribute verbatim copies
8 | of this license document, but changing it is not allowed.
9 |
10 | Preamble
11 |
12 | The licenses for most software are designed to take away your
13 | freedom to share and change it. By contrast, the GNU General Public
14 | License is intended to guarantee your freedom to share and change free
15 | software--to make sure the software is free for all its users. This
16 | General Public License applies to most of the Free Software
17 | Foundation's software and to any other program whose authors commit to
18 | using it. (Some other Free Software Foundation software is covered by
19 | the GNU Library General Public License instead.) You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | this service if you wish), that you receive source code or can get it
26 | if you want it, that you can change the software or use pieces of it
27 | in new free programs; and that you know you can do these things.
28 |
29 | To protect your rights, we need to make restrictions that forbid
30 | anyone to deny you these rights or to ask you to surrender the rights.
31 | These restrictions translate to certain responsibilities for you if you
32 | distribute copies of the software, or if you modify it.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must give the recipients all the rights that
36 | you have. You must make sure that they, too, receive or can get the
37 | source code. And you must show them these terms so they know their
38 | rights.
39 |
40 | We protect your rights with two steps: (1) copyright the software, and
41 | (2) offer you this license which gives you legal permission to copy,
42 | distribute and/or modify the software.
43 |
44 | Also, for each author's protection and ours, we want to make certain
45 | that everyone understands that there is no warranty for this free
46 | software. If the software is modified by someone else and passed on, we
47 | want its recipients to know that what they have is not the original, so
48 | that any problems introduced by others will not reflect on the original
49 | authors' reputations.
50 |
51 | Finally, any free program is threatened constantly by software
52 | patents. We wish to avoid the danger that redistributors of a free
53 | program will individually obtain patent licenses, in effect making the
54 | program proprietary. To prevent this, we have made it clear that any
55 | patent must be licensed for everyone's free use or not licensed at all.
56 |
57 | The precise terms and conditions for copying, distribution and
58 | modification follow.
59 |
60 | GNU GENERAL PUBLIC LICENSE
61 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
62 |
63 | 0. This License applies to any program or other work which contains
64 | a notice placed by the copyright holder saying it may be distributed
65 | under the terms of this General Public License. The "Program", below,
66 | refers to any such program or work, and a "work based on the Program"
67 | means either the Program or any derivative work under copyright law:
68 | that is to say, a work containing the Program or a portion of it,
69 | either verbatim or with modifications and/or translated into another
70 | language. (Hereinafter, translation is included without limitation in
71 | the term "modification".) Each licensee is addressed as "you".
72 |
73 | Activities other than copying, distribution and modification are not
74 | covered by this License; they are outside its scope. The act of
75 | running the Program is not restricted, and the output from the Program
76 | is covered only if its contents constitute a work based on the
77 | Program (independent of having been made by running the Program).
78 | Whether that is true depends on what the Program does.
79 |
80 | 1. You may copy and distribute verbatim copies of the Program's
81 | source code as you receive it, in any medium, provided that you
82 | conspicuously and appropriately publish on each copy an appropriate
83 | copyright notice and disclaimer of warranty; keep intact all the
84 | notices that refer to this License and to the absence of any warranty;
85 | and give any other recipients of the Program a copy of this License
86 | along with the Program.
87 |
88 | You may charge a fee for the physical act of transferring a copy, and
89 | you may at your option offer warranty protection in exchange for a fee.
90 |
91 | 2. You may modify your copy or copies of the Program or any portion
92 | of it, thus forming a work based on the Program, and copy and
93 | distribute such modifications or work under the terms of Section 1
94 | above, provided that you also meet all of these conditions:
95 |
96 | a) You must cause the modified files to carry prominent notices
97 | stating that you changed the files and the date of any change.
98 |
99 | b) You must cause any work that you distribute or publish, that in
100 | whole or in part contains or is derived from the Program or any
101 | part thereof, to be licensed as a whole at no charge to all third
102 | parties under the terms of this License.
103 |
104 | c) If the modified program normally reads commands interactively
105 | when run, you must cause it, when started running for such
106 | interactive use in the most ordinary way, to print or display an
107 | announcement including an appropriate copyright notice and a
108 | notice that there is no warranty (or else, saying that you provide
109 | a warranty) and that users may redistribute the program under
110 | these conditions, and telling the user how to view a copy of this
111 | License. (Exception: if the Program itself is interactive but
112 | does not normally print such an announcement, your work based on
113 | the Program is not required to print an announcement.)
114 |
115 | These requirements apply to the modified work as a whole. If
116 | identifiable sections of that work are not derived from the Program,
117 | and can be reasonably considered independent and separate works in
118 | themselves, then this License, and its terms, do not apply to those
119 | sections when you distribute them as separate works. But when you
120 | distribute the same sections as part of a whole which is a work based
121 | on the Program, the distribution of the whole must be on the terms of
122 | this License, whose permissions for other licensees extend to the
123 | entire whole, and thus to each and every part regardless of who wrote it.
124 |
125 | Thus, it is not the intent of this section to claim rights or contest
126 | your rights to work written entirely by you; rather, the intent is to
127 | exercise the right to control the distribution of derivative or
128 | collective works based on the Program.
129 |
130 | In addition, mere aggregation of another work not based on the Program
131 | with the Program (or with a work based on the Program) on a volume of
132 | a storage or distribution medium does not bring the other work under
133 | the scope of this License.
134 |
135 | 3. You may copy and distribute the Program (or a work based on it,
136 | under Section 2) in object code or executable form under the terms of
137 | Sections 1 and 2 above provided that you also do one of the following:
138 |
139 | a) Accompany it with the complete corresponding machine-readable
140 | source code, which must be distributed under the terms of Sections
141 | 1 and 2 above on a medium customarily used for software interchange; or,
142 |
143 | b) Accompany it with a written offer, valid for at least three
144 | years, to give any third party, for a charge no more than your
145 | cost of physically performing source distribution, a complete
146 | machine-readable copy of the corresponding source code, to be
147 | distributed under the terms of Sections 1 and 2 above on a medium
148 | customarily used for software interchange; or,
149 |
150 | c) Accompany it with the information you received as to the offer
151 | to distribute corresponding source code. (This alternative is
152 | allowed only for noncommercial distribution and only if you
153 | received the program in object code or executable form with such
154 | an offer, in accord with Subsection b above.)
155 |
156 | The source code for a work means the preferred form of the work for
157 | making modifications to it. For an executable work, complete source
158 | code means all the source code for all modules it contains, plus any
159 | associated interface definition files, plus the scripts used to
160 | control compilation and installation of the executable. However, as a
161 | special exception, the source code distributed need not include
162 | anything that is normally distributed (in either source or binary
163 | form) with the major components (compiler, kernel, and so on) of the
164 | operating system on which the executable runs, unless that component
165 | itself accompanies the executable.
166 |
167 | If distribution of executable or object code is made by offering
168 | access to copy from a designated place, then offering equivalent
169 | access to copy the source code from the same place counts as
170 | distribution of the source code, even though third parties are not
171 | compelled to copy the source along with the object code.
172 |
173 | 4. You may not copy, modify, sublicense, or distribute the Program
174 | except as expressly provided under this License. Any attempt
175 | otherwise to copy, modify, sublicense or distribute the Program is
176 | void, and will automatically terminate your rights under this License.
177 | However, parties who have received copies, or rights, from you under
178 | this License will not have their licenses terminated so long as such
179 | parties remain in full compliance.
180 |
181 | 5. You are not required to accept this License, since you have not
182 | signed it. However, nothing else grants you permission to modify or
183 | distribute the Program or its derivative works. These actions are
184 | prohibited by law if you do not accept this License. Therefore, by
185 | modifying or distributing the Program (or any work based on the
186 | Program), you indicate your acceptance of this License to do so, and
187 | all its terms and conditions for copying, distributing or modifying
188 | the Program or works based on it.
189 |
190 | 6. Each time you redistribute the Program (or any work based on the
191 | Program), the recipient automatically receives a license from the
192 | original licensor to copy, distribute or modify the Program subject to
193 | these terms and conditions. You may not impose any further
194 | restrictions on the recipients' exercise of the rights granted herein.
195 | You are not responsible for enforcing compliance by third parties to
196 | this License.
197 |
198 | 7. If, as a consequence of a court judgment or allegation of patent
199 | infringement or for any other reason (not limited to patent issues),
200 | conditions are imposed on you (whether by court order, agreement or
201 | otherwise) that contradict the conditions of this License, they do not
202 | excuse you from the conditions of this License. If you cannot
203 | distribute so as to satisfy simultaneously your obligations under this
204 | License and any other pertinent obligations, then as a consequence you
205 | may not distribute the Program at all. For example, if a patent
206 | license would not permit royalty-free redistribution of the Program by
207 | all those who receive copies directly or indirectly through you, then
208 | the only way you could satisfy both it and this License would be to
209 | refrain entirely from distribution of the Program.
210 |
211 | If any portion of this section is held invalid or unenforceable under
212 | any particular circumstance, the balance of the section is intended to
213 | apply and the section as a whole is intended to apply in other
214 | circumstances.
215 |
216 | It is not the purpose of this section to induce you to infringe any
217 | patents or other property right claims or to contest validity of any
218 | such claims; this section has the sole purpose of protecting the
219 | integrity of the free software distribution system, which is
220 | implemented by public license practices. Many people have made
221 | generous contributions to the wide range of software distributed
222 | through that system in reliance on consistent application of that
223 | system; it is up to the author/donor to decide if he or she is willing
224 | to distribute software through any other system and a licensee cannot
225 | impose that choice.
226 |
227 | This section is intended to make thoroughly clear what is believed to
228 | be a consequence of the rest of this License.
229 |
230 | 8. If the distribution and/or use of the Program is restricted in
231 | certain countries either by patents or by copyrighted interfaces, the
232 | original copyright holder who places the Program under this License
233 | may add an explicit geographical distribution limitation excluding
234 | those countries, so that distribution is permitted only in or among
235 | countries not thus excluded. In such case, this License incorporates
236 | the limitation as if written in the body of this License.
237 |
238 | 9. The Free Software Foundation may publish revised and/or new versions
239 | of the General Public License from time to time. Such new versions will
240 | be similar in spirit to the present version, but may differ in detail to
241 | address new problems or concerns.
242 |
243 | Each version is given a distinguishing version number. If the Program
244 | specifies a version number of this License which applies to it and "any
245 | later version", you have the option of following the terms and conditions
246 | either of that version or of any later version published by the Free
247 | Software Foundation. If the Program does not specify a version number of
248 | this License, you may choose any version ever published by the Free Software
249 | Foundation.
250 |
251 | 10. If you wish to incorporate parts of the Program into other free
252 | programs whose distribution conditions are different, write to the author
253 | to ask for permission. For software which is copyrighted by the Free
254 | Software Foundation, write to the Free Software Foundation; we sometimes
255 | make exceptions for this. Our decision will be guided by the two goals
256 | of preserving the free status of all derivatives of our free software and
257 | of promoting the sharing and reuse of software generally.
258 |
259 | NO WARRANTY
260 |
261 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
262 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
263 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
264 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
265 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
266 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
267 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
268 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
269 | REPAIR OR CORRECTION.
270 |
271 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
272 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
273 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
274 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
275 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
276 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
277 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
278 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
279 | POSSIBILITY OF SUCH DAMAGES.
280 |
281 | END OF TERMS AND CONDITIONS
282 | -------------------------------------------------------------------------
283 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | seadog seems to continue this project. See: http://forum.xbmc.org/showthread.php?tid=139839
2 |
3 | I stopped working on this project.
4 | Feel free to fork and continue ...
5 |
6 | # Trakt Utilities
7 | Trakt Utilities is a XBMC Add-on for trakt.
8 |
9 | This add-on give XBMC the ability to synchronise seen movies, TV shows/episodes with trakt (trakt account required).
10 | More info about trakt: http://trakt.tv/
11 |
12 | If you use this Addon, you no longer need the official anymore.
13 |
14 | This is an open-source project.
15 | We'll do our best, but use it at your own risk.
16 |
17 | You can download the latest release here: https://github.com/Manromen/script.TraktUtilities/wiki/Download
18 |
19 | **ATTENTION:**
20 | This Add-on needs library mode. All Movies / TV Shows, that are not in library mode will be ignored.
21 |
22 | ## Service Based Features:
23 | * Automatic updates on start-up
24 | * Rating dialog after watching movies or TV episodes
25 |
26 | ## Menu Based Features:
27 | * Watchlist
28 | * Watchlist Movies
29 | - Shows your current watchlist
30 | - Each movie has a thumbnail and background image
31 | - Tags on the thumbnail indicate whether you have got a local copy of the movie
32 | - Selecting a movie will play it locally
33 |
34 | * Watchlist TV Shows
35 | - Shows your current watchlist
36 | - Each show has a thumbnail and background image
37 |
38 | * Friends
39 | Coming soon, watch this space
40 | Currently able to list your friends and indicate what they are currently watching
41 | * Currently watching
42 | * Watch-list
43 | * Watched
44 | * Profile
45 |
46 | * Recommendations
47 | * Recommended Movies
48 | - Shows a list of movies that trakt thinks you will like
49 | - Each movie has a thumbnail and background image
50 | - Tags on the thumbnail indicate whether you have got a local copy of the movie
51 | - Tags on the thumbnail indicate whether the movie is in your watchlist
52 | - Selecting a movie will play it locally
53 |
54 | * Recommended TV Shows
55 | - Shows a list of TV shows that trakt thinks you will like
56 | - Each show has a thumbnail and background image
57 |
58 | * Trending
59 | * Trending Movies
60 | - Shows a list of movies that are trending on trakt
61 | - Each movie has a thumbnail and background image
62 | - Tags on the thumbnail indicate whether you have got a local copy of the movie
63 | - Selecting a movie will play it locally
64 |
65 | * Trending TV Shows
66 | - Shows a list of TV shows that are trending on trakt
67 | - Each show has a thumbnail and background image
68 |
69 | * Update / Sync / Clean
70 | * Update Movie Collection:
71 | - updates your trakt movie library (not the seen movies) with your xbmc collection
72 |
73 | * Sync seen Movies:
74 | - synchronise seen movies between xbmc and trakt
75 | - seen movies from xbmc will be set as seen on trakt
76 | - seen movies from trakt will be set as seen on xbmc
77 | - it don't sets movies as unseen
78 |
79 | * Update TV Show Collection:
80 | - same like Update Movie Collection, but for TV Shows.
81 |
82 | * Sync seen TV Shows:
83 | - same like Sync seen Movies, but for TV Shows.
84 |
85 | * Clean Movie Collection:
86 | - this will remove deleted movies from the trakt collection (unlibrary, it will not set movies as unseen).
87 |
88 | **ATTENTION:**
89 | - don't use this function, if you collect data about your DVDs, Blu-Rays, etc.
90 | - this will unlibrary all movies on tract, that are not in the xbmc database
91 |
92 | * Clean TV Show Collection:
93 | - same like Clean Movie Collection, but for TV Shows
94 |
95 | **ATTENTION:**
96 | - don't use this function, if you collect data about your DVDs, Blu-Rays, etc.
97 | - this will unlibrary all tvshows on trakt, that are not in the xbmc database
98 |
99 | The Utilities for TV Shows only work, if your scraper is TVDB ([[http://thetvdb.com/]]).
100 |
101 | Special Thanks to: Justin Nemeth and Sean Rudford, for the great trakt project.
102 |
--------------------------------------------------------------------------------
/ToDo:
--------------------------------------------------------------------------------
1 | # insert todos and append yourself like (Manromen) if you are currently working on something
2 |
3 | - friends submenu redesign (Manromen) [branch: friends]]
4 | - browse friends library
5 | - display friends profile
6 |
--------------------------------------------------------------------------------
/addon.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | video
13 |
14 |
15 |
16 |
17 |
18 | some trakt utilities
19 | Trakt Utilities
20 | Synchronise Movies / TVShows with Trakt (more infos and account creation: http://trakt.tv/).
21 | This plugin isn't a replacement for the official trakt plugin. It's a supplement to the trakt plugin.
22 |
23 | This is an open-source project.
24 | I'll do my best, but the use is at own risk.
25 |
26 | Utilities:
27 | - Update Movie Collection:
28 | updates your trakt movie library (not the seen movies) with your xbmc collection
29 |
30 | - Sync seen Movies:
31 | synchronise seen movies between xbmc and trakt
32 | seen movies from xbmc will be set as seen on trakt
33 | seen movies from trakt will be set as seen on xbmc
34 | it don't sets movies as unseen
35 |
36 | - Update TV Show Collection:
37 | same like Update Movie Collection, but for TV Shows.
38 |
39 | - Sync seen TV Shows:
40 | same like Sync seen Movies, but for TV Shows.
41 |
42 | - Clean Movie Collection:
43 | this will remove deleted movies from the trakt collection (unlibrary, it will not set movies as unseen).
44 | ATTENTION:
45 | don't use this function, if you collect data about your DVDs, Blu-Rays, etc.
46 | this will unlibrary all movies, that are not listed in xbmc
47 |
48 | - Clean TV Show Collection:
49 | same like Clean Movie Collection, but for TV Shows
50 |
51 | The Utilities for TV Shows only work yet, if your scraper is TVDB (http://thetvdb.com/).
52 |
53 | Special Thanks to: Justin Nemeth and Sean Rudford, for the great Trakt project.
54 |
55 |
56 | all
57 |
58 |
59 |
--------------------------------------------------------------------------------
/changelog.txt:
--------------------------------------------------------------------------------
1 | Version 0.6.5:
2 | - Changed the logic for pausing to not treat it as a stop in the video
3 | - Fixed problem where connections to trakt were closed before readin the responce
4 | - Fixed syncing error that occured when a last played value was not a correctly formatted date
5 | - Fixed #110, Coping with unicoded names in sql quiries
6 | - Added polish translations
7 | - Skin updates for Aeon Nox
8 | - Fixed stupidity in playcount updater
9 | - Probable solution for #101, #61 the freezing of xbmc when syncing seen back to xbmc.Removed all uses of httpapi for sql db access, replaced with smart (db finding) direct access.
10 | - Fixed the list of tuples bug, where it talks about commas during syncing
11 | - Season limit changed
12 | - A possible fix for the error 'InterfaceError: an integer is required'
13 | - Posible fix for divide by 0 error
14 | - Added debug messages to aid in identifying quitting problems
15 | - Fixed bugs with sync debug statements
16 |
17 | Version 0.6.4:
18 | - Fixed broken syncing and scrobbling due to changes in xbmc json-rpc schema
19 |
20 | Version 0.6.3:
21 | - Repository hotfix
22 |
23 | Version 0.6.2:
24 | - Hotfix: bug that caused trakt connection reuse to throw and exception, this prevented tv show syncing
25 |
26 | Version 0.6.1:
27 | - Fixed (hopefully) major bug where Trakt Utilities prevented xbmc from closing, indefinatly, #91
28 | - Fixed major bug where items that where already marked as seen where not added to the collection #90
29 | - Fixed problems with changed json versions in xbmc #86 & #88
30 | - Fixed misc bugs #63, #67, #69, #74, #75, #86, #87
31 | - Added option to automatically clean the movie/tv collection on trakt
32 | - Scrobbling seems stable now and Trakt Utilities can be used safely by itself
33 |
34 | Version 0.6.0:
35 | - Added experimental scrobbling abilities (disabled by default)
36 | eventually this will mean you can run Trakt Utilities by itself
37 | - Support for newer jsonrpc notifications
38 | - Bugfix: "'NoneType' object is not iterable" error fixed by internal refactoring
39 | - trakt login details checked at startup and settings shown if missing or incorrect
40 | - Bugfix: rating dialog only appearing for items started after auto syncronisation compleated
41 | - Option to change the required percent viewed for rating dialog to appear
42 | - Instant syncronisation of changes to the 'watched' status in standard xmbc libraries
43 | - Option to diable rating dialogs during playlists that contain more than one item
44 | - Context menus for Movie and TV Show windows (eg watchlist, trending and recommended)
45 | including options for rating and changing the watchlist status
46 | - Added status tags to TV Shows in the relevent windows
47 | - Rating dialogs now show the current rating status and allow unrating
48 |
49 | Version 0.5.2:
50 | - fixed several bugs (for more information see tickets #35 #39 #42 #43 #47 and #49 on git)
51 | - switched from own simplejson to xbmc's simplejson:
52 | - Skin Aeon-Nox is now integrated. (Thanks: Big Noid)
53 | - Support for newer nighlties that require arbitrary resolution definitions
54 | - Improved handling of responces from the trakt api
55 | - Improved handling of timeouts when talking to trakt api
56 | - Ability to rate whole TV shows from current rating dialog
57 |
58 | Version 0.5.1:
59 | - rating dialog that appears after watching items is now optional
60 | - Can now rate whole tv shows after watching an episode
61 | - Bugfix: inability to access trending movies
62 | - Bugfix: items played via trakt utilities weren't added to the playlist correctly
63 | - Bugfix: using trakt utilities to play a movie that is no longer in the library fails silently
64 | - Better debug output during communication errors with trakt api
65 |
66 | Version 0.5.0:
67 | - rating dialog after watching a movie or tv episode
68 | - Bugfix: no duplicates in movie lists after watching
69 | - Bugfix: fixed an issue with setting tv show episodes as seen on xbmc
70 | - local tag on movies added, that indicate local presence
71 | - watchlist tag on movies added
72 | - trakt utilities icon added
73 |
74 | Version 0.4.2:
75 | - Bugfix release: movies can now be played again
76 |
77 | Version 0.4.1:
78 | - switched from sqlite to httpapi-sql queries (support for external mysql servers)
79 | - added menu for:
80 | - watchlist tv shows
81 | - trending tv shows
82 | - recommended movies
83 | - recommended tv shows
84 |
85 | Version 0.4.0:
86 | - movies can directly played from watchlist / trending window (othrayte)
87 | - added menu for movies: watchlist / trending (manromen / othrayte)
88 | - catching some more possible errors / added some debug output
89 | - changed some get functions to push functions (for protected users) (othrayte))
90 | - accessing watchlists for protected accounts (othrayte)
91 |
92 | Version 0.3.1:
93 | - Bugfix Update
94 |
95 | Version 0.3.0:
96 | - menu restructured
97 | - you can show your watchlist now
98 | - updated compatibility to new json rpc since nightly build April, 5. 2011
99 |
100 | Version 0.2.2:
101 | - some bugfixes
102 | - added auto update movie / tvshow collection at startup
103 |
104 | Version 0.2.1:
105 | - small bugfix
106 |
107 | Version 0.2.0:
108 | - added auto sync seen movies / tv shows at startup
109 | - added warning for clean collection
110 |
111 | Version 0.1.6:
112 | - fixed a KeyError
113 |
114 | Version 0.1.5:
115 | - added german language
116 | - fixed a NameError
117 | - fixed a Database path issue
118 |
119 | Version 0.1.4:
120 | - added update functionality
121 |
122 | Version 0.1.3:
123 | - some small fixes (some possible tcp timeouts etc.)
124 | - correction of some spelling
125 | - fixed an linux issue (extension usage in addon.xml)
126 |
127 | Version 0.1.2:
128 | - fixed some possible freeze
129 |
130 | Version 0.1.1:
131 | - fixed some possible KeyError's
132 | - no need of API Key from user anymore
133 |
134 | Version 0.1:
135 | - Sync seen TVShows with Trakt
136 | - Sync seen Movies with Trakt
137 | - Update / Clean Movie Collection
138 | - Update / Clean TVShow Collection
139 |
140 | ToDo for future versions:
141 | - option to ask for rating at movie finished
142 | - option to ask for rating at tvshow episode finished
143 |
144 |
--------------------------------------------------------------------------------
/default.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import os
5 | import xbmcgui,xbmcaddon,xbmc
6 | from utilities import *
7 | from sync_update import *
8 | from watchlist import *
9 | from recommend import *
10 | from friends import *
11 | from trending import *
12 |
13 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
14 | __credits__ = ["Ralph-Gordon Paul", "Justin Nemeth", "Sean Rudford"]
15 | __license__ = "GPL"
16 | __maintainer__ = "Ralph-Gordon Paul"
17 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
18 | __status__ = "Production"
19 |
20 | #read settings
21 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
22 | __language__ = __settings__.getLocalizedString
23 |
24 | Debug("default: " + __settings__.getAddonInfo("id") + " - version: " + __settings__.getAddonInfo("version"))
25 |
26 | # Usermenu:
27 | def menu():
28 |
29 | # check if needed settings are set
30 | if checkSettings() == False:
31 | return
32 |
33 | options = [__language__(1210).encode( "utf-8", "ignore" ), __language__(1211).encode( "utf-8", "ignore" ), __language__(1212).encode( "utf-8", "ignore" ), __language__(1213).encode( "utf-8", "ignore" ), __language__(1214).encode( "utf-8", "ignore" )]
34 |
35 | while True:
36 | select = xbmcgui.Dialog().select("Trakt Utilities", options)
37 | Debug("Select: " + str(select))
38 | if select == -1:
39 | Debug ("menu quit by user")
40 | return
41 | else:
42 | if select == 0: # Watchlist
43 | submenuWatchlist()
44 | elif select == 1: # Friends
45 | showFriends()
46 | elif select == 2: # Recommendations
47 | submenuRecommendations()
48 | elif select == 3: # Trending Movies / TV Shows
49 | submenuTrendingMoviesTVShows()
50 | elif select == 4: # Update / Sync / Clean
51 | submenuUpdateSyncClean()
52 |
53 |
54 | def submenuUpdateSyncClean():
55 |
56 | options = [__language__(1217).encode( "utf-8", "ignore" ), __language__(1218).encode( "utf-8", "ignore" ), __language__(1219).encode( "utf-8", "ignore" ), __language__(1220).encode( "utf-8", "ignore" ), __language__(1221).encode( "utf-8", "ignore" ), __language__(1222).encode( "utf-8", "ignore" )]
57 |
58 | while True:
59 | select = xbmcgui.Dialog().select("Trakt Utilities", options)
60 | Debug("Select: " + str(select))
61 | if select == -1:
62 | Debug ("menu quit by user")
63 | return
64 | elif select == 0: # Update Movie Collection
65 | updateMovieCollection()
66 | elif select == 1: # Sync seen Movies
67 | syncSeenMovies()
68 | elif select == 2: # Update TV Show Collection
69 | updateTVShowCollection()
70 | elif select == 3: # Sync seen TV Shows
71 | syncSeenTVShows()
72 | elif select == 4: # Clean Movie Collection
73 | cleanMovieCollection()
74 | elif select == 5: # Clean TV Show Collection
75 | cleanTVShowCollection()
76 |
77 | def submenuTrendingMoviesTVShows():
78 |
79 | options = [__language__(1250).encode( "utf-8", "ignore" ), __language__(1251).encode( "utf-8", "ignore" )]
80 |
81 | while True:
82 | select = xbmcgui.Dialog().select(__language__(1213).encode( "utf-8", "ignore" ), options)
83 | Debug("Select: " + str(select))
84 | if select == -1:
85 | Debug ("menu quit by user")
86 | return
87 | if select == 0: # Trending Movies
88 | showTrendingMovies()
89 | elif select == 1: # Trending TV Shows
90 | showTrendingTVShows()
91 |
92 | def submenuWatchlist():
93 |
94 | options = [__language__(1252).encode( "utf-8", "ignore" ), __language__(1253).encode( "utf-8", "ignore" )]
95 |
96 | while True:
97 | select = xbmcgui.Dialog().select(__language__(1210).encode( "utf-8", "ignore" ), options)
98 | Debug("Select: " + str(select))
99 | if select == -1:
100 | Debug ("menu quit by user")
101 | return
102 | if select == 0: # Watchlist Movies
103 | showWatchlistMovies()
104 | elif select == 1: # Watchlist TV Shows
105 | showWatchlistTVShows()
106 |
107 | def submenuRecommendations():
108 |
109 | options = [__language__(1255).encode( "utf-8", "ignore" ), __language__(1256).encode( "utf-8", "ignore" )]
110 |
111 | while True:
112 | select = xbmcgui.Dialog().select(__language__(1212).encode( "utf-8", "ignore" ), options)
113 | Debug("Select: " + str(select))
114 | if select == -1:
115 | Debug ("menu quit by user")
116 | return
117 | if select == 0: # Watchlist Movies
118 | showRecommendedMovies()
119 | elif select == 1: # Watchlist TV Shows
120 | showRecommendedTVShows()
121 |
122 | menu()
123 |
--------------------------------------------------------------------------------
/friends.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import xbmc,xbmcaddon,xbmcgui
5 | from utilities import *
6 |
7 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
8 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
9 | __license__ = "GPL"
10 | __maintainer__ = "Ralph-Gordon Paul"
11 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
12 | __status__ = "Production"
13 |
14 | # read settings
15 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
16 | __language__ = __settings__.getLocalizedString
17 |
18 | apikey = '0a698a20b222d0b8637298f6920bf03a'
19 | username = __settings__.getSetting("username")
20 | pwd = sha.new(__settings__.getSetting("password")).hexdigest()
21 | debug = __settings__.getSetting( "debug" )
22 | https = __settings__.getSetting( "https" )
23 |
24 | if (https == 'true'):
25 | conn = httplib.HTTPSConnection('api.trakt.tv')
26 | else:
27 | conn = httplib.HTTPConnection('api.trakt.tv')
28 |
29 | headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
30 |
31 | def showFriends():
32 |
33 | options = []
34 | data = getFriendsFromTrakt()
35 |
36 | if data == None: # data = None => there was an error
37 | return # error already displayed in utilities.py
38 |
39 | for friend in data:
40 | try:
41 | if friend['full_name'] != None:
42 | options.append(friend['full_name']+" ("+friend['username']+")")
43 | else:
44 | options.append(friend['username'])
45 | except KeyError:
46 | pass # Error ? skip this movie
47 |
48 | if len(options) == 0:
49 | xbmcgui.Dialog().ok("Trakt Utilities", "you have not added any friends on Trakt")
50 | return
51 |
52 | while True:
53 | select = xbmcgui.Dialog().select(__language__(1211).encode( "utf-8", "ignore" ), options) # Friends
54 | Debug("Select: " + str(select))
55 | if select == -1:
56 | Debug ("menu quit by user")
57 | return
58 | showFriendSubmenu(data[select])
59 |
60 | def showFriendSubmenu(user):
61 | #check what (if anything) the user is watching
62 | watchdata = getWatchingFromTraktForUser(user['username'])
63 | currentitem = "Nothing"
64 | if len(watchdata) != 0:
65 | if watchdata['type'] == "movie":
66 | currentitem = watchdata['movie']['title']+" ["+str(watchdata['movie']['year'])+"]"
67 | elif watchdata['type'] == "episode":
68 | currentitem = watchdata['show']['title']+" "+str(watchdata['episode']['season'])+"x"+str(watchdata['episode']['number'])+" - "+watchdata['episode']['title']
69 |
70 | options = [(__language__(1280)+": "+currentitem).encode( "utf-8", "ignore" ), __language__(1281).encode( "utf-8", "ignore" ), __language__(1282).encode( "utf-8", "ignore" ), __language__(1283).encode( "utf-8", "ignore" ), __language__(1284).encode( "utf-8", "ignore" )]
71 | while True:
72 | select = xbmcgui.Dialog().select((__language__(1211)+" - "+user['username']).encode( "utf-8", "ignore" ), options)
73 | Debug("Select: " + str(select))
74 | if select == -1:
75 | Debug ("menu quit by user")
76 | return
77 | else:
78 | if select == 0: # Select (friends) currenty playing
79 | xbmcgui.Dialog().ok("Trakt Utilities", "comming soon")
80 | elif select == 1: # Friends watchlist
81 | showFriendsWatchlist(user)
82 | elif select == 2: # Friends watched
83 | showFriendsWatched(user)
84 | elif select == 3: # Friends library
85 | showFriendsLibrary(user)
86 | elif select == 4: # Friends profile
87 | showFriendsProfile(user)
88 |
89 | def showFriendsWatchlist(user):
90 | xbmcgui.Dialog().ok("Trakt Utilities", "comming soon")
91 |
92 | def showFriendsWatched(user):
93 | xbmcgui.Dialog().ok("Trakt Utilities", "comming soon")
94 |
95 | def showFriendsLibrary(user):
96 | xbmcgui.Dialog().ok("Trakt Utilities", "comming soon")
97 |
98 | def showFriendsProfile(user):
99 | xbmcgui.Dialog().ok("Trakt Utilities", "comming soon")
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/icon.png
--------------------------------------------------------------------------------
/instant_sync.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import xbmc,xbmcaddon,xbmcgui
5 | import telnetlib, time
6 |
7 | try: import simplejson as json
8 | except ImportError: import json
9 |
10 | import threading
11 | from utilities import *
12 | from instant_sync import *
13 |
14 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
15 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
16 | __license__ = "GPL"
17 | __maintainer__ = "Ralph-Gordon Paul"
18 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
19 | __status__ = "Production"
20 |
21 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
22 | __language__ = __settings__.getLocalizedString
23 |
24 | # Move this to its own file
25 | def instantSyncPlayCount(data):
26 | if data['params']['data']['item']['type'] == 'episode':
27 | info = getEpisodeDetailsFromXbmc(data['params']['data']['item']['id'], ['tvshowid','showtitle', 'season', 'episode'])
28 | rpccmd = json.dumps({'jsonrpc': '2.0', 'method': 'VideoLibrary.GetTVShowDetails','params':{'tvshowid': info['tvshowid'], 'properties': ['imdbnumber']}, 'id': 1})
29 | result = xbmc.executeJSONRPC(rpccmd)
30 | result = json.loads(result)
31 | Debug("[Instant-sync] (TheTVDB ID: )"+str(result))
32 | if info == None: return
33 | Debug("[Instant-sync] (episode playcount): "+str(info))
34 | if data['params']['data']['playcount'] == 0:
35 | res = setEpisodesUnseenOnTrakt(result['result']['tvshowdetails']['imdbnumber'], info['showtitle'], None, [{'season':info['season'], 'episode':info['episode']}])
36 | elif data['params']['data']['playcount'] == 1:
37 | res = setEpisodesSeenOnTrakt(result['result']['tvshowdetails']['imdbnumber'], info['showtitle'], None, [{'season':info['season'], 'episode':info['episode']}])
38 | else:
39 | return
40 | Debug("[Instant-sync] (episode playcount): responce "+str(res))
41 | if data['params']['data']['item']['type'] == 'movie':
42 | info = getMovieDetailsFromXbmc(data['params']['data']['item']['id'], ['imdbnumber', 'title', 'year', 'playcount', 'lastplayed'])
43 | if info == None: return
44 | Debug("[Instant-sync] (movie playcount): "+str(info))
45 | if 'lastplayed' not in info: info['lastplayed'] = None
46 | if data['params']['data']['playcount'] == 0:
47 | res = setMoviesUnseenOnTrakt([{'imdb_id':info['imdbnumber'], 'title':info['title'], 'year':info['year'], 'plays':data['params']['data']['playcount'], 'last_played':info['lastplayed']}])
48 | elif data['params']['data']['playcount'] == 1:
49 | res = setMoviesSeenOnTrakt([{'imdb_id':info['imdbnumber'], 'title':info['title'], 'year':info['year'], 'plays':data['params']['data']['playcount'], 'last_played':info['lastplayed']}])
50 | else:
51 | return
52 | Debug("[Instant-sync] (movie playcount): responce "+str(res))
--------------------------------------------------------------------------------
/nbhttpconnection.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import os, sys
5 | import time, socket
6 | import urllib
7 | import thread
8 | import threading
9 |
10 | try:
11 | # Python 3.0 +
12 | import http.client as httplib
13 | except ImportError:
14 | # Python 2.7 and earlier
15 | import httplib
16 |
17 | try:
18 | # Python 2.6 +
19 | from hashlib import sha as sha
20 | except ImportError:
21 | # Python 2.5 and earlier
22 | import sha
23 |
24 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
25 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
26 | __license__ = "GPL"
27 | __maintainer__ = "Ralph-Gordon Paul"
28 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
29 | __status__ = "Production"
30 |
31 | # Allows non-blocking http requests
32 | class NBHTTPConnection():
33 | def __init__(self, host, port = None, strict = None, timeout = None):
34 | self.rawConnection = httplib.HTTPConnection(host, port, strict, timeout)
35 | self.responce = None
36 | self.responceLock = threading.Lock()
37 | self.closing = False
38 |
39 | def request(self, method, url, body = None, headers = {}):
40 | self.rawConnection.request(method, url, body, headers);
41 |
42 | def hasResult(self):
43 | if self.responceLock.acquire(False):
44 | self.responceLock.release()
45 | return True
46 | else:
47 | return False
48 |
49 | def getResult(self):
50 | while not self.hasResult() and not self.closing:
51 | time.sleep(1)
52 | return self.responce
53 |
54 | def go(self):
55 | self.responceLock.acquire()
56 | thread.start_new_thread ( NBHTTPConnection._run, ( self, ) )
57 |
58 | def _run(self):
59 | self.responce = self.rawConnection.getresponse()
60 | self.responceLock.release()
61 |
62 | def close(self):
63 | self.closing = True
64 | self.rawConnection.close()
65 |
--------------------------------------------------------------------------------
/nbhttpsconnection.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import os, sys
5 | import time, socket
6 | import urllib
7 | import thread
8 | import threading
9 |
10 | try:
11 | # Python 3.0 +
12 | import http.client as httplib
13 | except ImportError:
14 | # Python 2.7 and earlier
15 | import httplib
16 |
17 | try:
18 | # Python 2.6 +
19 | from hashlib import sha as sha
20 | except ImportError:
21 | # Python 2.5 and earlier
22 | import sha
23 |
24 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
25 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
26 | __license__ = "GPL"
27 | __maintainer__ = "Ralph-Gordon Paul"
28 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
29 | __status__ = "Production"
30 |
31 | # Allows non-blocking http requests
32 | class NBHTTPSConnection():
33 | def __init__(self, host, port = None, strict = None, timeout = None):
34 | self.rawConnection = httplib.HTTPSConnection(host, port, strict, timeout)
35 | self.responce = None
36 | self.responceLock = threading.Lock()
37 | self.closing = False
38 |
39 | def request(self, method, url, body = None, headers = {}):
40 | self.rawConnection.request(method, url, body, headers);
41 |
42 | def hasResult(self):
43 | if self.responceLock.acquire(False):
44 | self.responceLock.release()
45 | return True
46 | else:
47 | return False
48 |
49 | def getResult(self):
50 | while not self.hasResult() and not self.closing:
51 | time.sleep(1)
52 | return self.responce
53 |
54 | def go(self):
55 | self.responceLock.acquire()
56 | thread.start_new_thread ( NBHTTPSConnection._run, ( self, ) )
57 |
58 | def _run(self):
59 | self.responce = self.rawConnection.getresponse()
60 | self.responceLock.release()
61 |
62 | def close(self):
63 | self.closing = True
64 | self.rawConnection.close()
65 |
66 |
--------------------------------------------------------------------------------
/notification_service.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import xbmc,xbmcaddon,xbmcgui
5 | import telnetlib, time
6 |
7 | try: import simplejson as json
8 | except ImportError: import json
9 |
10 | import threading
11 | from utilities import *
12 | from rating import *
13 | from sync_update import *
14 | from instant_sync import *
15 | from scrobbler import Scrobbler
16 |
17 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
18 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
19 | __license__ = "GPL"
20 | __maintainer__ = "Ralph-Gordon Paul"
21 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
22 | __status__ = "Production"
23 |
24 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
25 | __language__ = __settings__.getLocalizedString
26 |
27 | # Receives XBMC notifications and passes them off to the rating functions
28 | class NotificationService(threading.Thread):
29 | abortRequested = False
30 | def run(self):
31 | #while xbmc is running
32 | scrobbler = Scrobbler()
33 | scrobbler.start()
34 |
35 | while (not (self.abortRequested or xbmc.abortRequested)):
36 | time.sleep(1)
37 | try:
38 | tn = telnetlib.Telnet('localhost', 9090, 10)
39 | except IOError as (errno, strerror):
40 | #connection failed, try again soon
41 | Debug("[Notification Service] Telnet too soon? ("+str(errno)+") "+strerror)
42 | time.sleep(1)
43 | continue
44 |
45 | Debug("[Notification Service] Waiting~");
46 | bCount = 0
47 |
48 | while (not (self.abortRequested or xbmc.abortRequested)):
49 | try:
50 | if bCount == 0:
51 | notification = ""
52 | inString = False
53 | [index, match, raw] = tn.expect(["(\\\\)|(\\\")|[{\"}]"], 0.2) #note, pre-compiled regex might be faster here
54 | notification += raw
55 | if index == -1: # Timeout
56 | continue
57 | if index == 0: # Found escaped quote
58 | match = match.group(0)
59 | if match == "\"":
60 | inString = not inString
61 | continue
62 | if match == "{":
63 | bCount += 1
64 | if match == "}":
65 | bCount -= 1
66 | if bCount > 0:
67 | continue
68 | if bCount < 0:
69 | bCount = 0
70 | except EOFError:
71 | break #go out to the other loop to restart the connection
72 |
73 | Debug("[Notification Service] message: " + str(notification))
74 |
75 | # Parse recieved notification
76 | data = json.loads(notification)
77 |
78 | # Forward notification to functions
79 | if 'method' in data and 'params' in data and 'sender' in data['params'] and data['params']['sender'] == 'xbmc':
80 | if data['method'] == 'Player.OnStop':
81 | scrobbler.playbackEnded()
82 | elif data['method'] == 'Player.OnPlay':
83 | if 'data' in data['params'] and 'item' in data['params']['data'] and 'id' in data['params']['data']['item'] and 'type' in data['params']['data']['item']:
84 | scrobbler.playbackStarted(data['params']['data'])
85 | elif data['method'] == 'Player.OnPause':
86 | scrobbler.playbackPaused()
87 | elif data['method'] == 'VideoLibrary.OnUpdate':
88 | if 'data' in data['params'] and 'playcount' in data['params']['data']:
89 | instantSyncPlayCount(data)
90 | elif data['method'] == 'System.OnQuit':
91 | self.abortRequested = True
92 | try:
93 | tn.close()
94 | except:
95 | Debug("[NotificationService] Encountered error attempting to close the telnet connection")
96 | raise
97 | scrobbler.abortRequested = True
98 | Debug("Notification service stopping")
--------------------------------------------------------------------------------
/rating.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import os
5 | import xbmc,xbmcaddon,xbmcgui
6 | from utilities import *
7 |
8 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
9 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
10 | __license__ = "GPL"
11 | __maintainer__ = "Ralph-Gordon Paul"
12 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
13 | __status__ = "Production"
14 |
15 | # read settings
16 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
17 | __language__ = __settings__.getLocalizedString
18 |
19 | apikey = '0a698a20b222d0b8637298f6920bf03a'
20 | username = __settings__.getSetting("username")
21 | pwd = sha.new(__settings__.getSetting("password")).hexdigest()
22 | debug = __settings__.getSetting( "debug" )
23 |
24 | headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
25 |
26 | def ratingCheck(curVideo, watchedTime, totalTime, playlistLength):
27 | __settings__ = xbmcaddon.Addon( "script.traktutilities" ) #read settings again, encase they have changed
28 | # you can disable rating in options
29 | rateMovieOption = __settings__.getSetting("rate_movie")
30 | rateEpisodeOption = __settings__.getSetting("rate_episode")
31 | rateEachInPlaylistOption = __settings__.getSetting("rate_each_playlist_item")
32 | rateMinViewTimeOption = __settings__.getSetting("rate_min_view_time")
33 |
34 | if (watchedTime/totalTime)*100>=float(rateMinViewTimeOption):
35 | if (playlistLength <= 1) or (rateEachInPlaylistOption == 'true'):
36 | if curVideo['type'] == 'movie' and rateMovieOption == 'true':
37 | doRateMovie(curVideo['id'])
38 | if curVideo['type'] == 'episode' and rateEpisodeOption == 'true':
39 | doRateEpisode(curVideo['id'])
40 |
41 | # ask user if they liked the movie
42 | def doRateMovie(movieid=None, imdbid=None, title=None, year=None):
43 | if (movieid <> None) :
44 | match = getMovieDetailsFromXbmc(movieid, ['imdbnumber','title','year'])
45 | if not match:
46 | #add error message here
47 | return
48 |
49 | imdbid = match['imdbnumber']
50 | title = match['title']
51 | year = match['year']
52 |
53 | # display rate dialog
54 | import windows
55 | ui = windows.RateMovieDialog("rate.xml", __settings__.getAddonInfo('path'), "Default")
56 | ui.initDialog(imdbid, title, year, getMovieRatingFromTrakt(imdbid, title, year))
57 | ui.doModal()
58 | del ui
59 |
60 | # ask user if they liked the episode
61 | def doRateEpisode(episodeId):
62 | match = getEpisodeDetailsFromXbmc(episodeId, ['showtitle', 'season', 'episode'])
63 | if not match:
64 | #add error message here
65 | return
66 |
67 | tvdbid = None #match['tvdbnumber']
68 | title = match['showtitle']
69 | year = None #match['year']
70 | season = match['season']
71 | episode = match['episode']
72 |
73 | # display rate dialog
74 | import windows
75 | ui = windows.RateEpisodeDialog("rate.xml", __settings__.getAddonInfo('path'), "Default")
76 | ui.initDialog(tvdbid, title, year, season, episode, getEpisodeRatingFromTrakt(tvdbid, title, year, season, episode))
77 | ui.doModal()
78 | del ui
79 |
--------------------------------------------------------------------------------
/raw_xbmc_database.py:
--------------------------------------------------------------------------------
1 | import os, xbmc
2 | from utilities import Debug
3 | #provides access to the raw xbmc video database
4 |
5 |
6 | global _RawXbmcDb__conn
7 | _RawXbmcDb__conn = None
8 | class RawXbmcDb():
9 |
10 | # make a httpapi based XBMC db query (get data)
11 | @staticmethod
12 | def query(str):
13 | global _RawXbmcDb__conn
14 | if _RawXbmcDb__conn is None:
15 | _RawXbmcDb__conn = _findXbmcDb()
16 |
17 | Debug("[RawXbmcDb] query: "+str)
18 | cursor = _RawXbmcDb__conn.cursor()
19 | cursor.execute(str)
20 |
21 | matches = []
22 | for row in cursor:
23 | matches.append(row)
24 |
25 | Debug("[RawXbmcDb] matches: "+unicode(matches))
26 |
27 | _RawXbmcDb__conn.commit()
28 | cursor.close()
29 | return matches
30 |
31 | # execute a httpapi based XBMC db query (set data)
32 | @staticmethod
33 | def execute(str):
34 | return RawXbmcDb.query(str)
35 |
36 | def _findXbmcDb():
37 | import re
38 | type = None
39 | host = None
40 | port = 3306
41 | name = 'MyVideos'
42 | user = None
43 | passwd = None
44 | version = re.findall( "((?:[^<]|<(?!/))*)", xbmc.executehttpapi("QueryVideoDatabase(SELECT idVersion FROM version)"),)[0]
45 | Debug(version)
46 | if not os.path.exists(xbmc.translatePath("special://userdata/advancedsettings.xml")):
47 | type = 'sqlite3'
48 | else:
49 | from xml.etree.ElementTree import ElementTree
50 | advancedsettings = ElementTree()
51 | advancedsettings.parse(xbmc.translatePath("special://userdata/advancedsettings.xml"))
52 | settings = advancedsettings.getroot().find("videodatabase")
53 | if settings is not None:
54 | for setting in settings:
55 | if setting.tag == 'type':
56 | type = setting.text
57 | elif setting.tag == 'host':
58 | host = setting.text
59 | elif setting.tag == 'port':
60 | port = setting.text
61 | elif setting.tag == 'name':
62 | name = setting.text
63 | elif setting.tag == 'user':
64 | user = setting.text
65 | elif setting.tag == 'pass':
66 | passwd = setting.text
67 | else:
68 | type = 'sqlite3'
69 |
70 | if type == 'sqlite3':
71 | if host is None:
72 | path = xbmc.translatePath("special://userdata/Database")
73 | files = os.listdir(path)
74 | latest = ""
75 | for file in files:
76 | if file[:8] == 'MyVideos' and file[-3:] == '.db':
77 | if file > latest:
78 | latest = file
79 | host = os.path.join(path,latest)
80 | else:
81 | host += version+".db"
82 | Debug("[RawXbmcDb] Found sqlite3db: "+str(host))
83 | import sqlite3
84 | return sqlite3.connect(host)
85 | if type == 'mysql':
86 | if version >= 60:
87 | database = name+version
88 | else:
89 | database = name
90 | Debug("[RawXbmcDb] Found mysqldb: "+str(host)+":"+str(port)+", "+str(database))
91 | import mysql.connector
92 | return mysql.connector.Connect(host = str(host), port = int(port), database = str(database), user = str(user), password = str(passwd))
--------------------------------------------------------------------------------
/recommend.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import xbmc,xbmcaddon,xbmcgui
5 | from utilities import *
6 |
7 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
8 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
9 | __license__ = "GPL"
10 | __maintainer__ = "Ralph-Gordon Paul"
11 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
12 | __status__ = "Production"
13 |
14 | # read settings
15 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
16 | __language__ = __settings__.getLocalizedString
17 |
18 | apikey = '0a698a20b222d0b8637298f6920bf03a'
19 | username = __settings__.getSetting("username")
20 | pwd = sha.new(__settings__.getSetting("password")).hexdigest()
21 | debug = __settings__.getSetting( "debug" )
22 | https = __settings__.getSetting('https')
23 |
24 | if (https == 'true'):
25 | conn = httplib.HTTPSConnection('api.trakt.tv')
26 | else:
27 | conn = httplib.HTTPConnection('api.trakt.tv')
28 |
29 | headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
30 |
31 | # list reccomended movies
32 | def showRecommendedMovies():
33 |
34 | movies = getRecommendedMoviesFromTrakt()
35 | watchlist = traktMovieListByImdbID(getWatchlistMoviesFromTrakt())
36 |
37 | if movies == None: # movies = None => there was an error
38 | return # error already displayed in utilities.py
39 |
40 | if len(movies) == 0:
41 | xbmcgui.Dialog().ok(__language__(1201).encode( "utf-8", "ignore" ), __language__(1158).encode( "utf-8", "ignore" )) # Trakt Utilities, there are no movies recommended for you
42 | return
43 |
44 | for movie in movies:
45 | if movie['imdb_id'] in watchlist:
46 | movie['watchlist'] = True
47 | else:
48 | movie['watchlist'] = False
49 |
50 | # display recommended movies list
51 | import windows
52 | ui = windows.MoviesWindow("movies.xml", __settings__.getAddonInfo('path'), "Default")
53 | ui.initWindow(movies, 'recommended')
54 | ui.doModal()
55 | del ui
56 |
57 | # list reccomended tv shows
58 | def showRecommendedTVShows():
59 |
60 | tvshows = getRecommendedTVShowsFromTrakt()
61 |
62 | if tvshows == None: # tvshows = None => there was an error
63 | return # error already displayed in utilities.py
64 |
65 | if len(tvshows) == 0:
66 | xbmcgui.Dialog().ok(__language__(1201).encode( "utf-8", "ignore" ), __language__(1159).encode( "utf-8", "ignore" )) # Trakt Utilities, there are no tv shows recommended for you
67 | return
68 |
69 | for tvshow in tvshows:
70 | tvshow['watchlist'] = tvshow['in_watchlist']
71 |
72 | # display recommended tv shows
73 | import windows
74 | ui = windows.TVShowsWindow("tvshows.xml", __settings__.getAddonInfo('path'), "Default")
75 | ui.initWindow(tvshows, 'recommended')
76 | ui.doModal()
77 | del ui
78 |
79 |
--------------------------------------------------------------------------------
/resources/language/Dutch/string.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Algemeen
5 | Activeer debug mode
6 | API Key (te vinden op trakt -> Settings -> API)
7 | Gebruikersnaam
8 | Wachtwoord
9 | Use secure connection (HTTPS)
10 |
11 | Automatisch synchroniseren
12 | Automatisch bijwerken Film Collectie bij opstarten
13 | Automatisch bijwerken TV Serie Collectie bij opstarten
14 | Automatisch synchroniseren bekeken Films bij het opstarten
15 | Automatisch synchroniseren bekeken TV Series bij het opstarten
16 | Automatisch opschonen Film Collectie bij opstarten
17 | Automatisch opschonen TV Serie Collectie bij opstarten
18 |
19 | Waardering
20 | Beoordeel Film na het bekijken
21 | Beoordeel TV Serie na het bekijken
22 | Beoordeel elk afspeellijst item
23 | Minimum percentage gezien om dialoogvenster beoordelen weer te geven
24 |
25 | Scrobblen
26 | Scrobble Films
27 | Scrobble TV Series
28 | Minimum percentage gezien om te scrobbelen
29 |
30 |
31 |
32 | Vul uw gebruikersnaam en wachtwoord in bij instellingen
33 | Voer uw wachtwoord in bij instellingen
34 | Kan geen verbinding maken met Trakt
35 | Fout
36 | Onjuiste gebruikersnaam of wachtwoord
37 | Controle Database voor Updates
38 | Fout bij uploaden Film collectie
39 | Geen nieuwe Films in XBMC Database om bij te werken
40 | Fout bij het uploaden van bekeken Films
41 | Geen nieuwe Films bekeken om bij te werken voor Trakt
42 | Films zullen worden toegevoegd aan Trakt Collectie
43 | Films worden bijgewerkt op Trakt
44 | Films worden toegevoegd als bekeken op Trakt
45 | Geen nieuwe bekeken Films om bij te werken voor XBMC
46 | Films bijgewerkt op XBMC
47 | Geen Films om uit database te verwijderen op Trakt
48 | TV Serie Afleveringen zullen worden toegevoegd aan Trakt Collectie
49 | Controle van XBMC Database voor nieuwe Films
50 | Controle van XBMC Database voor nieuwe Afleveringen
51 | Opdracht afgebroken door de gebruiker
52 | Fout bij het uploaden van TV Serie Collectie
53 | Geen nieuwe Afleveringen in XBMC Database om bij te werken
54 | Afleveringen met succes bijgewerkt op Trakt
55 | Films overgeslagen
56 | Controle van XBMC Database voor verwijderde Films
57 | Controle van XBMC Database voor verwijderde Afleveringen
58 | Afleveringen zullen worden verwijderd van Trakt Collectie
59 | Geen Afleveringen om te verwijderen van Trakt
60 | Controle van XBMC Database voor nieuwe bekeken Afleveringen
61 | Afleveringen zullen worden toegevoegd als gezien op Trakt
62 | Fout bij het uploaden van bekeken TV-series
63 | Geen nieuwe bekeken Afleveringen in XBMC database om bij te werken
64 | Films worden toegevoegd als bekeken in XBMC
65 | Controle Trakt Database voor nieuwe bekeken Afleveringen
66 | Afleveringen zullen worden ingesteld als gezien in XBMC
67 | Bijwerken XBMC Database
68 | Geen nieuwe afleveringen bekeken om bij te werken op Trakt
69 | Fout: XBMC Film Database kan niet worden geopend
70 | Dit zal alle Films verwijderen uit uw Trakt Collectie
71 | die niet in de XBMC Database aanwezig zijn.
72 | Wil je doorgaan?
73 | Dit zal alle TV Series verwijderen uit uw Trakt Collectie
74 | binnenkort
75 | Er zijn geen aanbevolen Films voor u
76 | Er zijn geen aanbevolen TV Series aanbevolen voor u
77 | Geen Films aanwezig in je volglijst
78 | Geen TV Series aanwezig in je volglijst
79 | Niet gevonden in uw XBMC Database
80 | Ontvangen van informatie van Trakt servers
81 | Doorverwijzing met lokale informatie
82 | Beoordeling met succes verwijderd
83 | Waardering met succes toegevoegd
84 | Fout bij het toevoegen van waardering
85 | Controle van XBMC Database voor nieuwe bekeken films
86 | Controle Trakt Database voor nieuwe bekeken films
87 | Kan film niet af spelen
88 | Beoordeel deze film?
89 | Beoordeel deze aflevering?
90 | Beoordeel hele serie?
91 | Beoordeel deze serie?
92 | Trek beoordeling in
93 | Niet beoordeeld
94 | Toevoegen aan volglijst mislukt
95 | Succesvol aan volglijst toegevoegd
96 | Fout bij verwijderen van volglijst
97 | Succesvol verwijderd van volglijst
98 |
99 |
100 | Beginnen bijwerken Film collectie
101 | Beginnen bijwerken TV Series collectie
102 | Start synchronisatie bekeken Films
103 | Start synchronisatie bekeken TV Series
104 | Bijwerken / synchroniseren gedaan
105 |
106 |
107 | Trakt Utilities
108 |
109 |
110 | Volglijst
111 | Vrienden
112 | Aanbevelingen
113 | Trending Films / TV Series
114 | Bijwerken / Synchroniseren / Opschonen
115 |
116 |
117 |
118 |
119 | Werk Film Collectie bij
120 | Synchroniseer bekeken Films
121 | Werk TV Serie Collectie bij
122 | Synchroniseer bekeken TV Series
123 | Opschonen Film Collectie
124 | Opschonen TV Serie Collectie
125 |
126 | Trending Films
127 | Trending TV Series
128 |
129 | Volglijst Films
130 | Volglijst TV Series
131 | Volglijst Afleveringen
132 |
133 | Aanbevolen Films
134 | Aanbevolen TV Series
135 | Aanbevolen Afleveringen
136 |
137 |
138 | Op dit moment aan het kijken
139 | Volglijst
140 | Bekeken
141 | Bibliotheek
142 | Profiel
143 |
--------------------------------------------------------------------------------
/resources/language/English/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | General
5 | Enable debug mode
6 | API Key (optional)
7 | Username
8 | Password
9 | Use secure connection (HTTPS)
10 |
11 | Auto Syncing
12 | Auto update Movies Collection at startup
13 | Auto update TV Show Collection at startup
14 | Auto sync seen Movies at startup
15 | Auto sync seen TV Shows at startup
16 | Auto clean Movies Collection at startup
17 | Auto clean TV Show Collection at startup
18 |
19 | Rating
20 | Rate Movie after watching
21 | Rate TV Show Episode ater watching
22 | Rate each playlist item
23 | Minimum percent watched to display rate dialog
24 |
25 | Scrobbling
26 | Scrobble Movies
27 | Scrobble TV Show Episodes
28 | Minimum percent watched to scrobble item
29 |
30 |
31 |
32 | please enter your Username and Password in settings
33 | please enter your Password in settings
34 | can't connect to trakt
35 | Error
36 | Incorrect username or password
37 | Checking Database for Updates
38 | Error uploading movie collection
39 | No new movies in XBMC library to update
40 | Error uploading seen movies
41 | no new seen movies to update for trakt
42 | Movies will be added to Trakt Collection
43 | Movies updated on Trakt
44 | Movies will be added as seen on Trakt
45 | no new seen movies to update for xbmc
46 | Movies updated on XBMC
47 | No movies to unlibrary on trakt
48 | TV Show Episodes will be added to Trakt Collection
49 | Checking XBMC Database for new Movies
50 | Checking XBMC Database for new Episodes
51 | Progress aborted by user
52 | Error uploading TV Show Collection
53 | No new Episodes in XBMC library to update
54 | Episodes sucessfully updated to Trakt
55 | Movies skipped
56 | Checking XBMC Database for deleted Movies
57 | Checking XBMC Database for deleted Episodes
58 | TV Show Episodes will be removed from Trakt Collection
59 | No episodes to remove from trakt
60 | Checking XBMC Database for new seen Episodes
61 | TV Show Episodes will be added as seen on Trakt
62 | Error uploading seen TV Shows
63 | No new seen Episodes in XBMC Database to update
64 | Movies will be added as seen on XBMC
65 | Checking Trakt Database for new seen Episodes
66 | TV Show Episodes will be set as seen on XBMC
67 | updating XBMC Database
68 | No new seen Episodes on Trakt to update
69 | Error: can't open XBMC Movie Database
70 | This will remove all Movies from your Trakt Collection
71 | that are not in the XBMC library.
72 | Do you want to continue?
73 | This will remove all TV Shows from your Trakt Collection
74 | comming soon
75 | there are no movies recommended for you
76 | there are no tv shows recommended for you
77 | there are no movies in your watchlist
78 | there are no tv shows in your watchlist
79 | not found in your XBMC Library
80 | Retreiving information from Trakt servers
81 | Cross-referencing with local information
82 | Rating removed successfully
83 | Rating submitted successfully
84 | Error submitting rating
85 | Checking XBMC Database for new seen Movies
86 | Checking Trakt Database for new seen Movies
87 | Unable to play movie
88 | Rate that movie?
89 | Rate that episode?
90 | Rate whole show
91 | Rate that show?
92 | Unrate
93 | Unrated
94 | Failed to added to watch-list
95 | Successfully added to watch-list
96 | Failed to remove from watch-list
97 | Successfully removed from watch-list
98 |
99 |
100 | start movie collection update
101 | start tvshow collection update
102 | start sync seen movies
103 | start sync seen tv shows
104 | update / sync done
105 |
106 |
107 | Trakt Utilities
108 |
109 |
110 | Watchlist
111 | Friends
112 | Recommendations
113 | Trending Movies / TV Shows
114 | Update / Sync / Clean
115 |
116 |
117 |
118 |
119 | Update Movie Collection
120 | Sync seen Movies
121 | Update TV Show Collection
122 | Sync seen TV Shows
123 | Clean Movie Collection
124 | Clean TV Show Collection
125 |
126 | Trending Movies
127 | Trending TV Shows
128 |
129 | Watchlist Movies
130 | Watchlist TV Shows
131 | Watchlist Episodes
132 |
133 | Recommened Movies
134 | Recommened TV Shows
135 | Recommened Episodes
136 |
137 |
138 | Currently Watching
139 | Watch-list
140 | Watched
141 | Library
142 | Profile
143 |
--------------------------------------------------------------------------------
/resources/language/German/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug Modus aktivieren
5 | API Key
6 | Benutzername
7 | Passwort
8 | Sichere Verbindung benutzen (HTTPS)
9 | Aktualisiere Filmsammlung beim start
10 | Aktualisiere Seriensammlung beim start
11 | Synchronisiere gesehene Filme beim start
12 | Synchronisiere gesehene Serien beim start
13 |
14 |
15 |
16 | Bitte gib deinen Benutzernamen und Passwort in den Einstellungen ein
17 | Bitte gib dein Passwort in den Einstellungen ein
18 | Kann keine Verbindung zu Trakt aufbauen
19 | Error
20 | Überprüfe Datenbank nach Updates
21 | Error beim hochladen der Film Sammlung
22 | Keine neuen Filme in der XBMC Datenbank
23 | Error beim hochladen der gesehenen Filme
24 | Keine gesehenen Filme für Trakt gefunden
25 | Filme werden der Trakt Filmsammlung hinzugefügt
26 | Filme aktualisiert auf Trakt
27 | Filme werden bei Trakt als gesehen hinzugefügt
28 | Keinen gesehenen Filme für XBMC gefunden
29 | Filme wurden in XBMC aktualisiert
30 | Keine Filme aus Traktsammlung zu entfernen
31 | Episoden werden zur Traktsammlung hinzugefügt
32 | Überprüfe XBMC Datenbank nach neuen Filmen
33 | Überprüfe XBMC Datenbank nach neuen Episoden
34 | Prozess vom Benutzer abgebrochen
35 | Fehler beim Hochladen der Seriensammlung
36 | Keine Episoden in XBMC zu aktualisieren
37 | Episoden erfolgreich auf Trakt aktualisiert
38 | Filme übersprungen
39 | Überprüfe XBMC Datenbank nach gelöschten Filmen
40 | Überprüfe XBMC Datenbank nach gelöschten Serien/Episoden
41 | Episoden werden von der Traktsammlung entfernt
42 | Keine Episoden von Trakt zu entfernen
43 | Überprüfe XBMC Datenbank nach gesehenen Episoden
44 | Episoden werden auf Trakt als gesehen hinzugefügt
45 | Fehler beim Hochladen gesehener Episoden
46 | Keine neuen gesehenen Episoden in XBMC Datenbank
47 | Filme werden in XBMC als gesehen markiert
48 | Überprüfe Trakt Datenbank nach gesehenen Episoden
49 | Episoden werden in XBMC als gesehen markiert
50 | aktualisiere XBMC Datenbank
51 | Keine gesehenen Episoden auf Trakt zu aktualisieren
52 | Error: kann XBMC Datenbank nicht öffnen
53 |
54 |
55 | Aktualisiere Filmsammlung
56 | Synchronisiere gesehene Filme
57 | Aktualisiere Seriensammlung
58 | Synchronisiere gesehene Serien
59 | Bereinige Filmsammlung
60 | Bereinige Seriensammlung
61 |
62 |
--------------------------------------------------------------------------------
/resources/language/Polish/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Główne
9 | Włącz tryb debugowania
10 | Klucz API (dostępny na trakt --> Ustawienia --> API)
11 | Użytkownik
12 | Hasło
13 | Use secure connection (HTTPS)
14 | Auto synchronizacja
15 | Auto aktualizacja Kolekcji Filmów przy starcie
16 | Auto aktualizacja Kolekcji Seriali przy starcie
17 | Auto synchronizacja obejrzanych Filmów przy starcie
18 | Auto synchronizacja obejrzanych Seriali przy starcie
19 | Auto czyszczenie Kolekcji Filmów przy starcie
20 | Auto czyszczenie Kolekcji Seriali przy starcie
21 | Ocena
22 | Oceń Film po obejrzeniu
23 | Oceń odcinek Serialu po obejrzeniu
24 | Oceń każdą pozycję playlisty
25 | Minimalny procent obejrzenia, aby pokazać dialog oceny
26 | Scrobbling
27 | Scrobluj Filmy
28 | Scrobluj odcinki Seriali TV
29 | Minimalny procent obejrzenia, aby wyscroblować pozycję
30 |
31 |
32 | proszę podać nazwę Użytkownika i Hasło w ustawieniach
33 | proszę podać swoje Hasło w ustawieniach
34 | błąd połączenia z trakt
35 | Błąd
36 | Nieprawidłowa nazwa użytkownika lub hasło
37 | Szukam aktualizacji w bazie
38 | Błąd aktualizacji kolekcji filmów
39 | Brak nowych filmów w bibliotece XBMC do zaktualizowania
40 | Błąd aktualizacji obejrzanych filmów
41 | brak nowo obejrzanych filmów do zaktualizowania dla Trakt
42 | Filmy będą dodane do Kolekcji Trakt
43 | Filmy zaktualizowane
44 | Filmy będą dodane jako obejrzane do Trakt
45 | brak nowo obejrzanych filmów do zaktualizowania dla xbmc
46 | Filmy zaktualizowane w XBMC
47 | Brak filmów do usunięcia z biblioteki Trakt
48 | Odcinki Serialu TV będą dodane do Kolekcji Trakt
49 | Sprawdzam nowe filmy w bazie XBMC
50 | Sprawdzam nowe odcinki w bazie XBMC
51 | Postęp anulowany przez użytkownika
52 | Błąd aktualizowania Kolekcji Seriali TV
53 | Brak nowych Odcinków do zaktualizowania w bibliotece XBMC
54 | Odcinki pomyślnie zaktualizowane
55 | Pominięte filmy
56 | Sprawdzam usunięte filmy w bazie XBMC
57 | Sprawdzam usunięte odcinki w bazie XBMC
58 | Odcinki Seriali TV zostaną usunięte z Kolekcji Trakt
59 | Brak odcinków do usunięcia z Trakt
60 | Sprawdzam nowe obejrzane Odcinki w bazie XBMC
61 | Odcinki Seriali TV zostaną dodane jako obejrzane na Trakt
62 | Błąd aktualizowania obejrzanych Seriali TV
63 | Brak nowo obejrzanych Odcinków do zaktualizowania w bazie XBMC
64 | Filmy zostaną dodane jako obejrzane w XBMC
65 | Sprawdzam nowe Odcinki w bazie Trakt
66 | Odcinki Seriali TV zostaną oznaczone jako obejrzane w XBMC
67 | aktualizuję bazę XBMC
68 | Brak nowo obejrzanych Odcinków w Trakt do zaktualizowania
69 | Błąd: nie można otworzyć bazy Filmów XBMC
70 | To usunie wszystkie Filmy z Twojej Kolekcji Trakt,
71 | które nie są w bibliotece XBMC.
72 | Czy chcesz kontynuować?
73 | To usunie wszystkie Seriale TV z Twojej Kolekcji Trakt
74 | wkrótce
75 | brak filmów rekomendowanych dla Ciebie
76 | brak seriali tv rekomendowanych dla Ciebie
77 | brak filmów w Twojej liście do obejrzenia
78 | brak seriali tv w Twojej liście do obejrzenia
79 | nie znaleziony w Twojej bibliotece XBMC
80 | Pobieram informacje z serwerów Trakt
81 | Ocena usunięta pomyślnie
82 | Ocena wysłana pomyślnie
83 | Błąd wysyłania oceny
84 | rozpocznij aktualizację kolekcji filmów
85 | rozpocznij aktualizację kolekcji seriali tv
86 | rozpocznij synchronizację obejrzanych filmów
87 | rozpocznij synchronizację obejrzanych seriali tv
88 | aktualizacja / synchronizacja zakończona
89 | Narzędzia Trakt
90 | Lista do obejrzenia
91 | Znajomi
92 | Rekomendacje
93 | Popularne Filmy / Seriale TV
94 | Aktualizuj / Synchronizuj / Czyść
95 |
96 |
97 |
98 |
99 | Aktualizuj Kolekcję Filmów
100 | Synchronizuj obejrzane Filmy
101 | Aktualizuj Kolekcję Seriali TV
102 | Synchronizuj obejrzane Seriale TV
103 | Wyczyść Kolekcję Filmów
104 | Wyczyść Kolekcję Seriali TV
105 | Popularne Filmy
106 | Popularne Seriale TV
107 | Lista Filmów do obejrzenia
108 | Lista Seriali TV do obejrzenia
109 | Lista Odcinków do obejrzenia
110 | Rekomendowane Filmy
111 | Rekomendowane Seriale TV
112 | Rekomendowane Odcinki
113 | Aktualnie oglądasz
114 | Lista do obejrzenia
115 | Obejrzane
116 | Biblioteka
117 | Profil
118 | Sprawdzam nowe obejrzane Filmy w bazie XBMC
119 | Sprawdzam nowe obejrzane Filmy w bazie Trakt
120 | Nie mogę odtworzyć filmu
121 | Ocenić ten film?
122 | Ocenić ten odcinek?
123 | Oceń cały serial
124 | Ocenić ten serial?
125 | Usuń ocenę
126 | Nie oceniono
127 | Błąd przy dodawaniu do listy do obejrzenia
128 | Pomyślnie dodano do listy do obejrzenia
129 | Błąd przy usuwaniu z listy do obejrzenia
130 | Pomyślnie usunięto z listy do obejrzenia
131 |
--------------------------------------------------------------------------------
/resources/language/Portuguese (Brazil)/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Geral
5 | Ativar modo debug
6 | Chave API (encontre em trakt --> Settings --> API)
7 | Usuário
8 | Senha
9 | Use secure connection (HTTPS)
10 |
11 | Auto Sincronia
12 | Auto atualizar Coleção de Filmes ao iniciar
13 | Auto atualizar Coleção de Seriados ao iniciar
14 | Auto sincronizar Filmes vistos ao iniciar
15 | Auto sincronizar Seriados vistos ao iniciar
16 | Auto limpar Coleção de Filmes ao iniciar
17 | Auto limpar Coleção de Seriados ao iniciar
18 |
19 | Classificação
20 | Classifique o Filme após assistir
21 | Classifique o Episódio de Seriado após assistir
22 | Classifique cada ítem da lista de reprodução
23 | Percentual mínimo ao assistir para mostrar o diálogo de classificação
24 |
25 | Scrobbling
26 | Fazer Scrobble dos Filmes
27 | Fazer Scrobble dos Episódios de Seriados
28 | Percentual mínimo ao assistir para fazer scrobble de um item
29 |
30 |
31 |
32 | por favor, coloque seu Usuário e Senha nas configurações
33 | por favor, coloque sua Senha nas configurações
34 | não foi possível conectar ao trakt
35 | Erro
36 | Usuário ou senha incorretos
37 | Checando Banco de Dados por Atualizações
38 | Erro ao enviar coleção de filmes
39 | Nenhum filme novo na biblioteca do XBMC para atualizar
40 | Erro ao enviar filmes vistos
41 | nenhum filme visto novo para atualizar para o trakt
42 | Filmes serão adicionados à Coleção Trakt
43 | Filmes atualizados no Trakt
44 | Filmes serão adicionados como vistos no Trakt
45 | nenhum filme visti novo para atualizar para o xbmc
46 | Filmes atualizados no XBMC
47 | Nenhum filme para retirar da biblioteca no trakt
48 | Episódios de Seriados serão adicionados à Coleção Trakt
49 | Checando Banco de Dados XBMC por novos Filmes
50 | Checando Banco de Dados XBMC por novos Episódios
51 | Progresso abortado pelo usuário
52 | Erro ao enviar Coleção de Seriados
53 | Nenhum Episídio novo na biblioteca XBMC para atualizar
54 | Epiódios atualizados com sucesso no Trakt
55 | Filmes ignorados
56 | Checando Banco de Dados XBMC por Filmes apagados
57 | Checando Banco de Dados XBMC por Episódios apagados
58 | Episódios de Seriados serão removidos da Coleção Trakt
59 | Nenhum episódio para remover do trakt
60 | Checando Banco de Dados XBMC por Episódios vistos novos
61 | Episódios de Seriados serão adicionados como vistos no Trakt
62 | Erro ao atualizar Seriados vistos
63 | Nenhum Episódio visto novo para atualizar no Banco de Dados do XBMC
64 | Filmes serão adicionados como vistos no XBMC
65 | Checando Banco de Dados Trakt por novos Episódios vistos
66 | Seriados serão ajustados como vistos no XBMC
67 | atualizado Banco de Dados XBMC
68 | Nunhum novo episódio visto no Trakt para atualizar
69 | Erro: não foi possível abrir o Banco de Dados de Filmes do XBMC
70 | Isso irá remover todos os Filmes de sua Coleção Trakt
71 | que não estão na biblioteca XBMC.
72 | Você quer continuar?
73 | Isso irá remover todos os Seriados de sua Coleção Trakt
74 | Em Breve
75 | não há filmes recomendados para você
76 | não há seriados recomendados para você
77 | não há filmes em sua watchlist
78 | não há seriados em sua watchlist
79 | não encontrado em sua Biblioteca XBMC
80 | Obtendo informação dos servidores Trakt
81 | Referência cruzada com informação local
82 | Remoção da avaliação bem sucedida
83 | Envio da avaliação bem sucedido
84 | Erro ao enviar avaliação
85 | Checando Banco de Dados XBMC por novos Filmes vistos
86 | Checando Banco de Dados Trakt por novos Filmes vistos
87 | Incapaz de tocar filme
88 | Avaliar esse filme?
89 | Avaliar esse episódio?
90 | Avaliar seriado inteiro
91 | Avaliar esse seriado?
92 | Desavaliar
93 | Não avaliadodo
94 | Falha ao adicionar a watch-list
95 | Adicionado com sucesso a watch-list
96 | Falha em remover da watch-list
97 | Removido com sucesso da watch-list
98 |
99 |
100 | iniciando atualização da coleção de filmes
101 | iniciando atualização da coleção de seriados
102 | iniciando sincronização dos filmes vistos
103 | iniciando sincronização dos seriados vistos
104 | atualização / sincronia pronta
105 |
106 |
107 | Serviços Trakt
108 |
109 |
110 | Watchlist
111 | Amigos
112 | Recomendações
113 | Tendências em Filmes / Seriados
114 | Atualizar / Sincronizar / Limpar
115 |
116 |
117 |
118 |
119 | Atualizar Coleção de Filmes
120 | Sincronizar Filmes vistos
121 | Atualizar Coleção de Seriados
122 | Sincronizar Seriados vistos
123 | Limpar Coleção de Filmes
124 | Limpar Coleção de Seriados
125 |
126 | Tendência para Filmes
127 | Tendência para Seriados
128 |
129 | Watchlist Movies
130 | Watchlist TV Shows
131 | Watchlist Episodes
132 |
133 | Filmes Recomendados
134 | Seriados Recomendados
135 | Episódios Recomendados
136 |
137 |
138 | Atualmente Assistindo
139 | Watch-list
140 | Assistido
141 | Biblioteca
142 | Perfil
143 |
--------------------------------------------------------------------------------
/resources/settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/resources/skins/Default/720p/Font.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | font12
4 | Arialuni.TTF
5 | 12
6 |
7 | 0.75
8 |
9 |
--------------------------------------------------------------------------------
/resources/skins/Default/720p/includes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/resources/skins/Default/720p/movie.xml:
--------------------------------------------------------------------------------
1 |
2 | 101
3 |
4 | WindowOpen
5 | WindowClose
6 |
7 |
8 |
9 | Background
10 | 0
11 | 0
12 | 1280
13 | 800
14 | scale down
15 | FF3E3E3E
16 |
17 |
18 |
19 | Movie Poster
20 | 50
21 | 100
22 | 250
23 | 350
24 | scale down
25 |
26 |
27 |
28 | Movie Title
29 | 0
30 | 30
31 | 1280
32 | 80
33 | center
34 | font20
35 | FFFFFFFF
36 |
37 |
38 |
39 | Movie Tagline
40 | 0
41 | 50
42 | 1280
43 | 80
44 | center
45 | font20
46 | FFFFFFFF
47 |
48 |
49 |
50 | Movie Overview
51 | 450
52 | 100
53 | 700
54 | 400
55 | font13
56 | true
57 | !Control.HasFocus(13)
58 | FFFFFFFF
59 |
60 |
61 |
62 | Play
63 | 0
64 | 600
65 | 1280
66 | 50
67 | font13
68 | FF444444
69 |
70 | FFFFFFFF
71 | FF009CFF
72 | 80FFFFFF
73 | center
74 | center
75 | 106
76 | 106
77 | 106
78 | 106
79 |
80 |
81 |
82 | Movie Year
83 | 50
84 | 500
85 | 200
86 | 40
87 | left
88 | font20
89 | FFFFFFFF
90 |
91 |
92 |
93 |
94 | Movie Runtime
95 | 50
96 | 520
97 | 300
98 | 40
99 | left
100 | font20
101 | FFFFFFFF
102 |
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/resources/skins/Default/720p/movies.xml:
--------------------------------------------------------------------------------
1 |
2 | 101
3 |
4 | WindowOpen
5 | WindowClose
6 |
7 |
8 |
9 | Background
10 | 0
11 | 0
12 | 1280
13 | 800
14 | scale down
15 | FF3E3E3E
16 |
17 |
18 |
19 | Movie Title
20 | 0
21 | 30
22 | 1280
23 | 80
24 | center
25 | font20
26 | FFFFFFFF
27 | 00000000
28 |
29 |
30 |
31 | Movie Tagline
32 | 0
33 | 50
34 | 1280
35 | 80
36 | center
37 | font20
38 | FFFFFFFF
39 | 00000000
40 |
41 |
42 |
43 | Movie Overview
44 | 30
45 | 100
46 | 700
47 | 300
48 | font13
49 | true
50 | !Control.HasFocus(13)
51 | FFFFFFFF
52 | 00000000
53 |
54 |
55 |
56 | Watchers
57 | 50
58 | 410
59 | 300
60 | 40
61 | left
62 | font20
63 | FFFFFFFF
64 | 00000000
65 |
66 |
67 |
68 | Movie Year
69 | 50
70 | 430
71 | 200
72 | 40
73 | left
74 | font20
75 | FFFFFFFF
76 | 00000000
77 |
78 |
79 |
80 | Movie Runtime
81 | 50
82 | 450
83 | 300
84 | 40
85 | left
86 | font20
87 | FFFFFFFF
88 | 00000000
89 |
90 |
91 |
92 | Movie Rating
93 | 50
94 | 470
95 | 300
96 | 40
97 | left
98 | font20
99 | FFFFFFFF
100 | 00000000
101 |
102 |
103 |
104 | List of Movies
105 | 20
106 | 500
107 | 1240
108 | 200
109 | 106
110 | 110
111 | true
112 | horizontal
113 |
114 |
115 | 0
116 | 45
117 | 100
118 | 150
119 | ListItem.Icon
120 | scale
121 |
122 |
123 | 58
124 | 45
125 | 42
126 | 42
127 | local.png
128 | ListItem.Property(Available)
129 |
130 |
131 | 58
132 | 45
133 | 42
134 | 42
135 | watchlist.png
136 | ListItem.Property(Watchlist)
137 |
138 |
139 |
140 |
141 | 0
142 | 0
143 | 130
144 | 195
145 | ListItem.Icon
146 | scale
147 |
148 |
149 | 77
150 | 0
151 | 53
152 | 53
153 | local.png
154 | ListItem.Property(Available)
155 |
156 |
157 | 77
158 | 0
159 | 53
160 | 53
161 | watchlist.png
162 | ListItem.Property(Watchlist)
163 |
164 |
165 |
166 |
167 |
168 |
169 |
--------------------------------------------------------------------------------
/resources/skins/Default/720p/rate.xml:
--------------------------------------------------------------------------------
1 |
2 | 104
3 | yes
4 | true
5 |
6 | 1
7 | 510
8 | 270
9 |
10 |
11 |
12 | Scene
13 | -510
14 | -250
15 | 1280
16 | 720
17 | true
18 | 66ffffff
19 | w1x1.png
20 | 20
21 | scale
22 |
23 |
24 | Header
25 | 0
26 | 0
27 | 260
28 | 50
29 | true
30 | f6111111
31 | w1x1.png
32 | 20
33 | scale
34 |
35 |
36 | Heading
37 | 0
38 | 0
39 | 260
40 | 50
41 | true
42 | center
43 | center
44 | 0
45 | font12
46 | false
47 | false
48 | ffffffff
49 | ff222222
50 | false
51 |
52 |
53 | Area 1
54 | 0
55 | 50
56 | 260
57 | 45
58 | true
59 | cc222222
60 | w1x1.png
61 | 20
62 | scale
63 |
64 |
65 | Area 2
66 | 0
67 | 95
68 | 260
69 | 95
70 | true
71 | cc111111
72 | w1x1.png
73 | 20
74 | scale
75 |
76 |
77 | Current Rating Group
78 | true
79 | 20
80 | 60
81 | 100
82 | 25
83 | ffffff
84 | ff666666
85 | ffffffff
86 | 80ffffff
87 | true
88 |
89 | Current not rated
90 | 0
91 | 0
92 | 100
93 | 25
94 |
95 | current-no-rating.png
96 | current-no-rating.png
97 | center
98 | center
99 |
100 | font12
101 | 104
102 | 97
103 |
104 |
105 | Current love
106 | 0
107 | 0
108 | 100
109 | 25
110 |
111 | current-love.png
112 | current-love.png
113 | 23
114 |
115 | font12
116 | 104
117 | 97
118 |
119 |
120 | Current hate
121 | 0
122 | 0
123 | 100
124 | 25
125 |
126 | current-hate.png
127 | current-hate.png
128 | 23
129 |
130 | font12
131 | 104
132 | 97
133 |
134 |
135 |
136 | Skip
137 | 140
138 | 60
139 | 100
140 | 25
141 | true
142 | skip-rating.png
143 | skip-rating.png
144 | ffffffff
145 | ff666666
146 | ffffffff
147 | 80ffffff
148 | true
149 | 95
150 | 97
151 |
152 |
153 | Love Hate Control Group
154 | 20
155 | 105
156 | 120
157 | 75
158 | true
159 | ffffffff
160 | ffffffff
161 | ffaaaaaa
162 | 80ffffff
163 | true
164 | 105
165 |
166 | Love
167 | 0
168 | 0
169 | 100
170 | love.png
171 | love_f.png
172 | 104
173 | 108
174 | 106
175 |
176 |
177 | Hate
178 | 0r
179 | 0
180 | 100
181 | hate.png
182 | hate_f.png
183 | 104
184 | 108
185 | 105
186 |
187 |
188 |
189 | extention for rate show button
190 | 0
191 | 210
192 | 260
193 | 50
194 | F6111111
195 | w1x1.png
196 |
197 |
198 | Rate show
199 | 0
200 | 210
201 | 260
202 | 50
203 | 0
204 | center
205 | center
206 | font13
207 | FFFFFFFF
208 | FF666666
209 | FFAAAAAA
210 | 97
211 |
212 |
213 |
214 |
--------------------------------------------------------------------------------
/resources/skins/Default/720p/tvshows.xml:
--------------------------------------------------------------------------------
1 |
2 | 101
3 |
4 | WindowOpen
5 | WindowClose
6 |
7 |
8 |
9 | Background
10 | 0
11 | 0
12 | 1280
13 | 800
14 | scale down
15 | FF3E3E3E
16 |
17 |
18 |
19 | TV SHow Title
20 | 0
21 | 30
22 | 1280
23 | 80
24 | center
25 | font20
26 | FFFFFFFF
27 | 00000000
28 |
29 |
30 |
31 | TV Show Tagline
32 | 0
33 | 50
34 | 1280
35 | 80
36 | center
37 | font20
38 | FFFFFFFF
39 | 00000000
40 |
41 |
42 |
43 | TV Show Overview
44 | 30
45 | 100
46 | 700
47 | 300
48 | font13
49 | true
50 | !Control.HasFocus(13)
51 | FFFFFFFF
52 | 00000000
53 |
54 |
55 |
56 | Watchers
57 | 50
58 | 410
59 | 300
60 | 40
61 | left
62 | font20
63 | FFFFFFFF
64 | 00000000
65 |
66 |
67 |
68 | TV Show Year
69 | 50
70 | 430
71 | 200
72 | 40
73 | left
74 | font20
75 | FFFFFFFF
76 | 00000000
77 |
78 |
79 |
80 | TV Show Runtime
81 | 50
82 | 450
83 | 300
84 | 40
85 | left
86 | font20
87 | FFFFFFFF
88 | 00000000
89 |
90 |
91 |
92 | TV Show Rating
93 | 50
94 | 470
95 | 300
96 | 40
97 | left
98 | font20
99 | FFFFFFFF
100 | 00000000
101 |
102 |
103 |
104 | List of TV Shows
105 | 20
106 | 500
107 | 1240
108 | 200
109 | 106
110 | 110
111 | true
112 | horizontal
113 |
114 |
115 | 0
116 | 45
117 | 100
118 | 150
119 | ListItem.Icon
120 | scale
121 |
122 |
123 | 58
124 | 45
125 | 42
126 | 42
127 | local.png
128 | ListItem.Property(Available)
129 |
130 |
131 | 58
132 | 45
133 | 42
134 | 42
135 | watchlist.png
136 | ListItem.Property(Watchlist)
137 |
138 |
139 |
140 |
141 | 0
142 | 0
143 | 130
144 | 195
145 | ListItem.Icon
146 | scale
147 |
148 |
149 | 77
150 | 0
151 | 53
152 | 53
153 | local.png
154 | ListItem.Property(Available)
155 |
156 |
157 | 77
158 | 0
159 | 53
160 | 53
161 | watchlist.png
162 | ListItem.Property(Watchlist)
163 |
164 |
165 |
166 |
167 |
168 |
169 |
--------------------------------------------------------------------------------
/resources/skins/Default/media/current-hate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/current-hate.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/current-love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/current-love.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/current-no-rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/current-no-rating.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/hate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/hate.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/hate_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/hate_f.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/local.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/love.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/love_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/love_f.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/skip-rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/skip-rating.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/w1x1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/w1x1.png
--------------------------------------------------------------------------------
/resources/skins/Default/media/watchlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/Default/media/watchlist.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/720p/movie.xml:
--------------------------------------------------------------------------------
1 |
2 | 101
3 |
4 | WindowOpen
5 | WindowClose
6 |
7 |
8 |
9 | Background
10 | 0
11 | 0
12 | 1280
13 | 800
14 | scale down
15 | FF3E3E3E
16 |
17 |
18 |
19 | Movie Poster
20 | 50
21 | 100
22 | 250
23 | 350
24 | scale down
25 |
26 |
27 |
28 | Movie Title
29 | 0
30 | 30
31 | 1280
32 | 80
33 | center
34 | font20
35 | FFFFFFFF
36 |
37 |
38 |
39 | Movie Tagline
40 | 0
41 | 50
42 | 1280
43 | 80
44 | center
45 | font20
46 | FFFFFFFF
47 |
48 |
49 |
50 | Movie Overview
51 | 450
52 | 100
53 | 700
54 | 400
55 | font13
56 | true
57 | !Control.HasFocus(13)
58 | FFFFFFFF
59 |
60 |
61 |
62 | Play
63 | 0
64 | 600
65 | 1280
66 | 50
67 | font13
68 | FF444444
69 |
70 | FFFFFFFF
71 | FF009CFF
72 | 80FFFFFF
73 | center
74 | center
75 | 106
76 | 106
77 | 106
78 | 106
79 |
80 |
81 |
82 | Movie Year
83 | 50
84 | 500
85 | 200
86 | 40
87 | left
88 | font20
89 | FFFFFFFF
90 |
91 |
92 |
93 |
94 | Movie Runtime
95 | 50
96 | 520
97 | 300
98 | 40
99 | left
100 | font20
101 | FFFFFFFF
102 |
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/720p/movies.xml:
--------------------------------------------------------------------------------
1 |
2 | 101
3 |
4 | WindowOpen
5 | WindowClose
6 |
7 |
8 |
9 | Background
10 | 0
11 | 0
12 | 1280
13 | 800
14 | scale down
15 |
16 |
17 | WindowOpen
18 | WindowClose
19 |
20 | 0
21 | 315
22 | 1280
23 | 405
24 | views/showcase_floor.png
25 |
26 |
27 | -138
28 | 1280
29 | 720
30 | common/black.png
31 | aaffffff
32 | Visible
33 | Hidden
34 | Skin.HasSetting(darkinfopane)
35 |
36 |
37 | -70
38 | 0
39 | 464
40 | 720
41 | views/showcase_vignette.png
42 | vignette
43 | true
44 |
45 |
46 | 886
47 | 0
48 | 464
49 | 720
50 | true
51 | vignette
52 | views/showcase_vignette.png
53 |
54 | Neon_Floor
55 |
56 |
57 |
58 | Animation_OpenCloseZoom_New
59 |
60 | 25
61 | 45
62 | 1230
63 | 692
64 | wall/wall_bg.png
65 |
66 |
67 | 25
68 | 45
69 | 1230
70 | 692
71 | wall/wall_bg_reflection.png
72 |
73 |
74 |
75 |
76 | -20
77 | Animation_OpenCloseZoom
78 |
79 | 40
80 | 103
81 | 760
82 | 538
83 | 60
84 | 60
85 | 110
86 | 110
87 | 4
88 | 150
89 | true
90 | icon
91 | 60
92 |
93 |
94 | Conditional
95 |
96 | 0
97 | 0
98 | 126
99 | 179
100 | scale
101 | IconCrossfadeTime2
102 | $INFO[ListItem.Icon]
103 | thumbs/bordershadow4.png
104 | 5
105 |
106 |
107 | 81.5
108 | 5
109 | 40
110 | 40
111 | IconCrossfadeTime2
112 | local.png
113 | ListItem.Property(Available)
114 |
115 |
116 | 81.5
117 | 5
118 | 40
119 | 40
120 | IconCrossfadeTime2
121 | watchlist.png
122 | ListItem.Property(Watchlist)
123 |
124 |
125 |
126 |
127 |
128 | 0
129 | 0
130 | 126
131 | 179
132 | scale
133 | IconCrossfadeTime2
134 | $INFO[ListItem.Icon]
135 | featured/tile_fo.png
136 | 5
137 |
138 |
139 | 81.5
140 | 5
141 | 40
142 | 40
143 | IconCrossfadeTime2
144 | local.png
145 | ListItem.Property(Available)
146 |
147 |
148 | 81.5
149 | 5
150 | 40
151 | 40
152 | IconCrossfadeTime2
153 | watchlist.png
154 | ListItem.Property(Watchlist)
155 |
156 |
157 |
158 |
159 |
160 | 1230
161 | 103
162 | 6
163 | 538
164 | false
165 | CommonVerticalScrollbar
166 | 110
167 | 9000
168 |
169 |
170 | true
171 |
172 | HiddenObject
173 |
174 |
175 | HiddenObject
176 |
177 |
178 | HiddenObject
179 |
180 |
181 |
182 | -15
183 |
184 | 840
185 | 103
186 | 13
187 | 380
188 | Font_Bold25_Caps
189 | white2
190 | true
191 |
192 |
193 | 830
194 | 123
195 | 40
196 | 400
197 | osd/osd_settings_buttonnf.png
198 |
199 |
200 |
201 | 840
202 | 135
203 | 13
204 | 380
205 | Font_Reg18
206 | abFFFFFF
207 | true
208 |
209 |
210 | 1220
211 | 685
212 | 13
213 | 460
214 | Font_Reg18
215 | right
216 | floor
217 | true
218 |
219 |
220 | 1220
221 | 710
222 | 13
223 | 460
224 | Font_Reg18
225 | right
226 | floor
227 |
228 |
229 |
230 | 840
231 | 170
232 | 380
233 | 230
234 | Font_Reg18
235 | justify
236 | white6
237 | Skin.HasSetting(AutoScroll)
238 |
239 |
240 |
241 | 835
242 | 415
243 |
244 | -15
245 | -15
246 | 412
247 | 245
248 | common/black.png
249 | home/nowplaying/OverlayDialogBackground.png
250 | 15
251 |
252 |
253 | 0
254 | 0
255 | 382
256 | 215
257 | IconCrossfadeTime
258 | scale
259 | $INFO[Control.GetLabel(102)]
260 | !Player.Hasvideo
261 | Animation_VisibleChange200
262 |
263 |
264 | 0
265 | 0
266 | 382
267 | 215
268 | Player.Hasvideo + !VideoPlayer.IsFullscreen
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 | Breadcrumbs
280 | Skin.HasSetting(breadcrumb)
281 | Animation_HideBreadCrumbs
282 | Breadcrumbs_BackBar
283 |
284 | 15
285 | 0
286 | 500
287 | left
288 |
289 | 0
290 | horizontal
291 | Animation_HideBreadCrumbs
292 |
293 | Items Icon
294 | 0
295 | 0
296 | 36
297 | 32
298 | keep
299 | common/tv_icon.png
300 | white2
301 | Conditional
302 |
303 |
304 | BreadcrumbsLabel
305 |
306 |
307 |
308 |
309 | 0
310 | 6
311 | 1280
312 | center
313 | center
314 | 10
315 | !IsEmpty(Container(110).NumItems)
316 | horizontal
317 | Visible
318 | Hidden
319 |
320 | 0
321 | 0
322 | 22
323 | center
324 | auto
325 | Font_Condensed20
326 |
327 | bclabel
328 | bcshadow
329 | false
330 | Conditional
331 | !IsEmpty(ListItem.Trailer)
332 |
333 |
334 | Items Icon
335 | 0
336 | 0
337 | 20
338 | 15
339 | stretch
340 | breadcrumbs/items.png
341 | bcicon
342 |
343 |
344 | 0
345 | 0
346 | 22
347 | center
348 | auto
349 | Font_Condensed20
350 |
351 | bclabel
352 | bcshadow
353 | false
354 | Conditional
355 |
356 |
357 | Items Icon
358 | 0
359 | 0
360 | 20
361 | 15
362 | stretch
363 | breadcrumbs/pages.png
364 | bcicon
365 | Visible
366 | Hidden
367 |
368 |
369 | 0
370 | 0
371 | 22
372 | center
373 | auto
374 | Font_Condensed20
375 |
376 | bclabel
377 | bcshadow
378 | false
379 | left
380 | Conditional
381 |
382 |
383 | Breadcrumbs_Furniture
384 |
385 | Furniture_NowPlayingWidget
386 | Furniture_Clock
387 |
388 |
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/720p/rate.xml:
--------------------------------------------------------------------------------
1 |
2 | 104
3 | yes
4 | true
5 | 1
6 |
7 | 1
8 | 0
9 | 0
10 |
11 | Animation_DialogPopup
12 |
13 |
14 | Scene
15 | 0
16 | 0
17 | 1280
18 | 720
19 | true
20 | DDFFFFFF
21 | -
22 | WindowOpen
23 | WindowClose
24 |
25 |
26 | 380
27 | 250
28 |
29 | 0
30 | 0
31 | 520
32 | 220
33 | dialogs/dialog_back.png
34 |
35 |
36 | 10
37 | 0
38 | 500
39 | 40
40 | osd/osd_settings_buttonnf.png
41 |
42 |
43 | 0
44 | 0
45 | 520
46 | 52
47 | selected
48 | center
49 | center
50 | Font_Reg18
51 | true
52 | 30
53 |
54 |
55 | 120
56 | -15
57 | 520
58 | center
59 |
60 | Current not rated
61 | 20
62 | 60
63 | 100
64 | 25
65 |
66 | current-no-rating.png
67 | current-no-rating.png
68 | ffffffff
69 |
70 | ff666666
71 | ffffffff
72 | 80ffffff
73 | center
74 | center
75 |
76 |
77 | true
78 | -
79 | -
80 | 105
81 | 102
82 | 104
83 | 102
84 | font12
85 |
86 |
87 | Current love
88 | 20
89 | 60
90 | 100
91 | 25
92 |
93 | current-love.png
94 | current-love.png
95 | ffffffff
96 |
97 | ff666666
98 | ffffffff
99 | 80ffffff
100 | center
101 | center
102 |
103 |
104 | true
105 | -
106 | -
107 | 101
108 | 103
109 | 101
110 | 103
111 | font12
112 |
113 |
114 | Current hate
115 | 20
116 | 60
117 | 100
118 | 25
119 |
120 | current-hate.png
121 | current-hate.png
122 | ffffffff
123 |
124 | ff666666
125 | ffffffff
126 | 80ffffff
127 | center
128 | center
129 |
130 |
131 | true
132 | -
133 | -
134 | 102
135 | 105
136 | 102
137 | 104
138 | font12
139 |
140 |
141 | Skip
142 | 140
143 | 60
144 | 100
145 | 25
146 | true
147 | skip-rating.png
148 | skip-rating.png
149 | ffffffff
150 |
151 | ff666666
152 | ffffffff
153 | 80ffffff
154 | center
155 | center
156 |
157 |
158 | true
159 | -
160 | -
161 | 106
162 | 106
163 | 103
164 | 101
165 | font12
166 |
167 |
168 | Love
169 | 20
170 | 105
171 | 100
172 | 75
173 | true
174 | love.png
175 | love_f.png
176 | ffffffff
177 |
178 | ffffffff
179 | ffaaaaaa
180 | 80ffffff
181 |
182 |
183 |
184 |
185 | true
186 | -
187 | -
188 | 103
189 | 108
190 | 106
191 | 106
192 |
193 |
194 | Hate
195 | 140
196 | 105
197 | 100
198 | 75
199 | true
200 | hate.png
201 | hate_f.png
202 | ffffffff
203 |
204 | ffffffff
205 | 80ffffff
206 | ffffffff
207 |
208 |
209 |
210 |
211 | true
212 | -
213 | -
214 | 104
215 | 108
216 | 105
217 | 105
218 |
219 |
220 | extention for rate show button
221 | 0
222 | 210
223 | 260
224 | 50
225 | F6111111
226 | w1x1.png
227 |
228 |
229 |
230 | No
231 | 160
232 | 172
233 | 200
234 | 30
235 | Font_Reg18
236 |
237 | grey2
238 | abFFFFFF
239 | 80FFFFFF
240 | center
241 | 20
242 |
243 | no
244 | 200
245 | 200
246 | 200
247 | 200
248 |
249 |
250 |
251 |
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/720p/tvshows.xml:
--------------------------------------------------------------------------------
1 |
2 | 101
3 |
4 | WindowOpen
5 | WindowClose
6 |
7 |
8 |
9 | Background
10 | 0
11 | 0
12 | 1280
13 | 800
14 | scale down
15 |
16 |
17 | WindowOpen
18 | WindowClose
19 |
20 | 0
21 | 315
22 | 1280
23 | 405
24 | views/showcase_floor.png
25 |
26 |
27 | -138
28 | 1280
29 | 720
30 | common/black.png
31 | aaffffff
32 | Visible
33 | Hidden
34 | Skin.HasSetting(darkinfopane)
35 |
36 |
37 | -70
38 | 0
39 | 464
40 | 720
41 | views/showcase_vignette.png
42 | vignette
43 | true
44 |
45 |
46 | 886
47 | 0
48 | 464
49 | 720
50 | true
51 | vignette
52 | views/showcase_vignette.png
53 |
54 | Neon_Floor
55 |
56 |
57 |
58 | Animation_OpenCloseZoom_New
59 |
60 | 25
61 | 45
62 | 1230
63 | 692
64 | wall/wall_bg.png
65 |
66 |
67 | 25
68 | 45
69 | 1230
70 | 692
71 | wall/wall_bg_reflection.png
72 |
73 |
74 |
75 |
76 | -20
77 | Animation_OpenCloseZoom
78 |
79 | 40
80 | 103
81 | 760
82 | 538
83 | 60
84 | 60
85 | 110
86 | 110
87 | 4
88 | 150
89 | true
90 | icon
91 | 60
92 |
93 |
94 | Conditional
95 |
96 | 0
97 | 0
98 | 126
99 | 179
100 | scale
101 | IconCrossfadeTime2
102 | $INFO[ListItem.Icon]
103 | thumbs/bordershadow4.png
104 | 5
105 |
106 |
107 | 81.5
108 | 5
109 | 40
110 | 40
111 | IconCrossfadeTime2
112 | local.png
113 | ListItem.Property(Available)
114 |
115 |
116 | 81.5
117 | 5
118 | 40
119 | 40
120 | IconCrossfadeTime2
121 | watchlist.png
122 | ListItem.Property(Watchlist)
123 |
124 |
125 |
126 |
127 |
128 | 0
129 | 0
130 | 126
131 | 179
132 | scale
133 | IconCrossfadeTime2
134 | $INFO[ListItem.Icon]
135 | featured/tile_fo.png
136 | 5
137 |
138 |
139 | 81.5
140 | 5
141 | 40
142 | 40
143 | IconCrossfadeTime2
144 | local.png
145 | ListItem.Property(Available)
146 |
147 |
148 | 81.5
149 | 5
150 | 40
151 | 40
152 | IconCrossfadeTime2
153 | watchlist.png
154 | ListItem.Property(Watchlist)
155 |
156 |
157 |
158 |
159 |
160 | 1230
161 | 103
162 | 6
163 | 538
164 | false
165 | CommonVerticalScrollbar
166 | 110
167 | 9000
168 |
169 |
170 | true
171 |
172 | HiddenObject
173 |
174 |
175 | HiddenObject
176 |
177 |
178 | HiddenObject
179 |
180 |
181 |
182 | -15
183 |
184 | 840
185 | 103
186 | 13
187 | 380
188 | Font_Bold25_Caps
189 | white2
190 | true
191 |
192 |
193 | 830
194 | 123
195 | 40
196 | 400
197 | osd/osd_settings_buttonnf.png
198 |
199 |
200 |
201 | 840
202 | 135
203 | 13
204 | 380
205 | Font_Reg18
206 | abFFFFFF
207 | true
208 |
209 |
210 | 1220
211 | 685
212 | 13
213 | 460
214 | Font_Reg18
215 | right
216 | floor
217 | true
218 |
219 |
220 | 1220
221 | 710
222 | 13
223 | 460
224 | Font_Reg18
225 | right
226 | floor
227 |
228 |
229 |
230 | 840
231 | 170
232 | 380
233 | 230
234 | Font_Reg18
235 | justify
236 | white6
237 | Skin.HasSetting(AutoScroll)
238 |
239 |
240 |
241 | 835
242 | 415
243 |
244 | -15
245 | -15
246 | 412
247 | 245
248 | common/black.png
249 | home/nowplaying/OverlayDialogBackground.png
250 | 15
251 |
252 |
253 | 0
254 | 0
255 | 382
256 | 215
257 | IconCrossfadeTime
258 | scale
259 | $INFO[Control.GetLabel(102)]
260 | !Player.Hasvideo
261 | Animation_VisibleChange200
262 |
263 |
264 | 0
265 | 0
266 | 382
267 | 215
268 | Player.Hasvideo + !VideoPlayer.IsFullscreen
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 | Breadcrumbs
280 | Skin.HasSetting(breadcrumb)
281 | Animation_HideBreadCrumbs
282 | Breadcrumbs_BackBar
283 |
284 | 15
285 | 0
286 | 500
287 | left
288 |
289 | 0
290 | horizontal
291 | Animation_HideBreadCrumbs
292 |
293 | Items Icon
294 | 0
295 | 0
296 | 36
297 | 32
298 | keep
299 | common/tv_icon.png
300 | white2
301 | Conditional
302 |
303 |
304 | BreadcrumbsLabel
305 |
306 |
307 |
308 |
309 | 0
310 | 6
311 | 1280
312 | center
313 | center
314 | 10
315 | !IsEmpty(Container(110).NumItems)
316 | horizontal
317 | Visible
318 | Hidden
319 |
320 | 0
321 | 0
322 | 22
323 | center
324 | auto
325 | Font_Condensed20
326 |
327 | bclabel
328 | bcshadow
329 | false
330 | Conditional
331 | !IsEmpty(ListItem.Trailer)
332 |
333 |
334 | Items Icon
335 | 0
336 | 0
337 | 20
338 | 15
339 | stretch
340 | breadcrumbs/items.png
341 | bcicon
342 |
343 |
344 | 0
345 | 0
346 | 22
347 | center
348 | auto
349 | Font_Condensed20
350 |
351 | bclabel
352 | bcshadow
353 | false
354 | Conditional
355 |
356 |
357 | Items Icon
358 | 0
359 | 0
360 | 20
361 | 15
362 | stretch
363 | breadcrumbs/pages.png
364 | bcicon
365 | Visible
366 | Hidden
367 |
368 |
369 | 0
370 | 0
371 | 22
372 | center
373 | auto
374 | Font_Condensed20
375 |
376 | bclabel
377 | bcshadow
378 | false
379 | left
380 | Conditional
381 |
382 |
383 | Breadcrumbs_Furniture
384 |
385 | Furniture_NowPlayingWidget
386 | Furniture_Clock
387 |
388 |
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/current-hate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/current-hate.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/current-love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/current-love.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/current-no-rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/current-no-rating.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/dontknow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/dontknow.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/dontknow_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/dontknow_f.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/hate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/hate.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/hate_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/hate_f.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/icon.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/local.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/love.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/love_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/love_f.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/skip-rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/skip-rating.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeon.nox/media/watchlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeon.nox/media/watchlist.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/720p/movie.xml:
--------------------------------------------------------------------------------
1 |
2 | 101
3 |
4 | WindowOpen
5 | WindowClose
6 |
7 |
8 |
9 | Background
10 | 0
11 | 0
12 | 1280
13 | 800
14 | scale down
15 | FF3E3E3E
16 |
17 |
18 |
19 | Movie Poster
20 | 50
21 | 100
22 | 250
23 | 350
24 | scale down
25 |
26 |
27 |
28 | Movie Title
29 | 0
30 | 30
31 | 1280
32 | 80
33 | center
34 | font20
35 | FFFFFFFF
36 |
37 |
38 |
39 | Movie Tagline
40 | 0
41 | 50
42 | 1280
43 | 80
44 | center
45 | font20
46 | FFFFFFFF
47 |
48 |
49 |
50 | Movie Overview
51 | 450
52 | 100
53 | 700
54 | 400
55 | font13
56 | true
57 | !Control.HasFocus(13)
58 | FFFFFFFF
59 |
60 |
61 |
62 | Play
63 | 0
64 | 600
65 | 1280
66 | 50
67 | font13
68 | FF444444
69 |
70 | FFFFFFFF
71 | FF009CFF
72 | 80FFFFFF
73 | center
74 | center
75 | 106
76 | 106
77 | 106
78 | 106
79 |
80 |
81 |
82 | Movie Year
83 | 50
84 | 500
85 | 200
86 | 40
87 | left
88 | font20
89 | FFFFFFFF
90 |
91 |
92 |
93 |
94 | Movie Runtime
95 | 50
96 | 520
97 | 300
98 | 40
99 | left
100 | font20
101 | FFFFFFFF
102 |
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/720p/rate.xml:
--------------------------------------------------------------------------------
1 |
2 | 104
3 | yes
4 | true
5 | 1
6 |
7 | 1
8 | 0
9 | 0
10 |
11 | Animation_DialogPopup
12 |
13 |
14 | Scene
15 | 0
16 | 0
17 | 1280
18 | 720
19 | true
20 | DDFFFFFF
21 | dialogs_scan_fill.png
22 | WindowOpen
23 | WindowClose
24 |
25 |
26 | Dialogs_Group
27 |
28 | Background
29 | 0
30 | 0
31 | 509
32 | 91
33 | true
34 | dialogs_scan_background.png
35 | 20
36 |
37 |
38 | 10
39 | 9
40 | 73
41 | 73
42 | dialogs_scan_icon.png
43 |
44 |
45 | Heading
46 | 8
47 | Dialogs_LabelVars
48 | true
49 |
50 |
51 |
52 | 200
53 | 31
54 | 500
55 | left
56 | true
57 | 10
58 | horizontal
59 | 108
60 | 108
61 |
62 | Love
63 | 40
64 | 30
65 | true
66 | love.png
67 | love_f.png
68 | ffffffff
69 |
70 | ffffffff
71 | ffaaaaaa
72 | 80ffffff
73 |
74 |
75 |
76 |
77 | true
78 |
79 |
80 |
81 |
82 | I dont know
83 | 40
84 | 30
85 | true
86 | dontknow.png
87 | dontknow_f.png
88 | -
89 |
90 | -
91 | -
92 | -
93 |
94 |
95 |
96 |
97 | true
98 |
99 |
100 |
101 |
102 | Hate
103 | 40
104 | 30
105 | true
106 | hate.png
107 | hate_f.png
108 | ffffffff
109 |
110 | ffffffff
111 | 80ffffff
112 | ffffffff
113 |
114 |
115 |
116 |
117 | true
118 |
119 |
120 |
121 |
122 | Current not rated
123 | 120
124 | 30
125 | true
126 | center
127 | Font_Info
128 | 2
129 | 5
130 | current-no-rating.png
131 | current-no-rating.png
132 | ffffffff
133 |
134 | ffffffff
135 | -
136 | 80ffffff
137 | ffffffff
138 |
139 | true
140 |
141 |
142 | Conditional
143 |
144 |
145 | Current love
146 | 120
147 | 30
148 | true
149 | current-love.png
150 | current-love.png
151 | ffffffff
152 | right
153 | Font_Info
154 | 20
155 | 5
156 |
157 | ffffffff
158 | 80ffffff
159 | ffffffff
160 | -
161 |
162 | true
163 |
164 |
165 | Conditional
166 |
167 |
168 | Current hate
169 | 120
170 | 30
171 | true
172 | current-hate.png
173 | current-hate.png
174 | ffffffff
175 | right
176 | Font_Info
177 | 20
178 | 5
179 |
180 | ffffffff
181 | 80ffffff
182 | ffffffff
183 | -
184 |
185 | true
186 |
187 |
188 | Conditional
189 |
190 |
191 |
192 |
193 | Background
194 | 0
195 | 0
196 | 509
197 | 91
198 | true
199 | -
200 | 20
201 |
202 |
203 | Rate show
204 | 62
205 | 105
206 | 376
207 | 21
208 | left
209 |
210 |
211 | Font_Info
212 | FFFFFFFF
213 | FF666666
214 | FFAAAAAA
215 |
216 |
217 | 105
218 | 105
219 | 108
220 | 108
221 |
222 |
223 |
224 |
225 |
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/current-hate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/current-hate.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/current-love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/current-love.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/current-no-rating.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/current-no-rating.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/dontknow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/dontknow.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/dontknow_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/dontknow_f.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/hate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/hate.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/hate_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/hate_f.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/icon.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/local.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/love.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/love_f.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/love_f.png
--------------------------------------------------------------------------------
/resources/skins/skin.aeonmq.3/media/watchlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RGPaul/script.traktutilities/056246a6ffbc170343166da9ce2d886efd7dcfdb/resources/skins/skin.aeonmq.3/media/watchlist.png
--------------------------------------------------------------------------------
/scrobbler.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import os
5 | import xbmc,xbmcaddon,xbmcgui
6 | import threading
7 | import time
8 |
9 | from utilities import *
10 | from rating import *
11 |
12 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
13 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
14 | __license__ = "GPL"
15 | __maintainer__ = "Ralph-Gordon Paul"
16 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
17 | __status__ = "Production"
18 |
19 | # read settings
20 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
21 | __language__ = __settings__.getLocalizedString
22 |
23 | apikey = '0a698a20b222d0b8637298f6920bf03a' # scrobbling requires this dev key
24 | username = __settings__.getSetting("username")
25 | pwd = sha.new(__settings__.getSetting("password")).hexdigest()
26 | debug = __settings__.getSetting( "debug" )
27 |
28 | headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
29 |
30 | class Scrobbler(threading.Thread):
31 | totalTime = 1
32 | watchedTime = 0
33 | startTime = 0
34 | curVideo = None
35 | pinging = False
36 | playlistLength = 1
37 | abortRequested = False
38 |
39 | def run(self):
40 | # When requested ping trakt to say that the user is still watching the item
41 | count = 0
42 | while (not (self.abortRequested or xbmc.abortRequested)):
43 | time.sleep(5) # 1min wait
44 | #Debug("[Scrobbler] Cycling " + str(self.pinging))
45 | if self.pinging:
46 | count += 1
47 | if count>=100:
48 | Debug("[Scrobbler] Pinging watching "+str(self.curVideo))
49 | tmp = time.time()
50 | self.watchedTime += tmp - self.startTime
51 | self.startTime = tmp
52 | self.startedWatching()
53 | count = 0
54 | else:
55 | count = 0
56 |
57 | Debug("Scrobbler stopping")
58 |
59 | def playbackStarted(self, data):
60 | self.curVideo = data['item']
61 | if self.curVideo <> None:
62 | if 'type' in self.curVideo and 'id' in self.curVideo:
63 | Debug("[Scrobbler] Watching: "+self.curVideo['type']+" - "+str(self.curVideo['id']))
64 | try:
65 | if not xbmc.Player().isPlayingVideo():
66 | Debug("[Scrobbler] Suddenly stopped watching item")
67 | return
68 | time.sleep(1) # Wait for possible silent seek (caused by resuming)
69 | self.watchedTime = xbmc.Player().getTime()
70 | self.totalTime = xbmc.Player().getTotalTime()
71 | if self.totalTime == 0:
72 | if self.curVideo['type'] == 'movie':
73 | self.totalTime = 90
74 | elif self.curVideo['type'] == 'episode':
75 | self.totalTime = 30
76 | else:
77 | self.totalTime = 1
78 | self.playlistLength = getPlaylistLengthFromXBMCPlayer(data['player']['playerid'])
79 | if (self.playlistLength == 0):
80 | Debug("[Scrobbler] Warning: Cant find playlist length?!, assuming that this item is by itself")
81 | self.playlistLength = 1
82 | except:
83 | Debug("[Scrobbler] Suddenly stopped watching item, or error: "+str(sys.exc_info()[0]))
84 | self.curVideo = None
85 | self.startTime = 0
86 | return
87 | self.startTime = time.time()
88 | self.startedWatching()
89 | self.pinging = True
90 | else:
91 | self.curVideo = None
92 | self.startTime = 0
93 |
94 | def playbackPaused(self):
95 | if self.startTime <> 0:
96 | self.watchedTime += time.time() - self.startTime
97 | Debug("[Scrobbler] Paused after: "+str(self.watchedTime))
98 | self.startTime = 0
99 |
100 | def playbackEnded(self):
101 | if self.startTime <> 0:
102 | if self.curVideo == None:
103 | Debug("[Scrobbler] Warning: Playback ended but video forgotten")
104 | return
105 | self.watchedTime += time.time() - self.startTime
106 | self.pinging = False
107 | if self.watchedTime <> 0:
108 | if 'type' in self.curVideo and 'id' in self.curVideo:
109 | self.check()
110 | ratingCheck(self.curVideo, self.watchedTime, self.totalTime, self.playlistLength)
111 | self.watchedTime = 0
112 | self.startTime = 0
113 |
114 | def startedWatching(self):
115 | scrobbleMovieOption = __settings__.getSetting("scrobble_movie")
116 | scrobbleEpisodeOption = __settings__.getSetting("scrobble_episode")
117 |
118 | if self.curVideo['type'] == 'movie' and scrobbleMovieOption == 'true':
119 | match = getMovieDetailsFromXbmc(self.curVideo['id'], ['imdbnumber','title','year'])
120 | if match == None:
121 | return
122 | responce = watchingMovieOnTrakt(match['imdbnumber'], match['title'], match['year'], self.totalTime/60, int(100*self.watchedTime/self.totalTime))
123 | if responce != None:
124 | Debug("[Scrobbler] Watch responce: "+str(responce));
125 | elif self.curVideo['type'] == 'episode' and scrobbleEpisodeOption == 'true':
126 | match = getEpisodeDetailsFromXbmc(self.curVideo['id'], ['showtitle', 'season', 'episode'])
127 | if match == None:
128 | return
129 | responce = watchingEpisodeOnTrakt(None, match['showtitle'], None, match['season'], match['episode'], self.totalTime/60, int(100*self.watchedTime/self.totalTime))
130 | if responce != None:
131 | Debug("[Scrobbler] Watch responce: "+str(responce));
132 |
133 | def stoppedWatching(self):
134 | scrobbleMovieOption = __settings__.getSetting("scrobble_movie")
135 | scrobbleEpisodeOption = __settings__.getSetting("scrobble_episode")
136 |
137 | if self.curVideo['type'] == 'movie' and scrobbleMovieOption == 'true':
138 | responce = cancelWatchingMovieOnTrakt()
139 | if responce != None:
140 | Debug("[Scrobbler] Cancel watch responce: "+str(responce));
141 | elif self.curVideo['type'] == 'episode' and scrobbleEpisodeOption == 'true':
142 | responce = cancelWatchingEpisodeOnTrakt()
143 | if responce != None:
144 | Debug("[Scrobbler] Cancel watch responce: "+str(responce));
145 |
146 | def scrobble(self):
147 | scrobbleMovieOption = __settings__.getSetting("scrobble_movie")
148 | scrobbleEpisodeOption = __settings__.getSetting("scrobble_episode")
149 |
150 | if self.curVideo['type'] == 'movie' and scrobbleMovieOption == 'true':
151 | match = getMovieDetailsFromXbmc(self.curVideo['id'], ['imdbnumber','title','year'])
152 | if match == None:
153 | return
154 | responce = scrobbleMovieOnTrakt(match['imdbnumber'], match['title'], match['year'], self.totalTime/60, int(100*self.watchedTime/self.totalTime))
155 | if responce != None:
156 | Debug("[Scrobbler] Scrobble responce: "+str(responce));
157 | elif self.curVideo['type'] == 'episode' and scrobbleEpisodeOption == 'true':
158 | match = getEpisodeDetailsFromXbmc(self.curVideo['id'], ['showtitle', 'season', 'episode'])
159 | if match == None:
160 | return
161 | responce = scrobbleEpisodeOnTrakt(None, match['showtitle'], None, match['season'], match['episode'], self.totalTime/60, int(100*self.watchedTime/self.totalTime))
162 | if responce != None:
163 | Debug("[Scrobbler] Scrobble responce: "+str(responce));
164 |
165 | def check(self):
166 | __settings__ = xbmcaddon.Addon( "script.traktutilities" ) #read settings again, encase they have changed
167 | scrobbleMinViewTimeOption = __settings__.getSetting("scrobble_min_view_time")
168 |
169 | if (self.watchedTime/self.totalTime)*100>=float(scrobbleMinViewTimeOption):
170 | self.scrobble()
171 | else:
172 | self.stoppedWatching()
173 |
--------------------------------------------------------------------------------
/service.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import xbmc,xbmcaddon,xbmcgui
5 | from utilities import *
6 | from rating import *
7 | from sync_update import *
8 | from notification_service import *
9 |
10 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
11 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
12 | __license__ = "GPL"
13 | __maintainer__ = "Ralph-Gordon Paul"
14 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
15 | __status__ = "Production"
16 |
17 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
18 | __language__ = __settings__.getLocalizedString
19 |
20 | Debug("service: " + __settings__.getAddonInfo("id") + " - version: " + __settings__.getAddonInfo("version"))
21 |
22 | # starts update/sync
23 | def autostart():
24 | if checkSettings(True):
25 | notificationThread = NotificationService()
26 | notificationThread.start()
27 |
28 | autosync_moviecollection = __settings__.getSetting("autosync_moviecollection")
29 | autosync_tvshowcollection = __settings__.getSetting("autosync_tvshowcollection")
30 | autosync_cleanmoviecollection = __settings__.getSetting("autosync_cleanmoviecollection")
31 | autosync_cleantvshowcollection = __settings__.getSetting("autosync_cleantvshowcollection")
32 | autosync_seenmovies = __settings__.getSetting("autosync_seenmovies")
33 | autosync_seentvshows = __settings__.getSetting("autosync_seentvshows")
34 | try:
35 | if autosync_moviecollection == "true":
36 | notification("Trakt Utilities", __language__(1180).encode( "utf-8", "ignore" )) # start movie collection update
37 | updateMovieCollection(True)
38 | if autosync_cleanmoviecollection: cleanMovieCollection(True)
39 | if xbmc.abortRequested: raise SystemExit()
40 |
41 | if autosync_tvshowcollection == "true":
42 | notification("Trakt Utilities", __language__(1181).encode( "utf-8", "ignore" )) # start tvshow collection update
43 | updateTVShowCollection(True)
44 | if autosync_cleantvshowcollection: cleanTVShowCollection(True)
45 | if xbmc.abortRequested: raise SystemExit()
46 |
47 | if autosync_seenmovies == "true":
48 | Debug("autostart sync seen movies")
49 | notification("Trakt Utilities", __language__(1182).encode( "utf-8", "ignore" )) # start sync seen movies
50 | syncSeenMovies(True)
51 | if xbmc.abortRequested: raise SystemExit()
52 |
53 | if autosync_seentvshows == "true":
54 | Debug("autostart sync seen tvshows")
55 | notification("Trakt Utilities", __language__(1183).encode( "utf-8", "ignore" )) # start sync seen tv shows
56 | syncSeenTVShows(True)
57 | if xbmc.abortRequested: raise SystemExit()
58 |
59 | if autosync_moviecollection == "true" or autosync_tvshowcollection == "true" or autosync_seenmovies == "true" or autosync_seentvshows == "true":
60 | notification("Trakt Utilities", __language__(1184).encode( "utf-8", "ignore" )) # update / sync done
61 | except SystemExit:
62 | notificationThread.abortRequested = True
63 | Debug("[Service] Auto sync processes aborted due to shutdown request")
64 |
65 | notificationThread.join()
66 |
67 | autostart()
68 |
--------------------------------------------------------------------------------
/trending.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import os
5 | import xbmc,xbmcaddon,xbmcgui
6 | import time, socket
7 |
8 | try: import simplejson as json
9 | except ImportError: import json
10 |
11 | from utilities import *
12 |
13 | try:
14 | # Python 3.0 +
15 | import http.client as httplib
16 | except ImportError:
17 | # Python 2.7 and earlier
18 | import httplib
19 |
20 | try:
21 | # Python 2.6 +
22 | from hashlib import sha as sha
23 | except ImportError:
24 | # Python 2.5 and earlier
25 | import sha
26 |
27 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
28 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
29 | __license__ = "GPL"
30 | __maintainer__ = "Ralph-Gordon Paul"
31 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
32 | __status__ = "Production"
33 |
34 | # read settings
35 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
36 | __language__ = __settings__.getLocalizedString
37 |
38 | apikey = '0a698a20b222d0b8637298f6920bf03a'
39 | username = __settings__.getSetting("username")
40 | pwd = sha.new(__settings__.getSetting("password")).hexdigest()
41 | debug = __settings__.getSetting( "debug" )
42 | https = __settings__.getSetting('https')
43 |
44 | if (https == 'true'):
45 | conn = httplib.HTTPSConnection('api.trakt.tv')
46 | else:
47 | conn = httplib.HTTPConnection('api.trakt.tv')
48 |
49 | headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
50 |
51 | def showTrendingMovies():
52 |
53 | movies = getTrendingMoviesFromTrakt()
54 | watchlist = traktMovieListByImdbID(getWatchlistMoviesFromTrakt())
55 |
56 | if movies == None: # movies = None => there was an error
57 | return # error already displayed in utilities.py
58 |
59 | if len(movies) == 0:
60 | xbmcgui.Dialog().ok("Trakt Utilities", "there are no trending movies")
61 | return
62 |
63 | for movie in movies:
64 | if movie['imdb_id'] in watchlist:
65 | movie['watchlist'] = True
66 | else:
67 | movie['watchlist'] = False
68 |
69 | # display trending movie list
70 | import windows
71 | ui = windows.MoviesWindow("movies.xml", __settings__.getAddonInfo('path'), "Default")
72 | ui.initWindow(movies, 'trending')
73 | ui.doModal()
74 | del ui
75 |
76 | def showTrendingTVShows():
77 |
78 | tvshows = getTrendingTVShowsFromTrakt()
79 | watchlist = traktShowListByTvdbID(getWatchlistTVShowsFromTrakt())
80 |
81 | if tvshows == None: # tvshows = None => there was an error
82 | return # error already displayed in utilities.py
83 |
84 | if len(tvshows) == 0:
85 | xbmcgui.Dialog().ok("Trakt Utilities", "there are no trending tv shows")
86 | return
87 |
88 | for tvshow in tvshows:
89 | if tvshow['imdb_id'] in watchlist:
90 | tvshow['watchlist'] = True
91 | else:
92 | tvshow['watchlist'] = False
93 |
94 | # display trending tv shows
95 | import windows
96 | ui = windows.TVShowsWindow("tvshows.xml", __settings__.getAddonInfo('path'), "Default")
97 | ui.initWindow(tvshows, 'trending')
98 | ui.doModal()
99 | del ui
100 |
--------------------------------------------------------------------------------
/watchlist.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 |
4 | import os
5 | import xbmc,xbmcaddon,xbmcgui
6 | import time, socket
7 |
8 | try: import simplejson as json
9 | except ImportError: import json
10 |
11 | from utilities import *
12 |
13 | try:
14 | # Python 3.0 +
15 | import http.client as httplib
16 | except ImportError:
17 | # Python 2.7 and earlier
18 | import httplib
19 |
20 | try:
21 | # Python 2.6 +
22 | from hashlib import sha as sha
23 | except ImportError:
24 | # Python 2.5 and earlier
25 | import sha
26 |
27 | __author__ = "Ralph-Gordon Paul, Adrian Cowan"
28 | __credits__ = ["Ralph-Gordon Paul", "Adrian Cowan", "Justin Nemeth", "Sean Rudford"]
29 | __license__ = "GPL"
30 | __maintainer__ = "Ralph-Gordon Paul"
31 | __email__ = "ralph-gordon.paul@uni-duesseldorf.de"
32 | __status__ = "Production"
33 |
34 | # read settings
35 | __settings__ = xbmcaddon.Addon( "script.traktutilities" )
36 | __language__ = __settings__.getLocalizedString
37 |
38 | apikey = '0a698a20b222d0b8637298f6920bf03a'
39 | username = __settings__.getSetting("username")
40 | pwd = sha.new(__settings__.getSetting("password")).hexdigest()
41 | debug = __settings__.getSetting( "debug" )
42 | https = __settings__.getSetting('https')
43 |
44 | if (https == 'true'):
45 | conn = httplib.HTTPSConnection('api.trakt.tv')
46 | else:
47 | conn = httplib.HTTPConnection('api.trakt.tv')
48 |
49 | headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
50 |
51 | # list watchlist movies
52 | def showWatchlistMovies():
53 |
54 | movies = getWatchlistMoviesFromTrakt()
55 |
56 | if movies == None: # movies = None => there was an error
57 | return # error already displayed in utilities.py
58 |
59 | if len(movies) == 0:
60 | xbmcgui.Dialog().ok(__language__(1201).encode( "utf-8", "ignore" ), __language__(1160).encode( "utf-8", "ignore" )) # Trakt Utilities, there are no movies in your watchlist
61 | return
62 |
63 | # display watchlist movie list
64 | import windows
65 | ui = windows.MoviesWindow("movies.xml", __settings__.getAddonInfo('path'), "Default")
66 | ui.initWindow(movies, 'watchlist')
67 | ui.doModal()
68 | del ui
69 |
70 | # list watchlist tv shows
71 | def showWatchlistTVShows():
72 |
73 | tvshows = getWatchlistTVShowsFromTrakt()
74 |
75 | if tvshows == None: # tvshows = None => there was an error
76 | return # error already displayed in utilities.py
77 |
78 | if len(tvshows) == 0:
79 | xbmcgui.Dialog().ok(__language__(1201).encode( "utf-8", "ignore" ), __language__(1161).encode( "utf-8", "ignore" )) # Trakt Utilities, there are no tv shows in your watchlist
80 | return
81 |
82 | # display watchlist tv shows
83 | import windows
84 | ui = windows.TVShowsWindow("tvshows.xml", __settings__.getAddonInfo('path'), "Default")
85 | ui.initWindow(tvshows, 'watchlist')
86 | ui.doModal()
87 | del ui
88 |
89 |
--------------------------------------------------------------------------------