Skip to content

Commit 7fd0fa7

Browse files
committed
pre 1.1.0
1 parent 046d1e9 commit 7fd0fa7

8 files changed

Lines changed: 114 additions & 102 deletions

File tree

android/app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
22
package="com.remi.piwigo_ng">
3+
34
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
45
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
56
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@@ -32,6 +33,7 @@
3233
<category android:name="android.intent.category.LAUNCHER"/>
3334
</intent-filter>
3435
</activity>
36+
3537
<!-- Don't delete the meta-data below.
3638
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
3739
<meta-data
@@ -43,12 +45,16 @@
4345
<!-- If your app opens https URLs -->
4446
<intent>
4547
<action android:name="android.intent.action.VIEW" />
48+
<category android:name="android.intent.category.BROWSABLE" />
4649
<data android:scheme="https" />
4750
</intent>
48-
<!-- If your app makes calls -->
4951
<intent>
5052
<action android:name="android.intent.action.DIAL" />
5153
<data android:scheme="tel" />
5254
</intent>
55+
<intent>
56+
<action android:name="android.intent.action.SEND" />
57+
<data android:mimeType="*/*" />
58+
</intent>
5359
</queries>
5460
</manifest>

lib/views/CategoryViewPage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ class _CategoryViewPageState extends State<CategoryViewPage> with SingleTickerPr
501501
ThemeData _theme = Theme.of(context);
502502

503503
int albumCrossAxisCount = MediaQuery.of(context).size.width <= Constants.albumMinWidth ? 1
504-
: (MediaQuery.of(context).size.width/Constants.albumMinWidth).floor();
504+
: (MediaQuery.of(context).size.width/Constants.albumMinWidth).round();
505505

