Exemplo n.º 1
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