예제 #1
0
def myheart(db):
    """
		列出全部含有心的收藏,同时可以进行编辑了.
	"""

    def buildtagurl(cid, tag):
        url = "/my/"
        v = []
        if cid:
            v.append("cid=%s" % cid)
        if tag:
            v.append("tag=%s" % urllib.quote(tag))
        if v:
            return url + "?" + "&".join(v)
        return url

    data = []
    alltags = set()
    for urlid, cid, url, title, tags, notes, pt, thisarchive, isheart in getUrls(db):
        for x in tags:
            alltags.add('"%s"' % x.replace('"', '\\"'))

        if isheart != 1:
            continue

        thistags = []
        for t in tags:
            thistags.append((t, buildtagurl(0, t)))  # 全局的Tag

        data.append((urlid, url, title, cid, tags, notes, pt, thistags, isheart, thisarchive))

    allcats = dict([(cid, title) for cid, title in getCategory(db)])
    ret = template("myheart", allcategorys=allcats, bookmarks=data, tags=",".join(list(alltags)), count=len(data))
    return compressit(ret)
예제 #2
0
def export(db):
    """
		输出书签下载
	"""
    #--导出数据--
    cats = {}
    db.execute('SELECT ID,TITLE FROM CATEGORY')
    for cid, title in db.getall():
        cats[int(cid)] = html_escape(title)

    db.execute('SELECT CATEGORY_ID,URL,TITLE,1304560792 FROM URLS')
    data = {}  #
    dt = {}
    for cid, url, title, adddate in db.getall():
        cid = int(cid)
        if cid in data:
            data[cid].append(
                (html_escape(url), html_escape(title), int(adddate)))
        else:
            data[cid] = [(html_escape(url), html_escape(title), int(adddate))]
        if cid in dt: dt[cid] = min(dt[cid], int(adddate))
        else: dt[cid] = int(adddate)
    #开始合并最终结果
    #(categoryname,adddate,[(url,title,adddate)])
    content = []
    for cid in cats:
        if cid in data:
            content.append((cats[cid], dt[cid], data[cid]))

    htmlcode = exportBookmark(content)
    response['Content-Type'] = 'text/html'
    response['Content-Disposition'] = 'attachment; filename="bookmarks.html"'
    return compressit(htmlcode)
예제 #3
0
def homepage(db):
    db.execute('SELECT COUNT(0) FROM URLS')
    urlcount, = db.getone()
    if int(urlcount) > 0:
        redirect('/my/', 302)
    else:
        return compressit(template("welcome"))
예제 #4
0
def njs(db):
	"""
		新的JS模版.
		未登陆的返回一个错误的Token好了。
		这样用户选择的时候会出现需要登陆的提示。
		模版:
			{{tags}},{{categorys}}
		输入:
			url,title
	"""
	existed = False
	lasttime = ''
	tips = ''
	url = request.GET.get('url','') #可以用来进行判断预分配的,暂时还没用上
	if url:
		cleanurl = normaliseurl(url)
		shortid = getshorturlid(url)
		db.execute('SELECT URL,TIE_TIME FROM URLS WHERE SHORT_URL_ID=%s',(shortid))
		for url,tietime in db.getall(): #怕不同URL得到相同的SHORT_URL_ID
			u = normaliseurl(url)
			if u == cleanurl:
				existed = True
				lasttime = tietime
				break
	cats = []
	for cid,title in getCategory(db):
		cats.append('<option value="%s">%s</option>' % (cid,html_escape(title)))
	#@todo: 尝试去获取最可能的Categorys和Tags.
	ret = template('jsp',tags="",categorys=''.join(cats),httpdomain=CFG.domain,existed=existed,lasttime=lasttime,tips=tips)
	response['Content-Type'] = 'application/javascript'
	return compressit(ret)