506506
return RefreshIndicator(
507507
displacement: 20,

lib/views/ImageViewPage.dart

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ class _ImageViewPageState extends State<ImageViewPage> with SingleTickerProvider
8282
MaterialPageRoute(builder: (_) => EditImagesPage(
8383
catId: int.parse(widget.category),
8484
images: [_images[_page]],
85-
))
86-
);
85+
)),
86+
).then((value) => setState(() {}));
8787
}
8888
void _onDownloadImage() async {
8989
if(await confirmDownloadDialog(context,
@@ -100,68 +100,69 @@ class _ImageViewPageState extends State<ImageViewPage> with SingleTickerProvider
100100
),
101101
));
102102
await downloadSingleImage(_images[_page]);
103+
setState(() {});
103104
}
104105
}
105106
void _onMoveCopyImage() async {
106107
int choice = await chooseMoveCopyImage(context);
107108

108109
switch(choice) {
109110
case 0: showDialog(context: context,
110-
builder: (context) {
111-
return MoveOrCopyDialog(
112-
title: appStrings(context).moveImage_title,
113-
subtitle: appStrings(context).moveImage_selectAlbum(1, _images[_page]['name']),
114-
catId: widget.category,
115-
catName: widget.title,
116-
isImage: true,
117-
onSelected: (item) async {
118-
if(await confirmMoveDialog(context,
119-
content: appStrings(context).moveImage_message(1, _images[_page]['name'], item.name),
120-
)) {
121-
var response = await moveImage(_images[_page]['id'], [int.parse(item.id)]);
122-
if(response['stat'] == 'fail') {
123-
ScaffoldMessenger.of(context).showSnackBar(
124-
errorSnackBar(context, response['result']));
125-
Navigator.of(context).pop();
126-
} else {
127-
ScaffoldMessenger.of(context).showSnackBar(
128-
imagesMovedSnackBar(context, 1));
129-
Navigator.of(context).pop();
130-
}
111+
builder: (context) {
112+
return MoveOrCopyDialog(
113+
title: appStrings(context).moveImage_title,
114+
subtitle: appStrings(context).moveImage_selectAlbum(1, _images[_page]['name']),
115+
catId: widget.category,
116+
catName: widget.title,
117+
isImage: true,
118+
onSelected: (item) async {
119+
if(await confirmMoveDialog(context,
120+
content: appStrings(context).moveImage_message(1, _images[_page]['name'], item.name),
121+
)) {
122+
var response = await moveImage(_images[_page]['id'], [int.parse(item.id)]);
123+
if(response['stat'] == 'fail') {
124+
ScaffoldMessenger.of(context).showSnackBar(
125+
errorSnackBar(context, response['result']));
126+
Navigator.of(context).pop();
127+
} else {
128+
ScaffoldMessenger.of(context).showSnackBar(
129+
imagesMovedSnackBar(context, 1));
130+
Navigator.of(context).pop();
131131
}
132-
},
133-
);
134-
}
132+
}
133+
},
134+
);
135+
},
135136
).whenComplete(() {
136137
setState(() {});
137138
});
138139
break;
139140
case 1: showDialog(context: context,
140-
builder: (context) {
141-
return MoveOrCopyDialog(
142-
title: appStrings(context).copyImage_title,
143-
subtitle: appStrings(context).copyImage_selectAlbum(1, _images[_page]['name']),
144-
catId: widget.category,
145-
catName: widget.title,
146-
isImage: true,
147-
onSelected: (item) async {
148-
if(await confirmAssignDialog(context,
149-
content: appStrings(context).copyImage_message(1, _images[_page]['name'], item.name),
150-
)) {
151-
var response = await assignImage(_images[_page]['id'], [int.parse(item.id)]);
152-
if (response['stat'] == 'fail') {
153-
ScaffoldMessenger.of(context).showSnackBar(
154-
errorSnackBar(context, response['result']));
155-
Navigator.of(context).pop();
156-
} else {
157-
ScaffoldMessenger.of(context).showSnackBar(
158-
imagesAssignedSnackBar(context, 1));
159-
Navigator.of(context).pop();
160-
}
141+
builder: (context) {
142+
return MoveOrCopyDialog(
143+
title: appStrings(context).copyImage_title,
144+
subtitle: appStrings(context).copyImage_selectAlbum(1, _images[_page]['name']),
145+
catId: widget.category,
146+
catName: widget.title,
147+
isImage: true,
148+
onSelected: (item) async {
149+
if(await confirmAssignDialog(context,
150+
content: appStrings(context).copyImage_message(1, _images[_page]['name'], item.name),
151+
)) {
152+
var response = await assignImage(_images[_page]['id'], [int.parse(item.id)]);
153+
if (response['stat'] == 'fail') {
154+
ScaffoldMessenger.of(context).showSnackBar(
155+
errorSnackBar(context, response['result']));
156+
Navigator.of(context).pop();
157+
} else {
158+
ScaffoldMessenger.of(context).showSnackBar(
159+
imagesAssignedSnackBar(context, 1));
160+
Navigator.of(context).pop();
161161
}
162-
},
163-
);
164-
}
162+
}
163+
},
164+
);
165+
},
165166
).whenComplete(() {
166167
setState(() {});
167168
});

lib/views/RootCategoryViewPage.dart

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@ class _RootCategoryViewPageState extends State<RootCategoryViewPage> with Single
5858
_imagesFuture = searchAlbums(_searchController.text);
5959
}
6060

61+
_onAddAlbum() async {
62+
await showDialog(
63+
context: context,
64+
builder: (BuildContext context) {
65+
return CreateCategoryDialog(catId: "0");
66+
},
67+
);
68+
setState(() {
69+
_getData();
70+
});
71+
}
72+
6173
@override
6274
Widget build(BuildContext context) {
6375
ThemeData _theme = Theme.of(context);
@@ -101,7 +113,9 @@ class _RootCategoryViewPageState extends State<RootCategoryViewPage> with Single
101113
return notification.metrics.atEdge;
102114
},
103115
onRefresh: () {
104-
_getData();
116+
setState(() {
117+
_getData();
118+
});
105119
return Future.delayed(Duration(milliseconds: 1000));
106120
},
107121
child: SingleChildScrollView(
@@ -179,26 +193,15 @@ class _RootCategoryViewPageState extends State<RootCategoryViewPage> with Single
179193
),
180194
),
181195
floatingActionButton: widget.isAdmin ? FloatingActionButton(
182-
onPressed: () {
183-
showDialog(
184-
context: context,
185-
builder: (BuildContext context) {
186-
return CreateCategoryDialog(catId: "0");
187-
}
188-
).whenComplete(() {
189-
setState(() {
190-
_getData();
191-
});
192-
});
193-
},
196+
onPressed: _onAddAlbum,
194197
child: Icon(Icons.create_new_folder, color: _theme.primaryColorLight, size: 30),
195198
) : null,
196199
);
197200
}
198201

199202
Widget _albumGrid(dynamic albums) {
200203
int albumCrossAxisCount = MediaQuery.of(context).size.width <= Constants.albumMinWidth ? 1
201-
: (MediaQuery.of(context).size.width/Constants.albumMinWidth).floor();
204+
: (MediaQuery.of(context).size.width/Constants.albumMinWidth).round();
202205

203206
return GridView.builder(
204207
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
@@ -213,9 +216,14 @@ class _RootCategoryViewPageState extends State<RootCategoryViewPage> with Single
213216
physics: NeverScrollableScrollPhysics(),
214217
itemBuilder: (BuildContext context, int index) {
215218
var album = albums[index];
216-
return AlbumListItem(album, isAdmin: widget.isAdmin, onClose: () {
217-
setState(() {});
218-
});
219+
return AlbumListItem(album,
220+
isAdmin: widget.isAdmin,
221+
onClose: () {
222+
setState(() {
223+
_getData();
224+
});
225+
},
226+
);
219227
},
220228
);
221229
}

lib/views/UploadGalleryViewPage.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import 'package:piwigo_ng/views/components/buttons.dart';
1414
import 'package:piwigo_ng/views/components/textfields.dart';
1515
import 'package:piwigo_ng/views/components/dialogs/dialogs.dart';
1616

