Skip to content

Commit

Permalink
Merge branch 'Aspen-Discovery:24.08.00' into show_summon_search_tools
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexanderBlanchardAC authored Jul 22, 2024
2 parents 4975993 + 123ba2f commit 3d91049
Show file tree
Hide file tree
Showing 103 changed files with 1,735 additions and 565 deletions.
14 changes: 7 additions & 7 deletions code/aspen_app/src/components/LibraryCardScanner.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
import { useNavigation, useRoute } from '@react-navigation/native';
import { BarCodeScanner } from 'expo-barcode-scanner';
import { Camera, CameraView } from 'expo-camera';
import { Button, View } from 'native-base';
import React from 'react';
import { StyleSheet } from 'react-native';
import BarcodeMask from 'react-native-barcode-mask';
import { navigate } from '../helpers/RootNavigator';
import { loadError } from './loadError';
import { LoadingSpinner, loadingSpinner } from './loadingSpinner';
import { LoadingSpinner } from './loadingSpinner';

export default function LibraryCardScanner() {
const navigation = useNavigation();
const allowCode39 = useRoute().params?.allowCode39 ?? false;
const [hasPermission, setHasPermission] = React.useState(null);
const [scanned, setScanned] = React.useState(false);
let allowedBarcodes = [BarCodeScanner.Constants.BarCodeType.code128, BarCodeScanner.Constants.BarCodeType.codabar, BarCodeScanner.Constants.BarCodeType.ean13, BarCodeScanner.Constants.BarCodeType.ean8, BarCodeScanner.Constants.BarCodeType.itf14];
let allowedBarcodes = ['code128', 'codabar', 'ean13', 'ean8', 'itf14'];

React.useEffect(() => {
(async () => {
const { status } = await BarCodeScanner.requestPermissionsAsync();
const { status } = await Camera.requestCameraPermissionsAsync();
setHasPermission(status === 'granted');
})();
}, []);
Expand All @@ -43,15 +43,15 @@ export default function LibraryCardScanner() {
}

if (allowCode39) {
allowedBarcodes = [BarCodeScanner.Constants.BarCodeType.code128, BarCodeScanner.Constants.BarCodeType.codabar, BarCodeScanner.Constants.BarCodeType.ean13, BarCodeScanner.Constants.BarCodeType.ean8, BarCodeScanner.Constants.BarCodeType.itf14, BarCodeScanner.Constants.BarCodeType.code39];
allowedBarcodes = ['code128', 'codabar', 'ean13', 'ean8', 'itf14', 'code39'];
}

return (
<View style={{ flex: 1 }}>
<BarCodeScanner onBarCodeScanned={scanned ? undefined : handleBarCodeScanned} style={[StyleSheet.absoluteFillObject, styles.container]} barCodeTypes={allowedBarcodes}>
<CameraView onBarcodeScanned={scanned ? undefined : handleBarCodeScanned} style={[StyleSheet.absoluteFillObject, styles.container]} barcodeScannerSettings={{ barcodeTypes: allowedBarcodes }}>
<BarcodeMask edgeColor="#62B1F6" showAnimatedLine={false} />
{scanned && <Button onPress={() => setScanned(false)}>Scan Again</Button>}
</BarCodeScanner>
</CameraView>
</View>
);
}
Expand Down
10 changes: 6 additions & 4 deletions code/aspen_app/src/components/Scanner.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useIsFocused } from '@react-navigation/native';
import { BarCodeScanner } from 'expo-barcode-scanner';
import { Camera, CameraView } from 'expo-camera';
import { Button, Center, View } from 'native-base';
import React from 'react';
import { Platform, StyleSheet } from 'react-native';
Expand All @@ -17,9 +17,11 @@ export default function Scanner() {
const [scanned, setScanned] = React.useState(false);
const { language } = React.useContext(LanguageContext);

let allowedBarcodes = ['upc_a', 'upc_e', 'ean13', 'ean8', 'codabar'];

React.useEffect(() => {
(async () => {
const { status } = await BarCodeScanner.requestPermissionsAsync();
const { status } = await Camera.requestCameraPermissionsAsync();
setHasPermission(status === 'granted');
})();
}, []);
Expand Down Expand Up @@ -54,9 +56,9 @@ export default function Scanner() {
<View style={{ flex: 1, flexDirection: 'column', justifyContent: 'flex-end' }}>
{isFocused && (
<>
<BarCodeScanner onBarCodeScanned={scanned ? undefined : handleBarCodeScanned} style={[StyleSheet.absoluteFillObject, styles.container]} barCodeTypes={[BarCodeScanner.Constants.BarCodeType.upc_a, BarCodeScanner.Constants.BarCodeType.upc_e, BarCodeScanner.Constants.BarCodeType.upc_ean, BarCodeScanner.Constants.BarCodeType.ean13, BarCodeScanner.Constants.BarCodeType.ean8]}>
<CameraView onBarcodeScanned={scanned ? undefined : handleBarCodeScanned} style={[StyleSheet.absoluteFillObject, styles.container]} barcodeScannerSettings={{ barcodeTypes: allowedBarcodes }}>
<BarcodeMask edgeColor="#62B1F6" showAnimatedLine={false} />
</BarCodeScanner>
</CameraView>
{scanned && (
<Center pb={20}>
<Button onPress={() => setScanned(false)}>{getTermFromDictionary(language, 'scan_again')}</Button>
Expand Down
4 changes: 2 additions & 2 deletions code/aspen_app/src/screens/BrowseCategory/Home.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { loadingSpinner } from '../../components/loadingSpinner';
import { DisplayAndroidEndOfSupportMessage, DisplaySystemMessage } from '../../components/Notifications';
import { NotificationsOnboard } from '../../components/NotificationsOnboard';
import { BrowseCategoryContext, LanguageContext, LibrarySystemContext, SearchContext, SystemMessagesContext, ThemeContext, UserContext } from '../../context/initialContext';
import { navigateStack } from '../../helpers/RootNavigator';
import { navigateStack, pushNavigateStack } from '../../helpers/RootNavigator';
import { getTermFromDictionary } from '../../translations/TranslationService';
import { formatDiscoveryVersion, reloadBrowseCategories } from '../../util/loadLibrary';
import { updateBrowseCategoryStatus } from '../../util/loadPatron';
Expand Down Expand Up @@ -303,7 +303,7 @@ export const DiscoverHomeScreen = () => {
};

const onPressSettings = () => {
navigateStack('MoreTab', 'MyPreferences_ManageBrowseCategories', {});
navigateStack('MoreTab', 'MyPreferences_ManageBrowseCategories', { prevRoute: 'HomeScreen' });
};

const handleOnPressCategory = (label, key, source) => {
Expand Down
11 changes: 7 additions & 4 deletions code/aspen_app/src/screens/More/MoreMenu.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Entypo, MaterialIcons } from '@expo/vector-icons';
import { ListItem } from '@rneui/themed';
import * as WebBrowser from 'expo-web-browser';
import { useNavigation } from '@react-navigation/native';
import _ from 'lodash';
import moment from 'moment';
import { Box, Divider, FlatList, HStack, Icon, Pressable, ScrollView, Text, useColorModeValue, useContrastText, useToken, VStack } from 'native-base';
Expand All @@ -16,11 +17,13 @@ export const MoreMenu = () => {
const { locations } = React.useContext(LibraryBranchContext);
const { menu } = React.useContext(LibrarySystemContext);
const hasMenuItems = _.size(menu);
const navigation = useNavigation();

const viewAllLocations = () => {
navigate('AllLocations', {});
};

React.useLayoutEffect(() => {
navigation.setOptions({
headerLeft: null,
});
}, [navigation]);
return (
<ScrollView>
<Box>
Expand Down
21 changes: 13 additions & 8 deletions code/aspen_app/src/screens/MyAccount/Settings/BrowseCategories.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useNavigation, useRoute } from '@react-navigation/native';
import { useRoute, useNavigation, CommonActions, StackActions } from '@react-navigation/native';
import { Box, FlatList, HStack, Switch, Text, Pressable, ChevronLeftIcon } from 'native-base';
import React from 'react';
import { loadingSpinner } from '../../../components/loadingSpinner';
import { BrowseCategoryContext, LanguageContext, LibrarySystemContext, ThemeContext } from '../../../context/initialContext';
import { navigate } from '../../../helpers/RootNavigator';

import { getBrowseCategoryListForUser, updateBrowseCategoryStatus } from '../../../util/loadPatron';

Expand All @@ -15,16 +14,22 @@ export const Settings_BrowseCategories = () => {
const { language } = React.useContext(LanguageContext);
const { list, updateBrowseCategoryList } = React.useContext(BrowseCategoryContext);
const { theme } = React.useContext(ThemeContext);
const route = useRoute();
console.log(route.params);

const handleGoBack = () => {
if (route?.params?.prevRoute === 'HomeScreen') {
navigation.dispatch(CommonActions.setParams({ prevRoute: null }));
navigation.dispatch(StackActions.replace('MoreMenu'));
} else {
navigation.goBack();
}
};

React.useLayoutEffect(() => {
navigation.setOptions({
headerLeft: () => (
<Pressable
onPress={() => {
navigation.goBack();
}}
mr={3}
hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }}>
<Pressable onPress={handleGoBack} mr={3} hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }}>
<ChevronLeftIcon size="md" ml={1} color={theme['colors']['primary']['baseContrast']} />
</Pressable>
),
Expand Down
46 changes: 6 additions & 40 deletions code/aspen_app/src/screens/SCO/SelfCheckScanner.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useIsFocused, useRoute } from '@react-navigation/native';
import { BarCodeScanner } from 'expo-barcode-scanner';
import { Camera, CameraView } from 'expo-camera';
import _ from 'lodash';
import { Button, Center, View } from 'native-base';
import React from 'react';
Expand All @@ -21,43 +21,9 @@ export default function SelfCheckScanner() {
const [hasPermission, setHasPermission] = React.useState(null);
const [scanned, setScanned] = React.useState(false);

let allowedBarcodes = [BarCodeScanner.Constants.BarCodeType.upc_a, BarCodeScanner.Constants.BarCodeType.upc_e, BarCodeScanner.Constants.BarCodeType.upc_ean, BarCodeScanner.Constants.BarCodeType.ean13, BarCodeScanner.Constants.BarCodeType.ean8, BarCodeScanner.Constants.BarCodeType.codabar];
let allowedBarcodes = ['upc_a', 'upc_e', 'ean13', 'ean8', 'codabar'];
if (selfCheckSettings.barcodeStyles && _.isArray(selfCheckSettings.barcodeStyles)) {
const barcodeStyles = selfCheckSettings.barcodeStyles;
allowedBarcodes = [];
_.map(barcodeStyles, function (item, index, collection) {
if (item === 'aztec') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.aztec);
} else if (item === 'codabar') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.codabar);
} else if (item === 'code39') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.code39);
} else if (item === 'code93') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.code93);
} else if (item === 'code128') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.code128);
} else if (item === 'datamatrix') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.datamatrix);
} else if (item === 'ean13') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.ean13);
} else if (item === 'ean8') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.ean8);
} else if (item === 'itf14') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.itf14);
} else if (item === 'pdf417') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.pdf417);
} else if (item === 'upc_e') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.upc_e);
} else if (item === 'upc_a') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.upc_a);
} else if (item === 'upc_ean') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.upc_ean);
} else if (item === 'qr') {
allowedBarcodes = _.concat(allowedBarcodes, BarCodeScanner.Constants.BarCodeType.qr);
} else {
// invalid or unexpected value
}
});
allowedBarcodes = selfCheckSettings.barcodeStyles;
}

