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)
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)
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"))
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)
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)
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"))
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]
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]
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)
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)
def tools(): return compressit(template("tools", httpdomain=CFG.domain))
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)
def tools(): return compressit(template("tools",httpdomain=CFG.domain))