def setFeedUser(self,feed,user):
		key = 'feed_users_' + feed.addonID
		users = ShareSocial.getSetting(key,[])
		for u in users:
			if user.get('id') == self.decodeUser(u).get('id'): return
		users.append(self.encodeUser(user))
		ShareSocial.setSetting(key,users)
	def removeUser(self):
		feed = True
		while feed:
			menu = ShareSocial.ChoiceMenu('Remove Users: Choose Feed')
			for f in self.feeds:
				show = ''
				users = ShareSocial.getSetting('feed_users_' + f.addonID,[])
				if not users: continue
				
				sh = []
				us = []
				for u in users:
					user = self.decodeUser(u)
					sh.append(user.get('name','ERROR'))
					us.append(user)
				show = ' (%s)' % ', '.join(sh)
				menu.addItem((f,us),f.name + show)
			
			if not menu.items:
				xbmcgui.Dialog().ok('No Users','No users to remove :)')
				return
				
			feed_users = menu.getResult()
			if not feed_users: return
			feed, users = feed_users
			submenu = ShareSocial.ChoiceMenu('Remove Users: Choose User')
			for u in users:
				submenu.addItem(u,u.get('name','ERROR'))
			user = submenu.getResult()
			if not user: return
			self.removeFeedUser(feed, user)
	def fillFeedList(self,results=None):
		#TODO: clean this up so I don't need this sorta crap
		passed_results = results and True or False
		if not self.feeds: return
		items = {}
		ct = 1
		if not results:
			blocked = ShareSocial.getSetting('blocked_feeds',[])
			pool = ArrayPool()
			for f in self.feeds:
				if f.addonID in blocked: continue
				pcall = f.getProvideCall()
				pool.addJob(f.provideWithCall,f,'feed',pcall,self.getFeedUserIDs(f))
		fct = len(self.feeds)
		afterpct = int((fct * 100.0) / (fct + 1))
		left = float(100 - afterpct)
		dialog = xbmcgui.DialogProgress()
		dialog.create('Getting Feeds')
		now = time.daylight and (time.time() + time.altzone + 3600) or int(time.mktime(time.gmtime()))
		try:
			if not results:
				results = pool.getResult(dialog)
				self.provisions = results
			c=0
			for result in results:
				if not result.target: continue
				if not result or result._error:
					if result:
						LOG('No result for feed: %s - %s' % (result.target.name,result._error))
					else:
						LOG('No result for feed')
					c+=1
					continue
				lastpct = int((c * left) / fct)
				dialog.update(afterpct + lastpct,result.target.name,'Preparing feed...')
				feedIcon = result.target.getIcon()
				#print '%s : %s' % (result.target.name, feedIcon)
				c+=1
				for r in result.items:
					item = FeedListItem(r)
					item.setProperty('feedicon',feedIcon)
					item.setProperty('ago',durationToShortText(now - item.timestamp) + ' ago')
					items[item.timestamp + (1.0/ct)] = item #add decimal to make unique
					ct+=1
			
			keys = items.keys()
			keys.sort(reverse=True)
			self.feedList.reset()
			for k in keys:
				#print "%s - %s" % (k,durationToShortText(now - items[k].timestamp))
				self.feedList.addItem(items[k])
			if not keys:
				fi = FeedListItem(None)
				fi.setLabel('[CR]NO FEEDS')
				self.feedList.addItem(fi)
			elif not passed_results:
				self.save()
		finally:
			dialog.close()
	def removeFeedUser(self,feed,user):
		key = 'feed_users_' + feed.addonID
		users = ShareSocial.getSetting(key,[])
		i = 0
		for u in users:
			if self.decodeUser(u).get('id') == user.get('id'):
				users.pop(i)
				ShareSocial.setSetting(key,users)
				return
			i+=1
	def showHideFeedMenu(self):
		feed = True
		while feed:
			menu = ShareSocial.ChoiceMenu('Toggle Visibility')
			feedlist = ShareSocial.getSetting('blocked_feeds',[])
			for f in self.feeds:
				blocked = ''
				if f.addonID in feedlist: blocked = ' [HIDDEN]'
				menu.addItem(f, f.name + blocked, f.iconPath)
			feed = menu.getResult()
			if not feed: return
			if feed.addonID in feedlist:
				self.showFeed(feed)
			else:
				self.hideFeed(feed)
	def setUser(self):
		feed = True
		while feed:
			menu = ShareSocial.ChoiceMenu('Add Users: Choose Feed')
			for f in self.feeds:
				show = ''
				users = ShareSocial.getSetting('feed_users_' + f.addonID,[])
				if users:
					sh = []
					for u in users:
						sh.append(self.decodeUser(u).get('name','ERROR'))
					show = ' (%s)' % ', '.join(sh)
				menu.addItem(f,f.name + show)
			feed = menu.getResult()
			if not feed: return
			submenu = ShareSocial.ChoiceMenu('Add Users: Choose User')
			for u in feed.functions().getUsers():
				submenu.addItem(u,u.get('name','ERROR'))
			user = submenu.getResult()
			if not user: return
			self.setFeedUser(feed, user)
	def showFeed(self,feed):
		feedlist = ShareSocial.getSetting('blocked_feeds',[])
		if feed.addonID in feedlist: feedlist.pop(feedlist.index(feed.addonID))
		ShareSocial.setSetting('blocked_feeds',feedlist)
	def hideFeed(self,feed):
		feedlist = ShareSocial.getSetting('blocked_feeds',[])
		if feed.addonID in feedlist: return
		feedlist.append(feed.addonID)
		ShareSocial.setSetting('blocked_feeds',feedlist)
	def getFeedUserIDs(self,feed):
		users = ShareSocial.getSetting('feed_users_' + feed.addonID,[])
		IDs = []
		for u in users:
			IDs.append(self.decodeUser(u).get('id'))
		return IDs