Skip to content

Commit 9c9d532

Browse files
authored
Merge pull request #337 from Manuito83/develop
Merge for v3.9.1
2 parents c2591f2 + 9230947 commit 9c9d532

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+3170
-1071
lines changed

android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ android {
3535

3636
defaultConfig {
3737
applicationId "com.manuito.tornpda"
38-
minSdkVersion 23
38+
minSdkVersion flutter.minSdkVersion
3939
targetSdkVersion 36 // See android/build.gradle when updating as well, for packages bug fix (if still needed)
4040
multiDexEnabled true
4141
versionCode flutterVersionCode.toInteger()

android/app/src/main/java/com/manuito/tornpda/HomeWidgetRankedWar.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ private void loadRankedWarData(RemoteViews view, Context context, SharedPreferen
4747
String state = prefs.getString("rw_state", "none");
4848
switch (state) {
4949
case "upcoming":
50-
setupUpcomingWarLayout(view, prefs);
50+
setupUpcomingWarLayout(view, prefs, isDarkMode);
5151
break;
5252
case "active":
5353
setupActiveWarLayout(view, prefs);
5454
break;
5555
case "finished":
56-
setupFinishedWarLayout(view, prefs);
56+
setupFinishedWarLayout(view, prefs, isDarkMode);
5757
break;
5858
default:
5959
setupNoWarLayout(view, "No ranked war data");
@@ -88,7 +88,7 @@ private void setupClickListeners(RemoteViews view, Context context) {
8888
view.setOnClickPendingIntent(R.id.rw_widget_container, pendingIntent);
8989
}
9090

91-
private void setupUpcomingWarLayout(RemoteViews view, SharedPreferences prefs) {
91+
private void setupUpcomingWarLayout(RemoteViews view, SharedPreferences prefs, boolean isDarkMode) {
9292
view.setViewVisibility(R.id.rw_upcoming_layout, View.VISIBLE);
9393
String countdown = prefs.getString("rw_countdown_string", "Loading...");
9494
String date = prefs.getString("rw_date_string", "");
@@ -107,7 +107,8 @@ private void setupUpcomingWarLayout(RemoteViews view, SharedPreferences prefs) {
107107
view.setInt(R.id.rw_upcoming_border_box, "setBackgroundColor", Color.parseColor("#FFA500"));
108108
} else {
109109
view.setInt(R.id.rw_upcoming_border_box, "setBackgroundColor", Color.TRANSPARENT);
110-
view.setTextColor(R.id.rw_upcoming_countdown, Color.parseColor("#000000"));
110+
String countdownColor = isDarkMode ? "#E0E0E0" : "#000000";
111+
view.setTextColor(R.id.rw_upcoming_countdown, Color.parseColor(countdownColor));
111112
}
112113
}
113114

@@ -134,7 +135,7 @@ private void setupActiveWarLayout(RemoteViews view, SharedPreferences prefs) {
134135
view.setProgressBar(R.id.rw_active_progress_bar, targetScore, progress, false);
135136
}
136137

137-
private void setupFinishedWarLayout(RemoteViews view, SharedPreferences prefs) {
138+
private void setupFinishedWarLayout(RemoteViews view, SharedPreferences prefs, boolean isDarkMode) {
138139
view.setViewVisibility(R.id.rw_finished_layout, View.VISIBLE);
139140

140141
int playerScore = prefs.getInt("rw_player_score", 0);
@@ -157,16 +158,20 @@ private void setupFinishedWarLayout(RemoteViews view, SharedPreferences prefs) {
157158
view.setInt(R.id.rw_finished_icon, "setColorFilter", resultColor);
158159

159160
view.setTextViewText(R.id.rw_finished_player_tag, playerTag);
160-
view.setTextColor(R.id.rw_finished_player_tag, Color.parseColor("#0D47A1"));
161+
String playerTagColor = isDarkMode ? "#42A5F5" : "#0D47A1";
162+
view.setTextColor(R.id.rw_finished_player_tag, Color.parseColor(playerTagColor));
161163

162164
view.setTextViewText(R.id.rw_finished_enemy_name, enemyName);
163-
view.setTextColor(R.id.rw_finished_enemy_name, Color.parseColor("#B71C1C"));
165+
String enemyNameColor = isDarkMode ? "#EF5350" : "#B71C1C";
166+
view.setTextColor(R.id.rw_finished_enemy_name, Color.parseColor(enemyNameColor));
164167

165168
view.setTextViewText(R.id.rw_finished_player_score, String.format("%,d", playerScore));
166-
view.setTextColor(R.id.rw_finished_player_score, playerWon ? resultColor : Color.parseColor("#666666"));
169+
String playerScoreColor = isDarkMode ? "#BDBDBD" : "#666666";
170+
view.setTextColor(R.id.rw_finished_player_score, playerWon ? resultColor : Color.parseColor(playerScoreColor));
167171

168172
view.setTextViewText(R.id.rw_finished_enemy_score, String.format("%,d", enemyScore));
169-
view.setTextColor(R.id.rw_finished_enemy_score, !playerWon ? resultColor : Color.parseColor("#666666"));
173+
String enemyScoreColor = isDarkMode ? "#BDBDBD" : "#666666";
174+
view.setTextColor(R.id.rw_finished_enemy_score, !playerWon ? resultColor : Color.parseColor(enemyScoreColor));
170175
}
171176

172177
private void setupNoWarLayout(RemoteViews view, String message) {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<paths xmlns:android="http://schemas.android.com/apk/res/android">
3+
<cache-path name="cache"
4+
path="." />
5+
<external-files-path name="external_files"
6+
path="." />
7+
<external-cache-path name="external_cache"
8+
path="." />
9+
</paths>

cloud_functions/functions/src/foreign_stocks.ts

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,11 @@ async function updateRestock(currentStockData: any, timestamp: number, source: s
217217
country: country,
218218
name: currentStockData.name,
219219
codeName: codeName,
220+
id: currentStockData.id,
221+
cost: currentStockData.cost,
220222
restock: restockTimestamp,
221223
quantity: currentStockData.quantity,
224+
lastUpdated: timestamp,
222225
source: source,
223226
};
224227

@@ -464,7 +467,7 @@ export const fillRestocks = onSchedule({
464467
// UTIL FUNCTION
465468
// Cleans up any periodicMap with more than 200 entries in case we have a leak in any other methods
466469
export const oneTimeClean = onSchedule({
467-
schedule: "0 3 * * 0", // At 03:00 on Sunday
470+
schedule: "0 3 * * *", // At 03:00 every day
468471
region: "us-east4",
469472
memory: "256MiB",
470473
timeoutSeconds: 300
@@ -600,3 +603,63 @@ export const deleteOldStocks = onSchedule({
600603

601604
return null;
602605
});
606+
607+
// Scheduled function to clean up obsolete restock entries
608+
export const cleanupObsoleteRestocks = onSchedule("0 2 * * *", async () => {
609+
logger.info("🧹 Starting cleanup of obsolete restock entries...");
610+
611+
const firebaseAdmin = require("firebase-admin");
612+
const db = firebaseAdmin.database();
613+
614+
try {
615+
const ref = db.ref('stocks/restocks');
616+
const snapshot = await ref.get();
617+
618+
if (!snapshot.exists()) {
619+
logger.info("No restock data found in Realtime Database");
620+
return null;
621+
}
622+
623+
const restockData = snapshot.val();
624+
const now = Math.floor(Date.now() / 1000);
625+
const fifteenDaysAgo = now - (15 * 24 * 60 * 60);
626+
627+
const keysToDelete: string[] = [];
628+
let totalEntries = 0;
629+
let obsoleteEntries = 0;
630+
631+
Object.keys(restockData).forEach(codeNameKey => {
632+
totalEntries++;
633+
const stockData = restockData[codeNameKey];
634+
635+
// Delete if: no lastUpdated field OR lastUpdated is older than 15 days
636+
if (!stockData.lastUpdated ||
637+
typeof stockData.lastUpdated !== 'number' ||
638+
stockData.lastUpdated < fifteenDaysAgo) {
639+
keysToDelete.push(codeNameKey);
640+
obsoleteEntries++;
641+
}
642+
});
643+
644+
if (keysToDelete.length > 0) {
645+
const updates: { [key: string]: null } = {};
646+
keysToDelete.forEach(key => {
647+
updates[`stocks/restocks/${key}`] = null;
648+
});
649+
650+
await db.ref().update(updates);
651+
652+
logger.info(`🧹 Cleanup completed: Deleted ${obsoleteEntries} obsolete entries out of ${totalEntries} total entries`);
653+
logger.info(`📊 Remaining entries: ${totalEntries - obsoleteEntries}`);
654+
} else {
655+
logger.info(`✅ No obsolete entries found. All ${totalEntries} entries are up to date.`);
656+
}
657+
658+
logger.info("✅ Cleanup completed successfully");
659+
} catch (error) {
660+
logger.error(`❌ Error during Realtime Database cleanup: ${error}`);
661+
throw error;
662+
}
663+
664+
return null;
665+
});

cloud_functions/functions/src/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { deactivateStale, deleteStale } from "./stale_users";
2121
import { sendTravelNotifications } from "./travel_check";
2222
import { sendRefillNotifications } from "./refills";
2323
import { evaluateRetals } from "./retals";
24-
import { checkStocks, fillRestocks, oneTimeClean, deleteOldStocks } from "./foreign_stocks";
24+
import { checkStocks, fillRestocks, oneTimeClean, deleteOldStocks, cleanupObsoleteRestocks } from "./foreign_stocks";
2525
import { sendLootRangersNotification } from "./loot_rangers";
2626
import { sendAssistMessage } from "./faction_assist";
2727
import { saveUserPrefs, getUserPrefs, deleteUserPrefs, setOwnSharePrefs, getImportShare } from "./prefs_backup";
@@ -69,7 +69,8 @@ export const stocks = {
6969
checkStocks: checkStocks,
7070
fillRestocks: fillRestocks,
7171
oneTimeClean: oneTimeClean,
72-
deleteOldStocks: deleteOldStocks
72+
deleteOldStocks: deleteOldStocks,
73+
cleanupObsoleteRestocks: cleanupObsoleteRestocks
7374
};
7475

7576
export const lootRangers = {

ios/Flutter/AppFrameworkInfo.plist

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
4-
<dict>
5-
<key>CFBundleDevelopmentRegion</key>
6-
<string>$(DEVELOPMENT_LANGUAGE)</string>
7-
<key>CFBundleExecutable</key>
8-
<string>App</string>
9-
<key>CFBundleIdentifier</key>
10-
<string>io.flutter.flutter.app</string>
11-
<key>CFBundleInfoDictionaryVersion</key>
12-
<string>6.0</string>
13-
<key>CFBundleName</key>
14-
<string>App</string>
15-
<key>CFBundlePackageType</key>
16-
<string>FMWK</string>
17-
<key>CFBundleShortVersionString</key>
18-
<string>1.0</string>
19-
<key>CFBundleSignature</key>
20-
<string>????</string>
21-
<key>CFBundleVersion</key>
22-
<string>1.0</string>
23-
<key>MinimumOSVersion</key>
24-
<string>12.0</string>
25-
</dict>
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>$(DEVELOPMENT_LANGUAGE)</string>
7+
<key>CFBundleExecutable</key>
8+
<string>App</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>io.flutter.flutter.app</string>
11+
<key>CFBundleInfoDictionaryVersion</key>
12+
<string>6.0</string>
13+
<key>CFBundleName</key>
14+
<string>App</string>
15+
<key>CFBundlePackageType</key>
16+
<string>FMWK</string>
17+
<key>CFBundleShortVersionString</key>
18+
<string>1.0</string>
19+
<key>CFBundleSignature</key>
20+
<string>????</string>
21+
<key>CFBundleVersion</key>
22+
<string>1.0</string>
23+
<key>MinimumOSVersion</key>
24+
<string>15.0</string>
25+
</dict>
2626
</plist>

ios/Podfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Uncomment this line to define a global platform for your project
2-
platform :ios, '14.0'
2+
platform :ios, '15.0'
33

44
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
55
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -35,7 +35,7 @@ target 'Runner' do
3535

3636
# This line needs to be updated with the version or commented out (in which case build will take longer, but nothing else)
3737
# Version at https://github.com/invertase/firestore-ios-sdk-frameworks
38-
pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '11.15.0'
38+
pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '12.2.0'
3939

4040
target 'RankedWarWidget' do
4141
inherit! :search_paths

ios/RankedWarWidget/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
<plist version="1.0">
44
<dict>
55
<key>CFBundleShortVersionString</key>
6-
<string>3.9.0</string>
6+
<string>3.9.1</string>
77
<key>CFBundleVersion</key>
8-
<string>576</string>
8+
<string>578</string>
99
<key>NSExtension</key>
1010
<dict>
1111
<key>NSExtensionPointIdentifier</key>

0 commit comments

Comments
 (0)