Exemplo n.º 1
0
def main():
    Settings.load_settings()
    image_host = Settings.get_preferred_host()

    assert len(sys.argv) > 1, 'Error, need input file'

    subprocess.run(CLEAR_FN, shell=True)

    print('Image host "{}" will be used for uploading\n'.format(
        image_host['name']))
    print('Gathering media info')
    rls = ReleaseInfo(os.path.abspath(sys.argv[1]))
    release_info = rls.get_complete_mediainfo()

    print('Generating screenshots')
    images = ScreenshotGenerator().generate_screenshots(rls)

    print('Uploading images to {}'.format(image_host['name']))
    gallery_name = Helper.get_gallery_name(sys.argv[1])
    uploader = ImageUploader(images, gallery_name, image_host)
    uploader.upload()
    formatted_urls = uploader.get_formatted_urls()

    if Settings.print_not_copy:
        subprocess.run(CLEAR_FN, shell=True)
        print(release_info + formatted_urls)
    else:
        pyperclip.copy(release_info + formatted_urls)
        print('\nMediainfo + image URLs have been copied to clipboard')
        time.sleep(5)
Exemplo n.º 2
0
def ajaxGetLatestTorrent():
	releaseInfo = ReleaseInfo()
	releaseInfo.Logger = MyGlobals.Logger
	JobCommon.GetPtpOrImdbId( releaseInfo, request.values.get( "PtpOrImdbLink" ) )

	torrentId = 0
	uploadedAgo = ""

	if not releaseInfo.IsZeroImdbId():
		Ptp.Login()

		movieOnPtpResult = None
		if releaseInfo.HasPtpId():
			movieOnPtpResult = Ptp.GetMoviePageOnPtp( releaseInfo.Logger, releaseInfo.GetPtpId() )
		else:
			movieOnPtpResult = Ptp.GetMoviePageOnPtpByImdbId( releaseInfo.Logger, releaseInfo.GetImdbId() )

		if movieOnPtpResult:
			torrent = movieOnPtpResult.GetLatestTorrent()
			if torrent:
				torrentId = torrent.TorrentId

				difference = datetime.utcnow() - torrent.GetUploadTimeAsDateTimeUtc()
				uploadedAgo = "(Latest torrent uploaded: " + TimeDifferenceToText( difference ).lower() + ")"

	return jsonify( Result = "OK", TorrentId = torrentId, UploadedAgo = uploadedAgo )
Exemplo n.º 3
0
def upload():
	if request.method == 'POST':
		releaseInfo = ReleaseInfo()
		releaseInfo.LastModificationTime = Database.MakeTimeStamp()
	
		# Announcement
		
		if UploadTorrentFile( releaseInfo, request ):
			pass
		elif UploadFile( releaseInfo, request ):
			pass
		elif UploadTorrentSiteLink( releaseInfo, request ):
			pass
		else:
			return "Select something to upload!"

		releaseInfo.ReleaseName = request.values[ "release_name" ]
		releaseInfo.SetStopBeforeUploading( request.values[ "post" ] == "Upload but stop before uploading" )

		JobCommon.FillReleaseInfoFromRequestData( releaseInfo, request )
		
		# TODO: todo multiline torrent site link field
		
		Database.DbSession.add( releaseInfo )
		Database.DbSession.commit()
		
		MyGlobals.PtpUploader.AddMessage( PtpUploaderMessageStartJob( releaseInfo.Id ) )

	# job parameter is needed because it uses the same template as edit job
	job = {}
	job[ "Subtitles" ] = []
	job[ "SkipDuplicateCheckingButton" ] = 0

	if Settings.ForceDirectorylessSingleFileTorrent:
		job[ "ForceDirectorylessSingleFileTorrent" ] = 1

	if Settings.OverrideScreenshots:
		job[ "OverrideScreenshots" ] = 1

	if Settings.PersonalRip:
		job[ "PersonalRip" ] = 1

	if Settings.SkipDuplicateChecking:
		job[ "SkipDuplicateCheckingButton" ] = sys.maxint

	job[ "ReleaseNotes" ] = Settings.ReleaseNotes

	return render_template( "upload.html", job = job )
Exemplo n.º 4
0
    def SaveReleaseDescripionFile(self, logger, releaseDescriptionFilePath, createScreens):
        releaseInfo = ReleaseInfo()
        releaseInfo.Logger = logger
        releaseInfo.ReleaseName = self.ReleaseName
        releaseInfo.SetReleaseUploadPath(self.TorrentDataPath)
        self.MarkAsDvdImageIfNeeded(releaseInfo)

        outputImageDirectory = self.WorkingDirectory
        releaseDescriptionFormatter = ReleaseDescriptionFormatter(
            releaseInfo, self.VideoFiles, self.AdditionalFiles, outputImageDirectory, createScreens
        )
        releaseDescription = releaseDescriptionFormatter.Format(includeReleaseName=True)

        releaseDescriptionFile = codecs.open(releaseDescriptionFilePath, encoding="utf-8", mode="w")
        releaseDescriptionFile.write(releaseDescription)
        releaseDescriptionFile.close()
Exemplo n.º 5
0
def ajaxGetLatestTorrent():
    releaseInfo = ReleaseInfo()
    releaseInfo.Logger = MyGlobals.Logger
    JobCommon.GetPtpOrImdbId(releaseInfo, request.values.get("PtpOrImdbLink"))

    torrentId = 0
    uploadedAgo = ""

    if not releaseInfo.IsZeroImdbId():
        Ptp.Login()

        movieOnPtpResult = None
        if releaseInfo.HasPtpId():
            movieOnPtpResult = Ptp.GetMoviePageOnPtp(releaseInfo.Logger,
                                                     releaseInfo.GetPtpId())
        else:
            movieOnPtpResult = Ptp.GetMoviePageOnPtpByImdbId(
                releaseInfo.Logger, releaseInfo.GetImdbId())

        if movieOnPtpResult:
            torrent = movieOnPtpResult.GetLatestTorrent()
            if torrent:
                torrentId = torrent.TorrentId

                difference = datetime.utcnow(
                ) - torrent.GetUploadTimeAsDateTimeUtc()
                uploadedAgo = "(Latest torrent uploaded: " + TimeDifferenceToText(
                    difference).lower() + ")"

    return jsonify(Result="OK", TorrentId=torrentId, UploadedAgo=uploadedAgo)
Exemplo n.º 6
0
	def __ProcessAnnouncementFileInternal( announcementFilePath, announcementFilename ):
		matches = re.match( r"\[source=(.+?)\]\[id=(.+?)\]\[title=(.+)\]", announcementFilename )			
		if not matches:
			MyGlobals.Logger.info( "Invalid announcement name format: '%s'." % announcementFilename )
			return None
			
		announcementSourceName = matches.group( 1 ).lower()
		announcementId = matches.group( 2 )
		releaseName = matches.group( 3 ).strip()
			
		announcementSource = MyGlobals.SourceFactory.GetSource( announcementSourceName )
		if announcementSource is None:
			MyGlobals.Logger.error( "Unknown announcement source: '%s'." % announcementSourceName )
			return None

		releaseInfo = ReleaseInfo()
		releaseInfo.LastModificationTime = Database.MakeTimeStamp()
		releaseInfo.ReleaseName = releaseName
		releaseInfo.AnnouncementSource = announcementSource
		releaseInfo.AnnouncementSourceName = announcementSource.Name

		if announcementSourceName == "file":
			if not AnnouncementWatcher.__HandleFileSource( releaseInfo, announcementFilePath ):
				MyGlobals.Logger.error( "Invalid announcement file: '%s'." % announcementFilePath )
				return None
		elif announcementId == "0":
			# For announcements made by autodl-irssi the torrent ID is in the file.
			announcementId = AnnouncementWatcher.__TryGettingIdFromContents( announcementFilePath, announcementSource )
			if len( announcementId ) <= 0:
				# Retry after three seconds of waiting.
				# Because we use a directory watcher we might have tried to read the file too early.
				time.sleep( 3 )
				announcementId = AnnouncementWatcher.__TryGettingIdFromContents( announcementFilePath, announcementSource )
				if len( announcementId ) <= 0:
					MyGlobals.Logger.error( "Invalid torrent ID in announcement: '%s'." % announcementSourceName )
					return None

		releaseInfo.AnnouncementId = announcementId
		AnnouncementWatcher.__SetScheduling( releaseInfo )

		Database.DbSession.add( releaseInfo )
		Database.DbSession.commit()

		# This must be after the commit because GetLogFilePath uses the Id.
		releaseInfo.Logger = Logger( releaseInfo.GetLogFilePath() )

		return releaseInfo
Exemplo n.º 7
0
    def SaveReleaseDescripionFile(self, logger, releaseDescriptionFilePath,
                                  createScreens):
        releaseInfo = ReleaseInfo()
        releaseInfo.Logger = logger
        releaseInfo.ReleaseName = self.ReleaseName
        releaseInfo.SetReleaseUploadPath(self.TorrentDataPath)
        self.MarkAsDvdImageIfNeeded(releaseInfo)

        outputImageDirectory = self.WorkingDirectory
        releaseDescriptionFormatter = ReleaseDescriptionFormatter(
            releaseInfo, self.VideoFiles, self.AdditionalFiles,
            outputImageDirectory, createScreens)
        releaseDescription = releaseDescriptionFormatter.Format(
            includeReleaseName=True)

        releaseDescriptionFile = codecs.open(releaseDescriptionFilePath,
                                             encoding="utf-8",
                                             mode="w")
        releaseDescriptionFile.write(releaseDescription)
        releaseDescriptionFile.close()
Exemplo n.º 8
0
 def IsReleaseExists(searchResult, expectedResult, searchResultItem):
     from ReleaseInfo import ReleaseInfo
     releaseInfo = ReleaseInfo()
     releaseInfo.Codec = searchResultItem.Codec
     releaseInfo.Container = searchResultItem.Container
     releaseInfo.Source = searchResultItem.Source
     releaseInfo.ResolutionType = searchResultItem.Resolution
     releaseInfo.RemasterTitle = searchResultItem.RemasterTitle
     releaseInfo.Size = searchResultItem.Size
     result = searchResult.IsReleaseExists(releaseInfo)
     if result is None:
         if expectedResult:
             print "Unexpected result"
     else:
         if not expectedResult:
             print "Unexpected result"
Exemplo n.º 9
0
def ajaxExternalCreateJob():
	if ( "Password" not in request.values ) or request.values[ "Password" ] != Settings.GreasemonkeyTorrentSenderPassword:
		return MakeExternalCreateJobErrorResponse( "Invalid Greasemonkey Send to Script password!" )

	file = request.files.get( "Torrent" )
	# file is not None even there is no file specified, but checking file as a boolean is OK. (As shown in the Flask example.) 
	if not file:
		return MakeExternalCreateJobErrorResponse( "Got no torrent file!" )

	filename = "external job." + str( uuid.uuid1() ) + ".torrent"
	sourceTorrentFilePath = os.path.join( Settings.GetTemporaryPath(), filename )
	file.save( sourceTorrentFilePath )

	releaseName, torrentContentSize = GetSuggestedReleaseNameAndSizeFromTorrentFile( sourceTorrentFilePath )

	releaseInfo = ReleaseInfo()
	releaseInfo.LastModificationTime = Database.MakeTimeStamp()
	releaseInfo.JobRunningState = JobRunningState.Paused
	releaseInfo.JobStartMode = JobStartMode.Manual
	releaseInfo.SourceTorrentFilePath = sourceTorrentFilePath
	releaseInfo.AnnouncementSourceName = "torrent"
	releaseInfo.ReleaseName = releaseName
	releaseInfo.Size = torrentContentSize
	releaseInfo.SetOverrideScreenshots( Settings.OverrideScreenshots )

	imdbId = ""
	if "ImdbUrl" in request.values:
		imdbId = NfoParser.GetImdbId( request.values[ "ImdbUrl" ] )
		if len( imdbId ) > 0:
			releaseInfo.ImdbId = imdbId

	if "PageContent" in request.values:
		DoParsePageForExternalCreateJob( releaseInfo, request.values[ "SourceUrl" ], request.values[ "PageContent" ] )

	Database.DbSession.add( releaseInfo )
	Database.DbSession.commit()

	# Just add the job, don't start it.

	response = make_response( jsonify( result = "OK", jobId = releaseInfo.Id ) )
	response.headers[ 'Access-Control-Allow-Origin' ] = '*' # Enable cross-origin resource sharing.
	return response
Exemplo n.º 10
0
def upload():
    if request.method == "POST":
        releaseInfo = ReleaseInfo()
        releaseInfo.LastModificationTime = Database.MakeTimeStamp()

        # Announcement

        if UploadTorrentFile(releaseInfo, request):
            pass
        elif UploadFile(releaseInfo, request):
            pass
        elif UploadTorrentSiteLink(releaseInfo, request):
            pass
        else:
            return "Select something to upload!"

        releaseInfo.ReleaseName = request.values["release_name"]
        releaseInfo.SetStopBeforeUploading(request.values["post"] == "Upload but stop before uploading")

        JobCommon.FillReleaseInfoFromRequestData(releaseInfo, request)

        # TODO: todo multiline torrent site link field

        Database.DbSession.add(releaseInfo)
        Database.DbSession.commit()

        MyGlobals.PtpUploader.AddMessage(PtpUploaderMessageStartJob(releaseInfo.Id))

        # job parameter is needed because it uses the same template as edit job
    job = {}
    job["Subtitles"] = []
    job["SkipDuplicateCheckingButton"] = 0

    if Settings.OverrideScreenshots:
        job["OverrideScreenshots"] = 1

    return render_template("upload.html", job=job)
Exemplo n.º 11
0
	def IsReleaseExists( searchResult, expectedResult, searchResultItem ):
		from ReleaseInfo import ReleaseInfo
		releaseInfo = ReleaseInfo()
		releaseInfo.Codec = searchResultItem.Codec
		releaseInfo.Container = searchResultItem.Container
		releaseInfo.Source = searchResultItem.Source
		releaseInfo.ResolutionType = searchResultItem.Resolution
		releaseInfo.RemasterTitle = searchResultItem.RemasterTitle
		releaseInfo.Size = searchResultItem.Size
		result = searchResult.IsReleaseExists( releaseInfo )
		if result is None:
			if expectedResult:
				print "Unexpected result"
		else:
			if not expectedResult:
				print "Unexpected result"