예제 #5
0
def export(db):
	"""
		输出书签下载
	"""
	#--导出数据--
	cats = {}
	db.execute('SELECT ID,TITLE FROM CATEGORY')
	for cid,title in db.getall():
		cats[int(cid)]=html_escape(title)

	db.execute('SELECT CATEGORY_ID,URL,TITLE,1304560792 FROM URLS')
	data = {} #
	dt = {}
	for cid,url,title,adddate in db.getall():
		cid = int(cid)
		if cid in data:
			data[cid].append((html_escape(url),html_escape(title),int(adddate)))
		else:
			data[cid]= [(html_escape(url),html_escape(title),int(adddate))]
		if cid in dt: dt[cid] = min(dt[cid],int(adddate))
		else: dt[cid] = int(adddate)
	#开始合并最终结果
	#(categoryname,adddate,[(url,title,adddate)])
	content = []
	for cid in cats:
		if cid in data:
			content.append( (cats[cid],dt[cid],data[cid]) )

	htmlcode = exportBookmark(content)
	response['Content-Type'] = 'text/html'
	response['Content-Disposition'] = 'attachment; filename="bookmarks.html"'
	return compressit(htmlcode)
예제 #6
0
def homepage(db):
	db.execute('SELECT COUNT(0) FROM URLS')
	urlcount, = db.getone()
	if int(urlcount) > 0:
		redirect('/my/',302)
	else:
		return compressit(template("welcome"))
예제 #7
0
def vss(bid,name):
	"""
		显示某个收藏的快照
	"""
	if not name:
		name = 'index.html'

	dataname = os.path.join(ARCHIVED_DIR,'%s.dat' % bid)
	v = readone(dataname,name)
	if not v:
		abort(404,"NO Found")

	response['Content-Type'] = v[0]
	if v[0].find('html') >=0 or v[0].find('css') >=0:
		return compressit(v[1])
	return v[1]
예제 #8
0
def vss(bid, name):
    """
		显示某个收藏的快照
	"""
    if not name:
        name = 'index.html'

    dataname = os.path.join(ARCHIVED_DIR, '%s.dat' % bid)
    v = readone(dataname, name)
    if not v:
        abort(404, "NO Found")

    response['Content-Type'] = v[0]
    if v[0].find('html') >= 0 or v[0].find('css') >= 0:
        return compressit(v[1])
    return v[1]
예제 #9
0
def njs(db):
    """
		新的JS模版.
		未登陆的返回一个错误的Token好了。
		这样用户选择的时候会出现需要登陆的提示。
		模版:
			{{tags}},{{categorys}}
		输入:
			url,title
	"""
    existed = False
    lasttime = ''
    tips = ''
    url = request.GET.get('url', '')  #可以用来进行判断预分配的,暂时还没用上
    if url:
        cleanurl = normaliseurl(url)
        shortid = getshorturlid(url)
        db.execute('SELECT URL,TIE_TIME FROM URLS WHERE SHORT_URL_ID=%s',
                   (shortid))
        for url, tietime in db.getall():  #怕不同URL得到相同的SHORT_URL_ID
            u = normaliseurl(url)
            if u == cleanurl:
                existed = True
                lasttime = tietime
                break
    cats = []
    for cid, title in getCategory(db):
        cats.append('<option value="%s">%s</option>' %
                    (cid, html_escape(title)))
    #@todo: 尝试去获取最可能的Categorys和Tags.
    ret = template('jsp',
                   tags="",
                   categorys=''.join(cats),
                   httpdomain=CFG.domain,
                   existed=existed,
                   lasttime=lasttime,
                   tips=tips)
    response['Content-Type'] = 'application/javascript'
    return compressit(ret)
예제 #10
0
def myheart(db):
    """
		列出全部含有心的收藏,同时可以进行编辑了.
	"""
    def buildtagurl(cid, tag):
        url = '/my/'
        v = []
        if cid:
            v.append('cid=%s' % cid)
        if tag:
            v.append('tag=%s' % urllib.quote(tag))
        if v:
            return url + '?' + '&'.join(v)
        return url

    data = []
    alltags = set()
    for urlid, cid, url, title, tags, notes, pt, thisarchive, isheart in getUrls(
            db):
        for x in tags:
            alltags.add('"%s"' % x.replace('"', '\\"'))

        if isheart != 1: continue

        thistags = []
        for t in tags:
            thistags.append((t, buildtagurl(0, t)))  #全局的Tag

        data.append((urlid, url, title, cid, tags, notes, pt, thistags,
                     isheart, thisarchive))

    allcats = dict([(cid, title) for cid, title in getCategory(db)])
    ret = template('myheart',
                   allcategorys=allcats,
                   bookmarks=data,
                   tags=','.join(list(alltags)),
                   count=len(data))
    return compressit(ret)
