use of com.glitchcog.fontificator.emoji.EmojiJob in project ChatGameFontificator by GlitchCog.
the class ControlPanelEmoji method loadEmojiWork.
/**
* Queue the work of a specified operation (load or cache) on a specified type of emote (Twitch or FrankerFaceZ).
* Call runEmoteWork to run the loaded work in series.
*
* @param types
* @param ops
*/
private void loadEmojiWork(Collection<EmojiJob> jobs) {
for (EmojiJob job : jobs) {
EmojiWorkerReport initialReport = new EmojiWorkerReport(job.toString(), 0);
// A SwingWorkers can only be run once because... reasons. So each call to do work must be on a freshly
// instantiated worker object.
EmojiWorker worker = new EmojiWorker(chat.getEmojiManager(), progressPanel, job, logBox, initialReport);
progressPanel.addWorkToQueue(worker);
}
}
use of com.glitchcog.fontificator.emoji.EmojiJob in project ChatGameFontificator by GlitchCog.
the class ControlPanelEmoji method build.
@Override
protected void build() {
enableAll = new JCheckBox("Enable Emoji");
enableAnimation = new JCheckBox("Enable Animation");
enableTwitchBadges = new JCheckBox("Enable Twitch Badges");
enableFfzBadges = new JCheckBox("Enable FrankerFaceZ Badges");
progressPanel = new EmojiLoadProgressPanel(chat, this);
emojiScaleToLineHeight = new JCheckBox("Relative to Line Height");
emojiScale = new LabeledSlider("Emoji Scale", "%", ConfigEmoji.MIN_SCALE, ConfigEmoji.MAX_SCALE, 100, 3);
badgeScaleToLineHeight = new JCheckBox("Relative to Line Height");
badgeScale = new LabeledSlider("Badge Scale", "%", ConfigEmoji.MIN_SCALE, ConfigEmoji.MAX_SCALE, 100, 3);
badgeHeightOffset = new LabeledSlider("Badge Height Offset", "pixels", ConfigEmoji.MIN_BADGE_OFFSET, ConfigEmoji.MAX_BADGE_OFFSET, 0, 3);
emojiLoadingDisplayStratLabel = new JLabel("Emoji Loading Display Strategy:");
emojiLoadingDisplayStrat = new JComboBox<EmojiLoadingDisplayStragegy>(EmojiLoadingDisplayStragegy.values());
enableTwitch = new JCheckBox("Enable Twitch Emotes");
cacheTwitch = new JCheckBox("Cache Global Twitch Emotes");
enableFrankerFaceZ = new JCheckBox("Enable FrankerFaceZ Emotes");
cacheFrankerFaceZ = new JCheckBox("Cache FrankerFaceZ Emotes");
enableBetterTtv = new JCheckBox("Enable BetterTTV Emotes");
cacheBetterTtv = new JCheckBox("Cache BetterTTV Emotes");
emojiScale.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
config.setEmojiScale(emojiScale.getValue());
chat.repaint();
}
});
badgeScale.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
config.setBadgeScale(badgeScale.getValue());
chat.repaint();
}
});
badgeHeightOffset.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
config.setBadgeHeightOffset(badgeHeightOffset.getValue());
chat.repaint();
}
});
emojiLoadingDisplayStrat.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
config.setDisplayStrategy((EmojiLoadingDisplayStragegy) emojiLoadingDisplayStrat.getSelectedItem());
chat.repaint();
}
});
// This action listener is for loading emotes and badges whenever a checkbox is checked while connected
ActionListener cbal = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox source = (JCheckBox) e.getSource();
if (bot.isConnected()) {
Set<EmojiJob> jobsToRun = new HashSet<EmojiJob>();
Set<EmojiJob> jobsToCancel = new HashSet<EmojiJob>();
final boolean clickAll = enableAll.equals(source);
final boolean clickFfzLoad = clickAll || enableFrankerFaceZ.equals(source);
final boolean clickFfzCache = clickAll || cacheFrankerFaceZ.equals(source);
final boolean clickBttvLoad = clickAll || enableBetterTtv.equals(source);
final boolean clickBttvCache = clickAll || cacheBetterTtv.equals(source);
// Badges is independent of enableAll
final boolean clickTwitchBadges = !config.isTwitchBadgesLoaded(getConnectChannel()) && enableTwitchBadges.equals(source);
final boolean clickFfzBadges = !config.isFfzBadgesLoaded(getConnectChannel()) && enableFfzBadges.equals(source);
final String oauth = fProps.getProperty(FontificatorProperties.KEY_IRC_AUTH);
if (clickFfzLoad && !config.isFfzLoaded(getConnectChannel())) {
EmojiJob jobA = new EmojiJob(oauth, EmojiType.FRANKERFACEZ_CHANNEL, EmojiOperation.LOAD, getConnectChannel());
EmojiJob jobB = new EmojiJob(oauth, EmojiType.FRANKERFACEZ_GLOBAL, EmojiOperation.LOAD);
if (enableAll.isSelected() && enableFrankerFaceZ.isSelected()) {
jobsToRun.add(jobA);
jobsToRun.add(jobB);
} else {
jobsToCancel.add(jobA);
jobsToCancel.add(jobB);
}
}
if (clickBttvLoad && !config.isBttvLoaded(getConnectChannel())) {
EmojiJob jobA = new EmojiJob(oauth, EmojiType.BETTER_TTV_CHANNEL, EmojiOperation.LOAD, getConnectChannel());
EmojiJob jobB = new EmojiJob(oauth, EmojiType.BETTER_TTV_GLOBAL, EmojiOperation.LOAD);
if (enableAll.isSelected() && enableBetterTtv.isSelected()) {
jobsToRun.add(jobA);
jobsToRun.add(jobB);
} else {
jobsToCancel.add(jobA);
jobsToCancel.add(jobB);
}
}
if (clickFfzCache && !config.isFfzCached()) {
EmojiJob jobA = new EmojiJob(oauth, EmojiType.FRANKERFACEZ_CHANNEL, EmojiOperation.CACHE);
EmojiJob jobB = new EmojiJob(oauth, EmojiType.FRANKERFACEZ_GLOBAL, EmojiOperation.CACHE);
if (enableAll.isSelected() && cacheFrankerFaceZ.isSelected()) {
jobsToRun.add(jobA);
jobsToRun.add(jobB);
} else {
jobsToCancel.add(jobA);
jobsToCancel.add(jobB);
}
}
if (clickBttvCache && !config.isBttvCached()) {
EmojiJob jobA = new EmojiJob(oauth, EmojiType.BETTER_TTV_CHANNEL, EmojiOperation.CACHE);
EmojiJob jobB = new EmojiJob(oauth, EmojiType.BETTER_TTV_GLOBAL, EmojiOperation.CACHE);
if (enableAll.isSelected() && cacheBetterTtv.isSelected()) {
jobsToRun.add(jobA);
jobsToRun.add(jobB);
} else {
jobsToCancel.add(jobA);
jobsToCancel.add(jobB);
}
}
if (clickTwitchBadges && !config.isTwitchBadgesLoaded(getConnectChannel())) {
EmojiJob job = new EmojiJob(oauth, EmojiType.TWITCH_BADGE, EmojiOperation.LOAD, getConnectChannel());
// No check for enable all here, because badges are independent of the emoji enableAll toggle
if (enableTwitchBadges.isSelected()) {
jobsToRun.add(job);
} else {
jobsToCancel.add(job);
}
}
if (clickFfzBadges && !config.isFfzBadgesLoaded(getConnectChannel())) {
EmojiJob job = new EmojiJob(oauth, EmojiType.FRANKERFACEZ_BADGE, EmojiOperation.LOAD, getConnectChannel());
// No check for enable all here, because badges are independent of the emoji enableAll toggle
if (enableFfzBadges.isSelected()) {
jobsToRun.add(job);
} else {
jobsToCancel.add(job);
}
}
loadEmojiWork(jobsToRun);
cancelEmojiWork(jobsToCancel);
if (!jobsToRun.isEmpty() && !progressPanel.isCurrentlyRunning()) {
runEmojiWork();
}
}
// These are only the checkboxes handled in fillConfigFromInput()
config.setEmojiEnabled(enableAll.isSelected());
config.setAnimationEnabled(enableAnimation.isSelected());
config.setTwitchBadgesEnabled(enableTwitchBadges.isSelected());
config.setFfzBadgesEnabled(enableFfzBadges.isSelected());
config.setTwitchEnabled(enableTwitch.isSelected());
config.setTwitchCacheEnabled(cacheTwitch.isSelected());
config.setFfzEnabled(enableFrankerFaceZ.isSelected());
config.setFfzCacheEnabled(cacheFrankerFaceZ.isSelected());
config.setBttvEnabled(enableBetterTtv.isSelected());
config.setBttvCacheEnabled(cacheBetterTtv.isSelected());
config.setEmojiScaleToLine(emojiScaleToLineHeight.isSelected());
config.setBadgeScaleToLine(badgeScaleToLineHeight.isSelected());
resolveEnables();
chat.repaint();
}
};
enableAll.addActionListener(cbal);
enableAnimation.addActionListener(cbal);
enableTwitchBadges.addActionListener(cbal);
enableFfzBadges.addActionListener(cbal);
emojiScaleToLineHeight.addActionListener(cbal);
badgeScaleToLineHeight.addActionListener(cbal);
enableTwitch.addActionListener(cbal);
cacheTwitch.addActionListener(cbal);
enableFrankerFaceZ.addActionListener(cbal);
cacheFrankerFaceZ.addActionListener(cbal);
enableBetterTtv.addActionListener(cbal);
cacheBetterTtv.addActionListener(cbal);
// Top row containing emoji toggle, animation, and badge toggles
JPanel allEnabledPanel = new JPanel(new GridBagLayout());
GridBagConstraints allGbc = getGbc();
allGbc.weighty = 1.0;
allGbc.fill = GridBagConstraints.NONE;
allGbc.anchor = GridBagConstraints.WEST;
allGbc.weightx = 0.25;
allEnabledPanel.add(enableAll, allGbc);
allGbc.gridx++;
allEnabledPanel.add(enableAnimation, allGbc);
allGbc.gridx++;
allGbc.anchor = GridBagConstraints.EAST;
allEnabledPanel.add(enableTwitchBadges, allGbc);
allGbc.gridx++;
allEnabledPanel.add(enableFfzBadges, allGbc);
allGbc.gridx++;
scaleAndDisplayPanel = new JPanel(new GridBagLayout());
scaleAndDisplayPanel.setBorder(baseBorder);
GridBagConstraints scaleAndDisplayGbc = getGbc();
// Emoji scaling
scaleAndDisplayGbc.anchor = GridBagConstraints.CENTER;
scaleAndDisplayGbc.fill = GridBagConstraints.HORIZONTAL;
scaleAndDisplayGbc.weightx = 1.0;
scaleAndDisplayPanel.add(emojiScale, scaleAndDisplayGbc);
scaleAndDisplayGbc.gridx++;
scaleAndDisplayGbc.fill = GridBagConstraints.NONE;
scaleAndDisplayGbc.weightx = 0.0;
scaleAndDisplayPanel.add(emojiScaleToLineHeight, scaleAndDisplayGbc);
scaleAndDisplayGbc.gridx = 0;
scaleAndDisplayGbc.gridy++;
// Badge scaling
scaleAndDisplayGbc.anchor = GridBagConstraints.CENTER;
scaleAndDisplayGbc.fill = GridBagConstraints.HORIZONTAL;
scaleAndDisplayGbc.weightx = 1.0;
scaleAndDisplayPanel.add(badgeScale, scaleAndDisplayGbc);
scaleAndDisplayGbc.gridx++;
scaleAndDisplayGbc.fill = GridBagConstraints.NONE;
scaleAndDisplayGbc.weightx = 0.0;
scaleAndDisplayPanel.add(badgeScaleToLineHeight, scaleAndDisplayGbc);
scaleAndDisplayGbc.gridx = 0;
scaleAndDisplayGbc.gridy++;
scaleAndDisplayGbc.fill = GridBagConstraints.HORIZONTAL;
scaleAndDisplayGbc.gridwidth = 2;
scaleAndDisplayPanel.add(badgeHeightOffset, scaleAndDisplayGbc);
scaleAndDisplayGbc.gridy++;
scaleAndDisplayGbc.gridwidth = 2;
scaleAndDisplayGbc.weightx = 1.0;
scaleAndDisplayGbc.fill = GridBagConstraints.HORIZONTAL;
scaleAndDisplayPanel.add(new JSeparator(SwingConstants.HORIZONTAL), scaleAndDisplayGbc);
scaleAndDisplayGbc.gridy++;
JPanel bottomOfScaleDisplayPanel = new JPanel();
bottomOfScaleDisplayPanel.add(emojiLoadingDisplayStratLabel);
bottomOfScaleDisplayPanel.add(emojiLoadingDisplayStrat);
scaleAndDisplayPanel.add(bottomOfScaleDisplayPanel, scaleAndDisplayGbc);
twitchPanel = new JPanel(new GridBagLayout());
twitchPanel.setBorder(BorderFactory.createTitledBorder(baseBorder, "Twitch Emotes"));
GridBagConstraints twitchGbc = getGbc();
twitchPanel.add(enableTwitch, twitchGbc);
twitchGbc.gridy++;
twitchPanel.add(cacheTwitch, twitchGbc);
twitchGbc.gridy++;
frankerPanel = new JPanel(new GridBagLayout());
frankerPanel.setBorder(BorderFactory.createTitledBorder(baseBorder, "FrankerFaceZ Emotes"));
GridBagConstraints frankerGbc = getGbc();
frankerPanel.add(enableFrankerFaceZ, frankerGbc);
frankerGbc.gridy++;
frankerPanel.add(cacheFrankerFaceZ, frankerGbc);
frankerGbc.gridy++;
betterPanel = new JPanel(new GridBagLayout());
betterPanel.setBorder(BorderFactory.createTitledBorder(baseBorder, "BetterTTV Emotes"));
GridBagConstraints betterGbc = getGbc();
betterPanel.add(enableBetterTtv, betterGbc);
betterGbc.gridy++;
betterPanel.add(cacheBetterTtv, betterGbc);
betterGbc.gridy++;
gbc.anchor = GridBagConstraints.NORTH;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1.0;
gbc.weighty = 0.0;
gbc.gridwidth = 3;
add(allEnabledPanel, gbc);
gbc.gridy++;
gbc.gridwidth = 1;
add(twitchPanel, gbc);
gbc.gridx++;
add(frankerPanel, gbc);
gbc.gridx++;
add(betterPanel, gbc);
gbc.gridx++;
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 3;
add(scaleAndDisplayPanel, gbc);
gbc.gridy++;
gbc.gridy++;
gbc.anchor = GridBagConstraints.SOUTH;
gbc.weighty = 1.0;
gbc.weightx = 1.0;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.BOTH;
add(progressPanel, gbc);
gbc.gridy++;
}
use of com.glitchcog.fontificator.emoji.EmojiJob in project ChatGameFontificator by GlitchCog.
the class ControlPanelEmoji method collectJobs.
/**
* Parse through the selected UI options to determine what jobs need to be done. This will return an empty job list
* if any of the jobs specified by the UI require a channel and no channel is provided on the Connection tab. A
* popup will present this information to the user.
*
* @return jobs
*/
public Set<EmojiJob> collectJobs() {
Set<EmojiJob> jobs = new HashSet<EmojiJob>();
if (config == null) {
return jobs;
}
final String channel = getConnectChannel();
final String oauth = fProps.getProperty(FontificatorProperties.KEY_IRC_AUTH);
if (enableAll.isSelected()) {
final boolean workFfzLoad = !config.isFfzLoaded(channel) && enableFrankerFaceZ.isSelected();
final boolean workFfzGlobalLoad = !config.isFfzGlobalLoaded() && enableFrankerFaceZ.isSelected();
final boolean workFfzCache = !config.isFfzCached() && cacheFrankerFaceZ.isSelected();
final boolean workBttvLoad = !config.isBttvLoaded(channel) && enableBetterTtv.isSelected();
final boolean workBttvGlobalLoad = !config.isBttvGlobalLoaded() && enableBetterTtv.isSelected();
final boolean workBttvCache = !config.isBttvCached() && cacheBetterTtv.isSelected();
if (workFfzLoad) {
jobs.add(new EmojiJob(oauth, EmojiType.FRANKERFACEZ_CHANNEL, EmojiOperation.LOAD, channel));
if (channel == null) {
ChatWindow.popup.handleProblem("Please specify a channel on the Connection tab to load emoji");
jobs.clear();
return jobs;
}
}
if (workFfzGlobalLoad) {
jobs.add(new EmojiJob(oauth, EmojiType.FRANKERFACEZ_GLOBAL, EmojiOperation.LOAD));
}
if (workFfzCache) {
jobs.add(new EmojiJob(oauth, EmojiType.FRANKERFACEZ_CHANNEL, EmojiOperation.CACHE));
jobs.add(new EmojiJob(oauth, EmojiType.FRANKERFACEZ_GLOBAL, EmojiOperation.CACHE));
}
if (workBttvLoad) {
jobs.add(new EmojiJob(oauth, EmojiType.BETTER_TTV_CHANNEL, EmojiOperation.LOAD, channel));
if (channel == null) {
ChatWindow.popup.handleProblem("Please specify a channel on the Connection tab to load emoji");
jobs.clear();
return jobs;
}
}
if (workBttvGlobalLoad) {
jobs.add(new EmojiJob(oauth, EmojiType.BETTER_TTV_GLOBAL, EmojiOperation.LOAD));
}
if (workBttvCache) {
jobs.add(new EmojiJob(oauth, EmojiType.BETTER_TTV_CHANNEL, EmojiOperation.CACHE));
jobs.add(new EmojiJob(oauth, EmojiType.BETTER_TTV_GLOBAL, EmojiOperation.CACHE));
}
}
final boolean workTwitchBadges = enableTwitchBadges.isSelected() && !config.isTwitchBadgesLoaded(channel);
final boolean workFfzBadges = enableFfzBadges.isSelected() && !config.isFfzBadgesLoaded(channel);
if (workTwitchBadges) {
jobs.add(new EmojiJob(oauth, EmojiType.TWITCH_BADGE, EmojiOperation.LOAD, channel));
if (channel == null) {
ChatWindow.popup.handleProblem("Please specify a channel on the Connection tab to load badges");
jobs.clear();
return jobs;
}
}
if (workFfzBadges) {
jobs.add(new EmojiJob(oauth, EmojiType.FRANKERFACEZ_BADGE, EmojiOperation.LOAD, channel));
if (channel == null) {
ChatWindow.popup.handleProblem("Please specify a channel on the Connection tab to load badges");
jobs.clear();
return jobs;
}
}
return jobs;
}
Aggregations