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