예제 #11
0
def tools():
    return compressit(template("tools", httpdomain=CFG.domain))
예제 #12
0
def my(db):
	def getparams():
		#返回catid(str),pageno
		cid = int(request.GET.get('cid','0'))
		pn = int(request.GET.get('pn','1'))
		tag = request.GET.get('tag','').lower()
		return cid,pn,tag
	def buildurl(cid,tag,pn):
		url = '/my/'
		v = []
		if cid:
			v.append('cid=%s' % cid)
		if tag:
			v.append('tag=%s' % tag)
		if pn != 0:
			v.append('pn=%s' % pn)
		if v:
			return url+'?'+'&'.join(v)
		return url
	def buildtagurl(cid,tag):
		url = '/my/'
		v = []
		if cid:
			v.append('cid=%s' % cid)
		if tag:
			v.append('tag=%s' % urllib.quote(tag))
		if v:
			return url+'?'+'&'.join(v)
		return url

	updatemsg = versionupdated(db)
	curcid,curpn,curtag = getparams() #当前的catid,当前的curpn,当前的书签.
	#---列出全部的类目信息以及书签---
	data = []
	cats = defaultdict(int) #已经被使用的Category{id:count}
	alltags = set()

	for urlid,cid,url,title,tags,notes,pt,thisarchive,isheart in getUrls(db):
		cats[cid] += 1

		for x in tags:
			alltags.add('"%s"' % x.replace('"','\\"'))

		#选择了类目的
		if curcid and curcid != cid: continue
		#选择了Tag
		if curtag and (curtag not in tags): continue

		thistags = []
		for t in tags:
			thistags.append( (t,buildtagurl(0,t)) ) #全局的Tag

		data.append( (urlid,url,title,cid,tags,notes,pt,thistags,isheart,thisarchive) )

	if not data: #没有数据
		if curcid or curtag: #可能是这个目录/Tag下没了(最后一条)
			redirect("/my/")

	categorys = [] #[ [(url,title,count)] ]  #全部有数据的Category的信息.
	allcats   = {} #全部的Category信息.
	emptycats = {} #空的Category信息

	if cats: #用户全部的有效目录信息.
		defaultcatid = 0
		for cid,title in getCategory(db):
			defaultcatid = cid

			allcats[cid]=title
			if cid not in cats: #有收藏的
				emptycats[cid]=title

		#这里按照真正的categoryid排下,免得出现不断位置排列的问题.
		v = [(count,catid) for catid,count in cats.iteritems()]
		v.sort(reverse=True)
		tmp = []
		for count,catid in v:
			if catid not in allcats: continue #有这个发生,就说明用户删除了含有收藏的收藏夹.
			tmp.append( (buildurl(catid,'',0),allcats[catid],count) )
			if len(tmp) == 6:
				categorys.append(tmp)
				tmp = []
		if tmp:
			cnt = 6 - len(tmp)
			for x in xrange(cnt):
				tmp.append( ('',0,0) )
			categorys.append(tmp)
		#--禁止删除默认收藏夹--
		if defaultcatid in emptycats:
			del emptycats[defaultcatid]
	#计算pagecount	
	pagecount = 1+(len(data)-1)/RECORD_PER_PAGE
	prevurl = buildurl(curcid,curtag,curpn-1)
	nexturl = buildurl(curcid,curtag,curpn+1)

	pages = (curpn,pagecount,prevurl,nexturl)

	s = RECORD_PER_PAGE*(curpn-1)
	bookmarks = data[s:s+RECORD_PER_PAGE]

	ret = template('my',
		categorys=categorys, #当前已经有收藏的收藏夹
		curcatinfo=(allcats.get(curcid,''),len(data)),
		allcategorys=allcats,
		emptycategorys=emptycats,
		bookmarks=bookmarks,
		pages=pages,
		updatemsg=updatemsg,
		disabled = not needarchive(db),
		tags=','.join(list(alltags)))
	return compressit(ret)
예제 #13
0
def tools():
	return compressit(template("tools",httpdomain=CFG.domain))