Skip to content
This repository has been archived by the owner on Nov 13, 2017. It is now read-only.

Commit

Permalink
partial change for new search system
Browse files Browse the repository at this point in the history
  • Loading branch information
ralfonso committed Dec 31, 2009
1 parent e40a6a5 commit f676dd3
Show file tree
Hide file tree
Showing 10 changed files with 109 additions and 45 deletions.
1 change: 0 additions & 1 deletion theory/config/routing.py
Expand Up @@ -40,7 +40,6 @@ def make_map():
map.connect('/playlist/load',controller='playlist',action='load')
map.connect('/playlist/delete',controller='playlist',action='delete')
map.connect('/fetchart',controller='main',action='fetchart')
map.connect('/lyrics',controller='main',action='lyrics')
map.connect('/{controller}/{action}')
map.connect('/{controller}/{action}/{id}')
map.connect('/{controller}/{action}/{id}/{val}')
Expand Down
39 changes: 20 additions & 19 deletions theory/controllers/main.py
Expand Up @@ -27,7 +27,6 @@
from theory.lib import helpers as h
from theory.model.mpdpool import ConnectionClosed,IncorrectPassword,ProtocolError
from theory.model.albumart import AlbumArt,NoArtError
from theory.model.lyrics import *

from theory.model import *

Expand Down Expand Up @@ -137,6 +136,7 @@ def config(self,use_htmlfill=True):
return formencode.htmlfill.render(render("/config.html"),{'server':g.tc.server,'port':g.tc.port,
'password':g.tc.password,'webpassword':g.tc.webpassword,
'awskey':g.tc.awskey,'timeout':g.tc.timeout,
'aws_secret':g.tc.aws_secret,
'default_search':g.tc.default_search})
else:
return render("/config.html")
Expand Down Expand Up @@ -171,21 +171,6 @@ def saveconfig(self):
return '<script language="javascript">window.parent.setSearchType(\'%s\');window.parent.hideConfig(%s,%s);document.location.replace(\'/null.html\')</script>'\
% (g.tc.default_search,reloadframes,reloadpage)


def lyrics(self):
""" controller for the lyrics widget. loads lyrics from lyricswiki.org """

artist = request.GET.get('artist').encode('utf-8')
track = request.GET.get('track').encode('utf-8')

try:
l = Lyrics(artist,track)
c.lyrics = l.lyrics
except NoLyricsError:
c.lyrics = 'error loading lyrics. lyricwiki.org down?'

return render('/lyrics.html')

def stats(self):
""" controller for the stats widget """

Expand Down Expand Up @@ -228,12 +213,28 @@ def add_random(self):
return render('/null.html')

def search(self):
searchtype = request.POST.get('searchtype','Artist')
q = request.POST.get('q').encode('utf-8')
searchtype = request.GET.get('searchtype','Artist')
q = request.GET.get('q').encode('utf-8')

if q:
m = g.p.connect()
c.results = m.search(searchtype,q)
results = m.search(searchtype,q)

c.artists = set()
c.albums = set()
c.tracks = set()

search_string = q.lower()

for r in results:
if 'artist' in r.keys() and search_string in r['artist'].lower():
c.artists.add(r['artist'])

if 'album' in r.keys() and search_string in r['album'].lower():
c.albums.add((r['artist'],r['album']))

if 'title' in r.keys() and search_string in r['title'].lower():
c.tracks.add((r['artist'],r['album'],r['title']))

return render('/search.html')

Expand Down
1 change: 1 addition & 0 deletions theory/model/form.py
Expand Up @@ -17,6 +17,7 @@ class ConfigForm(formencode.Schema):
timeout = formencode.validators.Bool()
default_search = formencode.validators.String(not_empty=True)
awskey = formencode.validators.String(strip=True,not_empty=False,if_missing=None)
aws_secret = formencode.validators.String(strip=True,not_empty=False,if_missing=None)

class StreamNameInUse(formencode.validators.FancyValidator):
def validate_python(self, values, state):
Expand Down
24 changes: 24 additions & 0 deletions theory/public/css/styles.css
Expand Up @@ -30,6 +30,11 @@ h2 {
color:#333;
}

h4 {
font-size:1.5em;
margin:0px;
}

td.label {
text-align:right;
}
Expand Down Expand Up @@ -451,3 +456,22 @@ div#widget-tooltip {
div.padded-content {
margin:20px;
}

div.searchresultsbox {
margin:10px;
-moz-border-radius:5px;
border:1px solid #444444;
padding:5px;
}