let activeAccount = useRoute().params?.activeAccount ?? false;
Expand All @@ -66,7 +32,7 @@ export default function SelfCheckScanner() {

React.useEffect(() => {
(async () => {
const { status } = await BarCodeScanner.requestPermissionsAsync();
const { status } = await Camera.requestCameraPermissionsAsync();
setHasPermission(status === 'granted');
/* for testing on simulators, assign a random barcode from array since camera does not work */
/*if (!Device.isDevice) {
Expand Down Expand Up @@ -116,9 +82,9 @@ export default function SelfCheckScanner() {
<View style={{ flex: 1, flexDirection: 'column', justifyContent: 'flex-end' }}>
{isFocused && (
<>
<BarCodeScanner onBarCodeScanned={scanned ? undefined : handleBarCodeScanned} style={[StyleSheet.absoluteFillObject, styles.container]} barCodeTypes={allowedBarcodes}>
<CameraView onBarcodeScanned={scanned ? undefined : handleBarCodeScanned} style={[StyleSheet.absoluteFillObject, styles.container]} barcodeScannerSettings={{ barcodeTypes: allowedBarcodes }}>
<BarcodeMask edgeColor="#62B1F6" showAnimatedLine={false} />
</BarCodeScanner>
</CameraView>
{scanned && (
<Center pb={20}>
<Button onPress={() => setScanned(false)}>{getTermFromDictionary(language, 'scan_again')}</Button>
Expand Down
37 changes: 31 additions & 6 deletions code/aspen_app/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -9535,9 +9535,9 @@ fast-levenshtein@^2.0.6:
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==

fast-loops@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/fast-loops/-/fast-loops-1.1.3.tgz#ce96adb86d07e7bf9b4822ab9c6fac9964981f75"
integrity sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==
version "1.1.4"
resolved "https://registry.yarnpkg.com/fast-loops/-/fast-loops-1.1.4.tgz#61bc77d518c0af5073a638c6d9d5c7683f069ce2"
integrity sha512-8dbd3XWoKCTms18ize6JmQF1SFnnfj5s0B7rRry22EofgMu7B6LKHVh+XfFqFGsqnbH54xgeO83PzpKI+ODhlg==

fast-xml-parser@^4.0.12:
version "4.2.5"
Expand Down Expand Up @@ -13827,7 +13827,16 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==

"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"

string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
Expand Down Expand Up @@ -13932,7 +13941,7 @@ stringify-entities@^3.1.0:
character-entities-legacy "^1.0.0"
xtend "^4.0.0"

"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
Expand All @@ -13946,6 +13955,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"

strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"

strip-ansi@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
Expand Down Expand Up @@ -14835,7 +14851,7 @@ word-wrap@^1.2.5:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==

"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
Expand All @@ -14853,6 +14869,15 @@ wrap-ansi@^6.2.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"

wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"

wrap-ansi@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
Expand Down
Binary file modified code/axis_360_export/axis_360_export.jar
Binary file not shown.
Binary file modified code/carlx_export/carlx_export.jar
Binary file not shown.
Binary file modified code/cloud_library_export/cloud_library_export.jar
Binary file not shown.
Binary file modified code/course_reserves_indexer/course_reserves_indexer.jar
Binary file not shown.
Binary file modified code/cron/cron.jar
Binary file not shown.
Binary file modified code/events_indexer/events_indexer.jar
Binary file not shown.
Binary file modified code/evergreen_export/evergreen_export.jar
Binary file not shown.
Binary file modified code/evolve_export/evolve_export.jar
Binary file not shown.
Binary file modified code/hoopla_export/hoopla_export.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ boolean isItemIncluded(String itemIdentifier, String recordType, String location
}

//Check Formats to include & exclude
if (isIncluded && !format.isEmpty()){
if (isIncluded && format != null && !format.isEmpty()){
if (!matchAllFormats) {
if (!formatPattern.matcher(format).matches()) {
isIncluded = false;
Expand Down
Binary file modified code/koha_export/koha_export.jar
Binary file not shown.
Binary file modified code/oai_indexer/oai_indexer.jar
Binary file not shown.
Binary file modified code/overdrive_extract/overdrive_extract.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -785,7 +785,7 @@ private boolean loadProductsFromAPI(int loadType, long startTime) throws SocketT
return false;
}
}else{
logEntry.incErrors("Unable to load library information for library " + settings.getAccountId());
logEntry.incErrors("Unable to load library product information for library " + settings.getAccountId());
if (libraryInfoResponse.getMessage() != null){
logEntry.addNote(libraryInfoResponse.getMessage());
}
Expand Down Expand Up @@ -922,7 +922,7 @@ private boolean loadAccountInformationFromAPI() throws SocketTimeoutException {
return false;
}
}else{
logEntry.incErrors("Unable to load library information for library " + settings.getAccountId());
logEntry.incErrors("Unable to load library account information for library " + settings.getAccountId());
if (libraryInfoResponse.getMessage() != null){
logEntry.addNote(libraryInfoResponse.getMessage());
}
Expand Down Expand Up @@ -1694,7 +1694,7 @@ private boolean connectToOverDriveAPI() throws SocketTimeoutException {
overDriveAPIExpiration = new Date().getTime() + (parser.getLong("expires_in") * 1000) - 10000;
//logger.debug("Libby token is " + overDriveAPIToken);
} else {
logger.error("Received error " + conn.getResponseCode() + " connecting to Libby authentication service");
logger.error("Received error " + conn.getResponseCode() + " connecting to Libby authentication service. Encoded auth header: " + encoded);
// Get any errors
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
String line;
Expand Down
Binary file modified code/palace_project_export/palace_project_export.jar
Binary file not shown.
Loading

0 comments on commit 3d91049

Please sign in to comment.