mirror of
https://git.krews.org/morningstar/Arcturus-Community.git
synced 2024-11-27 00:40:52 +01:00
Merge branch 'dev' into 'calendar-fix'
# Conflicts: # sqlupdates/3_0_0 to 3_0_1.sql
This commit is contained in:
commit
6a2b5a9618
2
pom.xml
2
pom.xml
@ -106,7 +106,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>mysql</groupId>
|
<groupId>mysql</groupId>
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
<version>5.1.49</version>
|
<version>8.0.22</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
@ -6,6 +6,9 @@ INSERT INTO `emulator_texts` (`key`, `value`) VALUES ('commands.error.cmd_stalk.
|
|||||||
-- Enable or Disable TTY in console (Default is enabled)
|
-- Enable or Disable TTY in console (Default is enabled)
|
||||||
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('console.mode', '1');
|
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('console.mode', '1');
|
||||||
|
|
||||||
|
-- Youtube Api v3 key to YoutubeManager
|
||||||
|
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('youtube.apikey', '');
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for calendar_campaigns
|
-- Table structure for calendar_campaigns
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
@ -46,7 +49,7 @@ CREATE TABLE `calendar_rewards` (
|
|||||||
`subscription_days` int NOT NULL DEFAULT '0',
|
`subscription_days` int NOT NULL DEFAULT '0',
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
);
|
);
|
||||||
@ -92,11 +92,12 @@
|
|
||||||
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.calendar.default', 'test');
|
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.calendar.default', 'test');
|
||||||
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.calendar.pixels.hc_modifier', '2.0');
|
INSERT INTO `emulator_settings` (`key`, `value`) VALUES ('hotel.calendar.pixels.hc_modifier', '2.0');
|
||||||
|
|
||||||
|
@ -504,7 +504,6 @@ public class CatalogManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Voucher getVoucher(String code) {
|
public Voucher getVoucher(String code) {
|
||||||
synchronized (this.vouchers) {
|
synchronized (this.vouchers) {
|
||||||
for (Voucher voucher : this.vouchers) {
|
for (Voucher voucher : this.vouchers) {
|
||||||
@ -516,22 +515,20 @@ public class CatalogManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void redeemVoucher(GameClient client, String voucherCode) {
|
public void redeemVoucher(GameClient client, String voucherCode) {
|
||||||
Voucher voucher = Emulator.getGameEnvironment().getCatalogManager().getVoucher(voucherCode);
|
Habbo habbo = client.getHabbo();
|
||||||
|
if (habbo == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Voucher voucher = Emulator.getGameEnvironment().getCatalogManager().getVoucher(voucherCode);
|
||||||
if (voucher == null) {
|
if (voucher == null) {
|
||||||
client.sendResponse(new RedeemVoucherErrorComposer(RedeemVoucherErrorComposer.INVALID_CODE));
|
client.sendResponse(new RedeemVoucherErrorComposer(RedeemVoucherErrorComposer.INVALID_CODE));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Habbo habbo = client.getHabbo();
|
|
||||||
if (habbo == null) return;
|
|
||||||
|
|
||||||
if (voucher.isExhausted()) {
|
if (voucher.isExhausted()) {
|
||||||
if (!Emulator.getGameEnvironment().getCatalogManager().deleteVoucher(voucher)) {
|
client.sendResponse(new RedeemVoucherErrorComposer(Emulator.getGameEnvironment().getCatalogManager().deleteVoucher(voucher) ? RedeemVoucherErrorComposer.INVALID_CODE : RedeemVoucherErrorComposer.TECHNICAL_ERROR));
|
||||||
client.sendResponse(new RedeemVoucherErrorComposer(RedeemVoucherErrorComposer.TECHNICAL_ERROR));
|
return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (voucher.hasUserExhausted(habbo.getHabboInfo().getId())) {
|
if (voucher.hasUserExhausted(habbo.getHabboInfo().getId())) {
|
||||||
@ -541,12 +538,6 @@ public class CatalogManager {
|
|||||||
|
|
||||||
voucher.addHistoryEntry(habbo.getHabboInfo().getId());
|
voucher.addHistoryEntry(habbo.getHabboInfo().getId());
|
||||||
|
|
||||||
if (voucher.isExhausted()) {
|
|
||||||
if (!Emulator.getGameEnvironment().getCatalogManager().deleteVoucher(voucher)) {
|
|
||||||
client.sendResponse(new RedeemVoucherErrorComposer(RedeemVoucherErrorComposer.TECHNICAL_ERROR));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (voucher.points > 0) {
|
if (voucher.points > 0) {
|
||||||
client.getHabbo().getHabboInfo().addCurrencyAmount(voucher.pointsType, voucher.points);
|
client.getHabbo().getHabboInfo().addCurrencyAmount(voucher.pointsType, voucher.points);
|
||||||
client.sendResponse(new UserPointsComposer(client.getHabbo().getHabboInfo().getCurrencyAmount(voucher.pointsType), voucher.points, voucher.pointsType));
|
client.sendResponse(new UserPointsComposer(client.getHabbo().getHabboInfo().getCurrencyAmount(voucher.pointsType), voucher.points, voucher.pointsType));
|
||||||
@ -559,7 +550,6 @@ public class CatalogManager {
|
|||||||
|
|
||||||
if (voucher.catalogItemId > 0) {
|
if (voucher.catalogItemId > 0) {
|
||||||
CatalogItem item = this.getCatalogItem(voucher.catalogItemId);
|
CatalogItem item = this.getCatalogItem(voucher.catalogItemId);
|
||||||
|
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
this.purchaseItem(null, item, client.getHabbo(), 1, "", true);
|
this.purchaseItem(null, item, client.getHabbo(), 1, "", true);
|
||||||
}
|
}
|
||||||
@ -568,7 +558,6 @@ public class CatalogManager {
|
|||||||
client.sendResponse(new RedeemVoucherOKComposer());
|
client.sendResponse(new RedeemVoucherOKComposer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean deleteVoucher(Voucher voucher) {
|
public boolean deleteVoucher(Voucher voucher) {
|
||||||
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM vouchers WHERE code = ?")) {
|
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM vouchers WHERE code = ?")) {
|
||||||
statement.setString(1, voucher.code);
|
statement.setString(1, voucher.code);
|
||||||
|
@ -11,10 +11,12 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
import java.time.Duration;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
@ -23,7 +25,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
public class YoutubeManager {
|
public class YoutubeManager {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(YoutubeManager.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(YoutubeManager.class);
|
||||||
|
|
||||||
public class YoutubeVideo {
|
public static class YoutubeVideo {
|
||||||
private final String id;
|
private final String id;
|
||||||
private final int duration;
|
private final int duration;
|
||||||
|
|
||||||
@ -41,7 +43,7 @@ public class YoutubeManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class YoutubePlaylist {
|
public static class YoutubePlaylist {
|
||||||
private final String id;
|
private final String id;
|
||||||
private final String name;
|
private final String name;
|
||||||
private final String description;
|
private final String description;
|
||||||
@ -71,8 +73,9 @@ public class YoutubeManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private THashMap<Integer, ArrayList<YoutubePlaylist>> playlists = new THashMap<>();
|
private final THashMap<Integer, ArrayList<YoutubePlaylist>> playlists = new THashMap<>();
|
||||||
private THashMap<String, YoutubePlaylist> playlistCache = new THashMap<>();
|
private final THashMap<String, YoutubePlaylist> playlistCache = new THashMap<>();
|
||||||
|
private final String apiKey = Emulator.getConfig().getValue("youtube.apikey");
|
||||||
|
|
||||||
public void load() {
|
public void load() {
|
||||||
this.playlists.clear();
|
this.playlists.clear();
|
||||||
@ -94,11 +97,15 @@ public class YoutubeManager {
|
|||||||
youtubeDataLoaderPool.submit(() -> {
|
youtubeDataLoaderPool.submit(() -> {
|
||||||
ArrayList<YoutubePlaylist> playlists = this.playlists.getOrDefault(itemId, new ArrayList<>());
|
ArrayList<YoutubePlaylist> playlists = this.playlists.getOrDefault(itemId, new ArrayList<>());
|
||||||
|
|
||||||
YoutubePlaylist playlist = this.getPlaylistDataById(playlistId);
|
YoutubePlaylist playlist;
|
||||||
if (playlist != null) {
|
|
||||||
playlists.add(playlist);
|
try {
|
||||||
} else {
|
playlist = this.getPlaylistDataById(playlistId);
|
||||||
LOGGER.error("Failed to load YouTube playlist: " + playlistId);
|
if (playlist != null) {
|
||||||
|
playlists.add(playlist);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOGGER.error("Failed to load YouTube playlist {} ERROR: {}", playlistId, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.playlists.put(itemId, playlists);
|
this.playlists.put(itemId, playlists);
|
||||||
@ -120,56 +127,102 @@ public class YoutubeManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public YoutubePlaylist getPlaylistDataById(String playlistId) {
|
public YoutubePlaylist getPlaylistDataById(String playlistId) throws IOException {
|
||||||
if (this.playlistCache.containsKey(playlistId)) return this.playlistCache.get(playlistId);
|
if (this.playlistCache.containsKey(playlistId)) return this.playlistCache.get(playlistId);
|
||||||
|
if(apiKey.isEmpty()) return null;
|
||||||
|
|
||||||
try {
|
YoutubePlaylist playlist;
|
||||||
URL myUrl = new URL("https://www.youtube.com/playlist?list=" + playlistId);
|
URL playlistInfo = new URL("https://youtube.googleapis.com/youtube/v3/playlists?part=snippet&id=" + playlistId + "&maxResults=1&key=" + apiKey);
|
||||||
|
HttpsURLConnection playlistCon = (HttpsURLConnection) playlistInfo.openConnection();
|
||||||
|
if (playlistCon.getResponseCode() != 200) {
|
||||||
|
InputStream errorInputStream = playlistCon.getErrorStream();
|
||||||
|
InputStreamReader playlistISR = new InputStreamReader(errorInputStream);
|
||||||
|
BufferedReader playlistBR = new BufferedReader(playlistISR);
|
||||||
|
JsonObject errorObj = JsonParser.parseReader(playlistBR).getAsJsonObject();
|
||||||
|
String message = errorObj.get("error").getAsJsonObject().get("message").getAsString();
|
||||||
|
LOGGER.error("Failed to load YouTube playlist {} ERROR: {}", playlistId, message);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
InputStream playlistInputStream = playlistCon.getInputStream();
|
||||||
|
InputStreamReader playlistISR = new InputStreamReader(playlistInputStream);
|
||||||
|
BufferedReader playlistBR = new BufferedReader(playlistISR);
|
||||||
|
|
||||||
HttpsURLConnection conn = (HttpsURLConnection) myUrl.openConnection();
|
JsonObject playlistData = JsonParser.parseReader(playlistBR).getAsJsonObject();
|
||||||
conn.setRequestProperty("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
|
|
||||||
conn.setRequestProperty("accept-language", "en-GB,en-US;q=0.9,en;q=0.8");
|
|
||||||
conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3731.0 Safari/537.36");
|
|
||||||
|
|
||||||
InputStream is = conn.getInputStream();
|
JsonArray playlists = playlistData.get("items").getAsJsonArray();
|
||||||
InputStreamReader isr = new InputStreamReader(is);
|
if (playlists.size() == 0) {
|
||||||
YoutubePlaylist playlist;
|
LOGGER.error("Playlist {} not found!", playlistId);
|
||||||
try (BufferedReader br = new BufferedReader(isr)) {
|
return null;
|
||||||
playlist = null;
|
}
|
||||||
String inputLine;
|
JsonObject playlistItem = playlists.get(0).getAsJsonObject().get("snippet").getAsJsonObject();
|
||||||
while ((inputLine = br.readLine()) != null) {
|
|
||||||
if (inputLine.contains("window[\"ytInitialData\"]")) {
|
|
||||||
JsonObject obj = new JsonParser().parse(inputLine.substring(inputLine.indexOf("{")).replace(";", "")).getAsJsonObject();
|
|
||||||
|
|
||||||
JsonObject meta = obj.get("microformat").getAsJsonObject().get("microformatDataRenderer").getAsJsonObject();
|
String name = playlistItem.get("title").getAsString();
|
||||||
String name = meta.get("title").getAsString();
|
String description = playlistItem.get("description").getAsString();
|
||||||
String description = meta.get("description").getAsString();
|
|
||||||
|
|
||||||
ArrayList<YoutubeVideo> videos = new ArrayList<>();
|
ArrayList < YoutubeVideo > videos = new ArrayList < > ();
|
||||||
|
String nextPageToken = "";
|
||||||
|
do {
|
||||||
|
ArrayList < String > videoIds = new ArrayList < > ();
|
||||||
|
URL playlistItems;
|
||||||
|
|
||||||
JsonArray rawVideos = obj.get("contents").getAsJsonObject().get("twoColumnBrowseResultsRenderer").getAsJsonObject().get("tabs").getAsJsonArray().get(0).getAsJsonObject().get("tabRenderer").getAsJsonObject().get("content").getAsJsonObject().get("sectionListRenderer").getAsJsonObject().get("contents").getAsJsonArray().get(0).getAsJsonObject().get("itemSectionRenderer").getAsJsonObject().get("contents").getAsJsonArray().get(0).getAsJsonObject().get("playlistVideoListRenderer").getAsJsonObject().get("contents").getAsJsonArray();
|
if (nextPageToken.isEmpty()) {
|
||||||
|
playlistItems = new URL("https://youtube.googleapis.com/youtube/v3/playlistItems?part=snippet%2Cstatus&playlistId=" + playlistId + "&maxResults=50&key=" + apiKey);
|
||||||
for (JsonElement rawVideo : rawVideos) {
|
} else {
|
||||||
JsonObject videoData = rawVideo.getAsJsonObject().get("playlistVideoRenderer").getAsJsonObject();
|
playlistItems = new URL("https://youtube.googleapis.com/youtube/v3/playlistItems?part=snippet%2Cstatus&playlistId=" + playlistId + "&pageToken=" + nextPageToken + "&maxResults=50&key=" + apiKey);
|
||||||
if (!videoData.has("lengthSeconds")) continue; // removed videos
|
|
||||||
videos.add(new YoutubeVideo(videoData.get("videoId").getAsString(), Integer.valueOf(videoData.get("lengthSeconds").getAsString())));
|
|
||||||
}
|
|
||||||
|
|
||||||
playlist = new YoutubePlaylist(playlistId, name, description, videos);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.playlistCache.put(playlistId, playlist);
|
HttpsURLConnection con = (HttpsURLConnection) playlistItems.openConnection();
|
||||||
|
|
||||||
return playlist;
|
InputStream is = con.getInputStream();
|
||||||
} catch (java.io.IOException e) {
|
InputStreamReader isr = new InputStreamReader(is);
|
||||||
e.printStackTrace();
|
BufferedReader br = new BufferedReader(isr);
|
||||||
|
JsonObject object = JsonParser.parseReader(br).getAsJsonObject();
|
||||||
|
|
||||||
|
JsonArray rawV = object.get("items").getAsJsonArray();
|
||||||
|
for (JsonElement rawVideo: rawV) {
|
||||||
|
JsonObject videoData = rawVideo.getAsJsonObject().get("snippet").getAsJsonObject();
|
||||||
|
JsonObject videoStatus = rawVideo.getAsJsonObject().get("status").getAsJsonObject();
|
||||||
|
if (!videoStatus.get("privacyStatus").getAsString().equals("public"))
|
||||||
|
continue; // removed videos
|
||||||
|
videoIds.add(videoData.get("resourceId").getAsJsonObject().get("videoId").getAsString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!videoIds.isEmpty()) {
|
||||||
|
URL VideoItems;
|
||||||
|
|
||||||
|
String commaSeparatedVideos = String.join(",", videoIds);
|
||||||
|
|
||||||
|
VideoItems = new URL("https://youtube.googleapis.com/youtube/v3/videos?part=contentDetails&id=" + commaSeparatedVideos + "&maxResults=50&key=" + apiKey);
|
||||||
|
HttpsURLConnection con1 = (HttpsURLConnection) VideoItems.openConnection();
|
||||||
|
InputStream is1 = con1.getInputStream();
|
||||||
|
InputStreamReader isr1 = new InputStreamReader(is1);
|
||||||
|
BufferedReader br1 = new BufferedReader(isr1);
|
||||||
|
JsonObject object1 = JsonParser.parseReader(br1).getAsJsonObject();
|
||||||
|
JsonArray Vds = object1.get("items").getAsJsonArray();
|
||||||
|
for (JsonElement rawVideo: Vds) {
|
||||||
|
JsonObject contentDetails = rawVideo.getAsJsonObject().get("contentDetails").getAsJsonObject();
|
||||||
|
int duration = (int) Duration.parse(contentDetails.get("duration").getAsString()).getSeconds();
|
||||||
|
if (duration < 1) continue;
|
||||||
|
videos.add(new YoutubeVideo(rawVideo.getAsJsonObject().get("id").getAsString(), duration));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (object.has("nextPageToken")) {
|
||||||
|
nextPageToken = object.get("nextPageToken").getAsString();
|
||||||
|
} else {
|
||||||
|
nextPageToken = null;
|
||||||
|
}
|
||||||
|
} while (nextPageToken != null);
|
||||||
|
|
||||||
|
if (videos.isEmpty()) {
|
||||||
|
LOGGER.warn("Playlist {} has no videos!", playlistId);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
playlist = new YoutubePlaylist(playlistId, name, description, videos);
|
||||||
|
|
||||||
|
this.playlistCache.put(playlistId, playlist);
|
||||||
|
|
||||||
|
return playlist;
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<YoutubePlaylist> getPlaylistsForItemId(int itemId) {
|
public ArrayList<YoutubePlaylist> getPlaylistsForItemId(int itemId) {
|
||||||
|
@ -184,8 +184,6 @@ public class ModToolManager {
|
|||||||
|
|
||||||
public void quickTicket(Habbo reported, String reason, String message) {
|
public void quickTicket(Habbo reported, String reason, String message) {
|
||||||
ModToolIssue issue = new ModToolIssue(0, reason, reported.getHabboInfo().getId(), reported.getHabboInfo().getUsername(), 0, message, ModToolTicketType.AUTOMATIC);
|
ModToolIssue issue = new ModToolIssue(0, reason, reported.getHabboInfo().getId(), reported.getHabboInfo().getUsername(), 0, message, ModToolTicketType.AUTOMATIC);
|
||||||
if (Emulator.getPluginManager().fireEvent(new SupportTicketEvent(null, issue)).isCancelled())
|
|
||||||
return;
|
|
||||||
|
|
||||||
Emulator.getGameEnvironment().getModToolManager().addTicket(issue);
|
Emulator.getGameEnvironment().getModToolManager().addTicket(issue);
|
||||||
Emulator.getGameEnvironment().getModToolManager().updateTicketToMods(issue);
|
Emulator.getGameEnvironment().getModToolManager().updateTicketToMods(issue);
|
||||||
|
@ -269,7 +269,7 @@ public class HabboStats implements Runnable {
|
|||||||
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM users_settings WHERE user_id = ? LIMIT 1")) {
|
try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM users_settings WHERE user_id = ? LIMIT 1")) {
|
||||||
statement.setInt(1, habboInfo.getId());
|
statement.setInt(1, habboInfo.getId());
|
||||||
try (ResultSet set = statement.executeQuery()) {
|
try (ResultSet set = statement.executeQuery()) {
|
||||||
set.first();
|
set.next();
|
||||||
if (set.getRow() != 0) {
|
if (set.getRow() != 0) {
|
||||||
stats = new HabboStats(set, habboInfo);
|
stats = new HabboStats(set, habboInfo);
|
||||||
} else {
|
} else {
|
||||||
|
@ -64,10 +64,12 @@ public class YoutubeRequestStateChange extends MessageHandler {
|
|||||||
|
|
||||||
HabboItem item = this.client.getHabbo().getHabboInfo().getCurrentRoom().getHabboItem(itemId);
|
HabboItem item = this.client.getHabbo().getHabboInfo().getCurrentRoom().getHabboItem(itemId);
|
||||||
|
|
||||||
if (item == null || !(item instanceof InteractionYoutubeTV)) return;
|
if (!(item instanceof InteractionYoutubeTV)) return;
|
||||||
|
|
||||||
InteractionYoutubeTV tv = (InteractionYoutubeTV) item;
|
InteractionYoutubeTV tv = (InteractionYoutubeTV) item;
|
||||||
|
|
||||||
|
if(tv.currentPlaylist == null || tv.currentPlaylist.getVideos().isEmpty()) return;
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case PAUSE:
|
case PAUSE:
|
||||||
tv.playing = false;
|
tv.playing = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user