--- a/dirbrowser/cdbrowser.cpp
+++ b/dirbrowser/cdbrowser.cpp
@@ -160,6 +160,8 @@
void CDBrowser::runJS(const QString& js)
{
+ qDebug() << "CDBrowser::runJS: " << js;
+
#ifdef USING_WEBENGINE
page()->runJavaScript(js, [] (QVariant res) {
Q_UNUSED(res);
@@ -303,7 +305,7 @@
case 'a':
{
- string initial = scurl.substr(1,1);
+ char initial = scurl[1];
auto it = m_alphamap.find(initial);
if (it != m_alphamap.end()) {
m_browsers->doSearch(u8s2qs(it->second), false);
@@ -346,7 +348,6 @@
case 'C':
{
// Directory listing container link clicked: browse subdir.
- m_curinitial = 0;
#ifdef USING_WEBENGINE
#warning tobedone
#else
@@ -535,12 +536,32 @@
qApp->processEvents();
}
-void CDBrowser::updateAlphamap(const string& tt)
+void CDBrowser::updateAlphamap(char& curinitial, const string& tt)
{
char ninit = ::toupper(tt[0]);
- if (ninit != m_curinitial) {
- m_alphamap[string(1, ninit)] = CTTitleStartMarker + tt;
- m_curinitial = ninit;
+ if (ninit != curinitial && ninit >= 'A' && ninit <= 'Z') {
+ m_alphamap[ninit] = CTTitleStartMarker + tt;
+ curinitial = ninit;
+ }
+}
+
+void CDBrowser::maybeShowAlphamap(unsigned int nct)
+{
+ if (nct >= 40 && m_alphamap.size() > 1) {
+ string initials;
+ for (auto& ent: m_alphamap) {
+ if (ent.first >= 'A' && ent.first <= 'Z') {
+ initials += ent.first;
+ }
+ }
+ runJS("document.getElementById('alphalist').style.visibility = "
+ "'visible';");
+ qDebug() << "SETTING ALPHABET:" << initials.c_str();
+ runJS(QString("document.getElementById('alphalist').innerHTML = \"") +
+ alphalinks(initials) + QString("\";"));
+ } else {
+ runJS("document.getElementById('alphalist').style.visibility = "
+ "'hidden';");
}
}
@@ -560,14 +581,8 @@
for (auto& entry: dc->m_containers) {
//qDebug() << "Container: " << it->dump().c_str();;
- updateAlphamap(entry.m_title);
m_entries.push_back(entry);
html += CTToHtml(m_entries.size()-1, entry);
- }
- if (m_entries.size() < 40) {
- runJS("document.getElementById('alphalist').style.visibility = 'hidden';");
- } else {
- runJS("document.getElementById('alphalist').style.visibility = 'visible';");
}
QSettings settings;
int maxartlen = 0;
@@ -666,12 +681,9 @@
sortcrits.push_back(qs2utf8s(qcrits[i]));
}
}
- if (m_entries.size() < 40) {
- runJS("document.getElementById('alphalist').style.visibility = 'hidden';");
- } else {
- runJS("document.getElementById('alphalist').style.visibility = 'visible';");
- }
-
+ int nct = 0;
+ char curinitial = 0;
+ m_alphamap.clear();
if (!sortcrits.empty()) {
DirObjCmp cmpo(sortcrits);
@@ -683,17 +695,25 @@
if (settings.value("truncateartistindir").toBool()) {
maxartlen = settings.value("truncateartistlen").toInt();
}
- m_curinitial = 0;
for (unsigned i = 0; i < m_entries.size(); i++) {
if (m_entries[i].m_type == UPnPDirObject::container) {
- updateAlphamap(m_entries[i].m_title);
+ updateAlphamap(curinitial, m_entries[i].m_title);
html += CTToHtml(i, m_entries[i]);
+ nct++;
} else {
html += ItemToHtml(i, m_entries[i], maxartlen);
}
}
appendHtml("entrylist", html);
- }
+ } else {
+ for (unsigned i = 0; i < m_entries.size(); i++) {
+ if (m_entries[i].m_type == UPnPDirObject::container) {
+ updateAlphamap(curinitial, m_entries[i].m_title);
+ nct++;
+ }
+ }
+ }
+ maybeShowAlphamap(nct);
m_reader->wait();
#ifdef USING_WEBENGINE