~vincent-vandevyvre/qarte/qarte-4

« back to all changes in this revision

Viewing changes to artetv.py

  • Committer: vincent.vandevyvre at oqapy
  • Date: 2022-05-08 05:57:21 UTC
  • Revision ID: vincent.vandevyvre@oqapy.eu-20220508055721-dalkiaklhhz6x9jx
Fix to arte api v2

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
import pickle
18
18
import json
19
19
import glob
 
20
import subprocess
20
21
import urllib.request
21
22
import urllib.parse
22
23
from html.parser import HTMLParser
44
45
 
45
46
    """
46
47
    parsingFinished = pyqtSignal(int)
 
48
    mergingFinished = pyqtSignal(str, str)
47
49
    LDESC = re.compile("(?<=<div class='hidden-xs desc-wrapper')"
48
50
                        "(.*?)(?=</div>)",
49
51
                        re.DOTALL)
86
88
        self.loader.loadingProgress.connect(self.display_progress)
87
89
        self.loader.loadingFinished.connect(self.on_downloading_finished)
88
90
        self.parsingFinished.connect(self.parse_arte_tv)
 
91
        self.mergingFinished.connect(self.on_merging_finished)
89
92
 
90
93
    def config_parser(self):
91
94
        """Configure the main pages parser.
973
976
            self.is_loading = True
974
977
            Thread(target=self.loader.download_mp4).start()
975
978
            if self.audio_link:
 
979
                self.current_item = video
976
980
                self.audio_target = self.core.get_target_path(
977
981
                                            self.core.cfg["videos_folder"])
978
982
                self.load_audio_file(self.audio_link, self.audio_target)
985
989
        lgg.info('Loading error: %s' % self.file_size)
986
990
        return False
987
991
 
988
 
    def load_audio_file(self, url, fname)
 
992
    def load_audio_file(self, url, fname):
989
993
        audio_loader = Loader()
990
994
        size = audio_loader.config_loader(url, fname)
991
995
        if not isinstance(size, int):
1001
1005
            base += "/"
1002
1006
 
1003
1007
        page = base + item.streams[item.quality]['uri']
1004
 
        lgg.info("Get m3u8 video file: \n   %s" % page
 
1008
        lgg.info("Get m3u8 video file: \n   %s" % page)
1005
1009
        try:
1006
1010
            data = m3u8.load(page)
1007
1011
            base = data.base_uri
1013
1017
            lgg.info("Error when reading m3u8:\n\t%s" % why)
1014
1018
            return False
1015
1019
 
1016
 
    def get_audio_link((self, item):
 
1020
    def get_audio_link(self, item):
1017
1021
        base = item.streams[item.quality]['base_url']
1018
1022
        if not base.endswith("/"):
1019
1023
            base += "/"
1020
1024
 
1021
1025
        page = base + item.streams[item.quality]["audio"]
1022
 
        lgg.info("Get m3u8 audio file: \n   %s" % page
 
1026
        lgg.info("Get m3u8 audio file: \n   %s" % page)
1023
1027
        try:
1024
1028
            data = m3u8.load(page)
1025
1029
            base = data.base_uri
1129
1133
        fname -- temporary file name
1130
1134
        """
1131
1135
        lgg.info('File %s downloaded' % fname)
1132
 
        self.is_loading = False
1133
1136
        item = self.ui.tv_basket.remove_item(0)
1134
1137
        self.ui.tv_basket_buttons.clear()
1135
1138
        self.ui.action_Cancel.setEnabled(False)
1137
1140
            self.handle_downloading_error()
1138
1141
            return
1139
1142
 
1140
 
        merged = self.merge_video_audio(fname)
 
1143
        self.merge_video_audio(fname)
 
1144
 
 
1145
    def on_merging_finished(self, merged, fname=None):
1141
1146
        try:
1142
1147
            os.rename(merged, self.video_loaded)
1143
1148
            lgg.info('File renamed: %s' % os.path.basename(self.video_loaded))
1145
1150
            lgg.warning("Can't rename %s" % self.video_loaded)
1146
1151
            lgg.warning("Reason: %s" % why)
1147
1152
 
1148
 
        self.check_file_size()
1149
 
        self.copy_summary(item, self.video_loaded)
1150
 
        self.copy_thumbnail(item, self.video_loaded)
 
1153
        if not fname is None:
 
1154
            try:
 
1155
                os.remove(fname)
 
1156
                os.remove(self.audio_target)
 
1157
            except Exception as why:
 
1158
                lgg.warning("Can't remove temp file: %s" % why)
 
1159
 
 
1160
        self.audio_target = False
 
1161
        #self.check_file_size()
 
1162
        self.copy_summary(self.current_item, self.video_loaded)
 
1163
        self.copy_thumbnail(self.current_item, self.video_loaded)
 
1164
        self.ui.tv_basket_buttons.set_merging_message(False)
1151
1165
        if self.ui.tv_basket.lst_movies:
1152
1166
            self.start_download()
1153
1167
 
1154
 
    def self.merge_video_audio(self, video)
 
1168
    def merge_video_audio(self, video):
1155
1169
        if not self.audio_target:
1156
 
            return video
 
1170
            self.on_merging_finished(video)
 
1171
            return
1157
1172
 
1158
 
        fname = self.core.get_target_path(self.core.cfg["videos_folder"])
1159
 
        cmd = ["ffmpeg", "-i", video, "-i", self.audio_target, "-c:v", 
1160
 
               "copy", "-c:a", "aac", fname]
1161
 
        r = subprocess.Popen(cmd, universal_newlines=True, 
1162
 
                             stdout=subprocess.PIPE, 
1163
 
                             stderr=subprocess.STDOUT).communicate()
1164
 
        return fname
 
1173
        self.ui.tv_basket_buttons.set_merging_message(True)
 
1174
        def merge():
 
1175
            outf = self.core.get_target_path(self.core.cfg["videos_folder"])
 
1176
            outf += ".mp4"
 
1177
            cmd = ["ffmpeg", "-i", video, "-i", self.audio_target, "-c:v", 
 
1178
                    "copy", "-c:a", "aac", outf]
 
1179
            r = subprocess.Popen(cmd, universal_newlines=True, 
 
1180
                                 stdout=subprocess.PIPE, 
 
1181
                                 stderr=subprocess.STDOUT).communicate()
 
1182
            self.is_loading = False
 
1183
            self.mergingFinished.emit(outf, video)
 
1184
        Thread(target=merge).start()
1165
1185
 
1166
1186
    def check_file_size(self):
1167
1187
        if self.loading_aborted: