예제 #1
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
예제 #2
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
예제 #3
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