def publishSubtitle(self, infohash, lang, pathToSrtSubtitle): channelid = bin2str(self.my_permid) base64infohash = bin2str(infohash) consinstent = self.channelcast_db.isItemInChannel(channelid, base64infohash) if not consinstent: msg = 'Infohash %s not found in my channel. Rejecting subtitle' % base64infohash if DEBUG: print >> sys.stderr, msg raise RichMetadataException(msg) try: filepath = self.subtitlesHandler.copyToSubtitlesFolder(pathToSrtSubtitle, self.my_permid, infohash, lang) except Exception as e: if DEBUG: print >> sys.stderr, 'Failed to read and copy subtitle to appropriate folder: %s' % str(e) metadataDTO = self.richMetadata_db.getMetadata(self.my_permid, infohash) if metadataDTO is None: metadataDTO = MetadataDTO(self.my_permid, infohash) else: metadataDTO.resetTimestamp() newSubtitle = SubtitleInfo(lang, filepath) if newSubtitle.subtitleExists(): newSubtitle.computeChecksum() else: msg = 'Inconsistency found. The subtitle was not published' if DEBUG: print >> sys.stderr, msg raise RichMetadataException(msg) metadataDTO.addSubtitle(newSubtitle) metadataDTO.sign(self.my_keypair) self.richMetadata_db.insertMetadata(metadataDTO)
def _createSubtitlesDict(bitmask, listOfChecksums): langList = _languagesUtil.maskToLangCodes(bitmask) if len(langList) != len(listOfChecksums): raise SerializationException('Unexpected num of checksums') subtitles = {} for i in range(0, len(langList)): sub = SubtitleInfo(langList[i]) sub.checksum = listOfChecksums[i] subtitles[langList[i]] = sub return subtitles
def _getSubtitleByKey(self, metadata_fk, lang): query = QUERIES['SELECT SUBS FK ONE'] res = self._db.fetchall(query, (metadata_fk, lang)) if len(res) == 0: return None if len(res) == 1: checksum = str2bin(res[0][3]) return SubtitleInfo(res[0][1], res[0][2], checksum) raise MetadataDBException('Metadata DB Constraint violeted!')
def _getAllSubtitlesByKey(self, metadataKey): query = QUERIES['SELECT SUBS FK ALL'] results = self._db.fetchall(query, (metadataKey, )) subsDict = {} for entry in results: subsDict[entry[1]] = SubtitleInfo(entry[1], entry[2], str2bin(entry[3])) return subsDict
def getAllSubtitles(self, channel, infohash): query = QUERIES['SELECT SUBS JOIN HASH ALL'] infohash = bin2str(infohash) channel = bin2str(channel) results = self._db.fetchall(query, (infohash, channel)) subsDict = {} for entry in results: subsDict[entry[1]] = SubtitleInfo(entry[1], entry[2], entry[3]) return subsDict
def getSubtitle(self, channel, infohash, lang): query = QUERIES['SELECT SUBS JOIN HASH ONE'] infohash = bin2str(infohash) channel = bin2str(channel) res = self._db.fetchall(query, (infohash, channel, lang)) if len(res) == 0: return None if len(res) == 1: checksum = str2bin(res[0][3]) return SubtitleInfo(res[0][1], res[0][2], checksum) raise MetadataDBException('Metadata DB Constraint violeted!')
def getLocalSubtitles(self, channel, infohash): query = QUERIES['SELECT SUBTITLES WITH PATH BY CHN INFO'] channel = bin2str(channel) infohash = bin2str(infohash) res = self._db.fetchall(query, (channel, infohash)) result = {} for entry in res: location = entry[0] language = entry[1] checksum = str2bin(entry[2]) subInfo = SubtitleInfo(language, location, checksum) result[language] = subInfo return result
def getAllLocalSubtitles(self): query = QUERIES['SELECT SUBTITLES WITH PATH'] res = self._db.fetchall(query) result = {} for entry in res: path = entry[1] lang = entry[2] checksum = str2bin(entry[3]) channel = str2bin(entry[4]) infohash = str2bin(entry[5]) s = SubtitleInfo(lang, path, checksum) if channel not in result: result[channel] = {} if infohash not in result[channel]: result[channel][infohash] = [] result[channel][infohash].append(s) return result