Example #1
0
	def processReleases(self, categorize, postproc, groupName):
		mdb = db.DB()
		console = consoletools.Consoletools()
		n = '\n'
		groupID = ''
		if groupName:
			groupInfo = groups.getByName(groupName)
			groupID = groupInfo['ID']

		self.processReleases = time.time()
		print 'Starting release update process %s' % strftime("%Y-%m-%d %H:%M:%S", gmtime())
		if not os.path.isdir(page.site().nzbpath):
			print 'Bad or missing nzb directory - %s' % page.site().nzbpath
			return

		self.processReleasesStage1(groupID)

		self.processReleasesStage2(groupID)

		self.processReleasesStage3(groupID)

		releasesAdded = self.processReleasesStage4_loop(groupID)

		self.processReleasesStage4dot5(groupID)

		self.processReleasesStage5_loop(groupID)

		self.processReleasesStage6(categorize, postproc, groupID)

		deletedCount = self.processReleasesStage7(groupID)

		# print amount of added releases and time it took

		timeUpdate = console.convertTime(int(time.time() - self.processReleases))
		where = ' WHERE groupID = %s' % groupID if groupID else ''

		cremain = mdb.queryOneRow("select count(ID) as ID from collections "+where)
		print 'Completed adding %d releases in %s. %d collections waiting to be created (still incomplete or in queue for creation.' % (releasesAdded, timeUpdate, cremain['ID'])
		return releasesAdded
Example #2
0
	def processReleasesStage7(self, groupID):
		mdb = db.DB()
		cat = category.Category()
		console = consoletools.Consoletools()
		n = self.n
		remcount = 0
		passcount = 0
		dupecount = 0
		relsizecount = 0
		completioncount = 0
		disabledcount = 0

		where = ' AND collections.groupID = %s' % groupID if groupID else ''

		# delete old releases and finished collections

		print n+'Stage 7 -> Delete old releases, finished collections and passworded releases.'
		stage7 = time.time()

		# old collections that were missed somehow
		mdb.queryDirect("DELETE collections, binaries, parts \
						FROM collections LEFT JOIN binaries ON collections.ID = binaries.collectionID LEFT JOIN parts on binaries.ID = parts.binaryID \
						WHERE (collections.filecheck = 5 OR (collections.dateadded < (now() - interval 72 hour))) "+where)
		reccount = mdb.getAffectedRows()

		where = ' AND groupID = %s' % groupID if not groupID else ''
		# releases past retention
		if page.site().releaseretentiondays != 0:
			result = mdb.query("SELECT ID, guid FROM releases WHERE postdate < now() - interval %s day " % page.site().releaseretentiondays)
			for rowrel in result:
				self.fastDelete(rowrel['ID'], rowrel['guid'], self.site)
				remcount += 1

		# passworded releases
		if page.site().deletepasswordedrelease == 1:
			result = mdb.query("SELECT ID, guid FROM releases WHERE passwordstatus > 0")
			for rowrel in result:
				self.fastDelete(rowrel['ID'], rowrel['guid'], self.site)
				passcount += 1

		# crossposted releases
		resrel = mdb.query("SELECT ID, guid FROM releases WHERE adddate > (now() - interval %s hour) GROUP BY name HAVING count(name) > 1" % self.crosspostt)
		for rowrel in resrel:
			self.fastDelete(rowrel['ID'], rowrel['guid'], self.site)
			dupecount += 1

		# releases below completion %
		if self.completion > 0:
			resrel = mdb.query("SELECT ID, guid FROM releases WHERE completion < %s and completion > 0" % self.completion)
			for rowrel in resrel:
				self.fastDelet(rowrel['ID'], rowrel['guid'], self.site)
				completioncount += 1

		# disabled categories
		catlist = cat.getDisabledIDs()
		if catlist:
			for dicks in catlist:
				rels = mdb.query("select ID, guid from releases where categoryID = %d", (dicks['ID'],))
				for rel in rels:
					disabledcount += 1
					self.fastDelete(rel['ID'], rel['guid'], self.site)

		print 'Removed releses: %d past rentention, %d passworded, %d crossposted, %d from disabled categories.' % (remcount, passcount, dupecount, disabledcount)
		if self.completion > 0:
			print 'Removed %d under %d%% completion. Removed %d parts/binaries/collection rows.' % (int(completioncount), int(self.completion), int(reccount))
		else:
			print 'Removed %d parts/binaries/collection rows.' % (reccount)

		print console.convertTime(int(time.time() - stage7))
Example #3
0
	def processReleasesStage5(self, groupID):
		mdb = db.DB()
 		nzbs = nzb.NZB()
		c = consoletools.Consoletools()
		n = self.n
		nzbcount = 0
		where = ' AND groupID = %s' % groupID if groupID else ''

		# create nzb.
		print 'Stage 5 -> Create the NZB, mark collections as ready for deletion.'
		stage5 = time.time()

		start_nzbcount = nzbcount
		resrel = mdb.queryDirect("SELECT ID, guid, name, categoryID FROM releases WHERE nzbstatus = 0 "+where+" LIMIT "+self.stage5limit)
		if resrel:
			for rowrel in resrel:
				if nzb.writeNZBforReleaseId(rowrel['ID'], rowrel['guid'], rowrel['name'], rowrel['categoryID'], nzb.getNZBPath(rowrel['guid'], page.site().nzbpath, True, page.site().nzbsplitlevel)):
					mdb.queryDirect("UPDATE releases SET nzbstatus = 1 WHERE ID = %s", (rowrel['ID'],))
					mdb.queryDirect("UPDATE collections SET filecheck = 5 WHERE releaseID = %s", (rowrel['ID'],))
					nzbcount += 1
					c.overWrite('Creating NZBs:'+c.percentString(nzbcount,len(resrel)))

		timing = c.convertTime(int(time.time() - stage5))
		print n+'%d NZBs created in %s.%s' % (nzbcount, timing, n)
		return nzbcount