diff --git a/CHANGELOG.md b/CHANGELOG.md index 438c5d5c..30ef75de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## v1.1.8 (2015-09-09) + +* Add platform images for Windows devices. Thanks @JonnyWong. +* Add click-through to PlexWeb preplay page from info page. Thanks @JonnyWong. +* Fix broken delete option on info pages. Thanks @JonnyWong. +* Fix tagline bug in PlexWatch db import tool. +* Fix home stats text overflow bug. Thanks @JonnyWong. + + ## v1.1.7 (2015-09-07) * Show tagline in info screens for movies. Thanks @JonnyWong. diff --git a/README.md b/README.md index e6839cbd..3bbd6a6c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ #PlexPy +[![Join the chat at https://gitter.im/drzoidberg33/plexpy](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/drzoidberg33/plexpy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + A python based web application for monitoring, analytics and notifications for Plex Media Server (www.plex.tv). This project is based on code from Headphones (https://github.com/rembo10/headphones) and PlexWatchWeb (https://github.com/ecleese/plexWatchWeb). @@ -120,4 +122,4 @@ If you **comply with these rules** you can [post your request/issue](http://gith ## License This is free software under the GPL v3 open source license. Feel free to do with it what you wish, but any modification must be open sourced. A copy of the license is included. -This software includes Highsoft software libraries which you may freely distribute for non-commercial use. Commerical users must licence this software, for more information visit https://shop.highsoft.com/faq/non-commercial#non-commercial-redistribution. \ No newline at end of file +This software includes Highsoft software libraries which you may freely distribute for non-commercial use. Commerical users must licence this software, for more information visit https://shop.highsoft.com/faq/non-commercial#non-commercial-redistribution. diff --git a/data/interfaces/default/css/plexpy.css b/data/interfaces/default/css/plexpy.css index 6ad3da79..d9ecc338 100644 --- a/data/interfaces/default/css/plexpy.css +++ b/data/interfaces/default/css/plexpy.css @@ -973,11 +973,40 @@ a .dashboard-activity-metadata-user-thumb:hover { overflow: hidden; z-index: 1; } -a .summary-poster-face:hover, -a .summary-poster-face-episode:hover { +.summary-poster-face-overlay { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-image: -webkit-gradient(linear,left 0,left 100%,from(rgba(0,0,0,.7)),to(rgba(0,0,0,.9))); + background-image: -webkit-linear-gradient(top,rgba(0,0,0,.7),0,rgba(0,0,0,.9),100%); + background-image: -moz-linear-gradient(top,rgba(0,0,0,.7) 0,rgba(0,0,0,.9) 100%); + background-image: linear-gradient(to bottom,rgba(0,0,0,.7) 0,rgba(0,0,0,.9) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3000000', endColorstr='#e6000000', GradientType=0); webkit-box-shadow: inset 0 0 0 2px #e9a049; -moz-box-shadow: inset 0 0 0 2px #e9a049; box-shadow: inset 0 0 0 2px #e9a049; + opacity: 0; + transition: opacity .2s; +} +.summary-poster-face-overlay span { + display: block; + width: 100%; + height: 100%; + background-image: url(/interfaces/default/images/plex-logo-light.svg); + background-size: 100px; + background-repeat: no-repeat; + background-position: center; + opacity: 0; + transition: opacity .3s; +} +a:hover .summary-poster-face .summary-poster-face-overlay, +a:hover .summary-poster-face-episode .summary-poster-face-overlay, +a:hover .summary-poster-face .summary-poster-face-overlay span, +a:hover .summary-poster-face-episode .summary-poster-face-overlay span { + opacity: 1; } .summary-content-padding { float: left; @@ -1581,6 +1610,7 @@ a .season-episodes-card-overlay:hover { display: inline-block; position: relative; padding: 6px 0 0 20px; + max-width: 100%; } .home-platforms-instance-playcount h4 { font-size: 14px; diff --git a/data/interfaces/default/images/plex-logo-light.svg b/data/interfaces/default/images/plex-logo-light.svg new file mode 100644 index 00000000..46d1973f --- /dev/null +++ b/data/interfaces/default/images/plex-logo-light.svg @@ -0,0 +1,26 @@ + + + + plex-logo-light + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/interfaces/default/info.html b/data/interfaces/default/info.html index 9fe80327..c4e0163c 100644 --- a/data/interfaces/default/info.html +++ b/data/interfaces/default/info.html @@ -81,13 +81,21 @@ DOCUMENTATION :: END
% if data['type'] == 'movie' or data['type'] == 'show': @@ -263,6 +271,24 @@ DOCUMENTATION :: END
+
% endif
@@ -312,19 +338,43 @@ DOCUMENTATION :: END } } history_table = $('#history_table').DataTable(history_table_options); - var colvis = new $.fn.dataTable.ColVis(history_table, { buttonText: ' Select columns', buttonClass: 'btn btn-dark', exclude: [0, 10] }); $(colvis.button()).appendTo('div.colvis-button-bar'); clearSearchButton('history_table', history_table); - $('#row-edit-mode').click(function() { + $('#row-edit-mode').on('click', function() { + $('#row-edit-mode-alert').fadeIn(200); + if ($(this).hasClass('active')) { - $('.delete-control').each(function() { + if (history_to_delete.length > 0) { + $('#deleteCount').text(history_to_delete.length); + $('#confirm-modal').modal(); + $('#confirm-modal').one('click', '#confirm-delete', function () { + for (var i = 0; i < history_to_delete.length; i++) { + $.ajax({ + url: 'delete_history_rows', + data: { row_id: history_to_delete[i] }, + async: true, + success: function (data) { + var msg = "History deleted"; + showMsg(msg, false, true, 2000); + } + }); + } + history_table.draw(); + }); + } + + $('.delete-control').each(function () { $(this).addClass('hidden'); + $('#row-edit-mode-alert').fadeOut(200); }); + } else { + history_to_delete = []; $('.delete-control').each(function() { + $(this).find('button.btn-danger').toggleClass('btn-warning').toggleClass('btn-danger'); $(this).removeClass('hidden'); }); } @@ -386,6 +436,7 @@ DOCUMENTATION :: END } }); }); + $.ajax({ url: 'get_show_children', type: "GET", @@ -465,9 +516,7 @@ DOCUMENTATION :: END -% endif - +% endif diff --git a/data/interfaces/default/js/script.js b/data/interfaces/default/js/script.js index 1ad24f57..33de6f00 100644 --- a/data/interfaces/default/js/script.js +++ b/data/interfaces/default/js/script.js @@ -219,7 +219,11 @@ function getPlatformImagePath(platformName) { return 'interfaces/default/images/platforms/playstation.png'; } else if (platformName.indexOf("Mystery 5") > -1) { return 'interfaces/default/images/platforms/xbox.png'; - } else { + } else if (platformName.indexOf("Windows") > -1) { + return 'interfaces/default/images/platforms/win8.png'; + } else if (platformName.indexOf("Windows phone") > -1) { + return 'interfaces/default/images/platforms/wp.png'; + } else { return 'interfaces/default/images/platforms/default.png'; } } diff --git a/plexpy/plexwatch_import.py b/plexpy/plexwatch_import.py index f567ce33..39f48c74 100644 --- a/plexpy/plexwatch_import.py +++ b/plexpy/plexwatch_import.py @@ -55,6 +55,7 @@ def extract_plexwatch_xml(xml=None): parent_title = helpers.get_xml_attr(a, 'parentTitle') studio = helpers.get_xml_attr(a, 'studio') title = helpers.get_xml_attr(a, 'title') + tagline = helpers.get_xml_attr(a, 'tagline') directors = [] if a.getElementsByTagName('Director'): @@ -153,6 +154,7 @@ def extract_plexwatch_xml(xml=None): 'grandparent_title': grandparent_title, 'parent_title': parent_title, 'title': title, + 'tagline': tagline, 'guid': guid, 'media_index': media_index, 'originally_available_at': originally_available_at, @@ -356,6 +358,7 @@ def import_from_plexwatch(database=None, table_name=None, import_ignore_interval 'last_viewed_at': extracted_xml['last_viewed_at'], 'content_rating': row['content_rating'], 'summary': row['summary'], + 'tagline': extracted_xml['tagline'], 'rating': extracted_xml['rating'], 'duration': extracted_xml['duration'], 'guid': extracted_xml['guid'], diff --git a/plexpy/version.py b/plexpy/version.py index fccdc84b..c1d759b7 100644 --- a/plexpy/version.py +++ b/plexpy/version.py @@ -1,2 +1,2 @@ PLEXPY_VERSION = "master" -PLEXPY_RELEASE_VERSION = "1.1.7" +PLEXPY_RELEASE_VERSION = "1.1.8" diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 5d2ba311..6f9b9d2e 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -762,6 +762,10 @@ class WebInterface(object): def info(self, item_id=None, source=None, **kwargs): metadata = None + config = { + "pms_identifier": plexpy.CONFIG.PMS_IDENTIFIER + } + if source == 'history': data_factory = datafactory.DataFactory() metadata = data_factory.get_metadata_details(row_id=item_id) @@ -772,7 +776,7 @@ class WebInterface(object): metadata = result['metadata'] if metadata: - return serve_template(templatename="info.html", data=metadata, title="Info") + return serve_template(templatename="info.html", data=metadata, title="Info", config=config) else: logger.warn('Unable to retrieve data.') return serve_template(templatename="info.html", data=None, title="Info")