From 0dc0ce7f352748ca9a9eac225428891b2238296e Mon Sep 17 00:00:00 2001 From: LubuWest Date: Wed, 1 May 2024 21:23:16 +0200 Subject: [PATCH] repair video playback --- src/CMakeLists.txt | 2 +- src/common/xhr.cpp | 2 +- src/js/news.js | 60 +++++++------- src/js/service.js | 4 +- src/qml/calendarqml/EventListItem.qml | 2 +- src/qml/configqml/AccountPage.qml | 14 ++-- src/qml/contactqml/FriendsTab.qml | 1 - src/qml/contactqml/GroupsListTab.qml | 2 +- src/qml/friendiqa.qml | 4 +- src/qml/newsqml/ContactPage.qml | 24 +++--- src/qml/newsqml/MessageSend.qml | 10 +-- src/qml/newsqml/NewsStack.qml | 5 +- src/qml/newsqml/NewsVideo.qml | 16 +--- src/qml/newsqml/NewsVideoLarge.qml | 113 +++++++++++++++----------- src/qml/newsqml/Newsitem.qml | 16 +--- src/qml/photoqml/PhotoComponent.qml | 1 - src/translations/friendiqa-de.qm | Bin 19833 -> 32950 bytes src/translations/friendiqa-es.qm | Bin 17933 -> 26280 bytes src/translations/friendiqa-hu.qm | Bin 16638 -> 25158 bytes src/translations/friendiqa-it.qm | Bin 17897 -> 26031 bytes src/translations/friendiqa-nl.qm | Bin 19380 -> 25508 bytes 21 files changed, 133 insertions(+), 143 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 85914fb..ea99547 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,7 +13,7 @@ if(CMAKE_VERSION VERSION_LESS "3.7.0") set(CMAKE_INCLUDE_CURRENT_DIR ON) endif() -find_package(Qt6 REQUIRED COMPONENTS Core Widgets Quick QuickControls2 Sql DBus NetworkAuth Multimedia REQUIRED) +find_package(Qt6 REQUIRED COMPONENTS Core Quick QuickControls2 Widgets Sql DBus NetworkAuth Multimedia REQUIRED) qt_standard_project_setup() diff --git a/src/common/xhr.cpp b/src/common/xhr.cpp index 6951b27..dba9c5d 100644 --- a/src/common/xhr.cpp +++ b/src/common/xhr.cpp @@ -355,7 +355,7 @@ void XHR::onReplyError(QNetworkReply::NetworkError code) void XHR::onReplySuccess() { qDebug() << "!"; - QHashIterator i(params); + //QHashIterator i(params); // while(i.hasNext()) { // i.next(); // //qDebug() << i.key()<< " " << i.value(); diff --git a/src/js/news.js b/src/js/news.js index bbaa08f..12f8743 100644 --- a/src/js/news.js +++ b/src/js/news.js @@ -41,40 +41,42 @@ function requestFriends(login,database,rootwindow,callback){ var result2 = tx.executeSql('DELETE from groups where username="'+login.username+'"'); // clean old groups }) // /api/statuses/friends not working in Friendica 2/2022 , switching to api/v1/lists and download of all list members - // Helperjs.friendicaRequest(login,"/api/statuses/friends?count=9999", rootwindow,function (obj){ - var allfriends=[]; - Helperjs.friendicaRequest(login,"/api/v1/lists",rootwindow,function(listsobj){ - var lists=JSON.parse(listsobj) - for (var list in lists){ - Helperjs.friendicaRequest(login,"/api/v1/lists/"+lists[list].id+"/accounts?limit=0", rootwindow,function (obj){ - var friends=JSON.parse(obj); - var memberarray=[]; + Helperjs.friendicaRequest(login,"/api/statuses/friends?count=9999", rootwindow,function (obj){ + //var allfriends=[]; + //Helperjs.friendicaRequest(login,"/api/v1/lists",rootwindow,function(listsobj){ + // var lists=JSON.parse(listsobj) + // for (var list in lists){ + // Helperjs.friendicaRequest(login,"/api/v1/lists/"+lists[list].id+"/accounts?limit=0", rootwindow,function (obj){ + let friendsobj=JSON.parse(obj); + let friends=friendsobj.users; + //var memberarray=[]; for (var i=0;i0){// download contact images and update db var contacturls=[]; var contactnames=[]; - for (var link in newContacts){//print("new contact " +newContacts[link].screen_name); + for (var link in newContacts){ contacturls.push(newContacts[link].profile_image_url); contactnames.push(newContacts[link].screen_name); Service.updateContactInDB(login,db,newContacts[link].isFriend,newContacts[link]) @@ -311,7 +311,7 @@ ApplicationWindow{ systemTray.visible=true systemTray.show(); } - + root.contactdetailsSignal.connect(showContact); if(osSettings.osType=="Android"){ var component = Qt.createComponent("qrc:/qml/genericqml/IntentReceiver.qml"); var IntentReceiverQml = component.createObject(root); diff --git a/src/qml/newsqml/ContactPage.qml b/src/qml/newsqml/ContactPage.qml index 83cdf6d..4f4e784 100644 --- a/src/qml/newsqml/ContactPage.qml +++ b/src/qml/newsqml/ContactPage.qml @@ -181,8 +181,6 @@ Page { MButton{ id:dmbutton -// height: 6*mm -// width: 8*mm visible: (contact.following=="true") text: qsTr("Direct Message") display: AbstractButton.IconOnly @@ -211,7 +209,7 @@ Page { MButton{ id:approvebutton visible:(contact.hasOwnProperty("acct")&&!contact.searchContact) - //height: 6*mm + width: implicitWidth text:qsTr("Approve") onClicked:{ xhr.setAccount(login); @@ -225,7 +223,7 @@ Page { MButton{ id:rejectbutton visible:(contact.hasOwnProperty("acct")&&!contact.searchContact) - //height: 6*mm + width: implicitWidth text:qsTr("Reject") onClicked:{ xhr.setAccount(login); @@ -239,7 +237,7 @@ Page { MButton{ id:ignorebutton visible:(contact.hasOwnProperty("acct")&&!contact.searchContact) - //height: 6*mm + width: implicitWidth text:qsTr("Ignore") onClicked:{ xhr.setAccount(login); @@ -253,7 +251,7 @@ Page { MButton{ id:followbutton visible:(contact.isFriend==0 || !contact.hasOwnProperty("isFriend")) - //height: 6*mm + width: implicitWidth text:qsTr("Follow") onClicked:{ contactBusy.running=true; @@ -269,7 +267,7 @@ Page { MButton{ id:unfollowbutton visible:(contact.isFriend==1) - //height: 6*mm + width: implicitWidth text:qsTr("Unfollow") onClicked:{ contactBusy.running=true; @@ -284,7 +282,7 @@ Page { MButton{ id: blockbutton visible:(contact.statusnet_blocking!=1) - //height: 6*mm + width: implicitWidth text:qsTr("Block") onClicked:{ contactBusy.running=true; @@ -300,7 +298,7 @@ Page { MButton{ id: unblockbutton visible:(contact.statusnet_blocking==1) - //height: 6*mm + width: implicitWidth text:qsTr("Unblock") onClicked:{ contactBusy.running=true; @@ -358,12 +356,10 @@ Page { } function onSuccess(data,api){ if (api=="/api/statuses/user_timeline"){ - Service.processNews(api,data) + if (data!=""){ + Service.processNews(api,data) + }else{contactBusy.running=false} } - else if (api=="/api/statuses/user_timeline"){ - Service.processNews(api,data) - } - } } diff --git a/src/qml/newsqml/MessageSend.qml b/src/qml/newsqml/MessageSend.qml index 12ed161..6dce620 100644 --- a/src/qml/newsqml/MessageSend.qml +++ b/src/qml/newsqml/MessageSend.qml @@ -292,11 +292,11 @@ Window{ enabled: bodyField.canPaste action: pasteAction } - MenuItem { - text: qsTr("Text") - enabled: bodyField.selectedText - onTriggered: print(bodyField.getFormattedText(bodyField.selectionStart,bodyField.selectionEnd)) - } +// MenuItem { +// text: qsTr("Text") +// enabled: bodyField.selectedText +// onTriggered: print(bodyField.getFormattedText(bodyField.selectionStart,bodyField.selectionEnd)) +// } } DocumentHandler { id: document document: bodyField.textDocument diff --git a/src/qml/newsqml/NewsStack.qml b/src/qml/newsqml/NewsStack.qml index 8349996..44b8608 100644 --- a/src/qml/newsqml/NewsStack.qml +++ b/src/qml/newsqml/NewsStack.qml @@ -266,7 +266,7 @@ Rectangle{ Connections{ target:xhr - function onError(data,url,api,code){print("api "+api+" code "+code+"data"+data) + function onError(data,url,api,code){print("api "+api+" code "+code) newsBusy.running=false; expectScreenUpdate=false; } @@ -314,7 +314,7 @@ Rectangle{ } Timer {id:replytimer; interval: 1000; running: false; repeat: false - onTriggered: {print("replytimer") + onTriggered: {//print("replytimer") newsBusy.running=true; if(newstab.newstabstatus=="Conversation"){ showConversation(newsStack.timelineIndex-1,newsModel.get(0).newsitemobject)} @@ -556,7 +556,6 @@ Rectangle{ } Component.onCompleted: { - root.contactdetailsSignal.connect(showContact); root.newsSignal.connect(showNews); root.searchSignal.connect(search); try{newsModel.clear()} catch(e){} diff --git a/src/qml/newsqml/NewsVideo.qml b/src/qml/newsqml/NewsVideo.qml index f713c9b..7a72ccc 100644 --- a/src/qml/newsqml/NewsVideo.qml +++ b/src/qml/newsqml/NewsVideo.qml @@ -32,24 +32,14 @@ import QtQuick 6.3 Rectangle{ - color:"grey" - width:toprow.width/2; - height:toprow.width/3 + color:"light grey" + width: 7*root.fontFactor*osSettings.bigFontSize + height: 7*root.fontFactor*osSettings.bigFontSize property var attachment:({}) Image{ anchors.fill: parent source: "qrc:/assets/icons/play.svg" } - // Text{ - // id:noticeText - // text:"\uf144"; - // color:"light grey" - // width:parent.width - // font.pixelSize: parent.height/2 - // x: (parent.width-contentWidth)/2 - // y:parent.height/5 - // } - MouseArea {anchors.fill:parent; onClicked:{ rootstackView.push("qrc:/qml/newsqml/NewsVideoLarge.qml",{"source": Qt.resolvedUrl(attachment.url),"mimetype": attachment.mimetype}); diff --git a/src/qml/newsqml/NewsVideoLarge.qml b/src/qml/newsqml/NewsVideoLarge.qml index 9b2ff5a..8f84683 100644 --- a/src/qml/newsqml/NewsVideoLarge.qml +++ b/src/qml/newsqml/NewsVideoLarge.qml @@ -38,8 +38,14 @@ Page{ id:newsvideofullscreen width:root.width; height:root.height-3*root.fontFactor*osSettings.bigFontSize - property alias source:video.source + property alias source: video.source property string mimetype:"" + + Rectangle{ + anchors.fill: newsvideofullscreen + color: "black" + } + Text{ id:noticeText text:"" @@ -52,72 +58,83 @@ Page{ visible: video.playbackState!=MediaPlayer.PlayingState } - Video { - id:video; - anchors.fill:parent - - onErrorChanged:{ - noticeText.font.pointSize=osSettings.bigFontSize; - noticeText.text=errorString; - Qt.openUrlExternally(source) - } - fillMode: Image.PreserveAspectFit; -// autoLoad: true -// autoPlay: true -// audioRole: MediaPlayer.VideoRole + MediaPlayer { + id: video + audioOutput: AudioOutput {} + videoOutput: videoOutput + Component.onCompleted: {play()} + onErrorChanged: {noticeText.text=errorString;Qt.openUrlExternally(source)} } - ProgressBar{ - id: videoProgress - width: parent.width - height: 2*mm - anchors.bottom: video.bottom - z:2 - visible:video.playbackState!=MediaPlayer.StoppedState - value: video.position/video.duration - + VideoOutput { + id: videoOutput + anchors.fill: parent MouseArea { anchors.fill:parent; onClicked:{ if(video.playbackState!=MediaPlayer.PlayingState){ video.play()} else{video.pause() } + if(Math.round(video.position/video.duration*1000) == 1000){ + video.position=0;video.play() + } + } + } + + Rectangle{ + color:"light grey" + visible: video.playbackState!=MediaPlayer.PlayingState || (Math.round(video.position/video.duration*1000) == 1000) + opacity: 0.5 + anchors.centerIn: videoOutput + width: 5*root.fontFactor*osSettings.bigFontSize + height: 5*root.fontFactor*osSettings.bigFontSize + Image{ + anchors.fill: parent + source: "qrc:/assets/icons/play.svg" } } } - ProgressBar{ id: videoBuffer - width: parent.width - height: 2*mm - anchors.bottom: video.bottom - visible:video.playbackState!=MediaPlayer.StoppedState + width: parent.width-4*mm + x: 2*mm + height: mm + contentItem: Item { + Rectangle { + width: videoBuffer.visualPosition * parent.width + height: parent.height + color: "light blue" + } + } + anchors.bottom: parent.bottom value: video.bufferProgress } - MButton { - id: closeButton - z:2 - anchors.top: parent.top - anchors.topMargin: 1*mm - anchors.right: parent.right - anchors.rightMargin: 1*mm - text: qsTr("Close") - display: AbstractButton.IconOnly - icon.name: "dialog-close" - icon.source: "qrc:/assets/icons/times-circle.svg" - onClicked: {if (rootstackView.depth>1){ rootstackView.pop()} - } - } - - Slider{ id: videoSlider - width: parent.width - height: 3*mm - anchors.top: video.bottom + x: 2*mm + width: parent.width-4*mm + height: 2*mm + z: 2 + anchors.bottom: parent.bottom visible:video.playbackState!=MediaPlayer.StoppedState && video.seekable value: video.position/video.duration - onMoved: video.seek(value*video.duration) + onMoved: video.position=value*video.duration + } + + MButton { + id: closeButton + z:2 + anchors.top: parent.top + anchors.topMargin: 1*mm + anchors.right: parent.right + anchors.rightMargin: 1*mm + opacity: 0.6 + text: qsTr("Close") + display: AbstractButton.IconOnly + icon.name: "dialog-close" + icon.source: "qrc:/assets/icons/times-circle.svg" + onClicked: {if (rootstackView.depth>1){ rootstackView.pop()} + } } } diff --git a/src/qml/newsqml/Newsitem.qml b/src/qml/newsqml/Newsitem.qml index e41ba48..a0e29cd 100644 --- a/src/qml/newsqml/Newsitem.qml +++ b/src/qml/newsqml/Newsitem.qml @@ -73,8 +73,8 @@ Item { Column { id:toprow - width: newsitemobject.hasOwnProperty("indent")?newsitem.width-(newsitem.width/20 *(newsitemobject.indent+1)):newsitem.width//-8*mm - x:newsitemobject.hasOwnProperty("indent")?newsitem.width/20*(newsitemobject.indent):0 + width: newsitemobject.hasOwnProperty("indent")?newsitem.width-(newsitem.width/20 *(newsitemobject.indent+1))-mm:newsitem.width-mm + x:newsitemobject.hasOwnProperty("indent")?newsitem.width/20*(newsitemobject.indent)+0.5*mm:0.5*mm height: newsitemobject.nsfw?5*mm:Math.min(implicitHeight,3/4*root.height) clip: true Item{id:itemHeader @@ -190,19 +190,11 @@ Item { height:5*mm anchors.bottom: toprow.bottom visible: toprow.implicitHeight>3/4*root.height || newsitemobject.nsfw - //text:"\uf078" -// fontColor: osSettings.secondaryTextColor -// border.color: "transparent" -// color: osSettings.backgroundColor -// gradient: Gradient { -// GradientStop { position: 0.0; color: "transparent" } -// GradientStop { position: 0.5; color: osSettings.backgroundDimColor} -// } - //radius:0 icon.name:"arrow-down" icon.source: "qrc:/assets/icons/chevron-down.svg" icon.width: 2*root.fontFactor*osSettings.bigFontSize icon.height: 2*root.fontFactor*osSettings.bigFontSize + icon.color:"transparent" background: Rectangle{ gradient: Gradient { GradientStop { position: 0.0; color: "transparent" } @@ -216,7 +208,7 @@ Item { } else { toprow.height=Math.min(toprow.implicitHeight,3/4*root.height); icon.name="arrow-down";icon.source="qrc:/assets/icons/chevron-down.svg"; - newsView.positionViewAtIndex(index,ListView.Beginning); + newsitem.ListView.view.positionViewAtIndex(index,ListView.Beginning); } } } diff --git a/src/qml/photoqml/PhotoComponent.qml b/src/qml/photoqml/PhotoComponent.qml index 1488dd3..347f9c3 100644 --- a/src/qml/photoqml/PhotoComponent.qml +++ b/src/qml/photoqml/PhotoComponent.qml @@ -113,7 +113,6 @@ Package { enabled: false } - // onStateChanged: print("State"+photoWrapper.state+index) states: [ State { name: 'stacked'; when: albumWrapper.state == '' diff --git a/src/translations/friendiqa-de.qm b/src/translations/friendiqa-de.qm index 00f226326b0fd3effbf334a20356b9c690e311c5..cf08a6889b7f6b5c9bacbe2f0e15ddc2fbe6c1d8 100644 GIT binary patch delta 9618 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 diff --git a/src/translations/friendiqa-es.qm b/src/translations/friendiqa-es.qm index 4ef4daeeee4d5699e2746c34b39a8b4fb27200e8..f034d6006c65ff17091728787841b074d38256df 100644 GIT binary patch delta 5676 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 delta 1980 zcmXYxc~DbV6vj`Ici+oOLc$&;0m2ReCDE`*u}pzMfoWBAqEuXwfVLEH>0-2Etpx__ zs}zM&E24l@(YQd>78P)5L1wJBR;{S5VzDk2M9U~W_WDQWmv{5-x!*b8chl7&c(GQn z$;-~E0GM(B|BC>`4B&MhfXe^~@}#u%AP)nWdI7BY0MZo7km~?B_zA24ux-TkQkLrS;DiGIrnGE_qD2h=ia1L35T)-HC_4KXATk~7tyoXFkYKjO>}M9b^u|c=t1f_TrZ<^ zEfPH!V;-D9WdHw*<``Y@OJm46+^A4csyiutZHy-EF@S3q<8cTD>Y5qz9RYyFkBJpw zFavfowIwJ(JBMiwtH&@uWzOwP#{;aCF7A|mb<9tlSf5cbJ((BK>L@#NDJlm*{1`Rg^(HnHQO8g~Xe%8nh;OFX2Z0kQyR+R0|-_pj0!I zKCMKhHRDA0lQ6Y2fZz&=Ex>bvSCA=BqA+vzBu4bIhw2e=b1VGatAU#C=8Qu-!vN!G_`X&$Ag^|L7#oz=Sur&2A81LEUlXYl^JFA$%Oz)swE zi_c~_p^(j#>J&%t}4Ko|56M+iK7X z(Kphg71Po3>(UPUnPK$$khG&8X}BYUMk9JvO{vMG^t~q|x&=6a0a>=+1@yjKX6wTO zT)nJZG=$+BmQ{7$$Mp!=*7J|Bo>kU09)*t`ko(oI18}p+BQF1r0#C{(rSC^eR?9Q$ zai94Yxqa@eS?H}qepFD18?^F1FI4DuL_w68?r{qh@q@J(%1T9UQX;M!6orm>Y|y5t z=)m_p@+iFwub534v{)Gvs=?ITl-4FEoY*r;msUzcjB-aJW(j`wS2k}thS%*qb zEOVn&by4d1TufFs|G9KBpDFv&5hU*x@)1fiU!#n1=u`#~pW#x#54+6ZE#4u#-rJ4u z(8cm``eMhZew~tEnH=C4iZluMnd7VZ(5TJ)Yo;aqRnq~-59W7;ywx(-aUnWSz<(0t w;pmFrz&J`1IU(Qv#;D_YQmWFiDl=EWUz=m(Ph|!2|IQ8J%d*q>yYsUC11pIbd;kCd diff --git a/src/translations/friendiqa-it.qm b/src/translations/friendiqa-it.qm index 189d88266812ed88c1bf96b73639094914c33b21..f6f68d88086346c0d4c6bc0f7604fb67c31967e4 100644 GIT binary patch delta 5788 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 delta 2101 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 Ic`mEte|-m>OaK4? delta 2163 zcmXYyc~DbV6vj_@TV7TrB%)Cf!X7|O2#X*hIHV)t?MH9_$oyXJd+*%yo%5ah8rn67-_xug zqDX%c@#}~Zee;^1Df_ollgqg2eh(a3_f^91^(7Xz65(X&|v9 zkto$g;yt`)`lye{D�zh<$;irk9DbuanfbLCzeKzDHuCej?XN1J?Iamh&!=_6DQ9 zmd5RUjA(QLjXRM7zCjZ_TZwc#Xwv2qBC2H^GKw+c55}l!np}30DEKFu{y^zPdC$|F za+J%^#ON-edCl)YVKHM^I4!9SK$%R-y(%)l%@}f>F}9w38k95bF8OLux#V)j+;XaT zqM4{)F{7=B5nZS_dxt2)O3y0$QHqR-q#Q%w;Ex$YPctTrrd^Vc$g`VTycwuSfNthL zA{yCEza~IoW|YP{F%DjMPV@B0HAD$LnpMy3LcE7TBZ3zaIhF^tY}!eb`*Tp6?-L^K zQczdk4774U(9KsiA+9Az`LWM5QYB|=>_jiSIrrEwlzIr4x&ayLtGHA(2KO7@k?oO}*iVDZ9Bq1u8lC5ZC<_49j`BUkg^_{vO8AUhaW5o2Y*> z;{X?9d_duaa|qDS$!LpXjJwENCL@7?Ieh35D2jf-dv0lvz#~4B>p%j>`R!|vNW?OJ zUqU1PoA~2JFz3)2{JDlH*r=LuKn_K zaabCoJ4V?07J6nc6!ul&xwJ~*;2yYGyHz;dj0(6v7ur1)=((FQ@}}@x)hwd)H$+E) z1zxEXW4rpM#ULg(qXHSLM0d(q%>Qs+%z8Wub9qP1I+%pONn%Ns9S71#@yxbjBvdC} z$i;f_a>me=jLtja)dH9|wN&C}sHnsOiEGB;B$P?kBy2orrIfP(iJ9*+TJJH&?U3^4 z-9gK1`iS|r{dYkW@06x_#}b7#NwW`Jf!iI@%RT6&*}`ZwGRC$`RXtFWRUvIO3sCZr z^lryWw5(jJ`{yN;HdWeNjTWV3O2=AZ(!6x3HTgCw(50=ceI4h+VyzmEsfmu)?zyRa z3)iP;4_rvWjjtJ9b=s5FXP}@{+ddr1>=y0WsU{@S#Aw~g7&l#esRosk619KafRN~y zWP3~q#;Z-XuSMdfMT{Zy8Dk@5&kjtB@f{xn><zcgq>sK*G zvRu06J1G52Ue@=Vr$~NNIRtN%GFl?!bpdP?p^=+Dg<{7!`NKtE|9gxB{$_N(rn4RS z2XQRAMOhG8{+QL<~gHSb5lB!_gZb?6cQwC;G#On73y zE^y{goNURuz-=&LsqU*&1JSCvdTL2RFHbSr0*vwV^+H%F%*p9PZaJ_K>5Cm*@XB_5 zc@N^ro%(g$UC^QEH?{o&Wxe{%7k`J@&g)ORpeQQZ;AmWp`Txc+{K_}T{G?&jln=1p zZkXUXk8#a1Ol?Gf(LWoC=FWx7I}A&$`06G4497J-e548tJ%b=%kkcrb8!(15jM=^0 zasRNf=p@B4XUDCeKqua#HrwiW6r+Z=VaK32Up*ru)<`iz<$w#xq~jI;VvJ&hXw qz_eEcb?CxS|Kp?U2KwEFX&N