Skip to content

Commit 5fe40f0

Browse files
authored
Merge branch 'zotero:master' into master
2 parents d3adc7d + 5c67b42 commit 5fe40f0

File tree

103 files changed

+3606
-484
lines changed

Some content is hidden

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

103 files changed

+3606
-484
lines changed

Diff for: .github/ISSUE_TEMPLATE.md

-9
This file was deleted.

Diff for: .github/workflows/android.yml

+6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ jobs:
4040
- name: Execute bundle_translation.py
4141
run: python3 scripts/bundle_translation.py
4242

43+
- name: Grant execute permission for bundle_pdf-worker.py
44+
run: chmod +x scripts/bundle_pdf-worker.py
45+
46+
- name: Execute bundle_pdf-worker.py
47+
run: python3 scripts/bundle_pdf-worker.py
48+
4349
- name: Grant execute permission for gradlew
4450
run: chmod +x gradlew
4551

Diff for: .gitignore

+8
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,11 @@ buildSrc/gradle/
5656
app/src/main/assets/translators/
5757
app/src/main/assets/translation_commit_hash.txt
5858
app/src/main/assets/translator.zip
59+
60+
#pdf-worker generated files:
61+
app/src/main/assets/pdf-worker_commit_hash.txt
62+
app/src/main/assets/pdf-worker.zip
63+
64+
/pdf-worker/cmaps/
65+
/pdf-worker/standard_fonts/
66+
/pdf-worker/worker.js

Diff for: app/src/main/assets/timestamp.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1715335209
1+
1738586822

Diff for: app/src/main/java/org/zotero/android/api/network/CustomResult.kt

+15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.zotero.android.api.network
22

33
import okhttp3.Headers
4+
import org.zotero.android.api.network.CustomResult.GeneralSuccess.NetworkSuccess
45

56
sealed class CustomResult<out T> {
67
sealed class GeneralError : CustomResult<Nothing>() {
@@ -51,4 +52,18 @@ sealed class CustomResult<out T> {
5152
}
5253
}
5354
}
55+
56+
val resultHttpCode: Int? get() {
57+
return when (this) {
58+
is NetworkSuccess -> {
59+
this.httpCode
60+
}
61+
62+
is GeneralError.NetworkError -> {
63+
this.httpCode
64+
}
65+
66+
else -> null
67+
}
68+
}
5469
}

Diff for: app/src/main/java/org/zotero/android/architecture/Defaults.kt