div#searchresults {
margin-left:50px;
width:400px;
display:none;
z-index:10;
position:absolute;
background-color:#DEFFBE;
opacity:.93;
overflow-y:scroll;
height:400px;
}
7 changes: 7 additions & 0 deletions theory/public/js/theory.js
Expand Up @@ -683,3 +683,10 @@ function addPathToPlaylist(path) {
function setSearchType(s) {
$('#searchtype').val(s);
}

function performSearch() {
var q = $('#search input[name=q]').val();
$('#searchresults').load('/search?searchtype=Any&q=' + q,undefined,function(){
$('#searchresults').show('slide',{direction:'down'},1500);
});
}
7 changes: 7 additions & 0 deletions theory/templates/config.html
Expand Up @@ -87,6 +87,13 @@
(for automatic downloading of album art)
</td>
</tr>
<tr>
<td align=right>
Amazon Developer Key (Secret):</td>
<td>
${h.html.tags.text('aws_secret',None,size=45)}<br />
</td>
</tr>
<tr>
<td align=right>
Default search type:</td>
Expand Down
2 changes: 1 addition & 1 deletion theory/templates/control.html
Expand Up @@ -2,7 +2,7 @@
<div id="trackinfo">
<a id="currentartlink"><img id="currentart" src="img/50trans.gif" style="width:75px;height:75px;float:left;padding-right:6px;" /></a>
<span id="title">not playing</span>
<span id="wiki" style="display:none">(<a id=aWiki href="#" target="_blank">wiki</a> / <a id=aLyrics href="javascript:loadLyrics()">lyrics</a><span id="lyricsinfo"></span>)</span>
<span id="wiki" style="display:none">(<a id=aWiki href="#" target="_blank">wiki</a>)</span>

</div>
<div id="controls" style="float:left">
Expand Down
13 changes: 11 additions & 2 deletions theory/templates/index.html
Expand Up @@ -67,7 +67,17 @@
$('#misc').slideToggle('normal',function(){$('#search').slideToggle()});
});

$('#search input[name=q]').keyup(function(e) {
if(e.keyCode == 13) {
performSearch();
}
});

$('#dosearch').click(function() {
performSearch();
});
$('#searchcancel').click(function() {
$('#searchresults').hide('slide',{direction:'up'},1500);
$('#search').slideToggle('normal',function(){$('#misc').slideToggle()});
});
resizeIframes();
Expand Down Expand Up @@ -96,7 +106,6 @@
$('#debug').show();
% endif

$('#lyrics').attr('src','/null.html');
$('#currentartist').val('');
$('#currenttitle').val('');
$('#currentid').val('');
Expand Down Expand Up @@ -136,7 +145,6 @@
<div id="debug" style="display:none"></div>

<iframe id="config" name="config" src="${c.config}" ></iframe>
<iframe id="lyrics" name="lyrics" src="/null.html" ></iframe>

<%include file="letters.html"/>

Expand All @@ -151,5 +159,6 @@
</div>

<div id="right">
<div id="searchresults"></div>
<iframe id="frmplaylist" name="frmplaylist" src="/playlist"></iframe>
</div>
4 changes: 1 addition & 3 deletions theory/templates/letters.html
Expand Up @@ -12,12 +12,10 @@
</ul>

<div id="search" style="display:none">
<form action="/search" method="post" target="frmtracks" style="margin:none;padding:none">
${h.html.tags.select('searchtype',g.tc.default_search,g.searchterms,id="searchtype")}
${h.html.tags.text('q','',size=25)}
<input type="submit" value="search" class="orange ui-state-default ui-corner-all" />
<input type="button" id="dosearch" value="search" class="orange ui-state-default ui-corner-all" />
<input type="button" id="searchcancel" value="cancel" class="grey ui-state-default ui-corner-all" />
</form>
</div>

<div id="misc">
Expand Down
56 changes: 37 additions & 19 deletions theory/templates/search.html
@@ -1,24 +1,42 @@
<%inherit file="body.html"/>
<div id="container-tracks">
% if len(c.artists) == 0 and len(c.albums) == 0 and len(c.tracks) == 0:
<div style="margin:20px">nothing found</div>
% endif

% if len(c.artists):
<div class="searchresultsbox">
<h4>artists</h4>
<ul id="list">
% for a in c.artists:
<%
fixed_artist = a.decode('utf-8')

<style>
body {
margin:0;
padding:0;
background-color:#eeeeee;
overflow-x:hidden;
}
</style>
try:
if a.startswith(('The ','THE ','the ')):
firstchar = fixed_artist[4].lower()
else:
firstchar = fixed_artist[0].lower()
except IndexError:
firstchar = ''
%>
<li><a onclick="artistAlbums('${h.escape_js(fixed_artist)}')">${fixed_artist}</a></li>
% endfor
</ul>
</div>
% endif

<div id="container-tracks">
<ul id="list">
% if len(c.results) == 0:
<div style="margin:20px">no tracks found</div>
% endif
% for t in c.results:
<% h.format_title_search(t) %>
<li><a onclick="addToPlaylist('${h.html.url_escape(t['file'])}')"><img src="/img/add.png" /> ${t['formattedtrack']}</a></li>
% endfor
</ul>
% if len(c.albums):
<div class="searchresultsbox">
<h4>albums</h4>
<ul id="list">
% for a in c.albums:
<%
artist_utf8 = a[0].decode('utf-8')
album_utf8 = a[1].decode('utf-8')
%>
<li><a onclick="artistAlbums('${h.escape_js(artist_utf8)}');albumTracks('${h.escape_js(artist_utf8)}','${h.escape_js(album_utf8)}')">${artist_utf8} - ${album_utf8}</a></li>
% endfor
</ul>
% endif
</div>

0 comments on commit f676dd3

Please sign in to comment.