Exemplo n.º 12
0
def movieAvailabilityCheck():
    if request.method == 'POST':
        Ptp.Login()

        releaseInfo = ReleaseInfo()
        anyFormat = False

        format = request.values["format"]
        if format == "Any":
            anyFormat = True
        elif format == "SD XviD":
            releaseInfo.Codec = "XviD"
            releaseInfo.Container = "AVI"
            releaseInfo.ResolutionType = "Other"
            releaseInfo.Source = "DVD"
        elif format == "SD x264":
            releaseInfo.Codec = "x264"
            releaseInfo.Container = "MKV"
            releaseInfo.ResolutionType = "Other"
            releaseInfo.Source = "DVD"
        elif format == "720p":
            releaseInfo.Codec = "x264"
            releaseInfo.Container = "MKV"
            releaseInfo.ResolutionType = "720p"
            releaseInfo.Source = "Blu-ray"
        elif format == "1080p":
            releaseInfo.Codec = "x264"
            releaseInfo.Container = "MKV"
            releaseInfo.ResolutionType = "1080p"
            releaseInfo.Source = "Blu-ray"
        else:
            return "Unknown format!"

        imdbIds = request.values["imdb"]

        resultHtml = ""

        matches = re.findall(r"imdb.com/title/tt(\d+)", imdbIds)
        for match in matches:
            ptpId = GetPtpIdIfExists(match, releaseInfo, anyFormat)

            if ptpId is None:
                resultHtml += """<a href="http://www.imdb.com/title/tt%s">%s</a> - NOT ON PTP</br>""" % (
                    match, match)
            else:
                resultHtml += """<a href="http://www.imdb.com/title/tt%s">%s</a> - <a href="https://tls.passthepopcorn.me/torrents.php?id=%s">PTP</a></br>""" % (
                    match, match, ptpId)

        return resultHtml

    return render_template("movieAvailabilityCheck.html")
Exemplo n.º 13
0
def ajaxExternalCreateJob():
    if ("Password" not in request.values) or request.values[
            "Password"] != Settings.GreasemonkeyTorrentSenderPassword:
        return MakeExternalCreateJobErrorResponse(
            "Invalid Greasemonkey Send to Script password!")

    file = request.files.get("Torrent")
    # file is not None even there is no file specified, but checking file as a boolean is OK. (As shown in the Flask example.)
    if not file:
        return MakeExternalCreateJobErrorResponse("Got no torrent file!")

    filename = "external job." + str(uuid.uuid1()) + ".torrent"
    sourceTorrentFilePath = os.path.join(Settings.GetTemporaryPath(), filename)
    file.save(sourceTorrentFilePath)

    releaseName, torrentContentSize = GetSuggestedReleaseNameAndSizeFromTorrentFile(
        sourceTorrentFilePath)

    releaseInfo = ReleaseInfo()
    releaseInfo.LastModificationTime = Database.MakeTimeStamp()
    releaseInfo.JobRunningState = JobRunningState.Paused
    releaseInfo.JobStartMode = JobStartMode.Manual
    releaseInfo.SourceTorrentFilePath = sourceTorrentFilePath
    releaseInfo.AnnouncementSourceName = "torrent"
    releaseInfo.ReleaseName = releaseName
    releaseInfo.Size = torrentContentSize
    releaseInfo.SetOverrideScreenshots(Settings.OverrideScreenshots)
    releaseInfo.ReleaseNotes = Settings.ReleaseNotes

    if Settings.ForceDirectorylessSingleFileTorrent:
        releaseInfo.SetForceDirectorylessSingleFileTorrent()

    if Settings.PersonalRip:
        releaseInfo.SetPersonalRip()

    if Settings.SkipDuplicateChecking:
        releaseInfo.DuplicateCheckCanIgnore = sys.maxint

    imdbId = ""
    if "ImdbUrl" in request.values:
        imdbId = NfoParser.GetImdbId(request.values["ImdbUrl"])
        if len(imdbId) > 0:
            releaseInfo.ImdbId = imdbId

    if "PageContent" in request.values:
        DoParsePageForExternalCreateJob(releaseInfo,
                                        request.values["SourceUrl"],
                                        request.values["PageContent"])

    Database.DbSession.add(releaseInfo)
    Database.DbSession.commit()

    # Just add the job, don't start it.

    response = make_response(jsonify(result="OK", jobId=releaseInfo.Id))
    response.headers[
        'Access-Control-Allow-Origin'] = '*'  # Enable cross-origin resource sharing.
    return response