From 529d23a2d143766e83eba0320d2dc76c09b87fcf Mon Sep 17 00:00:00 2001 From: "U-mikenote\\mike" Date: Fri, 3 Apr 2015 13:28:44 +0200 Subject: [PATCH 01/12] Fixed SVT alfabetical and program browsing --- src/gui/qml/browser/svt/alfabetical.qml | 6 +++--- src/gui/qml/browser/svt/program.qml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/qml/browser/svt/alfabetical.qml b/src/gui/qml/browser/svt/alfabetical.qml index 01712c2..0ad6435 100644 --- a/src/gui/qml/browser/svt/alfabetical.qml +++ b/src/gui/qml/browser/svt/alfabetical.qml @@ -8,8 +8,8 @@ AzListView { model: HttpREModel { id: indexModel - source: "http://svtplay.se/program" - regExp: "((.|\n)*?)" + source: "http://www.svtplay.se/program" + regExp: "((.|\n)*?)" roles: [ ReRole { @@ -28,7 +28,7 @@ AzListView { text: model.text onClicked: { go( Qt.resolvedUrl("program.qml"), - { url: "http://www.svtplay.se" + model.link + "?tab=episodes&sida=999", + { url: "http://www.svtplay.se" + model.link + "?sida=999", programName: model.text }, model.index); } diff --git a/src/gui/qml/browser/svt/program.qml b/src/gui/qml/browser/svt/program.qml index 42dab14..b0dd33c 100644 --- a/src/gui/qml/browser/svt/program.qml +++ b/src/gui/qml/browser/svt/program.qml @@ -11,21 +11,21 @@ BarredListView { id: programModel source: currentArgs.url ? currentArgs.url : "" - regExp: "(
]+>(.|\n)*?
)" + regExp: '
(.|\n)*?
' roles: [ ReRole { name: "text" - regExp: 'data-title="([^"]+)"' + regExp: 'class="play_vertical-list__header-link">([^<]+)' function decode(s) { return s.slim().decodeHTMLEntities(); } }, ReRole { name: "link" - regExp: "href=\"([^\"]+)\"" + regExp: ' Date: Thu, 30 Apr 2015 23:25:32 +0200 Subject: [PATCH 02/12] Fixed SVT alfabetical after another svtplay HTML update --- src/gui/qml/browser/svt/alfabetical.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qml/browser/svt/alfabetical.qml b/src/gui/qml/browser/svt/alfabetical.qml index 0ad6435..f2171b1 100644 --- a/src/gui/qml/browser/svt/alfabetical.qml +++ b/src/gui/qml/browser/svt/alfabetical.qml @@ -9,7 +9,7 @@ AzListView { id: indexModel source: "http://www.svtplay.se/program" - regExp: "((.|\n)*?)" + regExp: "((.|\n)*?)" roles: [ ReRole { From 72777294a5a017f0bfaf749d654bf214af3c01b7 Mon Sep 17 00:00:00 2001 From: Mikewse Date: Thu, 7 May 2015 14:46:37 +0200 Subject: [PATCH 03/12] Small update for SvtPlay --- src/gui/qml/browser/svt/alfabetical.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qml/browser/svt/alfabetical.qml b/src/gui/qml/browser/svt/alfabetical.qml index f2171b1..5e140c3 100644 --- a/src/gui/qml/browser/svt/alfabetical.qml +++ b/src/gui/qml/browser/svt/alfabetical.qml @@ -9,7 +9,7 @@ AzListView { id: indexModel source: "http://www.svtplay.se/program" - regExp: "((.|\n)*?)" + regExp: "((.|\n)*?)" roles: [ ReRole { From ca67bc735c0757304e87e914359ead18caa0511a Mon Sep 17 00:00:00 2001 From: Mikewse Date: Mon, 23 May 2016 18:42:14 +0200 Subject: [PATCH 04/12] Replaced video stream handling with interface to local backend on http//localhost:1199 and removed unnecessary parts of GUI accordingly --- src/gui/qml/browser/pirateplay.qml | 57 ++++------- .../_common/Components/StreamDialog.qml | 97 +++++++++---------- src/gui/qml/main.qml | 9 -- 3 files changed, 65 insertions(+), 98 deletions(-) diff --git a/src/gui/qml/browser/pirateplay.qml b/src/gui/qml/browser/pirateplay.qml index 29abe2e..f9dbf46 100644 --- a/src/gui/qml/browser/pirateplay.qml +++ b/src/gui/qml/browser/pirateplay.qml @@ -6,18 +6,15 @@ import Components 1.0 Item { anchors.fill: parent +// quality +/* XmlListModel { id: streams source: ppBase() + "/api/get_streams.xml?url=" + currentArgs.url query: "/streams/stream" onStatusChanged: { if (status === XmlListModel.Ready) { - var reqPlayer = get(0).requiredplayerVersion; - //reqPlayer = "1"; - if (reqPlayer != "1") - streamSelect.sourceComponent = streamDialog; - else - streamSelect.sourceComponent = hdsError; + streamSelect.sourceComponent = streamDialog; } } @@ -43,36 +40,19 @@ Item { query: "@required-player-version/string()" } } - +*/ Component { id: streamDialog -// Window { -// width: 720; height: 480 -// visible: true - StreamDialog { /*anchors.verticalCenter: parent.verticalCenter*/ - programMetaInfo: { 'title': currentArgs.programTitle ? currentArgs.programTitle : "", - 'name': currentArgs.programName ? currentArgs.programName : "", - 'season': currentArgs.programSeason ? currentArgs.programSeason : "", - 'time': currentArgs.programTime ? currentArgs.programTime : "", - 'description': currentArgs.programDescription ? currentArgs.programDescription : "" } - } - //} - } - - Component { - id: hdsError - - Item { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: childrenRect.width - height: childrenRect.height - - Label { - text: "Pirateplayer kan inte ladda ner denna typ av strömmar.
En guide finns på Pirateplay.se till hur man laddar ner HDS-strömmar manuellt." - onLinkActivated: Qt.openUrlExternally(link) - } - } + StreamDialog { + programMetaInfo: { + 'title': currentArgs.programTitle ? currentArgs.programTitle : "", + 'name': currentArgs.programName ? currentArgs.programName : "", + 'season': currentArgs.programSeason ? currentArgs.programSeason : "", + 'time': currentArgs.programTime ? currentArgs.programTime : "", + 'description': currentArgs.programDescription ? currentArgs.programDescription : "" + } + videoPageUrl: currentArgs.url + } } Component.onDestruction: root.focus = true @@ -81,10 +61,13 @@ Item { id: streamSelect anchors.fill: parent - //focus: true - property variant streamsModel: streams + sourceComponent: streamDialog + +// quality +// property variant streamsModel: streams } - XmlListModelStatusMessage { target: streams } +// quality +// XmlListModelStatusMessage { target: streams } } diff --git a/src/gui/qml/imports/_common/Components/StreamDialog.qml b/src/gui/qml/imports/_common/Components/StreamDialog.qml index 179bb03..92acc1e 100644 --- a/src/gui/qml/imports/_common/Components/StreamDialog.qml +++ b/src/gui/qml/imports/_common/Components/StreamDialog.qml @@ -4,6 +4,7 @@ import QtDesktop 0.1 Flickable { property variant programMetaInfo: { "title": "", "name": "", "season": "", "time": "", "description": "" } + property string videoPageUrl: "" anchors.fill: parent contentHeight: column.height @@ -13,7 +14,8 @@ Flickable { } Column { - property variant selectedStream: qualityBox.model.get(qualityBox.selectedIndex) +// quality +// property variant selectedStream: qualityBox.model.get(qualityBox.selectedIndex) id: column width: parent.width; height: childrenRect.height @@ -27,7 +29,7 @@ Flickable { id: headerLabel anchors.verticalCenter: parent.verticalCenter; anchors.horizontalCenter: parent.horizontalCenter font.bold: true - text: "Spara eller spela upp ström" + text: "Spara media" } } @@ -41,12 +43,7 @@ Flickable { FilePathField { id: fileName filter: { - if (column.selectedStream.suffixHint == "mp4") - return "MPEG4 (*.mp4);;TeleStream (*.ts)"; - else if (column.selectedStream.suffixHint == "flv") - return "Flashvideo (*.flv)"; - else - return "Alla filer (*.*)"; + return "MP4 (*.mp4)"; } width: parent.width path: { @@ -65,7 +62,7 @@ Flickable { newFileName = newFileName.replace(/%season%/g, season); newFileName = newFileName.replace(/%time%/g, time); newFileName = newFileName.replace(/%description%/g, description); - newFileName = userSettings.startDir + "/" + newFileName + "." + streamsModel.get(0).suffixHint; + newFileName = userSettings.startDir + "/" + newFileName + ".mp4"; newFileName = pathToNativeSeparators(newFileName); return newFileName; } @@ -105,66 +102,62 @@ Flickable { FormRow { label: "" - visible: column.selectedStream.subtitles + visible: true CheckBox { id: saveSubs - text: "Spara undertexter (till: " + (pathIsDir(fileName.text) ? "" : baseName(fileName.path)) + "." + suffix(column.selectedStream.subtitles).replace("?", "") + ")" + text: "Spara undertexter" width: parent.width } } - FormRow { - label: "Kvalitet" - - ComboBox { - id: qualityBox - model: streamsModel - } - } - - ToggleBox { - label: "timeralternativ" - width: parent.width - - FormLayout { - labelColumnWidth: formLayout.labelColumnWidth; customLabelColumnWidth: true - FormRow { - label: "Fördröjning" - - TimerField { id: delay } - } - FormRow { - label: "Längd" - TimerField { id: duration } - } - FormRow { - label: "" - Label { text: "Ange noll för obestämd längd" } - } - } - } +// quality +// FormRow { +// label: "Kvalitet" +// +// ComboBox { +// id: qualityBox +// model: streamsModel +// } +// } FormRow { label: "" - Button { - id: playBtn - text: "Spela upp" - - onClicked: play(column.selectedStream.url, column.selectedStream.subtitles, userSettings.playerCmd) - } Button { id: downloadBtn text: "Starta nedladdning" enabled: !isDir.when && !isEmpty.when && !isWritable.when onClicked: { - downloadStack.addDownload(column.selectedStream.url, fileName.path, delay.ms, duration.ms); - if (saveSubs.checked) { - var subFilePath = absDir(fileName.path) + nativeSeparator() + baseName(fileName.path) + "." + suffix(column.selectedStream.subtitles).replace("?", ""); - downloadStack.addDownload(column.selectedStream.subtitles, subFilePath, delay.ms, duration.ms); - } + var out = fileName.path + .replace(/\.mp4$/i, "") + .replace(/[åäöÅÄÖ\.]/g, function(match) { + return { + "å": "a", + "ä": "a", + "ö": "o", + "Å": "A", + "Ä": "A", + "Ö": "O", + ".": "_" + }[match]; + }); + var xhr = new XMLHttpRequest; + var url = + "http://localhost:1199/download" + + "?url=" + encodeURIComponent(videoPageUrl) + + "&out=" + encodeURIComponent(out) + + "&sub=" + (saveSubs.checked ? "true" : "false"); + xhr.open("GET", url); + xhr.send(); + +// old/quality +// downloadStack.addDownload(column.selectedStream.url, fileName.path, delay.ms, duration.ms); +// if (saveSubs.checked) { +// var subFilePath = absDir(fileName.path) + nativeSeparator() + baseName(fileName.path) + "." + suffix(column.selectedStream.subtitles).replace("?", ""); +// downloadStack.addDownload(column.selectedStream.subtitles, subFilePath, delay.ms, duration.ms); +// } } } } diff --git a/src/gui/qml/main.qml b/src/gui/qml/main.qml index 6e6ea5b..e9efd83 100644 --- a/src/gui/qml/main.qml +++ b/src/gui/qml/main.qml @@ -63,15 +63,6 @@ MainWindow { source: "browser/main.qml" } } - - TabItem { - title: "Nedladdningar (" + downloadStack.count + ")" - - Loader { - anchors.fill: parent - source: "downloads.qml" - } - } } NewsBox { From 70b825c19df777fdbd3af65edf4364e6bc8a55ef Mon Sep 17 00:00:00 2001 From: Mikewse Date: Mon, 23 May 2016 19:00:11 +0200 Subject: [PATCH 05/12] =?UTF-8?q?Updates=20to=20get=20SVT,=20=C3=B6ppetark?= =?UTF-8?q?iv=20and=20TV4=20working,=20removing=20defunct=20channels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gui/qml/JSONListModel/JSONListModel.qml | 94 +++++++++++---------- src/gui/qml/browser/menu.qml | 13 ++- src/gui/qml/browser/svt/alfabetical.qml | 4 +- src/gui/qml/browser/svt/open_a-z.qml | 13 +-- src/gui/qml/browser/svt/open_program.qml | 32 +++---- src/gui/qml/browser/svt/program.qml | 6 +- src/gui/qml/browser/tv4/a-z.qml | 33 ++++---- src/gui/qml/browser/tv4/program.qml | 93 ++++++-------------- 8 files changed, 129 insertions(+), 159 deletions(-) diff --git a/src/gui/qml/JSONListModel/JSONListModel.qml b/src/gui/qml/JSONListModel/JSONListModel.qml index 62b466d..7242765 100644 --- a/src/gui/qml/JSONListModel/JSONListModel.qml +++ b/src/gui/qml/JSONListModel/JSONListModel.qml @@ -1,51 +1,53 @@ -/* JSONListModel - a QML ListModel with JSON and JSONPath support - * - * Copyright (c) 2012 Romain Pokrzywka (KDAB) (romain@kdab.com) - * Licensed under the MIT licence (http://opensource.org/licenses/mit-license.php) - */ - import QtQuick 1.1 import "jsonpath.js" as JSONPath -Item { +ListModel { + id: list + property string source: "" - property string json: "" - property string query: "" - - property ListModel model : ListModel { id: jsonModel } - property alias count: jsonModel.count - - onSourceChanged: { - var xhr = new XMLHttpRequest; - xhr.open("GET", source); - xhr.onreadystatechange = function() { - if (xhr.readyState == XMLHttpRequest.DONE) - json = xhr.responseText; - } - xhr.send(); - } - - onJsonChanged: updateJSONModel() - onQueryChanged: updateJSONModel() - - function updateJSONModel() { - jsonModel.clear(); - - if ( json === "" ) - return; - - var objectArray = parseJSONString(json, query); - for ( var key in objectArray ) { - var jo = objectArray[key]; - jsonModel.append( jo ); - } - } - - function parseJSONString(jsonString, jsonPathQuery) { - var objectArray = JSON.parse(jsonString); - if ( jsonPathQuery !== "" ) - objectArray = JSONPath.jsonPath(objectArray, jsonPathQuery); - - return objectArray; - } + property variant query: "" + property int status: XmlListModel.Loading + + Component.onCompleted: { + try { + var xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function() { + if (xhr.readyState == XMLHttpRequest.DONE) { + try { + var json = xhr.responseText; + if ( json !== "" ) { + var objectArray = JSON.parse(json); + if ( query !== "" ) { + var queries; + if (typeof query == "string") + queries = [ query ]; + else + queries = query; + for(var i=0; i(.|\n)*?)" + regExp: "
  • ]*>(]*>[^<]*)
  • " roles: [ ReRole { name: "text" - regExp: ">([^<]+)<" + regExp: ">([^<]+)" function decode(s) { return s.slim().decodeHTMLEntities(); } }, ReRole { diff --git a/src/gui/qml/browser/svt/open_a-z.qml b/src/gui/qml/browser/svt/open_a-z.qml index 41b4aaa..bdf9d44 100644 --- a/src/gui/qml/browser/svt/open_a-z.qml +++ b/src/gui/qml/browser/svt/open_a-z.qml @@ -5,8 +5,8 @@ import "../../common.js" as Common AzListView { model: XmlListModel { - source: "tidy://www.oppetarkiv.se/kategori/titel" - query: "//li[@class=\"svtoa-anchor-list-item\"]/a" + source: "tidy://www.oppetarkiv.se/program" + query: '//li[contains(@class,"svtoa-anchor-list-item")]/a' XmlRole { name: "text" @@ -22,9 +22,12 @@ AzListView { onClicked: { go( Qt.resolvedUrl("open_program.qml"), - { url: decodeURIComponent(model.link.replace("http://", "tidy://")), - programName: model.text.slim() }, - model.index ); + { + url: "tidy://www.oppetarkiv.se" + decodeURI(model.link), + programName: model.text.slim() + }, + model.index ); } } } + diff --git a/src/gui/qml/browser/svt/open_program.qml b/src/gui/qml/browser/svt/open_program.qml index 462be08..a06e91d 100644 --- a/src/gui/qml/browser/svt/open_program.qml +++ b/src/gui/qml/browser/svt/open_program.qml @@ -5,42 +5,42 @@ import "../../common.js" as Common BarredListView { model: XmlListModel { - id: indexModel - - Component.onCompleted: source = currentArgs.url - query: "//div[@class=\"svt-display-table-xs\"]" - + id: programModel + source: currentArgs.url + query: '//div[@class="svt-display-table-xs"]' + XmlRole { name: "title" - query: "div/div/h2/a/string()" + query: "div/div/*/a/string()" } XmlRole { name: "link" - query: "div/div/h2/a/@href/string()" + query: "div/div/*/a/@href/string()" } XmlRole { name: "date" - query: "div/div//time/string()" + query: "div/div/p/time/string()" } XmlRole { name: "thumb" - query: "div/figure/img/@data-imagename/string()" + query: "div/figure/img/@src/string()" } } - delegate: ListDelegate { imgSource: model.thumb text: "" + model.title.slim() + " - " + model.date.slim() onClicked: { go( Qt.resolvedUrl("../pirateplay.qml"), - { url: model.link, - programName: currentArgs.programName, - programTitle: model.title.slim(), - programTime: model.date }, - model.index); + { + url: "http://www.oppetarkiv.se" + model.link, + programName: currentArgs.programName, + programTitle: model.title.slim(), + programTime: model.date + }, + model.index); } } - XmlListModelStatusMessage { target: indexModel } + XmlListModelStatusMessage { target: programModel } } diff --git a/src/gui/qml/browser/svt/program.qml b/src/gui/qml/browser/svt/program.qml index b0dd33c..00b27a5 100644 --- a/src/gui/qml/browser/svt/program.qml +++ b/src/gui/qml/browser/svt/program.qml @@ -16,16 +16,16 @@ BarredListView { roles: [ ReRole { name: "text" - regExp: 'class="play_vertical-list__header-link">([^<]+)' + regExp: ']*>([^>]*)' function decode(s) { return s.slim().decodeHTMLEntities(); } }, ReRole { name: "link" - regExp: '" + model.date - onClicked: { - go( Qt.resolvedUrl("../pirateplay.qml"), - { url: "http://tv4play.se" + model.link, - programTitle: model.text.slim(), - programName: currentArgs.programName, - programTime: model.date}, - model.index ); - } + delegate: ListDelegate { + text: + "" + (model.season > 0 ? "Säsong " + model.season + " " : "") + + model.title + " - " + + model.broadcast_date_time.replace(/:..\+.*/, "").replace("T", " ") + onClicked: { + var pageUrl = "http://www.tv4play.se/program/" + encodeURI(model.program_nid) + "?video_id=" + model.id; + go( Qt.resolvedUrl("../pirateplay.qml"), + { + url: pageUrl, + programTitle: model.title, + programName: currentArgs.programName, + programSeason: (model.season > 0 ? "Säsong " + model.season : "") + }, + model.index); } } - XmlListModelStatusMessage { target: episodesList.model } + XmlListModelStatusMessage { target: programModel } } From a0cb6e3dc666dedc9ebb0f551519e7ceee52dee6 Mon Sep 17 00:00:00 2001 From: Mikewse Date: Tue, 24 May 2016 09:43:20 +0200 Subject: [PATCH 06/12] Small corrections --- src/gui/qml/browser/tv4/program.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qml/browser/tv4/program.qml b/src/gui/qml/browser/tv4/program.qml index d45cf03..3f1c339 100644 --- a/src/gui/qml/browser/tv4/program.qml +++ b/src/gui/qml/browser/tv4/program.qml @@ -19,7 +19,7 @@ BarredListView { delegate: ListDelegate { text: - "" + (model.season > 0 ? "Säsong " + model.season + " " : "") + "" + (model.season > 0 ? "Säsong " + model.season + " - " : "") + model.title + " - " + model.broadcast_date_time.replace(/:..\+.*/, "").replace("T", " ") onClicked: { From 0c2b7725fe6a16009af4c93a5dcb4be5dc6821d8 Mon Sep 17 00:00:00 2001 From: Mikewse Date: Wed, 25 May 2016 15:55:54 +0200 Subject: [PATCH 07/12] added tv3/6/8/10 --- src/gui/qml/browser/menu.qml | 6 +++--- src/gui/qml/browser/mtg/a-z.qml | 9 ++++----- src/gui/qml/browser/mtg/program.qml | 23 +++++++++-------------- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/gui/qml/browser/menu.qml b/src/gui/qml/browser/menu.qml index ac56cda..925949d 100644 --- a/src/gui/qml/browser/menu.qml +++ b/src/gui/qml/browser/menu.qml @@ -21,13 +21,13 @@ BarredListView { url: "ur/a-z.qml" logo: "http://urplay.se/design/ur_play/images/urplay-logo.png" } +*/ ListElement { - title: "TV3-play" - url: "mtg/a-z.qml"//"imports/Components/AzListView.qml" + title: "TV3/6/8/10-play" + url: "mtg/a-z.qml" logo: "http://images2.wikia.nocookie.net/__cb20091126144517/logopedia/images/c/c6/TV3_logo_1990.png" n: 3 } -*/ ListElement { title: "TV4-play" url: "tv4/a-z.qml" diff --git a/src/gui/qml/browser/mtg/a-z.qml b/src/gui/qml/browser/mtg/a-z.qml index 9f9cd2d..2c1d278 100644 --- a/src/gui/qml/browser/mtg/a-z.qml +++ b/src/gui/qml/browser/mtg/a-z.qml @@ -5,12 +5,12 @@ import "../../common.js" as Common AzListView { model: XmlListModel { - source: "tidy://www.tv" + /*ViewBrowser.currentView.args.n*/currentArgs.n + "play.se/program" - query: "//a[@class=\"list-item\"]" + source: "tidy://www.tv3play.se/program" + query: '//a[@class="list-item"]' XmlRole { name: "text" - query: "string()" + query: "div/string()" } XmlRole { name: "link" @@ -22,8 +22,7 @@ AzListView { onClicked: { go( Qt.resolvedUrl("program.qml"), - { url: "tidy://www.tv" + currentArgs.n + "play.se" + model.link, - n: currentArgs.n, + { url: model.link, programName: model.text.slim() }, model.index); } diff --git a/src/gui/qml/browser/mtg/program.qml b/src/gui/qml/browser/mtg/program.qml index eee757c..4e279e6 100644 --- a/src/gui/qml/browser/mtg/program.qml +++ b/src/gui/qml/browser/mtg/program.qml @@ -7,37 +7,32 @@ BarredListView { model: XmlListModel { id: programModel - Component.onCompleted: source = currentArgs.url + source: currentArgs.url.replace("http://", "tidy://") - query: "//table[@class=\"clearfix clip-list video-tree\"]//tr[descendant::th[a]]" - namespaceDeclarations: "declare default element namespace 'http://www.w3.org/1999/xhtml';" + query: '//section[@data-section="episodelist"]//div[@data-title]' XmlRole { name: "title" - query: "th[@class=\"col1\"]/a/string()" - } - XmlRole { - name: "epNo" - query: "td[@class=\"col2\"]/string()" + query: "div/a/div/div/h3/string()" } XmlRole { name: "time" - query: "td[@class=\"col4\"]/string()" + query: "div/em/time/string()" } XmlRole { name: "link" - query: "th[@class=\"col1\"]/a/@href/string()" + query: "div/a/@href/string()" } } delegate: ListDelegate { - text: model.title.slim() + " avsnitt " + model.epNo + "
    " + model.time + text: "" + model.title.slim() + "
    " + model.time onClicked: { go( Qt.resolvedUrl("../pirateplay.qml"), - { url: "http://www.tv" + currentArgs.n + "play.se" + model.link, - programTitle: "avsnitt " + model.epNo, - programName: model.title.slim(), + { url: model.link, + programName: currentArgs.programName, + programTitle: model.title.slim(), programTime: model.time }, model.index); } From c7038843b95828ce8c25a96df974d653d16911d6 Mon Sep 17 00:00:00 2001 From: Mikewse Date: Wed, 14 Dec 2016 02:13:52 +0100 Subject: [PATCH 08/12] fix svtplay after switch to react --- .gitignore | 1 + src/gui/qml/HttpREModel/HttpREModel.qml | 48 +++++++++++-------- src/gui/qml/JSONListModel/JSONListModel.qml | 28 ++++++++--- src/gui/qml/browser/menu.qml | 2 +- src/gui/qml/browser/svt/alfabetical.qml | 4 +- src/gui/qml/browser/svt/open_a-z.qml | 31 +++++++----- src/gui/qml/browser/svt/program.qml | 45 ++++++++--------- .../_common/Components/UserSettings.qml | 4 +- 8 files changed, 94 insertions(+), 69 deletions(-) diff --git a/.gitignore b/.gitignore index ef93db8..fa563aa 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ android/proguard-project.txt src/gui/qml/deploy.sh .DS_Store android/ant.properties +/.project diff --git a/src/gui/qml/HttpREModel/HttpREModel.qml b/src/gui/qml/HttpREModel/HttpREModel.qml index acb613b..2aff7d1 100644 --- a/src/gui/qml/HttpREModel/HttpREModel.qml +++ b/src/gui/qml/HttpREModel/HttpREModel.qml @@ -10,25 +10,35 @@ ListModel { property int status: XmlListModel.Loading Component.onCompleted: { - var doc = new XMLHttpRequest(); - doc.onreadystatechange = function() { - if (doc.readyState == XMLHttpRequest.DONE) { - var re = new RegExp(regExp, "g"); - //console.log(doc.responseText); - var l = doc.responseText.match(re); - - for (var x=0; x]*>(]*>[^<]*
    )" + + roles: [ + ReRole { + name: "text" + regExp: ">([^<]+)" + function decode(s) { return s.slim().decodeHTMLEntities(); } + }, + ReRole { + name: "link" + regExp: 'href="([^"]+)"' + } + ] } + delegate: ListDelegate { text: model.text.slim() onClicked: { go( Qt.resolvedUrl("open_program.qml"), { - url: "tidy://www.oppetarkiv.se" + decodeURI(model.link), + url: "https://www.oppetarkiv.se" + decodeURI(model.link), programName: model.text.slim() }, model.index ); diff --git a/src/gui/qml/browser/svt/program.qml b/src/gui/qml/browser/svt/program.qml index 00b27a5..2c89fc6 100644 --- a/src/gui/qml/browser/svt/program.qml +++ b/src/gui/qml/browser/svt/program.qml @@ -1,45 +1,38 @@ import QtQuick 1.1 import Components 1.0 -import "../../HttpREModel" +import "../../JSONListModel" import "../../common.js" as Common BarredListView { anchors.fill: parent - model: HttpREModel { + model: JSONListModel { id: programModel source: currentArgs.url ? currentArgs.url : "" - regExp: '
    (.|\n)*?
    ' - - roles: [ - ReRole { - name: "text" - regExp: ']*>([^>]*)' - function decode(s) { return s.slim().decodeHTMLEntities(); } - }, - ReRole { - name: "link" - regExp: ' href="([^"]+)"' - }, - ReRole { - name: "thumb" - regExp: ' src="([^"]+)"' - } - ] + regExp: "__svtplay'] = ({.*});" + query: [ + '$.videoTitlePage.realatedVideosTabs[?(@.key!="RELATED_VIDEO_TABS_LATEST" && @.key!="RELATED_VIDEO_TABS_CLIP")].videos[*]', + '$.videoTitlePage.realatedVideosTabs[?(@.key=="RELATED_VIDEO_TABS_CLIP")].videos[*]' + ] } - - delegate: ListDelegate { - imgSource: model.thumb.startsWith("http://") ? model.thumb : "http://svtplay.se" + model.thumb - text: model.text + text: + "" + (model.season > 0 ? "Säsong " + model.season + " - " : "") + + model.title + "" + + (model.broadcastDate ? " - " + model.broadcastDate.replace(/:..\+.*/, "").replace("T", " ") : "") onClicked: { - var base = (model.link.startsWith("http") ? "" : "http://svtplay.se"); + var pageUrl = "http://www.svtplay.se" + encodeURI(model.contentUrl); go( Qt.resolvedUrl("../pirateplay.qml"), - { url: base + model.link, programTitle: model.text, programName: currentArgs.programName }, - model.index); + { + url: pageUrl, + programTitle: model.title, + programName: currentArgs.programName, + programSeason: (model.season > 0 ? "Säsong " + model.season : "") + }, + model.index); } } diff --git a/src/gui/qml/imports/_common/Components/UserSettings.qml b/src/gui/qml/imports/_common/Components/UserSettings.qml index 47c8d75..c1c3872 100644 --- a/src/gui/qml/imports/_common/Components/UserSettings.qml +++ b/src/gui/qml/imports/_common/Components/UserSettings.qml @@ -1,9 +1,9 @@ import QtQuick 1.1 Item { - property variant defaults: { "startDir": getHomeDir(), + property variant defaults: { "startDir": getHomeDir().match(/^(.*?)[\/\\]?$/), "playerCmd": (mac() ? applicationDirPath() + "/" : "") + "ffplay \"%0\"", - "filenameTemplate": "%name%_-_%title%", + "filenameTemplate": "%name%_%season%_%title%", "fontPointSize": getSetting("MainWindow/font_point_size") } property string startDir: getSetting("Location/start_dir", defaults.startDir) From 849e47992afe44c3f6f483e4dc92c467ecbf82bb Mon Sep 17 00:00:00 2001 From: Mikewse Date: Thu, 15 Dec 2016 11:54:14 +0100 Subject: [PATCH 09/12] fixed mtg/viafree/tv3 etc breakage after site update --- src/gui/qml/browser/mtg/a-z.qml | 8 ++++---- src/gui/qml/browser/mtg/program.qml | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/gui/qml/browser/mtg/a-z.qml b/src/gui/qml/browser/mtg/a-z.qml index 2c1d278..4a86ccd 100644 --- a/src/gui/qml/browser/mtg/a-z.qml +++ b/src/gui/qml/browser/mtg/a-z.qml @@ -5,12 +5,12 @@ import "../../common.js" as Common AzListView { model: XmlListModel { - source: "tidy://www.tv3play.se/program" - query: '//a[@class="list-item"]' + source: "tidy://www.viafree.se/program" + query: '//a[@class="thumbnail-format format-title className"]' XmlRole { name: "text" - query: "div/string()" + query: "string()" } XmlRole { name: "link" @@ -22,7 +22,7 @@ AzListView { onClicked: { go( Qt.resolvedUrl("program.qml"), - { url: model.link, + { url: "http://www.viafree.se" + model.link, programName: model.text.slim() }, model.index); } diff --git a/src/gui/qml/browser/mtg/program.qml b/src/gui/qml/browser/mtg/program.qml index 4e279e6..b3088fc 100644 --- a/src/gui/qml/browser/mtg/program.qml +++ b/src/gui/qml/browser/mtg/program.qml @@ -9,19 +9,19 @@ BarredListView { source: currentArgs.url.replace("http://", "tidy://") - query: '//section[@data-section="episodelist"]//div[@data-title]' + query: '//a[@class="info-link"]' XmlRole { name: "title" - query: "div/a/div/div/h3/string()" + query: "div/span/span/string()" } XmlRole { name: "time" - query: "div/em/time/string()" + query: "div/div[@class=thumbnail-published-at]/string()" } XmlRole { name: "link" - query: "div/a/@href/string()" + query: "@href/string()" } } @@ -30,7 +30,7 @@ BarredListView { onClicked: { go( Qt.resolvedUrl("../pirateplay.qml"), - { url: model.link, + { url: "http://www.viafree.se" + model.link, programName: currentArgs.programName, programTitle: model.title.slim(), programTime: model.time }, From a66bd5d2a3dd1cf978cfb0f5b84462f34b433ee2 Mon Sep 17 00:00:00 2001 From: Mikewse Date: Thu, 15 Dec 2016 12:05:33 +0100 Subject: [PATCH 10/12] fixed mtg/viafree/tv3 etc breakage after site update --- src/gui/qml/browser/mtg/program.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qml/browser/mtg/program.qml b/src/gui/qml/browser/mtg/program.qml index b3088fc..670c21f 100644 --- a/src/gui/qml/browser/mtg/program.qml +++ b/src/gui/qml/browser/mtg/program.qml @@ -13,7 +13,7 @@ BarredListView { XmlRole { name: "title" - query: "div/span/span/string()" + query: "div//span[not(*)]/string()" } XmlRole { name: "time" From 2a90924e51f149ecf3ffa75f5a20b81f7b92b08d Mon Sep 17 00:00:00 2001 From: Mikewse Date: Wed, 15 Feb 2017 21:45:40 +0100 Subject: [PATCH 11/12] updated SVT and removed MTG (https not supported by pirateplayer) --- src/gui/qml/browser/menu.qml | 2 +- src/gui/qml/browser/svt/program.qml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/qml/browser/menu.qml b/src/gui/qml/browser/menu.qml index 1c8f22f..914a665 100644 --- a/src/gui/qml/browser/menu.qml +++ b/src/gui/qml/browser/menu.qml @@ -21,13 +21,13 @@ BarredListView { url: "ur/a-z.qml" logo: "http://urplay.se/design/ur_play/images/urplay-logo.png" } -*/ ListElement { title: "TV3/6/8/10-play" url: "mtg/a-z.qml" logo: "http://images2.wikia.nocookie.net/__cb20091126144517/logopedia/images/c/c6/TV3_logo_1990.png" n: 3 } +*/ ListElement { title: "TV4-play" url: "tv4/a-z.qml" diff --git a/src/gui/qml/browser/svt/program.qml b/src/gui/qml/browser/svt/program.qml index 2c89fc6..175b529 100644 --- a/src/gui/qml/browser/svt/program.qml +++ b/src/gui/qml/browser/svt/program.qml @@ -13,8 +13,8 @@ BarredListView { source: currentArgs.url ? currentArgs.url : "" regExp: "__svtplay'] = ({.*});" query: [ - '$.videoTitlePage.realatedVideosTabs[?(@.key!="RELATED_VIDEO_TABS_LATEST" && @.key!="RELATED_VIDEO_TABS_CLIP")].videos[*]', - '$.videoTitlePage.realatedVideosTabs[?(@.key=="RELATED_VIDEO_TABS_CLIP")].videos[*]' + '$.videoTitlePage.relatedVideosTabs[?(@.type!="RELATED_VIDEO_TABS_LATEST" && @.type!="RELATED_VIDEO_TABS_CLIP")].videos[*]', + '$.videoTitlePage.relatedVideosTabs[?(@.type=="RELATED_VIDEO_TABS_CLIP")].videos[*]' ] } From 36bdf17eb9b0fef723f238e581a7ba0bddd621cf Mon Sep 17 00:00:00 2001 From: Mikewse Date: Wed, 15 Feb 2017 22:05:34 +0100 Subject: [PATCH 12/12] updated SVT support after site changes --- src/gui/qml/browser/svt/program.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/qml/browser/svt/program.qml b/src/gui/qml/browser/svt/program.qml index 175b529..307efda 100644 --- a/src/gui/qml/browser/svt/program.qml +++ b/src/gui/qml/browser/svt/program.qml @@ -13,7 +13,7 @@ BarredListView { source: currentArgs.url ? currentArgs.url : "" regExp: "__svtplay'] = ({.*});" query: [ - '$.videoTitlePage.relatedVideosTabs[?(@.type!="RELATED_VIDEO_TABS_LATEST" && @.type!="RELATED_VIDEO_TABS_CLIP")].videos[*]', + '$.videoTitlePage.relatedVideosTabs[?(@.type=="RELATED_VIDEO_TABS_LATEST")].videos[*]', '$.videoTitlePage.relatedVideosTabs[?(@.type=="RELATED_VIDEO_TABS_CLIP")].videos[*]' ] }