+9
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ open class Defaults @Inject constructor(
5050
private val lastTranslatorCommitHash = "lastTranslatorCommitHash"
5151
private val lastTranslatorDeleted = "lastTranslatorDeleted"
5252
private val lastStylesCommitHash = "lastStylesCommitHash"
53+
private val lastPdfWorkerCommitHash = "lastPdfWorkerCommitHash"
5354

5455
private val isWebDavEnabled = "isWebDavEnabled"
5556
private val webDavVerified = "webDavVerified"
@@ -395,6 +396,14 @@ open class Defaults @Inject constructor(
395396
return sharedPreferences.getInt(performFullSyncGuardKey, 1)
396397
}
397398

399+
fun getLastPdfWorkerCommitHash(): String {
400+
return sharedPreferences.getString(lastPdfWorkerCommitHash, "") ?: ""
401+
}
402+
403+
fun setLastPdfWorkerCommitHash(newValue: String) {
404+
sharedPreferences.edit { putString(lastPdfWorkerCommitHash, newValue) }
405+
}
406+
398407
fun reset() {
399408
setUsername("")
400409
setDisplayName("")

Diff for: app/src/main/java/org/zotero/android/architecture/navigation/CommonScreenNavigation.kt

+15-7
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import androidx.compose.animation.EnterTransition
55
import androidx.compose.animation.slideInHorizontally
66
import androidx.navigation.NavGraphBuilder
77
import androidx.navigation.NavType
8-
import androidx.navigation.navArgument
98
import androidx.navigation.compose.composable
9+
import androidx.navigation.navArgument
1010
import org.zotero.android.screens.addnote.AddNoteScreen
1111
import org.zotero.android.screens.allitems.AllItemsScreen
1212
import org.zotero.android.screens.collections.CollectionsScreen
@@ -18,13 +18,17 @@ import org.zotero.android.screens.mediaviewer.video.VideoPlayerView
1818
import org.zotero.android.screens.webview.ZoteroWebViewScreen
1919
import java.io.File
2020

21+
internal const val ARG_ITEM_DETAILS_SCREEN = "itemDetailsArgs"
22+
internal const val ARG_RETRIEVE_METADATA = "retrieveMetadataArgs"
23+
2124
fun NavGraphBuilder.allItemsScreen(
2225
navigateToCollectionsScreen: () -> Unit,
23-
navigateToItemDetails: () -> Unit,
26+
navigateToItemDetails: (String) -> Unit,
2427
navigateToAddOrEditNote: () -> Unit,
2528
navigateToSinglePicker: () -> Unit,
2629
navigateToAllItemsSort: () -> Unit,
2730
navigateToAddByIdentifier: (addByIdentifierParams: String) -> Unit,
31+
navigateToRetrieveMetadata: (params: String) -> Unit,
2832
navigateToVideoPlayerScreen: () -> Unit,
2933
navigateToImageViewerScreen: () -> Unit,
3034
navigateToZoterWebViewScreen: (String) -> Unit,
@@ -57,6 +61,7 @@ fun NavGraphBuilder.allItemsScreen(
5761
navigateToTagFilter = navigateToTagFilter,
5862
navigateToCollectionPicker = navigateToCollectionPicker,
5963
navigateToScanBarcode = navigateToScanBarcode,
64+
navigateToRetrieveMetadata = navigateToRetrieveMetadata,
6065
)
6166
}
6267
}
@@ -75,9 +80,12 @@ fun NavGraphBuilder.itemDetailsScreen(
7580
onPickFile: () -> Unit,
7681
onShowPdf: (String) -> Unit,
7782
) {
83+
7884
composable(
79-
route = CommonScreenDestinations.ITEM_DETAILS,
80-
arguments = listOf(),
85+
route = "${CommonScreenDestinations.ITEM_DETAILS}/{$ARG_ITEM_DETAILS_SCREEN}",
86+
arguments = listOf(
87+
navArgument(ARG_ITEM_DETAILS_SCREEN) { type = NavType.StringType },
88+
),
8189
) {
8290
ItemDetailsScreen(
8391
onBack = onBack,
@@ -200,8 +208,8 @@ object CommonScreenDestinations {
200208
}
201209

202210

203-
fun ZoteroNavigation.toItemDetails() {
204-
navController.navigate(CommonScreenDestinations.ITEM_DETAILS)
211+
fun ZoteroNavigation.toItemDetails(args: String) {
212+
navController.navigate("${CommonScreenDestinations.ITEM_DETAILS}/$args")
205213
}
206214

207215
fun ZoteroNavigation.toAddOrEditNote() {
@@ -220,4 +228,4 @@ fun ZoteroNavigation.toZoteroWebViewScreen(encodedUrl: String) {
220228
navController.navigate(
221229
"${CommonScreenDestinations.ZOTERO_WEB_VIEW_SCREEN}/$encodedUrl"
222230
)
223-
}
231+
}

Diff for: app/src/main/java/org/zotero/android/architecture/navigation/NavigationDialogs.kt

+2
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ fun NavGraphBuilder.dialogFixedMaxHeight(
4242

4343
fun NavGraphBuilder.dialogDynamicHeight(
4444
route: String,
45+
arguments: List<NamedNavArgument> = emptyList(),
4546
content: @Composable () -> Unit,
4647
) {
4748
customDialog(
4849
route = route,
50+
arguments = arguments,
4951
dialogModifier = Modifier.fillMaxHeight(0.8f),
5052
content = content
5153
)

Diff for: app/src/main/java/org/zotero/android/architecture/navigation/phone/DashboardRootPhoneNavigation.kt

+18-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import androidx.navigation.compose.composable
1919
import androidx.navigation.compose.rememberNavController
2020
import androidx.navigation.navArgument
2121
import org.zotero.android.architecture.EventBusConstants
22+
import org.zotero.android.architecture.navigation.ARG_RETRIEVE_METADATA
2223
import org.zotero.android.architecture.navigation.CommonScreenDestinations
2324
import org.zotero.android.architecture.navigation.DashboardTopLevelDialogs
2425
import org.zotero.android.architecture.navigation.ZoteroNavigation
@@ -40,6 +41,7 @@ import org.zotero.android.architecture.navigation.zoterWebViewScreen
4041
import org.zotero.android.architecture.ui.CustomLayoutSize
4142
import org.zotero.android.pdf.pdfReaderNavScreensForPhone
4243
import org.zotero.android.pdf.toPdfScreen
44+
import org.zotero.android.screens.addbyidentifier.ui.AddByIdentifierScreen
4345
import org.zotero.android.screens.collectionedit.collectionEditNavScreens
4446
import org.zotero.android.screens.collectionedit.toCollectionEditScreen
4547
import org.zotero.android.screens.collectionpicker.CollectionPickerScreen
@@ -49,13 +51,13 @@ import org.zotero.android.screens.dashboard.DashboardViewEffect
4951
import org.zotero.android.screens.dashboard.DashboardViewModel
5052
import org.zotero.android.screens.dashboard.DashboardViewState
5153
import org.zotero.android.screens.filter.FilterScreenPhone
54+
import org.zotero.android.screens.retrievemetadata.RetrieveMetadataScreen
5255
import org.zotero.android.screens.scanbarcode.ui.ScanBarcodeScreen
5356
import org.zotero.android.screens.settings.settingsNavScreens
5457
import org.zotero.android.screens.settings.toSettingsScreen
5558
import org.zotero.android.screens.sortpicker.sortPickerNavScreens
5659
import org.zotero.android.screens.sortpicker.toSortPicker
5760
import org.zotero.android.screens.tagpicker.TagPickerScreen
58-
import org.zotero.android.screens.addbyidentifier.ui.AddByIdentifierScreen
5961
import org.zotero.android.uicomponents.navigation.ZoteroNavHost
6062
import org.zotero.android.uicomponents.singlepicker.SinglePickerScreen
6163
import org.zotero.android.uicomponents.theme.CustomTheme
@@ -134,6 +136,7 @@ internal fun DashboardRootPhoneNavigation(
134136
navigateToVideoPlayerScreen = navigation::toVideoPlayerScreen,
135137
navigateToImageViewerScreen = navigation::toImageViewerScreen,
136138
navigateToZoterWebViewScreen = navigation::toZoteroWebViewScreen,
139+
navigateToRetrieveMetadata = navigation::toRetrieveMetadata,
137140
navigateToTagFilter = navigation::toTagFilter,
138141
navigateToAddByIdentifier = navigation::toAddByIdentifier,
139142
navigateToCollectionPicker = navigation::toCollectionPicker,
@@ -174,6 +177,15 @@ internal fun DashboardRootPhoneNavigation(
174177
TagPickerScreen(onBack = navigation::onBack)
175178
}
176179

180+
composable(
181+
route = "${DashboardRootPhoneDestinations.RETRIEVE_METADATA}/{$ARG_RETRIEVE_METADATA}",
182+
arguments = listOf(
183+
navArgument(ARG_RETRIEVE_METADATA) { type = NavType.StringType },
184+
),
185+
) {
186+
RetrieveMetadataScreen(onBack = navigation::onBack)
187+
}
188+
177189
composable(
178190
route = DashboardRootPhoneDestinations.TAG_FILTER,
179191
arguments = listOf(),
@@ -255,6 +267,7 @@ private object DashboardRootPhoneDestinations {
255267
const val TAG_FILTER = "tagFilter"
256268
const val COLLECTION_PICKER = "collectionPicker"
257269
const val SCAN_BARCODE = "scanBarcode"
270+
const val RETRIEVE_METADATA = "retrieveMetadata"
258271

259272
}
260273

@@ -284,6 +297,10 @@ private fun ZoteroNavigation.toTagFilter() {
284297
navController.navigate(DashboardRootPhoneDestinations.TAG_FILTER)
285298
}
286299

300+
private fun ZoteroNavigation.toRetrieveMetadata(args: String) {
301+
navController.navigate("${DashboardRootPhoneDestinations.RETRIEVE_METADATA}/$args")
302+
}
303+
287304
private fun toAllItems(
288305
navController: NavHostController,
289306
) {

Diff for: app/src/main/java/org/zotero/android/architecture/navigation/tablet/DashboardRootTabletNavigationScreen.kt

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ internal fun DashboardRootTabletNavigationScreen(
3737
onShowPdf: (String) -> Unit,
3838
toAddOrEditNote: () -> Unit,
3939
toZoteroWebViewScreen: (String) -> Unit,
40+
navigateToRetrieveMetadata: (params: String) -> Unit,
4041
viewModel: DashboardViewModel,
4142
) {
4243
val viewState by viewModel.viewStates.observeAsState(DashboardViewState())
@@ -81,6 +82,7 @@ internal fun DashboardRootTabletNavigationScreen(
8182
onOpenWebpage = onOpenWebpage,
8283
toAddOrEditNote = toAddOrEditNote,
8384
toZoteroWebViewScreen = toZoteroWebViewScreen,
85+
navigateToRetrieveMetadata = navigateToRetrieveMetadata,
8486
navController = rightPaneNavController,
8587
navigation = rightPaneNavigation
8688
)

Diff for: app/src/main/java/org/zotero/android/architecture/navigation/tablet/DashboardRootTopLevelTabletNavigation.kt

+28
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,23 @@ import androidx.compose.runtime.remember
99
import androidx.compose.ui.Modifier
1010
import androidx.compose.ui.platform.LocalContext
1111
import androidx.navigation.NavGraphBuilder
12+
import androidx.navigation.NavType
1213
import androidx.navigation.compose.composable
1314
import androidx.navigation.compose.rememberNavController
15+
import androidx.navigation.navArgument
1416
import org.zotero.android.architecture.EventBusConstants
17+
import org.zotero.android.architecture.navigation.ARG_RETRIEVE_METADATA
1518
import org.zotero.android.architecture.navigation.ZoteroNavigation
1619
import org.zotero.android.architecture.navigation.addNoteScreen
1720
import org.zotero.android.architecture.navigation.dialogDynamicHeight
21+
import org.zotero.android.architecture.navigation.dialogFixedMaxHeight
1822
import org.zotero.android.architecture.navigation.toAddOrEditNote
1923
import org.zotero.android.architecture.navigation.toZoteroWebViewScreen
2024
import org.zotero.android.architecture.navigation.zoterWebViewScreen
2125
import org.zotero.android.pdf.pdfReaderScreenAndNavigationForTablet
2226
import org.zotero.android.pdf.toPdfScreen
2327
import org.zotero.android.screens.dashboard.DashboardViewModel
28+
import org.zotero.android.screens.retrievemetadata.RetrieveMetadataScreen
2429
import org.zotero.android.screens.tagpicker.TagPickerScreen
2530
import org.zotero.android.uicomponents.navigation.ZoteroNavHost
2631
import java.io.File
@@ -59,6 +64,7 @@ internal fun DashboardRootTopLevelTabletNavigation(
5964
},
6065
toAddOrEditNote = navigation::toAddOrEditNote,
6166
toZoteroWebViewScreen = navigation::toZoteroWebViewScreen,
67+
navigateToRetrieveMetadata = navigation::toRetrieveMetadata
6268
)
6369
pdfReaderScreenAndNavigationForTablet(
6470
navigation = navigation,
@@ -71,6 +77,9 @@ internal fun DashboardRootTopLevelTabletNavigation(
7177
navigateToTagPicker = navigation::toTagPickerScreen
7278
)
7379
zoterWebViewScreen(onClose = navigation::onBack)
80+
retrieveMetadataDialog(onBack = {
81+
navController.popBackStack()
82+
})
7483
}
7584
}
7685

@@ -80,6 +89,7 @@ private fun NavGraphBuilder.dashboardScreen(
8089
onShowPdf: (String) -> Unit,
8190
toAddOrEditNote: () -> Unit,
8291
toZoteroWebViewScreen: (String) -> Unit,
92+
navigateToRetrieveMetadata: (params: String) -> Unit,
8393
onOpenWebpage: (uri: Uri) -> Unit,
8494
viewModel: DashboardViewModel,
8595
) {
@@ -93,6 +103,7 @@ private fun NavGraphBuilder.dashboardScreen(
93103
onShowPdf = onShowPdf,
94104
toAddOrEditNote = toAddOrEditNote,
95105
toZoteroWebViewScreen = toZoteroWebViewScreen,
106+
navigateToRetrieveMetadata = navigateToRetrieveMetadata,
96107
onOpenWebpage = onOpenWebpage,
97108
viewModel = viewModel
98109
)
@@ -120,10 +131,23 @@ private fun NavGraphBuilder.tagPickerDialog(
120131
}
121132
}
122133

134+
private fun NavGraphBuilder.retrieveMetadataDialog(onBack: () -> Unit) {
135+
dialogFixedMaxHeight(
136+
route = "${DashboardRootDestinations.RETRIEVE_METADATA_DIALOG}/{$ARG_RETRIEVE_METADATA}",
137+
arguments = listOf(
138+
navArgument(ARG_RETRIEVE_METADATA) { type = NavType.StringType },
139+
),
140+
) {
141+
RetrieveMetadataScreen(onBack = onBack)
142+
}
143+
}
144+
145+
123146
private object DashboardRootDestinations {
124147
const val DASHBOARD_SCREEN = "dashboardScreen"
125148
const val TAG_PICKER_SCREEN = "tagPickerScreen"
126149
const val TAG_PICKER_DIALOG = "tagPickerDialog"
150+
const val RETRIEVE_METADATA_DIALOG = "retrieveMetadataDialog"
127151
}
128152

129153
private fun ZoteroNavigation.toTagPickerScreen() {
@@ -132,4 +156,8 @@ private fun ZoteroNavigation.toTagPickerScreen() {
132156

133157
private fun ZoteroNavigation.toTagPickerDialog() {
134158
navController.navigate(DashboardRootDestinations.TAG_PICKER_DIALOG)
159+
}
160+
161+
private fun ZoteroNavigation.toRetrieveMetadata(args: String) {
162+
navController.navigate("${DashboardRootDestinations.RETRIEVE_METADATA_DIALOG}/$args")
135163
}

Diff for: app/src/main/java/org/zotero/android/architecture/navigation/tablet/TabletRightPaneNavigation.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ import org.zotero.android.architecture.navigation.toImageViewerScreen
2222
import org.zotero.android.architecture.navigation.toItemDetails
2323
import org.zotero.android.architecture.navigation.toVideoPlayerScreen
2424
import org.zotero.android.architecture.navigation.videoPlayerScreen
25+
import org.zotero.android.screens.addbyidentifier.ui.AddByIdentifierScreen
2526
import org.zotero.android.screens.collectionpicker.CollectionPickerScreen
2627
import org.zotero.android.screens.creatoredit.CreatorEditNavigation
2728
import org.zotero.android.screens.scanbarcode.ui.ScanBarcodeScreen
2829
import org.zotero.android.screens.sortpicker.SortPickerNavigation
2930
import org.zotero.android.screens.tagpicker.TagPickerScreen
30-
import org.zotero.android.screens.addbyidentifier.ui.AddByIdentifierScreen
3131
import org.zotero.android.uicomponents.navigation.ZoteroNavHost
3232
import org.zotero.android.uicomponents.singlepicker.SinglePickerScreen
3333
import java.io.File
@@ -39,6 +39,7 @@ internal fun TabletRightPaneNavigation(
3939
onShowPdf: (String) -> Unit,
4040
toAddOrEditNote: () -> Unit,
4141
toZoteroWebViewScreen: (String) -> Unit,
42+
navigateToRetrieveMetadata: (params: String) -> Unit,
4243
onOpenWebpage: (uri: Uri) -> Unit,
4344
navController: NavHostController,
4445
navigation: ZoteroNavigation,
@@ -66,6 +67,7 @@ internal fun TabletRightPaneNavigation(
6667
navigateToTagFilter = { },
6768
navigateToCollectionPicker = navigation::toCollectionPickerDialog,
6869
navigateToScanBarcode = navigation::toScanBarcodeDialog,
70+
navigateToRetrieveMetadata = navigateToRetrieveMetadata,
6971
onShowPdf = onShowPdf,
7072
)
7173
itemDetailsScreen(

0 commit comments

Comments
 (0)