17+
import '../model/TagModel.dart';
18+
1719
class UploadGalleryViewPage extends StatefulWidget {
1820
final List<XFile> imageData;
1921
final String category;
@@ -30,7 +32,7 @@ class _UploadGalleryViewPage extends State<UploadGalleryViewPage> {
3032
TextEditingController _descController = TextEditingController();
3133

3234
List<DropdownMenuItem<int>> _levelItems = [];
33-
List<dynamic> _tags = [];
35+
List<TagModel> _tags = [];
3436
int _page = 0;
3537
int _privacyLevel = -1;
3638
bool _isLoading = false;
@@ -68,7 +70,7 @@ class _UploadGalleryViewPage extends State<UploadGalleryViewPage> {
6870

6971
Map<String, dynamic> getImagesInfo() {
7072
List<int> tagIds = _tags.map<int>((tag) {
71-
return int.parse(tag['id']);
73+
return tag.id;
7274
}).toList();
7375
return {
7476
'name': _nameController.text,
@@ -550,7 +552,7 @@ class _UploadGalleryViewPage extends State<UploadGalleryViewPage> {
550552
);
551553
}
552554

553-
Widget tagItem(dynamic tag, Animation<double> animation, {BorderRadius borderRadius, Border border}) {
555+
Widget tagItem(TagModel tag, Animation<double> animation, {BorderRadius borderRadius, Border border}) {
554556
return SizeTransition(
555557
axis: Axis.vertical,
556558
sizeFactor: animation,
@@ -567,7 +569,7 @@ class _UploadGalleryViewPage extends State<UploadGalleryViewPage> {
567569
child: Row(
568570
mainAxisAlignment: MainAxisAlignment.spaceBetween,
569571
children: [
570-
Text('${tag['name']}', style: Theme.of(context).textTheme.subtitle1),
572+
Text('${tag.name}', style: Theme.of(context).textTheme.subtitle1),
571573
InkWell(
572574
onTap: () async {
573575
_listKey.currentState.removeItem(_tags.indexOf(tag), (context, animation) => tagItem(tag, animation));

lib/views/components/dialogs/category_dialogs.dart

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,28 +48,26 @@ class _CreateCategoryDialogState extends State<CreateCategoryDialog> {
4848
});
4949
try {
5050
var result = await addCategory(
51-
_nameController.text,
52-
_descController.text, widget.catId);
53-
51+
_nameController.text,
52+
_descController.text,
53+
widget.catId,
54+
);
55+
setState(() {
56+
_isLoading = false;
57+
});
5458
if(result['stat'] == 'fail') {
55-
setState(() {
56-
_isLoading = false;
57-
});
5859
ScaffoldMessenger.of(context).showSnackBar(
59-
errorSnackBar(context, result['result'])
60+
errorSnackBar(context, result['result']),
6061
);
6162
} else {
6263
ScaffoldMessenger.of(context).showSnackBar(
63-
albumAddedSnackBar(context)
64+
albumAddedSnackBar(context),
6465
);
6566
_nameController.text = "";
6667
_descController.text = "";
6768
Navigator.of(context).pop();
6869
}
6970
} catch (e) {
70-
setState(() {
71-
_isLoading = false;
72-
});
7371
print(e);
7472
}
7573
}

lib/views/components/list_item.dart

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,21 @@ class AlbumListItem extends StatefulWidget {
3333
class _AlbumListItemState extends State<AlbumListItem> {
3434

3535
void _onEditAlbum() async {
36-
showDialog(
37-
context: context,
38-
builder: (BuildContext context) {
39-
return EditCategoryDialog(
40-
catId: widget.album['id'],
41-
catName: widget.album['name'],
42-
catDesc: widget.album['comment'],
43-
privacy: widget.album['status'] == 'private' ? true : false
44-
);
45-
}
46-
).whenComplete(() {
47-
widget.onClose();
48-
});
36+
await showDialog(
37+
context: context,
38+
builder: (BuildContext context) {
39+
return EditCategoryDialog(
40+
catId: widget.album['id'],
41+
catName: widget.album['name'],
42+
catDesc: widget.album['comment'],
43+
privacy: widget.album['status'] == 'private' ? true : false
44+
);
45+
},
46+
);
47+
widget.onClose();
4948
}
5049
void _onMoveAlbum() async {
51-
showDialog(
50+
await showDialog(
5251
context: context,
5352
builder: (BuildContext context) {
5453
return MoveOrCopyDialog(
@@ -76,9 +75,7 @@ class _AlbumListItemState extends State<AlbumListItem> {
7675
},
7776
);
7877
}
79-
).whenComplete(() {
80-
widget.onClose();
81-
});
78+
);
8279
widget.onClose();
8380
}
8481
void _onDeleteAlbum() async {

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: piwigo_ng
22
description: A Piwigo Android application
33

44
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
5-
version: 1.0.3+104
5+
version: 1.1.0+110
66

77
environment:
88
sdk: ">=2.7.0 <3.0.0"

0 commit comments

Comments
 (0)