Warning: session_start(): open(/var/lib/php/sessions/sess_t707l9ofb940alvlvp24fj0194, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass SnippetSelectForm {
VF1 onSelected;
S selectedTitle;
JFrame frame;
JList list;
JTextField tfCmd;
JLabel status;
JButton btnReload, btnRun, btnClear;
S submittedInput;
volatile boolean searching;
long lastSearch; // time of last search
int searchDelay = 100;
int maxResults = 100;
int autoResearchInterval = 30000; // 30 secs
L actionHistory = synchroList();
*() {}
*(VF1 *onSelected) {}
void go() swing {
frame = showFrame();
list = new JList;
onDoubleClick(list, r { go() });
ActionListener go = actionListener {
tfCmd.selectAll();
search(true);
};
btnReload = new JButton(isWindows() ? "Reload" : "\u27F3");
btnReload.addActionListener(go);
btnClear = new JButton("X");
btnClear.setToolTipText("Show latest");
btnClear.addActionListener(actionListener { tfCmd.setText(""); });
tfCmd = new JTextField;
JPanel controls = jflow(btnClear, btnReload);
JPanel north = centerAndEast(
withLabel("Search term:", tfCmd),
controls);
btnOK = new JButton("OK");
btnOK.addActionListener(actionListener { ok(); });
status = new JLabel(" ");
JPanel panel = northCenterAndSouth(north, list, status);
tfCmd.addActionListener(go);
frame.addWindowListener(new WindowAdapter {
public void windowOpened(WindowEvent e) {
tfCmd.requestFocus();
}
public void windowActivated(WindowEvent e) {
search(false);
}
});
installTimer(tfCmd, new Runnable {
String lastContents;
boolean autoSearchOn = true;
public void run() {
String text = getInput();
if (text.equals(lastContents)) {
if (now() > lastSearch + autoResearchInterval ||
(!text.equals(submittedInput) && autoSearchOn && !searching))
search(false);
} else
lastContents = text;
}
}, searchDelay);
frame.add(panel);
frame.setBounds(100, 100, 500, 400);
search(false);
}
S getInput() {
ret tfCmd.getText().trim();
}
void search(String cmd, final boolean requestFocus) ctex {
searching = true;
try {
status("Searching " + quote(cmd) + "...");
if (empty(cmd)) cmd = "_";
//if (cbAll.isSelected())
//cmd += " type:runnable";
S page = loadPage("http://tinybrain.de:8080/tb/search.php?q=" + urlencode(cmd) + "&limit=" + maxResults + "&sort=modified");
Matcher m = Pattern.compile(">(#\\d+) - (.*?)
").matcher(page);
final new DefaultListModel model;
while (m.find()) {
String title = m.group(2);
title = join(dropAllTags(htmlcoarsetok(title)));
model.addElement(htmldecode(m.group(1) + " - " + title));
}
awt {
list.setModel(model);
status("Found " + model.size() + (model.size() == maxResults ? "+" : "") + " snippet(s).");
if (requestFocus)
tfCmd.requestFocus();
}
} finally {
searching = false;
}
}
void status(final S s) {
awt { status.setText(s); }
}
void search(final boolean requestFocus) {
submittedInput = getInput();
lastSearch = now();
final String cmd = submittedInput;
actionHistory.add(format3("*: Searching *", now(), cmd));
thread {
search(cmd, requestFocus);
}
}
void ok() {
fS s = getSelectedItem(list);
final int i = indexOf(s, " - ");
if (i < 0) ret;
selectedTitle = substring(s, i+3);
awt {
callF(onSelected, takeFirst(s, i));
}
disposeWindow(list);
}
}