From 9a5a3132cae437deb7f989206669fc98f43f4f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Wed, 5 Jul 2023 21:12:47 +0200 Subject: [PATCH 1/9] Adds v3.0.2 release notes --- piwigo/Resources/ar.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/da.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/de.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/en.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/es.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/fr.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/hu.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/id.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/it.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/ja.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/nl.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/pl.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/ru.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/sv.lproj/ReleaseNotes.strings | 4 +++- piwigo/Resources/zh-Hans.lproj/ReleaseNotes.strings | 2 ++ piwigo/Resources/zh-Hant.lproj/ReleaseNotes.strings | 4 +++- piwigo/Settings/Information/ReleaseNotesViewController.swift | 1 + 17 files changed, 48 insertions(+), 15 deletions(-) diff --git a/piwigo/Resources/ar.lproj/ReleaseNotes.strings b/piwigo/Resources/ar.lproj/ReleaseNotes.strings index 4fd0916eb..61a713229 100644 --- a/piwigo/Resources/ar.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/ar.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Version 3.0.1\n\n• Minor bug fixes and improvements of the interface"; +"v3.0.2_text" = "Version 3.0.2\n\n• Bug fixes"; + +"v3.0.1_text" = "Version 3.0.1\nJuly 2, 2023\n\n• Minor bug fixes and improvements of the interface"; "v3.0.0_text" = "Version 3.0\nJune 27, 2023\n\n• Cache management fully rewritten to improve the user experience and bring offline browsing\n• Fixes some translations"; diff --git a/piwigo/Resources/da.lproj/ReleaseNotes.strings b/piwigo/Resources/da.lproj/ReleaseNotes.strings index 38014872f..6d214bb02 100644 --- a/piwigo/Resources/da.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/da.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Version 3.0.1\n\n• Mindre fejl rettet og forbedringer af brugerflade"; +"v3.0.2_text" = "Version 3.0.2\n\n• Fejlrettelser"; + +"v3.0.1_text" = "Version 3.0.1\n2 juli 2023\n\n• Mindre fejl rettet og forbedringer af brugerflade"; "v3.0.0_text" = "Version 3.0\n27 juni 2023\n\n• Cachehåndtering er fuldstændig omskrevet for at forbedre brugeroplevelsen og give mulighed for offline browsing\n• Retter af nogle oversættelser"; diff --git a/piwigo/Resources/de.lproj/ReleaseNotes.strings b/piwigo/Resources/de.lproj/ReleaseNotes.strings index 594512514..1a9535656 100644 --- a/piwigo/Resources/de.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/de.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Version 3.0.1\n\n• Kleinere Fehlerbehebungen und Verbesserungen der Benutzeroberfläche"; +"v3.0.2_text" = "Version 3.0.2\n\n- Fehlerbehebungen"; + +"v3.0.1_text" = "Version 3.0.1\n2. Juli 2023\n\n• Kleinere Fehlerbehebungen und Verbesserungen der Benutzeroberfläche"; "v3.0.0_text" = "Version 3.0\n27. Juni 2023\n\n• Die Cache-Verwaltung wurde vollständig überarbeitet, um die Benutzerfreundlichkeit zu verbessern und das Offline-Browsing zu ermöglichen\n• Korrekturen einiger Übersetzungen"; diff --git a/piwigo/Resources/en.lproj/ReleaseNotes.strings b/piwigo/Resources/en.lproj/ReleaseNotes.strings index cc0773f43..c94edf79f 100644 --- a/piwigo/Resources/en.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/en.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Version 3.0.1\n\n• Minor bug fixes and improvements of the interface"; +"v3.0.2_text" = "Version 3.0.2\n\n• Bug fixes"; + +"v3.0.1_text" = "Version 3.0.1\nJuly 2, 2023\n\n• Minor bug fixes and improvements of the interface"; "v3.0.0_text" = "Version 3.0\nJune 27, 2023\n\n• Cache management fully rewritten to improve the user experience and bring offline browsing\n• Fixes some translations"; diff --git a/piwigo/Resources/es.lproj/ReleaseNotes.strings b/piwigo/Resources/es.lproj/ReleaseNotes.strings index 4e972be0d..3665cc992 100644 --- a/piwigo/Resources/es.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/es.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Versión 3.0.1\n\n• Corrección de errores menores y mejoras en la interfaz"; +"v3.0.2_text" = "Versión 3.0.2\n\n• Corrección de errores"; + +"v3.0.1_text" = "Versión 3.0.1\n2 de julio de 2023\n\n• Corrección de errores menores y mejoras en la interfaz"; "v3.0.0_text" = "Versión 3.0\n27 de junio de 2023\n\n• Gestión de caché completamente reescrita para mejorar la experiencia del usuario y traer la navegación sin conexión\n• Corrección de algunas traducciones"; diff --git a/piwigo/Resources/fr.lproj/ReleaseNotes.strings b/piwigo/Resources/fr.lproj/ReleaseNotes.strings index 5993fd052..6da2cdf62 100644 --- a/piwigo/Resources/fr.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/fr.lproj/ReleaseNotes.strings @@ -6,9 +6,11 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ +"v3.0.2_text" = "Version 3.0.2\n\n• Bug fixes"; + "v3.0.1_text" = "Version 3.0.1\n\n• Corrections de bugs mineurs et amélioration de l'interface"; -"v3.0.0_text" = "Version 3.0\n\n• Gestion du cache entièrement réécrite pour améliorer l'expérience de l'utilisateur et permettre la navigation hors ligne.\n• Correction de certaines traductions"; +"v3.0.0_text" = "Version 3.0\n27 juin 2023\n\n• Gestion du cache entièrement réécrite pour améliorer l'expérience de l'utilisateur et permettre la navigation hors ligne.\n• Correction de certaines traductions"; "v2.12.7_text" = "Version 2.12.7\n19 décembre 2022\n\n• Correction de bugs"; diff --git a/piwigo/Resources/hu.lproj/ReleaseNotes.strings b/piwigo/Resources/hu.lproj/ReleaseNotes.strings index 1faee202e..0ff6f8182 100644 --- a/piwigo/Resources/hu.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/hu.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "3.0.1-es verzió\n\n• Kisebb hibajavítások és fejlesztések a felületen"; +"v3.0.2_text" = "3.0.2-es verzió\n\n• Hibajavítások"; + +"v3.0.1_text" = "3.0.1-es verzió\n2023 Július 2\n\n• Kisebb hibajavítások és fejlesztések a felületen"; "v3.0.0_text" = "3.0 verzió\n2023. június 27\n\n• A gyorsítótár-kezelés teljesen újraírva a felhasználói élmény javítása és az offline böngészés érdekében.\n• Néhány fordítás javítása"; diff --git a/piwigo/Resources/id.lproj/ReleaseNotes.strings b/piwigo/Resources/id.lproj/ReleaseNotes.strings index ae2e25022..c0eb62fd9 100644 --- a/piwigo/Resources/id.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/id.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Version 3.0.1\n\n• Minor bug fixes and improvements of the interface"; +"v3.0.2_text" = "Versi 3.0.2\n\n• Perbaikan bug"; + +"v3.0.1_text" = "Versi 3.0.1\n2 Juli 2023\n\n• Perbaikan bug minor dan perbaikan antarmuka"; "v3.0.0_text" = "Version 3.0\nJune 27, 2023\n\n• Cache management fully rewritten to improve the user experience and bring offline browsing\n• Fixes some translations"; diff --git a/piwigo/Resources/it.lproj/ReleaseNotes.strings b/piwigo/Resources/it.lproj/ReleaseNotes.strings index 2377b2ee9..580f06fbc 100644 --- a/piwigo/Resources/it.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/it.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Versione 3.0.1\n\n• Correzioni di bug minori e miglioramenti dell'interfaccia"; +"v3.0.2_text" = "Versione 3.0.2\n\n• Correzioni di bug"; + +"v3.0.1_text" = "Versione 3.0.1\n2 luglio 2023\n\n• Correzioni di bug minori e miglioramenti dell'interfaccia"; "v3.0.0_text" = "Versione 3.0\n27 giugno 2023\n\n• Gestione della cache completamente riscritta per migliorare l'esperienza dell'utente e portare la navigazione offline\n• Correzione di alcune traduzioni"; diff --git a/piwigo/Resources/ja.lproj/ReleaseNotes.strings b/piwigo/Resources/ja.lproj/ReleaseNotes.strings index 25542919c..7ababf625 100644 --- a/piwigo/Resources/ja.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/ja.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "バージョン 3.0.1\n\n• 軽微なバグの修正とインタフェースの改善"; +"v3.0.2_text" = "バージョン 3.0.2\n\n• バグの修正"; + +"v3.0.1_text" = "バージョン 3.0.1\n2023年7月2日\n\n• 軽微なバグの修正とインタフェースの改善"; "v3.0.0_text" = "バージョン3.0\n2023年6月27日\n\n• キャッシュマネジメントを全面的に見直し、ユーザーエクスペリエンスの向上とオフラインブラウジングの実現を目指す\n• いくつかの翻訳を修正"; diff --git a/piwigo/Resources/nl.lproj/ReleaseNotes.strings b/piwigo/Resources/nl.lproj/ReleaseNotes.strings index 905794e42..a5cfa7256 100644 --- a/piwigo/Resources/nl.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/nl.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Versie 3.0.1\n\n• Kleine foutjes hersteld en verbetering van de interface"; +"v3.0.2_text" = "Versie 3.0.2\n\n• Foutjes verbeterd"; + +"v3.0.1_text" = "Versie 3.0.1\n2 juli 2023\n\n• Kleine foutjes hersteld en verbetering van de interface"; "v3.0.0_text" = "Versie 3.0\n27 juni 2023\n\n• Cache beheer volledig herschreven om de gebruikerservaring te verbeteren en offline browsen te brengen\n• Enkele vertalingen opgelost"; diff --git a/piwigo/Resources/pl.lproj/ReleaseNotes.strings b/piwigo/Resources/pl.lproj/ReleaseNotes.strings index 9970b724c..bfd817bcb 100644 --- a/piwigo/Resources/pl.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/pl.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Wersja 3.0.1\n\n• Poprawki drobnych błędów i ulepszenia interfejsu"; +"v3.0.2_text" = "Wersja 3.0.2\n\n• Poprawki błędów"; + +"v3.0.1_text" = "Wersja 3.0.1\n2 lipca 2023\n\n• Poprawki drobnych błędów i ulepszenia interfejsu"; "v3.0.0_text" = "Wersja 3.0\n27 czerwca 2023\n\n• W całości przepisane zarządzanie pamięcią podręczną w celu poprawy komfortu użytkowania i umożliwienia przeglądania offline\n• Poprawki niektórych tłumaczeń"; diff --git a/piwigo/Resources/ru.lproj/ReleaseNotes.strings b/piwigo/Resources/ru.lproj/ReleaseNotes.strings index 451f3a8d5..3701b0956 100644 --- a/piwigo/Resources/ru.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/ru.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Версия 3.0.1\n\n• Исправление незначительных ошибок и улучшения интерфейса"; +"v3.0.2_text" = "Версия 3.0.2\n\n• Исправления ошибок"; + +"v3.0.1_text" = "Версия 3.0.1\n2 июля 2023\n\n• Исправление незначительных ошибок и улучшения интерфейса"; "v3.0.0_text" = "Версия 3.0\n27 июня 2023\n\n• Полностью переписано управление кэшем для улучшения пользовательского опыта и обеспечения возможности автономного просмотра страниц\n• Исправлены некоторые переводы"; diff --git a/piwigo/Resources/sv.lproj/ReleaseNotes.strings b/piwigo/Resources/sv.lproj/ReleaseNotes.strings index 93a75bf36..1a8a59cd7 100644 --- a/piwigo/Resources/sv.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/sv.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "Version 3.0.1\n\n• Mindre bugfixar och förbättringar av gränssnittet"; +"v3.0.2_text" = "Version 3.0.2\n\n• Buggfixar"; + +"v3.0.1_text" = "Version 3.0.1\n2 juli 2023\n\n• Mindre bugfixar och förbättringar av gränssnittet"; "v3.0.0_text" = "Version 3.0\n27 juni 2023\n\n• Cache-hanteringen är helt omskriven för att förbättra användarupplevelsen och göra det möjligt att surfa offline.\n• Korrigerar vissa översättningar"; diff --git a/piwigo/Resources/zh-Hans.lproj/ReleaseNotes.strings b/piwigo/Resources/zh-Hans.lproj/ReleaseNotes.strings index ea50de572..17e90873b 100644 --- a/piwigo/Resources/zh-Hans.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/zh-Hans.lproj/ReleaseNotes.strings @@ -6,6 +6,8 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ +"v3.0.2_text" = "版本 3.0.2\n\n• 错误修复"; + "v3.0.1_text" = "版本 3.0.1\n\n• 小错误修复和界面改进"; "v3.0.0_text" = "版本 3.0\n2023 年 6 月 27 日\n\n- 缓存管理全面重写,以改善用户体验并带来离线浏览功能\n- 修复了一些翻译"; diff --git a/piwigo/Resources/zh-Hant.lproj/ReleaseNotes.strings b/piwigo/Resources/zh-Hant.lproj/ReleaseNotes.strings index f38bacd20..93e0ee2d5 100644 --- a/piwigo/Resources/zh-Hant.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/zh-Hant.lproj/ReleaseNotes.strings @@ -6,7 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.1_text" = "版本 3.0.1\n\n• 小型錯誤修正及介面改進"; +"v3.0.2_text" = "版本 3.0.2\n\n• 錯誤修正"; + +"v3.0.1_text" = "版本 3.0.1\n2023年7月2日\n\n• 小型錯誤修正及介面改進"; "v3.0.0_text" = "版本 3.0\n2023年6月27日\n\n• 全面重寫快取管理以增進使用者體驗及提供離線瀏覽\n• 修正部分翻譯"; diff --git a/piwigo/Settings/Information/ReleaseNotesViewController.swift b/piwigo/Settings/Information/ReleaseNotesViewController.swift index c1e6567a2..3f76147df 100644 --- a/piwigo/Settings/Information/ReleaseNotesViewController.swift +++ b/piwigo/Settings/Information/ReleaseNotesViewController.swift @@ -156,6 +156,7 @@ class ReleaseNotesViewController: UIViewController { let notesAttributedString = NSMutableAttributedString(string: "") // Release 3.0.x — Bundle string + notesAttributedString.append(releaseNotes("v3.0.2_text", comment: "v3.0.2 Release Notes text")) notesAttributedString.append(releaseNotes("v3.0.1_text", comment: "v3.0.1 Release Notes text")) notesAttributedString.append(releaseNotes("v3.0.0_text", comment: "v3.0.0 Release Notes text")) From 909b27796ea565589af6a7b144ba28cf8b19f405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Wed, 5 Jul 2023 21:15:13 +0200 Subject: [PATCH 2/9] Replaces MGSwipeTableCell library with iOS 11+ UISwipeActionsConfiguration --- Podfile | 1 - Podfile.lock | 10 +- .../Private/MGSwipeTableCell/MGSwipeButton.h | 1 - .../MGSwipeTableCell/MGSwipeTableCell.h | 1 - .../Public/MGSwipeTableCell/MGSwipeButton.h | 1 - .../MGSwipeTableCell/MGSwipeTableCell.h | 1 - Pods/MGSwipeTableCell/LICENSE | 21 - .../MGSwipeTableCell/MGSwipeButton.h | 51 - .../MGSwipeTableCell/MGSwipeButton.m | 181 -- .../MGSwipeTableCell/MGSwipeTableCell.h | 281 --- .../MGSwipeTableCell/MGSwipeTableCell.m | 1517 ----------------- Pods/MGSwipeTableCell/README.md | 225 --- Pods/Manifest.lock | 10 +- Pods/Pods.xcodeproj/project.pbxproj | 607 +++---- .../xcschemes/IQKeyboardManagerSwift.xcscheme | 2 +- .../xcschemes/MBProgressHUD.xcscheme | 2 +- .../xcschemes/Pods-piwigo.xcscheme | 2 +- .../xcschemes/Pods-piwigoAppStore.xcscheme | 2 +- .../MGSwipeTableCell/MGSwipeTableCell-dummy.m | 5 - .../MGSwipeTableCell-prefix.pch | 12 - .../MGSwipeTableCell.debug.xcconfig | 12 - .../MGSwipeTableCell.release.xcconfig | 12 - .../Pods-piwigo-acknowledgements.markdown | 25 - .../Pods-piwigo-acknowledgements.plist | 31 - .../Pods-piwigo/Pods-piwigo.debug.xcconfig | 6 +- .../Pods-piwigo/Pods-piwigo.release.xcconfig | 6 +- .../Pods-piwigoAppStore.debug.xcconfig | 2 +- .../Pods-piwigoAppStore.release.xcconfig | 2 +- piwigo.xcodeproj/project.pbxproj | 6 +- piwigo/Album/AlbumVars.swift | 2 +- piwigo/Album/AlbumViewController.swift | 16 +- .../AlbumCollectionViewCell+Delete.swift | 58 +- .../Cells/AlbumCollectionViewCell+Move.swift | 7 +- .../AlbumCollectionViewCell+Rename.swift | 37 +- .../Album/Cells/AlbumCollectionViewCell.swift | 99 +- piwigo/Album/Cells/AlbumTableViewCell.swift | 2 +- .../AlbumViewController+DataSource.swift | 16 +- piwigo/Resources/Bridging-Header.h | 1 - piwigo/Resources/Prefix.pch | 5 - piwigo/Resources/ar.lproj/About.strings | 2 - piwigo/Resources/da.lproj/About.strings | 2 - piwigo/Resources/de.lproj/About.strings | 2 - piwigo/Resources/en.lproj/About.strings | 2 - piwigo/Resources/es.lproj/About.strings | 2 - piwigo/Resources/fr.lproj/About.strings | 2 - piwigo/Resources/hu.lproj/About.strings | 2 - piwigo/Resources/id.lproj/About.strings | 2 - piwigo/Resources/it.lproj/About.strings | 2 - piwigo/Resources/ja.lproj/About.strings | 2 - piwigo/Resources/nl.lproj/About.strings | 2 - piwigo/Resources/pl.lproj/About.strings | 2 - piwigo/Resources/ru.lproj/About.strings | 2 - piwigo/Resources/sv.lproj/About.strings | 2 - piwigo/Resources/zh-Hans.lproj/About.strings | 2 - piwigo/Resources/zh-Hant.lproj/About.strings | 2 - piwigo/Settings.bundle/ar.lproj/About.strings | 2 - piwigo/Settings.bundle/da.lproj/About.strings | 2 - piwigo/Settings.bundle/de.lproj/About.strings | 2 - piwigo/Settings.bundle/en.lproj/About.strings | 2 - piwigo/Settings.bundle/es.lproj/About.strings | 2 - piwigo/Settings.bundle/fr.lproj/About.strings | 2 - piwigo/Settings.bundle/hu.lproj/About.strings | 2 - piwigo/Settings.bundle/id.lproj/About.strings | 2 - piwigo/Settings.bundle/it.lproj/About.strings | 2 - piwigo/Settings.bundle/ja.lproj/About.strings | 2 - piwigo/Settings.bundle/nl.lproj/About.strings | 2 - piwigo/Settings.bundle/pl.lproj/About.strings | 2 - piwigo/Settings.bundle/ru.lproj/About.strings | 2 - piwigo/Settings.bundle/sv.lproj/About.strings | 2 - .../zh-Hans.lproj/About.strings | 2 - .../zh-Hant.lproj/About.strings | 2 - .../Information/AboutViewController.swift | 10 - .../UploadImageTableViewCell.swift | 67 +- .../UploadQueueViewController.swift | 47 +- .../UploadQueueViewControllerOld.swift | 47 +- 75 files changed, 454 insertions(+), 3059 deletions(-) delete mode 120000 Pods/Headers/Private/MGSwipeTableCell/MGSwipeButton.h delete mode 120000 Pods/Headers/Private/MGSwipeTableCell/MGSwipeTableCell.h delete mode 120000 Pods/Headers/Public/MGSwipeTableCell/MGSwipeButton.h delete mode 120000 Pods/Headers/Public/MGSwipeTableCell/MGSwipeTableCell.h delete mode 100644 Pods/MGSwipeTableCell/LICENSE delete mode 100644 Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.h delete mode 100644 Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.m delete mode 100644 Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.h delete mode 100644 Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.m delete mode 100644 Pods/MGSwipeTableCell/README.md delete mode 100644 Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell-dummy.m delete mode 100644 Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell-prefix.pch delete mode 100644 Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.debug.xcconfig delete mode 100644 Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.release.xcconfig diff --git a/Podfile b/Podfile index cb90e9e83..e26cd0abe 100644 --- a/Podfile +++ b/Podfile @@ -7,7 +7,6 @@ target 'piwigo' do # Pods for piwigo pod 'MBProgressHUD' - pod 'MGSwipeTableCell' pod 'IQKeyboardManagerSwift' target 'piwigoAppStore' do diff --git a/Podfile.lock b/Podfile.lock index 878c2ad49..26fb1d7a7 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,24 +1,20 @@ PODS: - - IQKeyboardManagerSwift (6.5.11) + - IQKeyboardManagerSwift (6.5.12) - MBProgressHUD (1.2.0) - - MGSwipeTableCell (1.6.14) DEPENDENCIES: - IQKeyboardManagerSwift - MBProgressHUD - - MGSwipeTableCell SPEC REPOS: trunk: - IQKeyboardManagerSwift - MBProgressHUD - - MGSwipeTableCell SPEC CHECKSUMS: - IQKeyboardManagerSwift: c7955c0bdbf7b2eb29bb7daaa44e3d90f55a9a85 + IQKeyboardManagerSwift: 371b08cb39664fb56030f5345c815a4ffc74bbc0 MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 - MGSwipeTableCell: d99ed6466f393b71cd488c6f798ba112ff5d1d01 -PODFILE CHECKSUM: 7326c690f70dd069c0315437b981ea71e143bc6c +PODFILE CHECKSUM: 4f577ab122f147a3faa6865b771c5a1999409439 COCOAPODS: 1.11.3 diff --git a/Pods/Headers/Private/MGSwipeTableCell/MGSwipeButton.h b/Pods/Headers/Private/MGSwipeTableCell/MGSwipeButton.h deleted file mode 120000 index 60236639e..000000000 --- a/Pods/Headers/Private/MGSwipeTableCell/MGSwipeButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.h \ No newline at end of file diff --git a/Pods/Headers/Private/MGSwipeTableCell/MGSwipeTableCell.h b/Pods/Headers/Private/MGSwipeTableCell/MGSwipeTableCell.h deleted file mode 120000 index 89cf9339d..000000000 --- a/Pods/Headers/Private/MGSwipeTableCell/MGSwipeTableCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/MGSwipeTableCell/MGSwipeButton.h b/Pods/Headers/Public/MGSwipeTableCell/MGSwipeButton.h deleted file mode 120000 index 60236639e..000000000 --- a/Pods/Headers/Public/MGSwipeTableCell/MGSwipeButton.h +++ /dev/null @@ -1 +0,0 @@ -../../../MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.h \ No newline at end of file diff --git a/Pods/Headers/Public/MGSwipeTableCell/MGSwipeTableCell.h b/Pods/Headers/Public/MGSwipeTableCell/MGSwipeTableCell.h deleted file mode 120000 index 89cf9339d..000000000 --- a/Pods/Headers/Public/MGSwipeTableCell/MGSwipeTableCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.h \ No newline at end of file diff --git a/Pods/MGSwipeTableCell/LICENSE b/Pods/MGSwipeTableCell/LICENSE deleted file mode 100644 index 82a9a9f5e..000000000 --- a/Pods/MGSwipeTableCell/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 Imanol Fernandez @MortimerGoro - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.h b/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.h deleted file mode 100644 index 1da612637..000000000 --- a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * MGSwipeTableCell is licensed under MIT license. See LICENSE.md file for more information. - * Copyright (c) 2016 Imanol Fernandez @MortimerGoro - */ - -#import - - -@class MGSwipeTableCell; - -/** - * This is a convenience class to create MGSwipeTableCell buttons - * Using this class is optional because MGSwipeTableCell is button agnostic and can use any UIView for that purpose - * Anyway, it's recommended that you use this class because is totally tested and easy to use ;) - */ -@interface MGSwipeButton : UIButton - -/** - * Convenience block callback for developers lazy to implement the MGSwipeTableCellDelegate. - * @return Return YES to autohide the swipe view - */ -typedef BOOL(^ MGSwipeButtonCallback)(MGSwipeTableCell * _Nonnull cell); -@property (nonatomic, strong, nullable) MGSwipeButtonCallback callback; - -/** A width for the expanded buttons. Defaults to 0, which means sizeToFit will be called. */ -@property (nonatomic, assign) CGFloat buttonWidth; - -/** - * Convenience static constructors - */ -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title backgroundColor:(nullable UIColor *) color; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title backgroundColor:(nullable UIColor *) color padding:(NSInteger) padding; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title backgroundColor:(nullable UIColor *) color insets:(UIEdgeInsets) insets; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title backgroundColor:(nullable UIColor *) color callback:(nullable MGSwipeButtonCallback) callback; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title backgroundColor:(nullable UIColor *) color padding:(NSInteger) padding callback:(nullable MGSwipeButtonCallback) callback; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title backgroundColor:(nullable UIColor *) color insets:(UIEdgeInsets) insets callback:(nullable MGSwipeButtonCallback) callback; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title icon:(nullable UIImage*) icon backgroundColor:(nullable UIColor *) color; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title icon:(nullable UIImage*) icon backgroundColor:(nullable UIColor *) color padding:(NSInteger) padding; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title icon:(nullable UIImage*) icon backgroundColor:(nullable UIColor *) color insets:(UIEdgeInsets) insets; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title icon:(nullable UIImage*) icon backgroundColor:(nullable UIColor *) color callback:(nullable MGSwipeButtonCallback) callback; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title icon:(nullable UIImage*) icon backgroundColor:(nullable UIColor *) color padding:(NSInteger) padding callback:(nullable MGSwipeButtonCallback) callback; -+(nonnull instancetype) buttonWithTitle:(nonnull NSString *) title icon:(nullable UIImage*) icon backgroundColor:(nullable UIColor *) color insets:(UIEdgeInsets) insets callback:(nullable MGSwipeButtonCallback) callback; - --(void) setPadding:(CGFloat) padding; --(void) setEdgeInsets:(UIEdgeInsets)insets; --(void) centerIconOverText; --(void) centerIconOverTextWithSpacing: (CGFloat) spacing; --(void) iconTintColor:(nullable UIColor *)tintColor; - - -@end diff --git a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.m b/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.m deleted file mode 100644 index 6cb28995a..000000000 --- a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeButton.m +++ /dev/null @@ -1,181 +0,0 @@ -/* - * MGSwipeTableCell is licensed under MIT license. See LICENSE.md file for more information. - * Copyright (c) 2016 Imanol Fernandez @MortimerGoro - */ - -#import "MGSwipeButton.h" - -@class MGSwipeTableCell; - -@implementation MGSwipeButton - -+(instancetype) buttonWithTitle:(NSString *) title backgroundColor:(UIColor *) color -{ - return [self buttonWithTitle:title icon:nil backgroundColor:color]; -} - -+(instancetype) buttonWithTitle:(NSString *) title backgroundColor:(UIColor *) color padding:(NSInteger) padding -{ - return [self buttonWithTitle:title icon:nil backgroundColor:color insets:UIEdgeInsetsMake(0, padding, 0, padding)]; -} - -+(instancetype) buttonWithTitle:(NSString *) title backgroundColor:(UIColor *) color insets:(UIEdgeInsets) insets -{ - return [self buttonWithTitle:title icon:nil backgroundColor:color insets:insets]; -} - -+(instancetype) buttonWithTitle:(NSString *) title backgroundColor:(UIColor *) color callback:(MGSwipeButtonCallback) callback -{ - return [self buttonWithTitle:title icon:nil backgroundColor:color callback:callback]; -} - -+(instancetype) buttonWithTitle:(NSString *) title backgroundColor:(UIColor *) color padding:(NSInteger) padding callback:(MGSwipeButtonCallback) callback -{ - return [self buttonWithTitle:title icon:nil backgroundColor:color insets:UIEdgeInsetsMake(0, padding, 0, padding) callback:callback]; -} - -+(instancetype) buttonWithTitle:(NSString *) title backgroundColor:(UIColor *) color insets:(UIEdgeInsets) insets callback:(MGSwipeButtonCallback) callback -{ - return [self buttonWithTitle:title icon:nil backgroundColor:color insets:insets callback:callback]; -} - -+(instancetype) buttonWithTitle:(NSString *) title icon:(UIImage*) icon backgroundColor:(UIColor *) color -{ - return [self buttonWithTitle:title icon:icon backgroundColor:color callback:nil]; -} - -+(instancetype) buttonWithTitle:(NSString *) title icon:(UIImage*) icon backgroundColor:(UIColor *) color padding:(NSInteger) padding -{ - return [self buttonWithTitle:title icon:icon backgroundColor:color insets:UIEdgeInsetsMake(0, padding, 0, padding) callback:nil]; -} - -+(instancetype) buttonWithTitle:(NSString *) title icon:(UIImage*) icon backgroundColor:(UIColor *) color insets:(UIEdgeInsets) insets -{ - return [self buttonWithTitle:title icon:icon backgroundColor:color insets:insets callback:nil]; -} - -+(instancetype) buttonWithTitle:(NSString *) title icon:(UIImage*) icon backgroundColor:(UIColor *) color callback:(MGSwipeButtonCallback) callback -{ - return [self buttonWithTitle:title icon:icon backgroundColor:color padding:10 callback:callback]; -} - -+(instancetype) buttonWithTitle:(NSString *) title icon:(UIImage*) icon backgroundColor:(UIColor *) color padding:(NSInteger) padding callback:(MGSwipeButtonCallback) callback -{ - return [self buttonWithTitle:title icon:icon backgroundColor:color insets:UIEdgeInsetsMake(0, padding, 0, padding) callback:callback]; -} - -+(instancetype) buttonWithTitle:(NSString *) title icon:(UIImage*) icon backgroundColor:(UIColor *) color insets:(UIEdgeInsets) insets callback:(MGSwipeButtonCallback) callback -{ - MGSwipeButton * button = [self buttonWithType:UIButtonTypeCustom]; - button.backgroundColor = color; - button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; - button.titleLabel.textAlignment = NSTextAlignmentCenter; - [button setTitle:title forState:UIControlStateNormal]; - [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [button setImage:icon forState:UIControlStateNormal]; - button.callback = callback; - [button setEdgeInsets:insets]; - return button; -} - --(BOOL) callMGSwipeConvenienceCallback: (MGSwipeTableCell *) sender -{ - if (_callback) { - return _callback(sender); - } - return NO; -} - --(void) centerIconOverText -{ - [self centerIconOverTextWithSpacing: 3.0]; -} - --(void) centerIconOverTextWithSpacing: (CGFloat) spacing { - CGSize size = self.imageView.image.size; - - if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0 && [self isRTLLocale]) { - self.titleEdgeInsets = UIEdgeInsetsMake(0.0, - 0.0, - -(size.height + spacing), - -size.width); - size = [self.titleLabel.text sizeWithAttributes:@{ NSFontAttributeName: self.titleLabel.font }]; - self.imageEdgeInsets = UIEdgeInsetsMake(-(size.height + spacing), - -size.width, - 0.0, - 0.0); - } - else - { - self.titleEdgeInsets = UIEdgeInsetsMake(0.0, - -size.width, - -(size.height + spacing), - 0.0); - size = [self.titleLabel.text sizeWithAttributes:@{ NSFontAttributeName: self.titleLabel.font }]; - self.imageEdgeInsets = UIEdgeInsetsMake(-(size.height + spacing), - 0.0, - 0.0, - -size.width); - } -} - --(void) setPadding:(CGFloat) padding -{ - self.contentEdgeInsets = UIEdgeInsetsMake(0, padding, 0, padding); - [self sizeToFit]; -} - -- (void)setButtonWidth:(CGFloat)buttonWidth -{ - _buttonWidth = buttonWidth; - if (_buttonWidth > 0) - { - CGRect frame = self.frame; - frame.size.width = _buttonWidth; - self.frame = frame; - } - else - { - [self sizeToFit]; - } -} - --(void) setEdgeInsets:(UIEdgeInsets)insets -{ - self.contentEdgeInsets = insets; - [self sizeToFit]; -} - --(void) iconTintColor:(UIColor *)tintColor -{ - UIImage *currentIcon = self.imageView.image; - if (currentIcon.renderingMode != UIImageRenderingModeAlwaysTemplate) { - currentIcon = [currentIcon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - [self setImage:currentIcon forState:UIControlStateNormal]; - } - self.tintColor = tintColor; -} - -- (BOOL)isAppExtension -{ - return [[NSBundle mainBundle].executablePath rangeOfString:@".appex/"].location != NSNotFound; -} - --(BOOL) isRTLLocale -{ -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 - if (@available(iOS 9, *)) { -#else - if ([[UIView class] respondsToSelector:@selector(userInterfaceLayoutDirectionForSemanticContentAttribute:)]) { -#endif - return [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:self.semanticContentAttribute] == UIUserInterfaceLayoutDirectionRightToLeft; - } - else if ([self isAppExtension]) { - return [NSLocale characterDirectionForLanguage:[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]]==NSLocaleLanguageDirectionRightToLeft; - } else { - UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; - return application.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft; - } -} - -@end diff --git a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.h b/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.h deleted file mode 100644 index c91b00641..000000000 --- a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.h +++ /dev/null @@ -1,281 +0,0 @@ -/* - * MGSwipeTableCell is licensed under MIT license. See LICENSE.md file for more information. - * Copyright (c) 2016 Imanol Fernandez @MortimerGoro - */ - -#import -#import "MGSwipeButton.h" - - -/** Transition types */ -typedef NS_ENUM(NSInteger, MGSwipeTransition) { - MGSwipeTransitionBorder = 0, - MGSwipeTransitionStatic, - MGSwipeTransitionDrag, - MGSwipeTransitionClipCenter, - MGSwipeTransitionRotate3D -}; - -/** Compatibility with older versions */ -#define MGSwipeTransition3D MGSwipeTransitionRotate3D -#define MGSwipeStateSwippingLeftToRight MGSwipeStateSwipingLeftToRight -#define MGSwipeStateSwippingRightToLeft MGSwipeStateSwipingRightToLeft - -/** Swipe directions */ -typedef NS_ENUM(NSInteger, MGSwipeDirection) { - MGSwipeDirectionLeftToRight = 0, - MGSwipeDirectionRightToLeft -}; - -/** Swipe state */ -typedef NS_ENUM(NSInteger, MGSwipeState) { - MGSwipeStateNone = 0, - MGSwipeStateSwipingLeftToRight, - MGSwipeStateSwipingRightToLeft, - MGSwipeStateExpandingLeftToRight, - MGSwipeStateExpandingRightToLeft, -}; - -/** Swipe Expansion Layout */ -typedef NS_ENUM(NSInteger, MGSwipeExpansionLayout) { - MGSwipeExpansionLayoutBorder = 0, - MGSwipeExpansionLayoutCenter, - MGSwipeExpansionLayoutNone -}; - -/** Swipe Easing Function */ -typedef NS_ENUM(NSInteger, MGSwipeEasingFunction) { - MGSwipeEasingFunctionLinear = 0, - MGSwipeEasingFunctionQuadIn, - MGSwipeEasingFunctionQuadOut, - MGSwipeEasingFunctionQuadInOut, - MGSwipeEasingFunctionCubicIn, - MGSwipeEasingFunctionCubicOut, - MGSwipeEasingFunctionCubicInOut, - MGSwipeEasingFunctionBounceIn, - MGSwipeEasingFunctionBounceOut, - MGSwipeEasingFunctionBounceInOut -}; - -/** - * Swipe animation settings - **/ -@interface MGSwipeAnimation : NSObject -/** Animation duration in seconds. Default value 0.3 */ -@property (nonatomic, assign) CGFloat duration; -/** Animation easing function. Default value EaseOutBounce */ -@property (nonatomic, assign) MGSwipeEasingFunction easingFunction; -/** Override this method to implement custom easing functions */ --(CGFloat) value:(CGFloat) elapsed duration:(CGFloat) duration from:(CGFloat) from to:(CGFloat) to; - -@end - -/** - * Swipe settings - **/ -@interface MGSwipeSettings: NSObject -/** Transition used while swiping buttons */ -@property (nonatomic, assign) MGSwipeTransition transition; -/** Size proportional threshold to hide/keep the buttons when the user ends swiping. Default value 0.5 */ -@property (nonatomic, assign) CGFloat threshold; -/** Optional offset to change the swipe buttons position. Relative to the cell border position. Default value: 0 - ** For example it can be used to avoid cropped buttons when sectionIndexTitlesForTableView is used in the UITableView - **/ -@property (nonatomic, assign) CGFloat offset; -/** Top margin of the buttons relative to the contentView */ -@property (nonatomic, assign) CGFloat topMargin; -/** Bottom margin of the buttons relative to the contentView */ -@property (nonatomic, assign) CGFloat bottomMargin; -/** Distance between the buttons. Default value : 0 */ -@property (nonatomic, assign) CGFloat buttonsDistance; -/** If true, expands the last button length by safeAreaInsets. Useful for devices with a notch (e.g. iPhone X) */ -@property (nonatomic, assign) BOOL expandLastButtonBySafeAreaInsets; - -/** Animation settings when the swipe buttons are shown */ -@property (nonatomic, strong, nonnull) MGSwipeAnimation * showAnimation; -/** Animation settings when the swipe buttons are hided */ -@property (nonatomic, strong, nonnull) MGSwipeAnimation * hideAnimation; -/** Animation settings when the cell is stretched from the swipe buttons */ -@property (nonatomic, strong, nonnull) MGSwipeAnimation * stretchAnimation; - -/** Property to read or change swipe animation durations. Default value 0.3 */ -@property (nonatomic, assign) CGFloat animationDuration DEPRECATED_ATTRIBUTE; - -/** If true the buttons are kept swiped when the threshold is reached and the user ends the gesture - * If false, the buttons are always hidden when the user ends the swipe gesture - */ -@property (nonatomic, assign) BOOL keepButtonsSwiped; - -/** If true the table cell is not swiped, just the buttons **/ -@property (nonatomic, assign) BOOL onlySwipeButtons; - -/** If NO the swipe bounces will be disabled, the swipe motion will stop right after the button */ -@property (nonatomic, assign) BOOL enableSwipeBounces; - -/** Coefficient applied to cell movement in bounce zone. Set to value between 0.0 and 1.0 - to make the cell 'resist' swiping after buttons are revealed. Default is 1.0 */ -@property (nonatomic, assign) CGFloat swipeBounceRate; - -// default is NO. Controls whether buttons with different width are allowed. Buttons are resized to have the same size by default. -@property (nonatomic) BOOL allowsButtonsWithDifferentWidth; - -@end - - -/** - * Expansion settings to make expandable buttons - * Swipe button are not expandable by default - **/ -@interface MGSwipeExpansionSettings: NSObject -/** index of the expandable button (in the left or right buttons arrays) */ -@property (nonatomic, assign) NSInteger buttonIndex; -/** if true the button fills the cell on trigger, else it bounces back to its initial position */ -@property (nonatomic, assign) BOOL fillOnTrigger; -/** Size proportional threshold to trigger the expansion button. Default value 1.5 */ -@property (nonatomic, assign) CGFloat threshold; -/** Optional expansion color. Expanded button's background color is used by default **/ -@property (nonatomic, strong, nullable) UIColor * expansionColor; -/** Defines the layout of the expanded button **/ -@property (nonatomic, assign) MGSwipeExpansionLayout expansionLayout; -/** Animation settings when the expansion is triggered **/ -@property (nonatomic, strong, nonnull) MGSwipeAnimation * triggerAnimation; - -/** Property to read or change expansion animation durations. Default value 0.2 - * The target animation is the change of a button from normal state to expanded state - */ -@property (nonatomic, assign) CGFloat animationDuration; -@end - - -/** helper forward declaration */ -@class MGSwipeTableCell; - -/** - * Optional delegate to configure swipe buttons or to receive triggered actions. - * Buttons can be configured inline when the cell is created instead of using this delegate, - * but using the delegate improves memory usage because buttons are only created in demand - */ -@protocol MGSwipeTableCellDelegate - -@optional -/** - * Delegate method to enable/disable swipe gestures - * @return YES if swipe is allowed - **/ --(BOOL) swipeTableCell:(nonnull MGSwipeTableCell*) cell canSwipe:(MGSwipeDirection) direction fromPoint:(CGPoint) point; --(BOOL) swipeTableCell:(nonnull MGSwipeTableCell*) cell canSwipe:(MGSwipeDirection) direction DEPRECATED_ATTRIBUTE; //backwards compatibility - -/** - * Delegate method invoked when the current swipe state changes - @param state the current Swipe State - @param gestureIsActive YES if the user swipe gesture is active. No if the uses has already ended the gesture - **/ --(void) swipeTableCell:(nonnull MGSwipeTableCell*) cell didChangeSwipeState:(MGSwipeState) state gestureIsActive:(BOOL) gestureIsActive; - -/** - * Called when the user clicks a swipe button or when a expandable button is automatically triggered - * @return YES to autohide the current swipe buttons - **/ --(BOOL) swipeTableCell:(nonnull MGSwipeTableCell*) cell tappedButtonAtIndex:(NSInteger) index direction:(MGSwipeDirection)direction fromExpansion:(BOOL) fromExpansion; -/** - * Delegate method to setup the swipe buttons and swipe/expansion settings - * Buttons can be any kind of UIView but it's recommended to use the convenience MGSwipeButton class - * Setting up buttons with this delegate instead of using cell properties improves memory usage because buttons are only created in demand - * @param cell the UITableViewCell to configure. You can get the indexPath using [tableView indexPathForCell:cell] - * @param direction The swipe direction (left to right or right to left) - * @param swipeSettings instance to configure the swipe transition and setting (optional) - * @param expansionSettings instance to configure button expansions (optional) - * @return Buttons array - **/ --(nullable NSArray*) swipeTableCell:(nonnull MGSwipeTableCell*) cell swipeButtonsForDirection:(MGSwipeDirection)direction - swipeSettings:(nonnull MGSwipeSettings*) swipeSettings expansionSettings:(nonnull MGSwipeExpansionSettings*) expansionSettings; - -/** - * Called when the user taps on a swiped cell - * @return YES to autohide the current swipe buttons - **/ --(BOOL) swipeTableCell:(nonnull MGSwipeTableCell *)cell shouldHideSwipeOnTap:(CGPoint) point; - -/** - * Called when the cell will begin swiping - * Useful to make cell changes that only are shown after the cell is swiped open - **/ --(void) swipeTableCellWillBeginSwiping:(nonnull MGSwipeTableCell *) cell; - -/** - * Called when the cell will end swiping - **/ --(void) swipeTableCellWillEndSwiping:(nonnull MGSwipeTableCell *) cell; - -@end - - -/** - * Swipe Cell class - * To implement swipe cells you have to override from this class - * You can create the cells programmatically, using xibs or storyboards - */ -@interface MGSwipeTableCell : UITableViewCell - -/** optional delegate (not retained) */ -@property (nonatomic, weak, nullable) id delegate; - -/** optional to use contentView alternative. Use this property instead of contentView to support animated views while swiping */ -@property (nonatomic, strong, readonly, nonnull) UIView * swipeContentView; - -/** - * Left and right swipe buttons and its settings. - * Buttons can be any kind of UIView but it's recommended to use the convenience MGSwipeButton class - */ -@property (nonatomic, copy, nonnull) NSArray * leftButtons; -@property (nonatomic, copy, nonnull) NSArray * rightButtons; -@property (nonatomic, strong, nonnull) MGSwipeSettings * leftSwipeSettings; -@property (nonatomic, strong, nonnull) MGSwipeSettings * rightSwipeSettings; - -/** Optional settings to allow expandable buttons */ -@property (nonatomic, strong, nonnull) MGSwipeExpansionSettings * leftExpansion; -@property (nonatomic, strong, nonnull) MGSwipeExpansionSettings * rightExpansion; - -/** Readonly property to fetch the current swipe state */ -@property (nonatomic, readonly) MGSwipeState swipeState; -/** Readonly property to check if the user swipe gesture is currently active */ -@property (nonatomic, readonly) BOOL isSwipeGestureActive; - -// default is NO. Controls whether multiple cells can be swiped simultaneously -@property (nonatomic) BOOL allowsMultipleSwipe; -// default is NO. Controls whether buttons with different width are allowed. Buttons are resized to have the same size by default. -@property (nonatomic) BOOL allowsButtonsWithDifferentWidth DEPRECATED_MSG_ATTRIBUTE("Use MGSwipeSettings.allowsButtonsWithDifferentWidth instead"); -//default is YES. Controls whether swipe gesture is allowed when the touch starts into the swiped buttons -@property (nonatomic) BOOL allowsSwipeWhenTappingButtons; -//default is YES. Controls whether swipe gesture is allowed in opposite directions. NO value disables swiping in opposite direction once started in one direction -@property (nonatomic) BOOL allowsOppositeSwipe; -// default is NO. Controls whether the cell selection/highlight status is preserved when expansion occurs -@property (nonatomic) BOOL preservesSelectionStatus; -/* default is NO. Controls whether dismissing a swiped cell when tapping outside of the cell generates a real touch event on the other cell. - Default behaviour is the same as the Mail app on iOS. Enable it if you want to allow to start a new swipe while a cell is already in swiped in a single step. */ -@property (nonatomic) BOOL touchOnDismissSwipe; - -/** Optional background color for swipe overlay. If not set, its inferred automatically from the cell contentView */ -@property (nonatomic, strong, nullable) UIColor * swipeBackgroundColor; -/** Property to read or change the current swipe offset programmatically */ -@property (nonatomic, assign) CGFloat swipeOffset; - -/** Utility methods to show or hide swipe buttons programmatically */ --(void) hideSwipeAnimated: (BOOL) animated; --(void) hideSwipeAnimated: (BOOL) animated completion:(nullable void(^)(BOOL finished)) completion; --(void) showSwipe: (MGSwipeDirection) direction animated: (BOOL) animated; --(void) showSwipe: (MGSwipeDirection) direction animated: (BOOL) animated completion:(nullable void(^)(BOOL finished)) completion; --(void) setSwipeOffset:(CGFloat)offset animated: (BOOL) animated completion:(nullable void(^)(BOOL finished)) completion; --(void) setSwipeOffset:(CGFloat)offset animation: (nullable MGSwipeAnimation *) animation completion:(nullable void(^)(BOOL finished)) completion; --(void) expandSwipe: (MGSwipeDirection) direction animated: (BOOL) animated; - -/** Refresh method to be used when you want to update the cell contents while the user is swiping */ --(void) refreshContentView; -/** Refresh method to be used when you want to dynamically change the left or right buttons (add or remove) - * If you only want to change the title or the backgroundColor of a button you can change it's properties (get the button instance from leftButtons or rightButtons arrays) - * @param usingDelegate if YES new buttons will be fetched using the MGSwipeTableCellDelegate. Otherwise new buttons will be fetched from leftButtons/rightButtons properties. - */ --(void) refreshButtons: (BOOL) usingDelegate; - -@end - diff --git a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.m b/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.m deleted file mode 100644 index 35e9c3b0c..000000000 --- a/Pods/MGSwipeTableCell/MGSwipeTableCell/MGSwipeTableCell.m +++ /dev/null @@ -1,1517 +0,0 @@ -/* - * MGSwipeTableCell is licensed under MIT license. See LICENSE.md file for more information. - * Copyright (c) 2016 Imanol Fernandez @MortimerGoro - */ - -#import "MGSwipeTableCell.h" - -#pragma mark Input Overlay Helper Class -/** Used to capture table input while swipe buttons are visible*/ -@interface MGSwipeTableInputOverlay : UIView -@property (nonatomic, weak) MGSwipeTableCell * currentCell; -@end - -@implementation MGSwipeTableInputOverlay - --(id) initWithFrame:(CGRect)frame -{ - if (self = [super initWithFrame:frame]) { - self.backgroundColor = [UIColor clearColor]; - self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - } - return self; -} - --(UIView *) hitTest:(CGPoint)point withEvent:(UIEvent *)event -{ - if (event == nil) { - return nil; - } - if (!_currentCell) { - [self removeFromSuperview]; - return nil; - } - CGPoint p = [self convertPoint:point toView:_currentCell]; - if (_currentCell && (_currentCell.hidden || CGRectContainsPoint(_currentCell.bounds, p))) { - return nil; - } - BOOL hide = YES; - if (_currentCell && _currentCell.delegate && [_currentCell.delegate respondsToSelector:@selector(swipeTableCell:shouldHideSwipeOnTap:)]) { - hide = [_currentCell.delegate swipeTableCell:_currentCell shouldHideSwipeOnTap:p]; - } - if (hide) { - [_currentCell hideSwipeAnimated:YES]; - } - return _currentCell.touchOnDismissSwipe ? nil : self; -} - -@end - -#pragma mark Button Container View and transitions - -@interface MGSwipeButtonsView : UIView -@property (nonatomic, weak) MGSwipeTableCell * cell; -@property (nonatomic, strong) UIColor * backgroundColorCopy; -@end - -@implementation MGSwipeButtonsView -{ - NSArray * _buttons; - UIView * _container; - BOOL _fromLeft; - UIView * _expandedButton; - UIView * _expandedButtonAnimated; - UIView * _expansionBackground; - UIView * _expansionBackgroundAnimated; - CGRect _expandedButtonBoundsCopy; - MGSwipeDirection _direction; - MGSwipeExpansionLayout _expansionLayout; - CGFloat _expansionOffset; - CGFloat _buttonsDistance; - CGFloat _safeInset; - BOOL _autoHideExpansion; -} - -#pragma mark Layout - --(instancetype) initWithButtons:(NSArray*) buttonsArray direction:(MGSwipeDirection) direction swipeSettings:(MGSwipeSettings*) settings safeInset: (CGFloat) safeInset -{ - CGFloat containerWidth = 0; - CGSize maxSize = CGSizeZero; - UIView* lastButton = [buttonsArray lastObject]; - for (UIView * button in buttonsArray) { - containerWidth += button.bounds.size.width + (lastButton == button ? 0 : settings.buttonsDistance); - maxSize.width = MAX(maxSize.width, button.bounds.size.width); - maxSize.height = MAX(maxSize.height, button.bounds.size.height); - } - if (!settings.allowsButtonsWithDifferentWidth) { - containerWidth = maxSize.width * buttonsArray.count + settings.buttonsDistance * (buttonsArray.count - 1); - } - - if (self = [super initWithFrame:CGRectMake(0, 0, containerWidth + safeInset, maxSize.height)]) { - _fromLeft = direction == MGSwipeDirectionLeftToRight; - _buttonsDistance = settings.buttonsDistance; - _container = [[UIView alloc] initWithFrame:self.bounds]; - _container.clipsToBounds = YES; - _container.backgroundColor = [UIColor clearColor]; - _direction = direction; - _safeInset = safeInset; - [self addSubview:_container]; - _buttons = _fromLeft ? buttonsArray: [[buttonsArray reverseObjectEnumerator] allObjects]; - for (UIView * button in _buttons) { - if ([button isKindOfClass:[UIButton class]]) { - UIButton * btn = (UIButton*)button; - [btn removeTarget:nil action:@selector(mgButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; //Remove all targets to avoid problems with reused buttons among many cells - [btn addTarget:self action:@selector(mgButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; - } - if (!settings.allowsButtonsWithDifferentWidth) { - button.frame = CGRectMake(0, 0, maxSize.width, maxSize.height); - } - button.autoresizingMask = UIViewAutoresizingFlexibleHeight; - [_container insertSubview:button atIndex: _fromLeft ? 0: _container.subviews.count]; - } - // Expand last button to make it look good with a notch. - if (safeInset > 0 && settings.expandLastButtonBySafeAreaInsets && _buttons.count > 0) { - UIView * notchButton = _direction == MGSwipeDirectionRightToLeft ? [_buttons lastObject] : [_buttons firstObject]; - notchButton.frame = CGRectMake(0, 0, notchButton.frame.size.width + safeInset, notchButton.frame.size.height); - [self adjustContentEdge:notchButton edgeDelta:safeInset]; - } - [self resetButtons]; - } - return self; -} - --(void) dealloc -{ - for (UIView * button in _buttons) { - if ([button isKindOfClass:[UIButton class]]) { - [(UIButton *)button removeTarget:self action:@selector(mgButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; - } - } -} - --(void) resetButtons -{ - CGFloat offsetX = 0; - UIView* lastButton = [_buttons lastObject]; - for (UIView * button in _buttons) { - button.frame = CGRectMake(offsetX, 0, button.bounds.size.width, self.bounds.size.height); - button.autoresizingMask = UIViewAutoresizingFlexibleHeight; - offsetX += button.bounds.size.width + (lastButton == button ? 0 : _buttonsDistance); - } -} - --(void) setSafeInset:(CGFloat)safeInset extendEdgeButton:(BOOL) extendEdgeButton isRTL: (BOOL) isRTL { - CGFloat diff = safeInset - _safeInset; - if (diff != 0) { - _safeInset = safeInset; - // Adjust last button length (fit the safeInset to make it look good with a notch) - if (extendEdgeButton) { - UIView * edgeButton = _direction == MGSwipeDirectionRightToLeft ? [_buttons lastObject] : [_buttons firstObject]; - edgeButton.frame = CGRectMake(0, 0, edgeButton.bounds.size.width + diff, edgeButton.frame.size.height); - // Adjust last button content edge (to correctly align the text/icon) - [self adjustContentEdge:edgeButton edgeDelta:diff]; - } - - CGRect frame = self.frame; - CGAffineTransform transform = self.transform; - self.transform = CGAffineTransformIdentity; - // Adjust container width - frame.size.width += diff; - // Adjust position to match width and safeInsets chages - if (_direction == MGSwipeDirectionLeftToRight) { - frame.origin.x = -frame.size.width + safeInset * (isRTL ? 1 : -1); - } - else { - frame.origin.x = self.superview.bounds.size.width + safeInset * (isRTL ? 1 : -1); - } - - self.frame = frame; - self.transform = transform; - [self resetButtons]; - } -} - --(void) adjustContentEdge: (UIView *) view edgeDelta:(CGFloat) delta { - if ([view isKindOfClass:[UIButton class]]) { - UIButton * btn = (UIButton *) view; - UIEdgeInsets contentInsets = btn.contentEdgeInsets; - if (_direction == MGSwipeDirectionRightToLeft) { - contentInsets.right += delta; - } - else { - contentInsets.left += delta; - } - btn.contentEdgeInsets = contentInsets; - } -} - --(void) layoutExpansion: (CGFloat) offset -{ - _expansionOffset = offset; - _container.frame = CGRectMake(_fromLeft ? 0: self.bounds.size.width - offset, 0, offset, self.bounds.size.height); - if (_expansionBackgroundAnimated && _expandedButtonAnimated) { - _expansionBackgroundAnimated.frame = [self expansionBackgroundRect:_expandedButtonAnimated]; - } -} - --(void) layoutSubviews -{ - [super layoutSubviews]; - if (_expandedButton) { - [self layoutExpansion:_expansionOffset]; - } - else { - _container.frame = self.bounds; - } -} - --(CGRect) expansionBackgroundRect: (UIView *) button -{ - CGFloat extra = 100.0f; //extra size to avoid expansion background size issue on iOS 7.0 - if (_fromLeft) { - return CGRectMake(-extra, 0, button.frame.origin.x + extra, _container.bounds.size.height); - } - else { - return CGRectMake(button.frame.origin.x + button.bounds.size.width, 0, - _container.bounds.size.width - (button.frame.origin.x + button.bounds.size.width ) + extra - ,_container.bounds.size.height); - } - -} - --(void) expandToOffset:(CGFloat) offset settings:(MGSwipeExpansionSettings*) settings -{ - if (settings.buttonIndex < 0 || settings.buttonIndex >= _buttons.count) { - return; - } - if (!_expandedButton) { - _expandedButton = [_buttons objectAtIndex: _fromLeft ? settings.buttonIndex : _buttons.count - settings.buttonIndex - 1]; - CGRect previusRect = _container.frame; - [self layoutExpansion:offset]; - [self resetButtons]; - if (!_fromLeft) { //Fix expansion animation for right buttons - for (UIView * button in _buttons) { - CGRect frame = button.frame; - frame.origin.x += _container.bounds.size.width - previusRect.size.width; - button.frame = frame; - } - } - _expansionBackground = [[UIView alloc] initWithFrame:[self expansionBackgroundRect:_expandedButton]]; - _expansionBackground.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - if (settings.expansionColor) { - _backgroundColorCopy = _expandedButton.backgroundColor; - _expandedButton.backgroundColor = settings.expansionColor; - } - _expansionBackground.backgroundColor = _expandedButton.backgroundColor; - if (UIColor.clearColor == _expandedButton.backgroundColor) { - // Provides access to more complex content for display on the background - _expansionBackground.layer.contents = _expandedButton.layer.contents; - } - [_container addSubview:_expansionBackground]; - _expansionLayout = settings.expansionLayout; - - CGFloat duration = _fromLeft ? _cell.leftExpansion.animationDuration : _cell.rightExpansion.animationDuration; - [UIView animateWithDuration: duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ - self->_expandedButton.hidden = NO; - - if (self->_expansionLayout == MGSwipeExpansionLayoutCenter) { - self->_expandedButtonBoundsCopy = self->_expandedButton.bounds; - self->_expandedButton.layer.mask = nil; - self->_expandedButton.layer.transform = CATransform3DIdentity; - self->_expandedButton.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - [self->_expandedButton.superview bringSubviewToFront:self->_expandedButton]; - self->_expandedButton.frame = self->_container.bounds; - self->_expansionBackground.frame = [self expansionBackgroundRect:self->_expandedButton]; - } - else if (self->_expansionLayout == MGSwipeExpansionLayoutNone) { - [self->_expandedButton.superview bringSubviewToFront:self->_expandedButton]; - self->_expansionBackground.frame = self->_container.bounds; - } - else if (self->_fromLeft) { - self->_expandedButton.frame = CGRectMake(self->_container.bounds.size.width - self->_expandedButton.bounds.size.width, 0, self->_expandedButton.bounds.size.width, self->_expandedButton.bounds.size.height); - self->_expandedButton.autoresizingMask|= UIViewAutoresizingFlexibleLeftMargin; - self->_expansionBackground.frame = [self expansionBackgroundRect:self->_expandedButton]; - } - else { - self->_expandedButton.frame = CGRectMake(0, 0, self->_expandedButton.bounds.size.width, self->_expandedButton.bounds.size.height); - self->_expandedButton.autoresizingMask|= UIViewAutoresizingFlexibleRightMargin; - self->_expansionBackground.frame = [self expansionBackgroundRect:self->_expandedButton]; - } - - } completion:^(BOOL finished) { - }]; - return; - } - [self layoutExpansion:offset]; -} - --(void) endExpansionAnimated:(BOOL) animated -{ - if (_expandedButton) { - _expandedButtonAnimated = _expandedButton; - if (_expansionBackgroundAnimated && _expansionBackgroundAnimated != _expansionBackground) { - [_expansionBackgroundAnimated removeFromSuperview]; - } - _expansionBackgroundAnimated = _expansionBackground; - _expansionBackground = nil; - _expandedButton = nil; - if (_backgroundColorCopy) { - _expansionBackgroundAnimated.backgroundColor = _backgroundColorCopy; - _expandedButtonAnimated.backgroundColor = _backgroundColorCopy; - _backgroundColorCopy = nil; - } - CGFloat duration = _fromLeft ? _cell.leftExpansion.animationDuration : _cell.rightExpansion.animationDuration; - [UIView animateWithDuration: animated ? duration : 0.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ - self->_container.frame = self.bounds; - if (self->_expansionLayout == MGSwipeExpansionLayoutCenter) { - self->_expandedButtonAnimated.frame = self->_expandedButtonBoundsCopy; - } - [self resetButtons]; - self->_expansionBackgroundAnimated.frame = [self expansionBackgroundRect:self->_expandedButtonAnimated]; - } completion:^(BOOL finished) { - [self->_expansionBackgroundAnimated removeFromSuperview]; - }]; - } - else if (_expansionBackground) { - [_expansionBackground removeFromSuperview]; - _expansionBackground = nil; - } -} - --(UIView*) getExpandedButton -{ - return _expandedButton; -} - -#pragma mark Trigger Actions - --(BOOL) handleClick: (id) sender fromExpansion:(BOOL) fromExpansion -{ - bool autoHide = false; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - if ([sender respondsToSelector:@selector(callMGSwipeConvenienceCallback:)]) { - //call convenience block callback if exits (usage of MGSwipeButton class is not compulsory) - autoHide = [sender performSelector:@selector(callMGSwipeConvenienceCallback:) withObject:_cell]; - } -#pragma clang diagnostic pop - - if (_cell.delegate && [_cell.delegate respondsToSelector:@selector(swipeTableCell:tappedButtonAtIndex:direction:fromExpansion:)]) { - NSInteger index = [_buttons indexOfObject:sender]; - if (!_fromLeft) { - index = _buttons.count - index - 1; //right buttons are reversed - } - autoHide|= [_cell.delegate swipeTableCell:_cell tappedButtonAtIndex:index direction:_fromLeft ? MGSwipeDirectionLeftToRight : MGSwipeDirectionRightToLeft fromExpansion:fromExpansion]; - } - - if (fromExpansion && autoHide) { - _expandedButton = nil; - _cell.swipeOffset = 0; - } - else if (autoHide) { - [_cell hideSwipeAnimated:YES]; - } - - return autoHide; - -} -//button listener --(void) mgButtonClicked: (id) sender -{ - [self handleClick:sender fromExpansion:NO]; -} - - -#pragma mark Transitions - --(void) transitionStatic:(CGFloat) t -{ - const CGFloat dx = self.bounds.size.width * (1.0 - t); - CGFloat offsetX = 0; - - UIView* lastButton = [_buttons lastObject]; - for (UIView *button in _buttons) { - CGRect frame = button.frame; - frame.origin.x = offsetX + (_fromLeft ? dx : -dx); - button.frame = frame; - offsetX += frame.size.width + (button == lastButton ? 0 : _buttonsDistance); - } -} - --(void) transitionDrag:(CGFloat) t -{ - //No Op, nothing to do ;) -} - --(void) transitionClip:(CGFloat) t -{ - CGFloat selfWidth = self.bounds.size.width; - CGFloat offsetX = 0; - - UIView* lastButton = [_buttons lastObject]; - for (UIView *button in _buttons) { - CGRect frame = button.frame; - CGFloat dx = roundf(frame.size.width * 0.5 * (1.0 - t)) ; - frame.origin.x = _fromLeft ? (selfWidth - frame.size.width - offsetX) * (1.0 - t) + offsetX + dx : offsetX * t - dx; - button.frame = frame; - - if (_buttons.count > 1) { - CAShapeLayer *maskLayer = [CAShapeLayer new]; - CGRect maskRect = CGRectMake(dx - 0.5, 0, frame.size.width - 2 * dx + 1.5, frame.size.height); - CGPathRef path = CGPathCreateWithRect(maskRect, NULL); - maskLayer.path = path; - CGPathRelease(path); - button.layer.mask = maskLayer; - } - - offsetX += frame.size.width + (button == lastButton ? 0 : _buttonsDistance); - } -} - --(void) transtitionFloatBorder:(CGFloat) t -{ - CGFloat selfWidth = self.bounds.size.width; - CGFloat offsetX = 0; - - UIView* lastButton = [_buttons lastObject]; - for (UIView *button in _buttons) { - CGRect frame = button.frame; - frame.origin.x = _fromLeft ? (selfWidth - frame.size.width - offsetX) * (1.0 - t) + offsetX : offsetX * t; - button.frame = frame; - offsetX += frame.size.width + (button == lastButton ? 0 : _buttonsDistance); - } -} - --(void) transition3D:(CGFloat) t -{ - const CGFloat invert = _fromLeft ? 1.0 : -1.0; - const CGFloat angle = M_PI_2 * (1.0 - t) * invert; - CATransform3D transform = CATransform3DIdentity; - transform.m34 = -1.0/400.0f; //perspective 1/z - const CGFloat dx = -_container.bounds.size.width * 0.5 * invert; - const CGFloat offset = dx * 2 * (1.0 - t); - transform = CATransform3DTranslate(transform, dx - offset, 0, 0); - transform = CATransform3DRotate(transform, angle, 0.0, 1.0, 0.0); - transform = CATransform3DTranslate(transform, -dx, 0, 0); - _container.layer.transform = transform; -} - --(void) transition:(MGSwipeTransition) mode percent:(CGFloat) t -{ - switch (mode) { - case MGSwipeTransitionStatic: [self transitionStatic:t]; break; - case MGSwipeTransitionDrag: [self transitionDrag:t]; break; - case MGSwipeTransitionClipCenter: [self transitionClip:t]; break; - case MGSwipeTransitionBorder: [self transtitionFloatBorder:t]; break; - case MGSwipeTransitionRotate3D: [self transition3D:t]; break; - } - if (_expandedButtonAnimated && _expansionBackgroundAnimated) { - _expansionBackgroundAnimated.frame = [self expansionBackgroundRect:_expandedButtonAnimated]; - } -} - -@end - -#pragma mark Settings Classes -@implementation MGSwipeSettings --(instancetype) init -{ - if (self = [super init]) { - self.transition = MGSwipeTransitionBorder; - self.threshold = 0.5; - self.offset = 0; - self.expandLastButtonBySafeAreaInsets = YES; - self.keepButtonsSwiped = YES; - self.enableSwipeBounces = YES; - self.swipeBounceRate = 1.0; - self.showAnimation = [[MGSwipeAnimation alloc] init]; - self.hideAnimation = [[MGSwipeAnimation alloc] init]; - self.stretchAnimation = [[MGSwipeAnimation alloc] init]; - } - return self; -} - --(void) setAnimationDuration:(CGFloat)duration -{ - _showAnimation.duration = duration; - _hideAnimation.duration = duration; - _stretchAnimation.duration = duration; -} - --(CGFloat) animationDuration { - return _showAnimation.duration; -} - -@end - -@implementation MGSwipeExpansionSettings --(instancetype) init -{ - if (self = [super init]) { - self.buttonIndex = -1; - self.threshold = 1.3; - self.animationDuration = 0.2; - self.triggerAnimation = [[MGSwipeAnimation alloc] init]; - } - return self; -} -@end - -@interface MGSwipeAnimationData : NSObject -@property (nonatomic, assign) CGFloat from; -@property (nonatomic, assign) CGFloat to; -@property (nonatomic, assign) CFTimeInterval duration; -@property (nonatomic, assign) CFTimeInterval start; -@property (nonatomic, strong) MGSwipeAnimation * animation; - -@end - -@implementation MGSwipeAnimationData -@end - - -#pragma mark Easing Functions and MGSwipeAnimation - -static inline CGFloat mgEaseLinear(CGFloat t, CGFloat b, CGFloat c) { - return c*t + b; -} - -static inline CGFloat mgEaseInQuad(CGFloat t, CGFloat b, CGFloat c) { - return c*t*t + b; -} -static inline CGFloat mgEaseOutQuad(CGFloat t, CGFloat b, CGFloat c) { - return -c*t*(t-2) + b; -} -static inline CGFloat mgEaseInOutQuad(CGFloat t, CGFloat b, CGFloat c) { - if ((t*=2) < 1) return c/2*t*t + b; - --t; - return -c/2 * (t*(t-2) - 1) + b; -} -static inline CGFloat mgEaseInCubic(CGFloat t, CGFloat b, CGFloat c) { - return c*t*t*t + b; -} -static inline CGFloat mgEaseOutCubic(CGFloat t, CGFloat b, CGFloat c) { - --t; - return c*(t*t*t + 1) + b; -} -static inline CGFloat mgEaseInOutCubic(CGFloat t, CGFloat b, CGFloat c) { - if ((t*=2) < 1) return c/2*t*t*t + b; - t-=2; - return c/2*(t*t*t + 2) + b; -} -static inline CGFloat mgEaseOutBounce(CGFloat t, CGFloat b, CGFloat c) { - if (t < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - t-=(1.5/2.75); - return c*(7.5625*t*t + .75) + b; - } else if (t < (2.5/2.75)) { - t-=(2.25/2.75); - return c*(7.5625*t*t + .9375) + b; - } else { - t-=(2.625/2.75); - return c*(7.5625*t*t + .984375) + b; - } -}; -static inline CGFloat mgEaseInBounce(CGFloat t, CGFloat b, CGFloat c) { - return c - mgEaseOutBounce (1.0 -t, 0, c) + b; -}; - -static inline CGFloat mgEaseInOutBounce(CGFloat t, CGFloat b, CGFloat c) { - if (t < 0.5) return mgEaseInBounce (t*2, 0, c) * .5 + b; - return mgEaseOutBounce (1.0 - t*2, 0, c) * .5 + c*.5 + b; -}; - -@implementation MGSwipeAnimation - --(instancetype) init { - if (self = [super init]) { - _duration = 0.3; - _easingFunction = MGSwipeEasingFunctionCubicOut; - } - return self; -} - --(CGFloat) value:(CGFloat)elapsed duration:(CGFloat)duration from:(CGFloat)from to:(CGFloat)to -{ - CGFloat t = MIN(elapsed/duration, 1.0f); - if (t == 1.0) { - return to; //precise last value - } - CGFloat (*easingFunction)(CGFloat t, CGFloat b, CGFloat c) = 0; - switch (_easingFunction) { - case MGSwipeEasingFunctionLinear: easingFunction = mgEaseLinear;break; - case MGSwipeEasingFunctionQuadIn: easingFunction = mgEaseInQuad;break; - case MGSwipeEasingFunctionQuadOut: easingFunction = mgEaseOutQuad;break; - case MGSwipeEasingFunctionQuadInOut: easingFunction = mgEaseInOutQuad;break; - case MGSwipeEasingFunctionCubicIn: easingFunction = mgEaseInCubic;break; - default: - case MGSwipeEasingFunctionCubicOut: easingFunction = mgEaseOutCubic;break; - case MGSwipeEasingFunctionCubicInOut: easingFunction = mgEaseInOutCubic;break; - case MGSwipeEasingFunctionBounceIn: easingFunction = mgEaseInBounce;break; - case MGSwipeEasingFunctionBounceOut: easingFunction = mgEaseOutBounce;break; - case MGSwipeEasingFunctionBounceInOut: easingFunction = mgEaseInOutBounce;break; - } - return (*easingFunction)(t, from, to - from); -} - -@end - -#pragma mark MGSwipeTableCell Implementation - - -@implementation MGSwipeTableCell -{ - UITapGestureRecognizer * _tapRecognizer; - UIPanGestureRecognizer * _panRecognizer; - CGPoint _panStartPoint; - CGFloat _panStartOffset; - CGFloat _targetOffset; - - UIView * _swipeOverlay; - UIImageView * _swipeView; - UIView * _swipeContentView; - MGSwipeButtonsView * _leftView; - MGSwipeButtonsView * _rightView; - bool _allowSwipeRightToLeft; - bool _allowSwipeLeftToRight; - __weak MGSwipeButtonsView * _activeExpansion; - - MGSwipeTableInputOverlay * _tableInputOverlay; - bool _overlayEnabled; - UITableViewCellSelectionStyle _previusSelectionStyle; - NSMutableSet * _previusHiddenViews; - UITableViewCellAccessoryType _previusAccessoryType; - BOOL _triggerStateChanges; - - MGSwipeAnimationData * _animationData; - void (^_animationCompletion)(BOOL finished); - CADisplayLink * _displayLink; - MGSwipeState _firstSwipeState; -} - -#pragma mark View creation & layout - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - [self initViews:YES]; - } - return self; -} - -- (id)initWithCoder:(NSCoder*)aDecoder -{ - if(self = [super initWithCoder:aDecoder]) { - [self initViews:YES]; - } - return self; -} - --(void) awakeFromNib -{ - [super awakeFromNib]; - if (!_panRecognizer) { - [self initViews:YES]; - } -} - --(void) dealloc -{ - [self hideSwipeOverlayIfNeededIncludingReselect:false]; -} - --(void) initViews: (BOOL) cleanButtons -{ - if (cleanButtons) { - _leftButtons = [NSArray array]; - _rightButtons = [NSArray array]; - _leftSwipeSettings = [[MGSwipeSettings alloc] init]; - _rightSwipeSettings = [[MGSwipeSettings alloc] init]; - _leftExpansion = [[MGSwipeExpansionSettings alloc] init]; - _rightExpansion = [[MGSwipeExpansionSettings alloc] init]; - } - _animationData = [[MGSwipeAnimationData alloc] init]; - _panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHandler:)]; - [self addGestureRecognizer:_panRecognizer]; - _panRecognizer.delegate = self; - _activeExpansion = nil; - _previusHiddenViews = [NSMutableSet set]; - _swipeState = MGSwipeStateNone; - _triggerStateChanges = YES; - _allowsSwipeWhenTappingButtons = YES; - _preservesSelectionStatus = NO; - _allowsOppositeSwipe = YES; - _firstSwipeState = MGSwipeStateNone; - -} - --(void) cleanViews -{ - [self hideSwipeAnimated:NO]; - if (_displayLink) { - [_displayLink invalidate]; - _displayLink = nil; - } - if (_swipeOverlay) { - [_swipeOverlay removeFromSuperview]; - _swipeOverlay = nil; - } - _leftView = _rightView = nil; - if (_panRecognizer) { - _panRecognizer.delegate = nil; - [self removeGestureRecognizer:_panRecognizer]; - _panRecognizer = nil; - } -} - -- (BOOL)isAppExtension -{ - return [[NSBundle mainBundle].executablePath rangeOfString:@".appex/"].location != NSNotFound; -} - - --(BOOL) isRTLLocale -{ -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 - if (@available(iOS 9, *)) { -#else - if ([[UIView class] respondsToSelector:@selector(userInterfaceLayoutDirectionForSemanticContentAttribute:)]) { -#endif - return [UIView userInterfaceLayoutDirectionForSemanticContentAttribute:self.semanticContentAttribute] == UIUserInterfaceLayoutDirectionRightToLeft; - } - else if ([self isAppExtension]) { - return [NSLocale characterDirectionForLanguage:[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]]==NSLocaleLanguageDirectionRightToLeft; - } else { - UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; - return application.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft; - } -} - --(void) fixRegionAndAccesoryViews -{ - //Fix right to left layout direction for arabic and hebrew languagues - if (self.bounds.size.width != self.contentView.bounds.size.width && [self isRTLLocale]) { - _swipeOverlay.frame = CGRectMake(-self.bounds.size.width + self.contentView.bounds.size.width, 0, _swipeOverlay.bounds.size.width, _swipeOverlay.bounds.size.height); - } -} - --(UIEdgeInsets) getSafeInsets { -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 - if (@available(iOS 11, *)) { - return self.safeAreaInsets; - } - else { - return UIEdgeInsetsZero; - } -#else - return UIEdgeInsetsZero; -#endif -} - --(UIView *) swipeContentView -{ - if (!_swipeContentView) { - _swipeContentView = [[UIView alloc] initWithFrame:self.contentView.bounds]; - _swipeContentView.backgroundColor = [UIColor clearColor]; - _swipeContentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _swipeContentView.layer.zPosition = 9; - [self.contentView addSubview:_swipeContentView]; - } - return _swipeContentView; -} - --(void) layoutSubviews -{ - [super layoutSubviews]; - if (_swipeContentView) { - _swipeContentView.frame = self.contentView.bounds; - } - if (_swipeOverlay) { - CGSize prevSize = _swipeView.bounds.size; - _swipeOverlay.frame = CGRectMake(0, 0, self.bounds.size.width, self.contentView.bounds.size.height); - [self fixRegionAndAccesoryViews]; - if (_swipeView.image && !CGSizeEqualToSize(prevSize, _swipeOverlay.bounds.size)) { - //refresh safeInsets in situations like layout change, orientation change, table resize, etc. - UIEdgeInsets safeInsets = [self getSafeInsets]; - // Refresh safe insets - if (_leftView) { - CGFloat width = _leftView.bounds.size.width; - [_leftView setSafeInset:safeInsets.left extendEdgeButton:_leftSwipeSettings.expandLastButtonBySafeAreaInsets isRTL: [self isRTLLocale]]; - if (_swipeOffset > 0 && _leftView.bounds.size.width != width) { - // Adapt offset to the view change size due to safeInsets - _swipeOffset += _leftView.bounds.size.width - width; - } - } - if (_rightView) { - CGFloat width = _rightView.bounds.size.width; - [_rightView setSafeInset:safeInsets.right extendEdgeButton:_rightSwipeSettings.expandLastButtonBySafeAreaInsets isRTL: [self isRTLLocale]]; - if (_swipeOffset < 0 && _rightView.bounds.size.width != width) { - // Adapt offset to the view change size due to safeInsets - _swipeOffset -= _rightView.bounds.size.width - width; - } - } - //refresh contentView in situations like layout change, orientation chage, table resize, etc. - [self refreshContentView]; - } - } -} - --(void) fetchButtonsIfNeeded -{ - if (_leftButtons.count == 0 && _delegate && [_delegate respondsToSelector:@selector(swipeTableCell:swipeButtonsForDirection:swipeSettings:expansionSettings:)]) { - _leftButtons = [_delegate swipeTableCell:self swipeButtonsForDirection:MGSwipeDirectionLeftToRight swipeSettings:_leftSwipeSettings expansionSettings:_leftExpansion]; - } - if (_rightButtons.count == 0 && _delegate && [_delegate respondsToSelector:@selector(swipeTableCell:swipeButtonsForDirection:swipeSettings:expansionSettings:)]) { - _rightButtons = [_delegate swipeTableCell:self swipeButtonsForDirection:MGSwipeDirectionRightToLeft swipeSettings:_rightSwipeSettings expansionSettings:_rightExpansion]; - } -} - --(void) createSwipeViewIfNeeded -{ - UIEdgeInsets safeInsets = [self getSafeInsets]; - if (!_swipeOverlay) { - _swipeOverlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.contentView.bounds.size.height)]; - [self fixRegionAndAccesoryViews]; - _swipeOverlay.hidden = YES; - _swipeOverlay.backgroundColor = [self backgroundColorForSwipe]; - _swipeOverlay.layer.zPosition = 10; //force render on top of the contentView; - _swipeView = [[UIImageView alloc] initWithFrame:_swipeOverlay.bounds]; - _swipeView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _swipeView.contentMode = UIViewContentModeCenter; - _swipeView.clipsToBounds = YES; - [_swipeOverlay addSubview:_swipeView]; - [self.contentView addSubview:_swipeOverlay]; - } - - [self fetchButtonsIfNeeded]; - if (!_leftView && _leftButtons.count > 0) { - _leftSwipeSettings.allowsButtonsWithDifferentWidth = _leftSwipeSettings.allowsButtonsWithDifferentWidth || _allowsButtonsWithDifferentWidth; - _leftView = [[MGSwipeButtonsView alloc] initWithButtons:_leftButtons direction:MGSwipeDirectionLeftToRight swipeSettings:_leftSwipeSettings safeInset:safeInsets.left]; - _leftView.cell = self; - _leftView.frame = CGRectMake(-_leftView.bounds.size.width + safeInsets.left * ([self isRTLLocale] ? 1 : -1), - _leftSwipeSettings.topMargin, - _leftView.bounds.size.width, - _swipeOverlay.bounds.size.height - _leftSwipeSettings.topMargin - _leftSwipeSettings.bottomMargin); - _leftView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight; - [_swipeOverlay addSubview:_leftView]; - } - if (!_rightView && _rightButtons.count > 0) { - _rightSwipeSettings.allowsButtonsWithDifferentWidth = _rightSwipeSettings.allowsButtonsWithDifferentWidth || _allowsButtonsWithDifferentWidth; - _rightView = [[MGSwipeButtonsView alloc] initWithButtons:_rightButtons direction:MGSwipeDirectionRightToLeft swipeSettings:_rightSwipeSettings safeInset:safeInsets.right]; - _rightView.cell = self; - _rightView.frame = CGRectMake(_swipeOverlay.bounds.size.width + safeInsets.right * ([self isRTLLocale] ? 1 : -1), - _rightSwipeSettings.topMargin, - _rightView.bounds.size.width, - _swipeOverlay.bounds.size.height - _rightSwipeSettings.topMargin - _rightSwipeSettings.bottomMargin); - _rightView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight; - [_swipeOverlay addSubview:_rightView]; - } - - // Refresh safeInsets if required - if (_leftView) { - [_leftView setSafeInset:safeInsets.left extendEdgeButton:_leftSwipeSettings.expandLastButtonBySafeAreaInsets isRTL: [self isRTLLocale]]; - } - - if (_rightView) { - [_rightView setSafeInset:safeInsets.right extendEdgeButton:_rightSwipeSettings.expandLastButtonBySafeAreaInsets isRTL: [self isRTLLocale]]; - } -} - - -- (void) showSwipeOverlayIfNeeded -{ - if (_overlayEnabled) { - return; - } - _overlayEnabled = YES; - - if (!_preservesSelectionStatus) - self.selected = NO; - if (_swipeContentView) - [_swipeContentView removeFromSuperview]; - if (_delegate && [_delegate respondsToSelector:@selector(swipeTableCellWillBeginSwiping:)]) { - [_delegate swipeTableCellWillBeginSwiping:self]; - } - - // snapshot cell without separator - CGSize cropSize = CGSizeMake(self.bounds.size.width, self.contentView.bounds.size.height); - _swipeView.image = [self imageFromView:self cropSize:cropSize]; - - _swipeOverlay.hidden = NO; - if (_swipeContentView) - [_swipeView addSubview:_swipeContentView]; - - if (!_allowsMultipleSwipe) { - //input overlay on the whole table - UITableView * table = [self parentTable]; - if (_tableInputOverlay) { - [_tableInputOverlay removeFromSuperview]; - } - _tableInputOverlay = [[MGSwipeTableInputOverlay alloc] initWithFrame:table.bounds]; - _tableInputOverlay.currentCell = self; - [table addSubview:_tableInputOverlay]; - } - - _previusSelectionStyle = self.selectionStyle; - self.selectionStyle = UITableViewCellSelectionStyleNone; - [self setAccesoryViewsHidden:YES]; - - _tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHandler:)]; - _tapRecognizer.cancelsTouchesInView = YES; - _tapRecognizer.delegate = self; - [self addGestureRecognizer:_tapRecognizer]; -} - --(void) hideSwipeOverlayIfNeededIncludingReselect: (BOOL) reselectCellIfNeeded -{ - if (!_overlayEnabled) { - return; - } - _overlayEnabled = NO; - _swipeOverlay.hidden = YES; - _swipeView.image = nil; - if (_swipeContentView) { - [_swipeContentView removeFromSuperview]; - [self.contentView addSubview:_swipeContentView]; - } - - if (_tableInputOverlay) { - [_tableInputOverlay removeFromSuperview]; - _tableInputOverlay = nil; - } - - if (reselectCellIfNeeded) { - self.selectionStyle = _previusSelectionStyle; - NSArray * selectedRows = self.parentTable.indexPathsForSelectedRows; - if ([selectedRows containsObject:[self.parentTable indexPathForCell:self]]) { - self.selected = NO; //Hack: in some iOS versions setting the selected property to YES own isn't enough to force the cell to redraw the chosen selectionStyle - self.selected = YES; - } - } - [self setAccesoryViewsHidden:NO]; - - if (_delegate && [_delegate respondsToSelector:@selector(swipeTableCellWillEndSwiping:)]) { - [_delegate swipeTableCellWillEndSwiping:self]; - } - - if (_tapRecognizer) { - [self removeGestureRecognizer:_tapRecognizer]; - _tapRecognizer = nil; - } -} - --(void) refreshContentView -{ - CGFloat currentOffset = _swipeOffset; - BOOL prevValue = _triggerStateChanges; - _triggerStateChanges = NO; - self.swipeOffset = 0; - self.swipeOffset = currentOffset; - _triggerStateChanges = prevValue; -} - --(void) refreshButtons: (BOOL) usingDelegate -{ - if (usingDelegate) { - self.leftButtons = @[]; - self.rightButtons = @[]; - } - if (_leftView) { - [_leftView removeFromSuperview]; - _leftView = nil; - } - if (_rightView) { - [_rightView removeFromSuperview]; - _rightView = nil; - } - [self createSwipeViewIfNeeded]; - [self refreshContentView]; -} - -#pragma mark Handle Table Events - --(void) willMoveToSuperview:(UIView *)newSuperview; -{ - if (newSuperview == nil) { //remove the table overlay when a cell is removed from the table - [self hideSwipeOverlayIfNeededIncludingReselect:false]; - } -} - --(void) prepareForReuse -{ - [super prepareForReuse]; - [self cleanViews]; - if (_swipeState != MGSwipeStateNone) { - _triggerStateChanges = YES; - [self updateState:MGSwipeStateNone]; - } - BOOL cleanButtons = _delegate && [_delegate respondsToSelector:@selector(swipeTableCell:swipeButtonsForDirection:swipeSettings:expansionSettings:)]; - [self initViews:cleanButtons]; -} - --(void) setEditing:(BOOL)editing animated:(BOOL)animated -{ - [super setEditing:editing animated:animated]; - if (editing) { //disable swipe buttons when the user sets table editing mode - self.swipeOffset = 0; - } -} - --(void) setEditing:(BOOL)editing -{ - [super setEditing:YES]; - if (editing) { //disable swipe buttons when the user sets table editing mode - self.swipeOffset = 0; - } -} - --(UIView *) hitTest:(CGPoint)point withEvent:(UIEvent *)event -{ - if (!self.hidden && _swipeOverlay && !_swipeOverlay.hidden) { - //override hitTest to give swipe buttons a higher priority (diclosure buttons can steal input) - UIView * targets[] = {_leftView, _rightView}; - for (int i = 0; i< 2; ++i) { - UIView * target = targets[i]; - if (!target) continue; - - CGPoint p = [self convertPoint:point toView:target]; - if (CGRectContainsPoint(target.bounds, p)) { - return [target hitTest:p withEvent:event]; - } - } - } - return [super hitTest:point withEvent:event]; -} - -#pragma mark Some utility methods - -- (UIImage *)imageFromView:(UIView *)view cropSize:(CGSize)cropSize{ - UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:cropSize]; - UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) { - [view.layer renderInContext:[rendererContext CGContext]]; - }]; - return image; -} - --(void) setAccesoryViewsHidden: (BOOL) hidden -{ - if (@available(iOS 12, *)) { - // Hide the accessory to prevent blank box being displayed in iOS13 / iOS12 - // (blank area would be overlayed in accessory area when using cell in storyboard view) - // See: https://github.com/MortimerGoro/MGSwipeTableCell/issues/337 - if (hidden) { - _previusAccessoryType = self.accessoryType; - self.accessoryType = UITableViewCellAccessoryNone; - } else if (self.accessoryType == UITableViewCellAccessoryNone) { - self.accessoryType = _previusAccessoryType; - _previusAccessoryType = UITableViewCellAccessoryNone; - } - } - - if (self.accessoryView) { - self.accessoryView.hidden = hidden; - } - for (UIView * view in self.contentView.superview.subviews) { - if (view != self.contentView && ([view isKindOfClass:[UIButton class]] || [NSStringFromClass(view.class) rangeOfString:@"Disclosure"].location != NSNotFound)) { - view.hidden = hidden; - } - } - - for (UIView * view in self.contentView.subviews) { - if (view == _swipeOverlay || view == _swipeContentView) continue; - if (hidden && !view.hidden) { - view.hidden = YES; - [_previusHiddenViews addObject:view]; - } - else if (!hidden && [_previusHiddenViews containsObject:view]) { - view.hidden = NO; - } - } - - if (!hidden) { - [_previusHiddenViews removeAllObjects]; - } -} - --(UIColor *) backgroundColorForSwipe -{ - if (_swipeBackgroundColor) { - return _swipeBackgroundColor; //user defined color - } - else if (self.contentView.backgroundColor && ![self.contentView.backgroundColor isEqual:[UIColor clearColor]]) { - return self.contentView.backgroundColor; - } - else if (self.backgroundColor) { - return self.backgroundColor; - } - return [UIColor clearColor]; -} - --(UITableView *) parentTable -{ - UIView * view = self.superview; - while(view != nil) { - if([view isKindOfClass:[UITableView class]]) { - return (UITableView*) view; - } - view = view.superview; - } - return nil; -} - --(void) updateState: (MGSwipeState) newState; -{ - if (!_triggerStateChanges || _swipeState == newState) { - return; - } - _swipeState = newState; - if (_delegate && [_delegate respondsToSelector:@selector(swipeTableCell:didChangeSwipeState:gestureIsActive:)]) { - [_delegate swipeTableCell:self didChangeSwipeState:_swipeState gestureIsActive: self.isSwipeGestureActive] ; - } -} - -#pragma mark Swipe Animation - -- (void)setSwipeOffset:(CGFloat) newOffset; -{ - CGFloat sign = newOffset > 0 ? 1.0 : -1.0; - MGSwipeButtonsView * activeButtons = sign < 0 ? _rightView : _leftView; - MGSwipeSettings * activeSettings = sign < 0 ? _rightSwipeSettings : _leftSwipeSettings; - - if(activeSettings.enableSwipeBounces) { - _swipeOffset = newOffset; - - CGFloat maxUnbouncedOffset = sign * activeButtons.bounds.size.width; - - if ((sign > 0 && newOffset > maxUnbouncedOffset) || (sign < 0 && newOffset < maxUnbouncedOffset)) { - _swipeOffset = maxUnbouncedOffset + (newOffset - maxUnbouncedOffset) * activeSettings.swipeBounceRate; - } - } - else { - CGFloat maxOffset = sign * activeButtons.bounds.size.width; - _swipeOffset = sign > 0 ? MIN(newOffset, maxOffset) : MAX(newOffset, maxOffset); - } - CGFloat offset = fabs(_swipeOffset); - - - if (!activeButtons || offset == 0) { - if (_leftView) - [_leftView endExpansionAnimated:NO]; - if (_rightView) - [_rightView endExpansionAnimated:NO]; - [self hideSwipeOverlayIfNeededIncludingReselect:true]; - _targetOffset = 0; - [self updateState:MGSwipeStateNone]; - return; - } - else { - [self showSwipeOverlayIfNeeded]; - CGFloat swipeThreshold = activeSettings.threshold; - BOOL keepButtons = activeSettings.keepButtonsSwiped; - _targetOffset = keepButtons && offset > activeButtons.bounds.size.width * swipeThreshold ? activeButtons.bounds.size.width * sign : 0; - } - - BOOL onlyButtons = activeSettings.onlySwipeButtons; - UIEdgeInsets safeInsets = [self getSafeInsets]; - CGFloat safeInset = [self isRTLLocale] ? safeInsets.right : -safeInsets.left; - _swipeView.transform = CGAffineTransformMakeTranslation(safeInset + (onlyButtons ? 0 : _swipeOffset), 0); - - //animate existing buttons - MGSwipeButtonsView* but[2] = {_leftView, _rightView}; - MGSwipeSettings* settings[2] = {_leftSwipeSettings, _rightSwipeSettings}; - MGSwipeExpansionSettings * expansions[2] = {_leftExpansion, _rightExpansion}; - - for (int i = 0; i< 2; ++i) { - MGSwipeButtonsView * view = but[i]; - if (!view) continue; - - //buttons view position - CGFloat translation = MIN(offset, view.bounds.size.width) * sign + settings[i].offset * sign; - view.transform = CGAffineTransformMakeTranslation(translation, 0); - - if (view != activeButtons) continue; //only transition if active (perf. improvement) - bool expand = expansions[i].buttonIndex >= 0 && offset > view.bounds.size.width * expansions[i].threshold; - if (expand) { - [view expandToOffset:offset settings:expansions[i]]; - _targetOffset = expansions[i].fillOnTrigger ? self.bounds.size.width * sign : 0; - _activeExpansion = view; - [self updateState:i ? MGSwipeStateExpandingRightToLeft : MGSwipeStateExpandingLeftToRight]; - } - else { - [view endExpansionAnimated:YES]; - _activeExpansion = nil; - CGFloat t = MIN(1.0f, offset/view.bounds.size.width); - [view transition:settings[i].transition percent:t]; - [self updateState:i ? MGSwipeStateSwipingRightToLeft : MGSwipeStateSwipingLeftToRight]; - } - } -} - --(void) hideSwipeAnimated: (BOOL) animated completion:(void(^)(BOOL finished)) completion -{ - MGSwipeAnimation * animation = animated ? (_swipeOffset > 0 ? _leftSwipeSettings.hideAnimation: _rightSwipeSettings.hideAnimation) : nil; - [self setSwipeOffset:0 animation:animation completion:completion]; -} - --(void) hideSwipeAnimated: (BOOL) animated -{ - [self hideSwipeAnimated:animated completion:nil]; -} - --(void) showSwipe: (MGSwipeDirection) direction animated: (BOOL) animated -{ - [self showSwipe:direction animated:animated completion:nil]; -} - --(void) showSwipe: (MGSwipeDirection) direction animated: (BOOL) animated completion:(void(^)(BOOL finished)) completion -{ - [self createSwipeViewIfNeeded]; - _allowSwipeLeftToRight = _leftButtons.count > 0; - _allowSwipeRightToLeft = _rightButtons.count > 0; - UIView * buttonsView = direction == MGSwipeDirectionLeftToRight ? _leftView : _rightView; - - if (buttonsView) { - CGFloat s = direction == MGSwipeDirectionLeftToRight ? 1.0 : -1.0; - MGSwipeAnimation * animation = animated ? (direction == MGSwipeDirectionLeftToRight ? _leftSwipeSettings.showAnimation : _rightSwipeSettings.showAnimation) : nil; - [self setSwipeOffset:buttonsView.bounds.size.width * s animation:animation completion:completion]; - } -} - --(void) expandSwipe: (MGSwipeDirection) direction animated: (BOOL) animated -{ - CGFloat s = direction == MGSwipeDirectionLeftToRight ? 1.0 : -1.0; - MGSwipeExpansionSettings* expSetting = direction == MGSwipeDirectionLeftToRight ? _leftExpansion : _rightExpansion; - - // only perform animation if there's no pending expansion animation and requested direction has fillOnTrigger enabled - if(!_activeExpansion && expSetting.fillOnTrigger) { - [self createSwipeViewIfNeeded]; - _allowSwipeLeftToRight = _leftButtons.count > 0; - _allowSwipeRightToLeft = _rightButtons.count > 0; - UIView * buttonsView = direction == MGSwipeDirectionLeftToRight ? _leftView : _rightView; - - if (buttonsView) { - __weak MGSwipeButtonsView * expansionView = direction == MGSwipeDirectionLeftToRight ? _leftView : _rightView; - __weak MGSwipeTableCell * weakself = self; - [self setSwipeOffset:buttonsView.bounds.size.width * s * expSetting.threshold * 2 animation:expSetting.triggerAnimation completion:^(BOOL finished){ - [expansionView endExpansionAnimated:YES]; - [weakself setSwipeOffset:0 animated:NO completion:nil]; - }]; - } - } -} - --(void) animationTick: (CADisplayLink *) timer -{ - if (!_animationData.start) { - _animationData.start = timer.timestamp; - } - CFTimeInterval elapsed = timer.timestamp - _animationData.start; - bool completed = elapsed >= _animationData.duration; - if (completed) { - _triggerStateChanges = YES; - } - self.swipeOffset = [_animationData.animation value:elapsed duration:_animationData.duration from:_animationData.from to:_animationData.to]; - - //call animation completion and invalidate timer - if (completed){ - [timer invalidate]; - [self invalidateDisplayLink]; - } -} - --(void)invalidateDisplayLink { - [_displayLink invalidate]; - _displayLink = nil; - if (_animationCompletion) { - void (^callbackCopy)(BOOL finished) = _animationCompletion; //copy to avoid duplicated callbacks - _animationCompletion = nil; - callbackCopy(YES); - } -} - --(void) setSwipeOffset:(CGFloat)offset animated: (BOOL) animated completion:(void(^)(BOOL finished)) completion -{ - MGSwipeAnimation * animation = animated ? [[MGSwipeAnimation alloc] init] : nil; - [self setSwipeOffset:offset animation:animation completion:completion]; -} - --(void) setSwipeOffset:(CGFloat)offset animation: (MGSwipeAnimation *) animation completion:(void(^)(BOOL finished)) completion -{ - if (_displayLink) { - [_displayLink invalidate]; - _displayLink = nil; - } - if (_animationCompletion) { //notify previous animation cancelled - void (^callbackCopy)(BOOL finished) = _animationCompletion; //copy to avoid duplicated callbacks - _animationCompletion = nil; - callbackCopy(NO); - } - if (offset !=0) { - [self createSwipeViewIfNeeded]; - } - - if (!animation) { - self.swipeOffset = offset; - if (completion) { - completion(YES); - } - return; - } - - _animationCompletion = completion; - _triggerStateChanges = NO; - _animationData.from = _swipeOffset; - _animationData.to = offset; - _animationData.duration = animation.duration; - _animationData.start = 0; - _animationData.animation = animation; - _displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animationTick:)]; - [_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; -} - -#pragma mark Gestures - --(void) cancelPanGesture -{ - if (_panRecognizer.state != UIGestureRecognizerStateEnded && _panRecognizer.state != UIGestureRecognizerStatePossible) { - _panRecognizer.enabled = NO; - _panRecognizer.enabled = YES; - if (self.swipeOffset) { - [self hideSwipeAnimated:YES]; - } - } -} - --(void) tapHandler: (UITapGestureRecognizer *) recognizer -{ - BOOL hide = YES; - if (_delegate && [_delegate respondsToSelector:@selector(swipeTableCell:shouldHideSwipeOnTap:)]) { - hide = [_delegate swipeTableCell:self shouldHideSwipeOnTap:[recognizer locationInView:self]]; - } - if (hide) { - [self hideSwipeAnimated:YES]; - } -} - --(CGFloat) filterSwipe: (CGFloat) offset -{ - bool allowed = offset > 0 ? _allowSwipeLeftToRight : _allowSwipeRightToLeft; - UIView * buttons = offset > 0 ? _leftView : _rightView; - if (!buttons || ! allowed) { - offset = 0; - } - else if (!_allowsOppositeSwipe && _firstSwipeState == MGSwipeStateSwipingLeftToRight && offset < 0) { - offset = 0; - } - else if (!_allowsOppositeSwipe && _firstSwipeState == MGSwipeStateSwipingRightToLeft && offset > 0 ) { - offset = 0; - } - return offset; -} - --(void) panHandler: (UIPanGestureRecognizer *)gesture -{ - CGPoint current = [gesture translationInView:self]; - - if (gesture.state == UIGestureRecognizerStateBegan) { - [self invalidateDisplayLink]; - - if (!_preservesSelectionStatus) - self.highlighted = NO; - [self createSwipeViewIfNeeded]; - _panStartPoint = current; - _panStartOffset = _swipeOffset; - if (_swipeOffset != 0) { - _firstSwipeState = _swipeOffset > 0 ? MGSwipeStateSwipingLeftToRight : MGSwipeStateSwipingRightToLeft; - } - - if (!_allowsMultipleSwipe) { - NSArray * cells = [self parentTable].visibleCells; - for (MGSwipeTableCell * cell in cells) { - if ([cell isKindOfClass:[MGSwipeTableCell class]] && cell != self) { - [cell cancelPanGesture]; - } - } - } - } - else if (gesture.state == UIGestureRecognizerStateChanged) { - CGFloat offset = _panStartOffset + current.x - _panStartPoint.x; - if (_firstSwipeState == MGSwipeStateNone) { - _firstSwipeState = offset > 0 ? MGSwipeStateSwipingLeftToRight : MGSwipeStateSwipingRightToLeft; - } - self.swipeOffset = [self filterSwipe:offset]; - } - else { - __weak MGSwipeButtonsView * expansion = _activeExpansion; - if (expansion) { - __weak UIView * expandedButton = [expansion getExpandedButton]; - MGSwipeExpansionSettings * expSettings = _swipeOffset > 0 ? _leftExpansion : _rightExpansion; - UIColor * backgroundColor = nil; - if (!expSettings.fillOnTrigger && expSettings.expansionColor) { - backgroundColor = expansion.backgroundColorCopy; //keep expansion background color - expansion.backgroundColorCopy = expSettings.expansionColor; - } - [self setSwipeOffset:_targetOffset animation:expSettings.triggerAnimation completion:^(BOOL finished){ - if (!finished || self.hidden || !expansion) { - return; //cell might be hidden after a delete row animation without being deallocated (to be reused later) - } - BOOL autoHide = [expansion handleClick:expandedButton fromExpansion:YES]; - if (autoHide) { - [expansion endExpansionAnimated:NO]; - } - if (backgroundColor && expandedButton) { - expandedButton.backgroundColor = backgroundColor; - } - }]; - } - else { - CGFloat velocity = [_panRecognizer velocityInView:self].x; - CGFloat inertiaThreshold = 100.0; //points per second - - if (velocity > inertiaThreshold) { - _targetOffset = _swipeOffset < 0 ? 0 : (_leftView && _leftSwipeSettings.keepButtonsSwiped ? _leftView.bounds.size.width : _targetOffset); - } - else if (velocity < -inertiaThreshold) { - _targetOffset = _swipeOffset > 0 ? 0 : (_rightView && _rightSwipeSettings.keepButtonsSwiped ? -_rightView.bounds.size.width : _targetOffset); - } - _targetOffset = [self filterSwipe:_targetOffset]; - MGSwipeSettings * settings = _swipeOffset > 0 ? _leftSwipeSettings : _rightSwipeSettings; - MGSwipeAnimation * animation = nil; - if (_targetOffset == 0) { - animation = settings.hideAnimation; - } - else if (fabs(_swipeOffset) > fabs(_targetOffset)) { - animation = settings.stretchAnimation; - } - else { - animation = settings.showAnimation; - } - [self setSwipeOffset:_targetOffset animation:animation completion:nil]; - } - - _firstSwipeState = MGSwipeStateNone; - } -} - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { - - if (gestureRecognizer == _panRecognizer) { - - if (self.isEditing) { - return NO; //do not swipe while editing table - } - - CGPoint translation = [_panRecognizer translationInView:self]; - if (fabs(translation.y) > fabs(translation.x)) { - return NO; // user is scrolling vertically - } - if (_swipeView) { - CGPoint point = [_tapRecognizer locationInView:_swipeView]; - if (!CGRectContainsPoint(_swipeView.bounds, point)) { - return _allowsSwipeWhenTappingButtons; //user clicked outside the cell or in the buttons area - } - } - - if (_swipeOffset != 0.0) { - return YES; //already swiped, don't need to check buttons or canSwipe delegate - } - - //make a decision according to existing buttons or using the optional delegate - if (_delegate && [_delegate respondsToSelector:@selector(swipeTableCell:canSwipe:fromPoint:)]) { - CGPoint point = [_panRecognizer locationInView:self]; - _allowSwipeLeftToRight = [_delegate swipeTableCell:self canSwipe:MGSwipeDirectionLeftToRight fromPoint:point]; - _allowSwipeRightToLeft = [_delegate swipeTableCell:self canSwipe:MGSwipeDirectionRightToLeft fromPoint:point]; - } - else if (_delegate && [_delegate respondsToSelector:@selector(swipeTableCell:canSwipe:)]) { - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wdeprecated-declarations" - _allowSwipeLeftToRight = [_delegate swipeTableCell:self canSwipe:MGSwipeDirectionLeftToRight]; - _allowSwipeRightToLeft = [_delegate swipeTableCell:self canSwipe:MGSwipeDirectionRightToLeft]; - #pragma clang diagnostic pop - } - else { - [self fetchButtonsIfNeeded]; - _allowSwipeLeftToRight = _leftButtons.count > 0; - _allowSwipeRightToLeft = _rightButtons.count > 0; - } - - return (_allowSwipeLeftToRight && translation.x > 0) || (_allowSwipeRightToLeft && translation.x < 0); - } - else if (gestureRecognizer == _tapRecognizer) { - CGPoint point = [_tapRecognizer locationInView:_swipeView]; - return CGRectContainsPoint(_swipeView.bounds, point); - } - return YES; -} - --(BOOL) isSwipeGestureActive -{ - return _panRecognizer.state == UIGestureRecognizerStateBegan || _panRecognizer.state == UIGestureRecognizerStateChanged; -} - --(void)setSwipeBackgroundColor:(UIColor *)swipeBackgroundColor { - _swipeBackgroundColor = swipeBackgroundColor; - if (_swipeOverlay) { - _swipeOverlay.backgroundColor = swipeBackgroundColor; - } -} - -#pragma mark Accessibility - -- (NSInteger)accessibilityElementCount { - return _swipeOffset == 0 ? [super accessibilityElementCount] : 1; -} - -- (id)accessibilityElementAtIndex:(NSInteger)index { - return _swipeOffset == 0 ? [super accessibilityElementAtIndex:index] : self.contentView; -} - -- (NSInteger)indexOfAccessibilityElement:(id)element { - return _swipeOffset == 0 ? [super indexOfAccessibilityElement:element] : 0; -} - - -@end diff --git a/Pods/MGSwipeTableCell/README.md b/Pods/MGSwipeTableCell/README.md deleted file mode 100644 index 1daa784d0..000000000 --- a/Pods/MGSwipeTableCell/README.md +++ /dev/null @@ -1,225 +0,0 @@ -MGSwipeTableCell -================ - -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -MGSwipeTableCell is an easy to use UITableViewCell subclass that allows to display swipeable buttons with a variety of transitions. - -This library is compatible with all the different ways to create a UITableViewCell: system predefined styles, programmatically created cells, cells loaded from a xib and prototype cells within a storyboard. You can use autolayout if you want. - -Works on iOS >= 5.0. Tested on all iOS versions on iPhone and iPad: iOS 7, iOS 8, iOS 9, iOS 10, iOS 11, iOS 12, iOS 13, iOS 14. - -## Transitions demo - -### Border transition - -

- -### Clip transition - -

- -### 3D transition - -

- -### Static transition - -

- -### Drag transition - -

- -## API Reference -See [`MGSwipeTableCell.h`](MGSwipeTableCell/MGSwipeTableCell.h) header file for a complete overview of the capabilities of the class. - -See [`MailAppDemo`](demo/MailAppDemo) for a complete project which mimics Apple's Mail App (written in Objective-C) - -See [`MailAppDemoSwift`](demo/MailAppDemoSwift) for a complete project which mimics Apple's Mail App (Written in Swift) - -See [`SpotifyDemo`](demo/SpotifyDemo) for a complete project which mimics Spotify App swipe style - -See [`MGSwipeDemo`](demo/MGSwipeDemo) for a complete project where you can test the variety of transitions on a real device/simulator. - -## Setup your project - -You can use CocoaPods to include MGSwipeTableCell into you project: - - pod 'MGSwipeTableCell' - -You can use Carthage to include MGSwipeTableCell into your project. Just add this dependency to your Cartfile: - - github "MortimerGoro/MGSwipeTableCell" - -You can use Swift Package Manager to include MGSwipeTableCell into you project: - - .package(url: "https://github.com/MortimerGoro/MGSwipeTableCell.git", from: "1.6.0") - -## Usage - -### Basic -Integrating MGSwipeTableCell in your project is very easy. Basically, you only have to inherit from MGSwipeTableCell instead of UITableViewCell, or directly instantiate MGSwipeTableCell instances with iOS predefined cell styles. You can layout your cell content as you are used to do, MGSwipeTableCell doesn't force you to change layouts. - -Here is a example of a MGSwipeTableCell using iOS predefined styles. You can set an array of buttons to cell.leftButtons and/or cell.rightButtons properties. MGSwipeButton is a convenience class, you are not forced to use it. You can use your own UIButtons or UIViews. You can configure transitions (and swipe thresholds) with the leftSwipeSettings and/or rightSwipeSettings properties - -##### Objective-C -```objc -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString * reuseIdentifier = @"programmaticCell"; - MGSwipeTableCell * cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; - if (!cell) { - cell = [[MGSwipeTableCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; - } - - cell.textLabel.text = @"Title"; - cell.detailTextLabel.text = @"Detail text"; - cell.delegate = self; //optional - - - //configure left buttons - cell.leftButtons = @[[MGSwipeButton buttonWithTitle:@"" icon:[UIImage imageNamed:@"check.png"] backgroundColor:[UIColor greenColor]], - [MGSwipeButton buttonWithTitle:@"" icon:[UIImage imageNamed:@"fav.png"] backgroundColor:[UIColor blueColor]]]; - cell.leftSwipeSettings.transition = MGSwipeTransition3D; - - //configure right buttons - cell.rightButtons = @[[MGSwipeButton buttonWithTitle:@"Delete" backgroundColor:[UIColor redColor]], - [MGSwipeButton buttonWithTitle:@"More" backgroundColor:[UIColor lightGrayColor]]]; - cell.rightSwipeSettings.transition = MGSwipeTransition3D; - return cell; -} -``` -##### Swift -```swift -func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell -{ - let reuseIdentifier = "programmaticCell" - var cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! MGSwipeTableCell - - cell.textLabel!.text = "Title" - cell.detailTextLabel!.text = "Detail text" - cell.delegate = self //optional - - //configure left buttons - cell.leftButtons = [MGSwipeButton(title: "", icon: UIImage(named:"check.png"), backgroundColor: .green), - MGSwipeButton(title: "", icon: UIImage(named:"fav.png"), backgroundColor: .blue)] - cell.leftSwipeSettings.transition = .rotate3D - - //configure right buttons - cell.rightButtons = [MGSwipeButton(title: "Delete", backgroundColor: .red), - MGSwipeButton(title: "More",backgroundColor: .lightGray)] - cell.rightSwipeSettings.transition = .rotate3D - - return cell -} -``` - -In order to listen for button click events you can implement the optional MGSwipeTableCellDelegate, or if you are too lazy to do that, the MGSwipeButton class comes with a convenience block callback ;) - -##### Objective-c -```objc -[MGSwipeButton buttonWithTitle:@"More" backgroundColor:[UIColor lightGrayColor] callback:^BOOL(MGSwipeTableCell *sender) { - NSLog(@"Convenience callback for swipe buttons!"); -}] -``` -##### Swift -```swift -MGSwipeButton(title: "Delete", backgroundColor: .red) { - (sender: MGSwipeTableCell!) -> Bool in - print("Convenience callback for swipe buttons!") - return true - } -``` - -### Delegate - -MGSwipeTableCellDelegate is an optional delegate to configure swipe buttons or to receive triggered actions or another events. Buttons can be configured inline when the cell is created instead of using this delegate, but using the delegate improves memory usage since buttons are only created on demand. - -```objc -@protocol MGSwipeTableCellDelegate - -@optional -/** - * Delegate method to enable/disable swipe gestures - * @return YES if swipe is allowed - **/ --(BOOL) swipeTableCell:(MGSwipeTableCell*) cell canSwipe:(MGSwipeDirection) direction; -/** - * Delegate method invoked when the current swipe state changes - @param state the current Swipe State - @param gestureIsActive YES if the user swipe gesture is active. No if the uses has already ended the gesture - **/ --(void) swipeTableCell:(MGSwipeTableCell*) cell didChangeSwipeState:(MGSwipeState) state gestureIsActive:(BOOL) gestureIsActive; -/** - * Called when the user clicks a swipe button or when a expandable button is automatically triggered - * @return YES to autohide the current swipe buttons - **/ --(BOOL) swipeTableCell:(MGSwipeTableCell*) cell tappedButtonAtIndex:(NSInteger) index direction:(MGSwipeDirection)direction fromExpansion:(BOOL) fromExpansion; -/** - * Delegate method to setup the swipe buttons and swipe/expansion settings - * Buttons can be any kind of UIView but it's recommended to use the convenience MGSwipeButton class - * Setting up buttons with this delegate instead of using cell properties improves memory usage because buttons are only created in demand - * @param swipeTableCell the UITableViewCell to configure. You can get the indexPath using [tableView indexPathForCell:cell] - * @param direction The swipe direction (left to right or right to left) - * @param swipeSettings instance to configure the swipe transition and setting (optional) - * @param expansionSettings instance to configure button expansions (optional) - * @return Buttons array - **/ --(NSArray*) swipeTableCell:(MGSwipeTableCell*) cell swipeButtonsForDirection:(MGSwipeDirection)direction - swipeSettings:(MGSwipeSettings*) swipeSettings expansionSettings:(MGSwipeExpansionSettings*) expansionSettings; - -@end -``` - -### Expandable buttons - -Buttons are not expandable by default. You can set up expandable buttons using cell.leftExpansion and cell.rightExpansion properties - -Expandable button events are triggered automatically when the user ends the swipe gesture and the expansion is active (configurable via threshold value). Triggered expandable buttons can bounce back to their initial position or fill the entire UITableViewCell, you can select the desired animation using fillOnTrigger property. - -```objc -@interface MGSwipeExpansionSettings: NSObject -/** index of the expandable button (in the left or right buttons arrays) */ -@property (nonatomic, assign) NSInteger buttonIndex; -/** if true the button fills the cell on trigger, else it bounces back to its initial position */ -@property (nonatomic, assign) BOOL fillOnTrigger; -/** Size proportional threshold to trigger the expansion button. Default value 1.5 */ -@property (nonatomic, assign) CGFloat threshold; -@end -``` -### Rounded corners and swipe buttons -MGSwipeTableCell supports rounded corners. Example: - -```objc -cell.layer.cornerRadius = 50 -cell.backgroundColor = UIColor.gray -cell.clipsToBounds = true -cell.swipeBackgroundColor = UIColor.gray -``` -

- - -## License - -The MIT License (MIT) - -Copyright (c) 2014 Imanol Fernandez @MortimerGoro - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 878c2ad49..26fb1d7a7 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,24 +1,20 @@ PODS: - - IQKeyboardManagerSwift (6.5.11) + - IQKeyboardManagerSwift (6.5.12) - MBProgressHUD (1.2.0) - - MGSwipeTableCell (1.6.14) DEPENDENCIES: - IQKeyboardManagerSwift - MBProgressHUD - - MGSwipeTableCell SPEC REPOS: trunk: - IQKeyboardManagerSwift - MBProgressHUD - - MGSwipeTableCell SPEC CHECKSUMS: - IQKeyboardManagerSwift: c7955c0bdbf7b2eb29bb7daaa44e3d90f55a9a85 + IQKeyboardManagerSwift: 371b08cb39664fb56030f5345c815a4ffc74bbc0 MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 - MGSwipeTableCell: d99ed6466f393b71cd488c6f798ba112ff5d1d01 -PODFILE CHECKSUM: 7326c690f70dd069c0315437b981ea71e143bc6c +PODFILE CHECKSUM: 4f577ab122f147a3faa6865b771c5a1999409439 COCOAPODS: 1.11.3 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 806625072..75f79dd7a 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -3,71 +3,59 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 09F9F981334170713980DDF8809DB8D5 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D9F5E0F09A909854CDCB9583257E467 /* IQToolbar.swift */; }; - 21512C78C6B356E2C228D9BFC7481794 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5F112D4A482CD7F46FE011D556912A3 /* IQTextView.swift */; }; - 29809AC5B234F9DD9BA4D087AB4577FA /* MGSwipeTableCell-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D1D45CA965930CBF932CD24A6BCA4FBB /* MGSwipeTableCell-dummy.m */; }; - 2E8A7F44249168E571E8611D03D9440A /* MGSwipeButton.m in Sources */ = {isa = PBXBuildFile; fileRef = DCC4099618720356F2820BE20527EF8D /* MGSwipeButton.m */; }; - 31C4D922B73C8DB5EB1F4EECE5B99577 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 928A459F356ECB1C2D292149D3B9E981 /* IQUIViewController+Additions.swift */; }; - 362DCE6C30193B4F265B6BCFFBC28186 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C71E678985015A99770169547236671 /* IQKeyboardManager+Debug.swift */; }; - 39D58D6790E6C9BAFB8689BAC91792D0 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78147105AD77A4CC4A743AFCEB738CFA /* IQKeyboardManager+UIKeyboardNotification.swift */; }; - 3CEF2AB7E4E1004AFC4AF6982584D4B0 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBDB43592F05858264B6F3629BD67D11 /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; + 09F9F981334170713980DDF8809DB8D5 /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76655A4D4CD79AE900974DD01CC4B780 /* IQToolbar.swift */; }; + 21512C78C6B356E2C228D9BFC7481794 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130C64D2989F79F83C85F25FA89D4E36 /* IQTextView.swift */; }; + 31C4D922B73C8DB5EB1F4EECE5B99577 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83553BDA9E0BD9EF2758D0689EE530DF /* IQUIViewController+Additions.swift */; }; + 362DCE6C30193B4F265B6BCFFBC28186 /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23866707A612BEC557BE4AFFDC518305 /* IQKeyboardManager+Debug.swift */; }; + 39D58D6790E6C9BAFB8689BAC91792D0 /* IQKeyboardManager+UIKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ADCFD08687A70539EF0119062A84B71 /* IQKeyboardManager+UIKeyboardNotification.swift */; }; + 3CEF2AB7E4E1004AFC4AF6982584D4B0 /* IQKeyboardManager+UITextFieldViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC40F509FDDD7CE66F4EEA9E67064B11 /* IQKeyboardManager+UITextFieldViewNotification.swift */; }; 453D067923488F49278B6E407F82C45B /* Pods-piwigoAppStore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 73A2A45BD88CB29139A746ECB879DED1 /* Pods-piwigoAppStore-dummy.m */; }; - 460F8947297FC4397B1D875F02806E7C /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50FEB19150314B234644D5E5CAA50491 /* IQInvocation.swift */; }; - 473DC3EDDA5D8D61693615EC038FC07E /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D25B56F9CABD978D34647878E816C8 /* IQKeyboardManager+Position.swift */; }; - 493A1611C577DBF71F99922A24BEBEBA /* Pods-piwigo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9652557C356129F24CEA18BDA6CB5E /* Pods-piwigo-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F98BCBD4891169A0C86B10F352C0F87 /* MGSwipeButton.h in Headers */ = {isa = PBXBuildFile; fileRef = C14B849D671526F0AE06E10635FBD5FB /* MGSwipeButton.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 502B6F90DA89F34946BB834B8DA513E6 /* MGSwipeTableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 430E7186F5155CE28B80170E7BEFCE18 /* MGSwipeTableCell.m */; }; - 554B4A9EB7B0115AA40713C45D0ABF3A /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD3EF64BDD7C8B18011EF382DAE93CD3 /* IQPreviousNextView.swift */; }; - 5F94CA16E0701092C71A2E193C7A7816 /* MGSwipeTableCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BE4F76615D3B093FF5393B46722CC34 /* MGSwipeTableCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6102B2AA01F6B2F66419B7778D694E22 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 55747ACD85E7391943B00C8CD5B84926 /* MBProgressHUD-dummy.m */; }; - 635B043F860CE53EFCA19CC564B47075 /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DBF1F9F72F2095FE5CF35738DF11363 /* IQKeyboardManagerConstants.swift */; }; - 64D8805F7527163B0A4120C403D97AD2 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE894F01A2338DD9C002355806A2D4B9 /* IQKeyboardManager.swift */; }; - 652F1768E71D55ED1C4D40E7ABCA11F8 /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFBB4818C8D1AE24217F842FD59B5E6B /* IQUIView+IQKeyboardToolbar.swift */; }; - 7862592A925A99934E73D7B24F2895F7 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B587A32BA0DE13FE950606538302EFD /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79E028B32DC2E143BAC645CD4DE435D1 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458B7EEA3C30CEF77B9C1344AC5F9BAD /* IQUIView+Hierarchy.swift */; }; - 8A9DFB8E2AB590F6A1C2E1628F854293 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8BE003D635CC3C8CDB926CB395F2FDE /* IQNSArray+Sort.swift */; }; - 8ACB6150ABD5A4BE4CDA42F23E090C9F /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9914476847FB91339EDD8E552B98E50F /* IQKeyboardManager+Toolbar.swift */; }; - 97BDF23C8E9038148496525214A838D6 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B959B966AF421EE1BACA384FEE30672E /* IQBarButtonItem.swift */; }; - 9CF7F93C09CD223D8A4AEFDE6500448B /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C851AB363B01D58AAFC1DB38C5EDC3 /* IQKeyboardManagerConstantsInternal.swift */; }; - 9F77F23C82AD7A280997AB8CE1026694 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BE3973D13EB61F64A969C23BFD2F3C7 /* IQKeyboardManager+Internal.swift */; }; - A0F05798AA7269C371264DFD7BDB1904 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD90938A7DD60AB7330135F8256BC919 /* IQKeyboardReturnKeyHandler.swift */; }; - A633C2F82C4975DD22E150A795CD00DD /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D4E9B92AA10A665C1FBE5EEB1F42F7F /* IQUITextFieldView+Additions.swift */; }; - BC9B4EE54D72F2455037404FBA19AD37 /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF44CFC1E97621AC3A3AF06EE923AA9D /* IQUIScrollView+Additions.swift */; }; - BD5DE9137AD611FD04789830CDA7EB55 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C86E1723766F2C958553825CAA65AC55 /* IQTitleBarButtonItem.swift */; }; - BFF07623A7EBCAE780F23B16FCCA46A6 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 16ED4CD163CE1FABCEE60FD0C9DDF1FF /* IQKeyboardManagerSwift-dummy.m */; }; - D8537DC6C0B384E1628FE91C59268ECC /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = BD6EC4161E26E32F68CDE6CDA7DCE5FF /* MBProgressHUD.m */; }; - E775E89E445D77DB9083AC386B141709 /* Pods-piwigo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D36D142ABB8142E69610363E35D671B /* Pods-piwigo-dummy.m */; }; - F679DDFB22B0446466AC8B46B5DDA5EF /* IQKeyboardManager+OrientationNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC6FE41835B8EE8C462342762F23D12 /* IQKeyboardManager+OrientationNotification.swift */; }; - FBC07F81F6F18D0A9F39F6AE17D2E86E /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D8170EEE4C3D1BB801D8FFEF164A30F /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 460F8947297FC4397B1D875F02806E7C /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B540D91EED299C58E0F9782C523160BE /* IQInvocation.swift */; }; + 473DC3EDDA5D8D61693615EC038FC07E /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC5468FA534843B797D64F148453ED0 /* IQKeyboardManager+Position.swift */; }; + 554B4A9EB7B0115AA40713C45D0ABF3A /* IQPreviousNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4E25251AA08B7160000E68DD6172DD /* IQPreviousNextView.swift */; }; + 6102B2AA01F6B2F66419B7778D694E22 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A487CC12250D710A6B5E7E7237F70139 /* MBProgressHUD-dummy.m */; }; + 635B043F860CE53EFCA19CC564B47075 /* IQKeyboardManagerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FDCEB4D3D09E519CDCB86CF44A1B33 /* IQKeyboardManagerConstants.swift */; }; + 64D8805F7527163B0A4120C403D97AD2 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1EBC82D6152918592224CC502B0780 /* IQKeyboardManager.swift */; }; + 652F1768E71D55ED1C4D40E7ABCA11F8 /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D2220E013752B1EBC90A4DE25D0641 /* IQUIView+IQKeyboardToolbar.swift */; }; + 7862592A925A99934E73D7B24F2895F7 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 627D10DA4514C84F5EFE115AB2F2531B /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79E028B32DC2E143BAC645CD4DE435D1 /* IQUIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9D6E71BBEA2EEC975DEDC313F6ECF6B /* IQUIView+Hierarchy.swift */; }; + 8A9DFB8E2AB590F6A1C2E1628F854293 /* IQNSArray+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 571E0B4AE45630F173E4E499E7266E28 /* IQNSArray+Sort.swift */; }; + 8ACB6150ABD5A4BE4CDA42F23E090C9F /* IQKeyboardManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2D0E4A02ADB22F6FA9ABB3D22F4DF7F /* IQKeyboardManager+Toolbar.swift */; }; + 97BDF23C8E9038148496525214A838D6 /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF839609913BD562C16C5F4F22DF4006 /* IQBarButtonItem.swift */; }; + 9CF7F93C09CD223D8A4AEFDE6500448B /* IQKeyboardManagerConstantsInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4220F56709BB137041A7E5BE403D12 /* IQKeyboardManagerConstantsInternal.swift */; }; + 9F77F23C82AD7A280997AB8CE1026694 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE694DF37265E7151BDD7C67F00AE3B /* IQKeyboardManager+Internal.swift */; }; + A0F05798AA7269C371264DFD7BDB1904 /* IQKeyboardReturnKeyHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9182F9C25A056F994178E62344D90E /* IQKeyboardReturnKeyHandler.swift */; }; + A633C2F82C4975DD22E150A795CD00DD /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA3224FF7C1614A385E9684B4730611 /* IQUITextFieldView+Additions.swift */; }; + BC9B4EE54D72F2455037404FBA19AD37 /* IQUIScrollView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65517255B919DFA3E3D3F11DE472E660 /* IQUIScrollView+Additions.swift */; }; + BD5DE9137AD611FD04789830CDA7EB55 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0527D3AD48B45A05301E0172CB18FB3F /* IQTitleBarButtonItem.swift */; }; + BFF07623A7EBCAE780F23B16FCCA46A6 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C5BF434DFD3B08752F5709D73F50C6F /* IQKeyboardManagerSwift-dummy.m */; }; + C9561DC9DA9972C53CF5A93371197D2E /* Pods-piwigo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9652557C356129F24CEA18BDA6CB5E /* Pods-piwigo-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8537DC6C0B384E1628FE91C59268ECC /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A693A5A43498D9E2951B5A85E5AE4A0 /* MBProgressHUD.m */; }; + F36D7E6687CCB1FC1E6D7F1397AE47F2 /* Pods-piwigo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D36D142ABB8142E69610363E35D671B /* Pods-piwigo-dummy.m */; }; + F679DDFB22B0446466AC8B46B5DDA5EF /* IQKeyboardManager+OrientationNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7194057BE1319F1A8B57E0F16952DCD /* IQKeyboardManager+OrientationNotification.swift */; }; + FBC07F81F6F18D0A9F39F6AE17D2E86E /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 05841BC790B8898CF6EDEF70007F6D12 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Project, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 4402738C4A76EE7AE3BFD1F64C46F1DF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4D72DA4D5EFCE5D0CE44D031B08BE51D; - remoteInfo = "Pods-piwigo"; - }; - 645F842FA6B1CA3CF0627A292B1E1C9F /* PBXContainerItemProxy */ = { + 6BD5249128EF00930D08525EC045AA43 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 82B0A41D3031FF27D78E17B0A9A46FB0; remoteInfo = MBProgressHUD; }; - 76EE83CCD9EE8784250968A49B1F45D2 /* PBXContainerItemProxy */ = { + 79B1E7560D9739DEB608AD490B5DE6A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 1EEB7FC8FC3DC62BFD58C64EF0EDFF4B; - remoteInfo = MGSwipeTableCell; + remoteGlobalIDString = 4D72DA4D5EFCE5D0CE44D031B08BE51D; + remoteInfo = "Pods-piwigo"; }; - C7E40DD6758D12657FC96582F82A3EC0 /* PBXContainerItemProxy */ = { + D24ABA3D45D54219411AC1F82EE1202B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -77,67 +65,58 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0B9F539753B713FF1249452A008F61EB /* MBProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.release.xcconfig; sourceTree = ""; }; - 0BE3973D13EB61F64A969C23BFD2F3C7 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift"; sourceTree = ""; }; - 0ED3A95E48D043EAEA0CE3CB072F538A /* MGSwipeTableCell.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MGSwipeTableCell.debug.xcconfig; sourceTree = ""; }; - 16ED4CD163CE1FABCEE60FD0C9DDF1FF /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; }; + 04FDCEB4D3D09E519CDCB86CF44A1B33 /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = ""; }; + 0527D3AD48B45A05301E0172CB18FB3F /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = ""; }; + 05841BC790B8898CF6EDEF70007F6D12 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + 130C64D2989F79F83C85F25FA89D4E36 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = ""; }; 17A56C3303905493BB6F1F47B10E3E52 /* Pods-piwigoAppStore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-piwigoAppStore.debug.xcconfig"; sourceTree = ""; }; 18FF3F5AEBCD1530464B7D6A73EA0C98 /* Pods-piwigo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-piwigo-acknowledgements.plist"; sourceTree = ""; }; - 1D9F5E0F09A909854CDCB9583257E467 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = ""; }; - 25F18D1B6B5143BEF52BDC9EFD5CBE0A /* libMGSwipeTableCell.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMGSwipeTableCell.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D8170EEE4C3D1BB801D8FFEF164A30F /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + 1B4E25251AA08B7160000E68DD6172DD /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = ""; }; + 23866707A612BEC557BE4AFFDC518305 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift"; sourceTree = ""; }; + 2729C6311BDC7DBFF108CAF1D14F9E48 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; }; 3A9652557C356129F24CEA18BDA6CB5E /* Pods-piwigo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-piwigo-umbrella.h"; sourceTree = ""; }; - 430E7186F5155CE28B80170E7BEFCE18 /* MGSwipeTableCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MGSwipeTableCell.m; path = MGSwipeTableCell/MGSwipeTableCell.m; sourceTree = ""; }; - 458B7EEA3C30CEF77B9C1344AC5F9BAD /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift"; sourceTree = ""; }; - 45DC62EBE766E00CA1C77ACB848816B3 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = ""; }; - 45F4B73A3E86344A7A196C04CE4DDB46 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; + 4C1EBC82D6152918592224CC502B0780 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager.swift; sourceTree = ""; }; + 4C5BF434DFD3B08752F5709D73F50C6F /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; }; 4D29C687D09D0441BA0513066E8A67D9 /* Pods-piwigoAppStore-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-piwigoAppStore-acknowledgements.markdown"; sourceTree = ""; }; - 50FEB19150314B234644D5E5CAA50491 /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = ""; }; - 55747ACD85E7391943B00C8CD5B84926 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; 56EC4FF35DA7CADE3EC6931B7D60C413 /* Pods-piwigoAppStore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-piwigoAppStore.release.xcconfig"; sourceTree = ""; }; - 5706E84C9AE0B10A0BB3C1DDAB1AA291 /* libPods-piwigoAppStore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-piwigoAppStore.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B587A32BA0DE13FE950606538302EFD /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; }; - 62D25B56F9CABD978D34647878E816C8 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Position.swift"; sourceTree = ""; }; + 5706E84C9AE0B10A0BB3C1DDAB1AA291 /* Pods-piwigoAppStore */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "Pods-piwigoAppStore"; path = "libPods-piwigoAppStore.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 571E0B4AE45630F173E4E499E7266E28 /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift"; sourceTree = ""; }; + 5ADCFD08687A70539EF0119062A84B71 /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = ""; }; + 5BC5468FA534843B797D64F148453ED0 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Position.swift"; sourceTree = ""; }; + 6267E42717797453C2131468573098D7 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = ""; }; + 627D10DA4514C84F5EFE115AB2F2531B /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; }; + 65517255B919DFA3E3D3F11DE472E660 /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift"; sourceTree = ""; }; + 6A693A5A43498D9E2951B5A85E5AE4A0 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; 73A2A45BD88CB29139A746ECB879DED1 /* Pods-piwigoAppStore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-piwigoAppStore-dummy.m"; sourceTree = ""; }; - 78147105AD77A4CC4A743AFCEB738CFA /* IQKeyboardManager+UIKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UIKeyboardNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UIKeyboardNotification.swift"; sourceTree = ""; }; + 76655A4D4CD79AE900974DD01CC4B780 /* IQToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQToolbar.swift; path = IQKeyboardManagerSwift/IQToolbar/IQToolbar.swift; sourceTree = ""; }; 7AD04B27CBCA5BA4CC4F372F8E8FDD07 /* Pods-piwigoAppStore-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-piwigoAppStore-acknowledgements.plist"; sourceTree = ""; }; - 7BE4F76615D3B093FF5393B46722CC34 /* MGSwipeTableCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MGSwipeTableCell.h; path = MGSwipeTableCell/MGSwipeTableCell.h; sourceTree = ""; }; + 7CF7F1179322CC1DCF4404293A47AF51 /* MBProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.release.xcconfig; sourceTree = ""; }; 7D36D142ABB8142E69610363E35D671B /* Pods-piwigo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-piwigo-dummy.m"; sourceTree = ""; }; - 8332A71E9C431EB7FC79FB48AAA65813 /* MGSwipeTableCell-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MGSwipeTableCell-prefix.pch"; sourceTree = ""; }; - 846C50B49B3F6A5AADD04754FD355436 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; - 8B8FAB0D627B17EDE1366984278705D9 /* libMBProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMBProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 8C71E678985015A99770169547236671 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Debug.swift"; sourceTree = ""; }; + 821AB3B2313E369895DBBFFD938B9C51 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; + 83553BDA9E0BD9EF2758D0689EE530DF /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift"; sourceTree = ""; }; + 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = MBProgressHUD; path = libMBProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8C9D0A0BCE2014393A0DF473FDA6ABEB /* Pods-piwigo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-piwigo.modulemap"; sourceTree = ""; }; - 8DBF1F9F72F2095FE5CF35738DF11363 /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstants.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstants.swift; sourceTree = ""; }; - 928A459F356ECB1C2D292149D3B9E981 /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift"; sourceTree = ""; }; - 95C851AB363B01D58AAFC1DB38C5EDC3 /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstantsInternal.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; }; - 9914476847FB91339EDD8E552B98E50F /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift"; sourceTree = ""; }; - 9B63FC05042111BBEB779713F772AE08 /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = ""; }; - 9D4E9B92AA10A665C1FBE5EEB1F42F7F /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift"; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - A5F112D4A482CD7F46FE011D556912A3 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQKeyboardManagerSwift/IQTextView/IQTextView.swift; sourceTree = ""; }; - A8E950A16D00F649C54FFB30F81D7842 /* libIQKeyboardManagerSwift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libIQKeyboardManagerSwift.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 8E602B14BAB7A9B0D036A4DE157650D6 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + A487CC12250D710A6B5E7E7237F70139 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; + A7194057BE1319F1A8B57E0F16952DCD /* IQKeyboardManager+OrientationNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+OrientationNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift"; sourceTree = ""; }; + A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = IQKeyboardManagerSwift; path = libIQKeyboardManagerSwift.a; sourceTree = BUILT_PRODUCTS_DIR; }; AAEEFA91FF99A934A8DE5E538FB1100D /* Pods-piwigo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-piwigo.debug.xcconfig"; sourceTree = ""; }; - AD3EF64BDD7C8B18011EF382DAE93CD3 /* IQPreviousNextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPreviousNextView.swift; path = IQKeyboardManagerSwift/IQToolbar/IQPreviousNextView.swift; sourceTree = ""; }; - B959B966AF421EE1BACA384FEE30672E /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = ""; }; - B9DFC8964BAADB81C132F25C0C6CE40C /* libPods-piwigo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-piwigo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - BD6EC4161E26E32F68CDE6CDA7DCE5FF /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; - BD90938A7DD60AB7330135F8256BC919 /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift; sourceTree = ""; }; - C14B849D671526F0AE06E10635FBD5FB /* MGSwipeButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MGSwipeButton.h; path = MGSwipeTableCell/MGSwipeButton.h; sourceTree = ""; }; - C86E1723766F2C958553825CAA65AC55 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQTitleBarButtonItem.swift; sourceTree = ""; }; - C8BE003D635CC3C8CDB926CB395F2FDE /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQNSArray+Sort.swift"; path = "IQKeyboardManagerSwift/Categories/IQNSArray+Sort.swift"; sourceTree = ""; }; - CBDB43592F05858264B6F3629BD67D11 /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = ""; }; + B2D0E4A02ADB22F6FA9ABB3D22F4DF7F /* IQKeyboardManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Toolbar.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Toolbar.swift"; sourceTree = ""; }; + B372EAB76A0EB7CB97E1CBC567D93C8C /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = ""; }; + B540D91EED299C58E0F9782C523160BE /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardManagerSwift/IQToolbar/IQInvocation.swift; sourceTree = ""; }; + B5D2220E013752B1EBC90A4DE25D0641 /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; }; + B9D6E71BBEA2EEC975DEDC313F6ECF6B /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+Hierarchy.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIView+Hierarchy.swift"; sourceTree = ""; }; + B9DFC8964BAADB81C132F25C0C6CE40C /* Pods-piwigo */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "Pods-piwigo"; path = "libPods-piwigo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + BA4220F56709BB137041A7E5BE403D12 /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManagerConstantsInternal.swift; path = IQKeyboardManagerSwift/Constants/IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; }; CD8D84599CC0B2EB201FC97FADE1FCD9 /* Pods-piwigo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-piwigo.release.xcconfig"; sourceTree = ""; }; - D1D45CA965930CBF932CD24A6BCA4FBB /* MGSwipeTableCell-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MGSwipeTableCell-dummy.m"; sourceTree = ""; }; D2CD3BB6C4F5D2800235279CA9FA69F5 /* Pods-piwigo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-piwigo-acknowledgements.markdown"; sourceTree = ""; }; - DCC4099618720356F2820BE20527EF8D /* MGSwipeButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MGSwipeButton.m; path = MGSwipeTableCell/MGSwipeButton.m; sourceTree = ""; }; - DE03D7C2AD8EB5A6473B953A739D8B80 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; }; - DE894F01A2338DD9C002355806A2D4B9 /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager.swift; sourceTree = ""; }; - DFBB4818C8D1AE24217F842FD59B5E6B /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIView+IQKeyboardToolbar.swift"; path = "IQKeyboardManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; }; - EF15039E464CAF870ACD5B23B80C9E41 /* MBProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.debug.xcconfig; sourceTree = ""; }; - EF44CFC1E97621AC3A3AF06EE923AA9D /* IQUIScrollView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIScrollView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIScrollView+Additions.swift"; sourceTree = ""; }; - F942240191D259DF9EC2677F8268BF5D /* MGSwipeTableCell.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MGSwipeTableCell.release.xcconfig; sourceTree = ""; }; - FEC6FE41835B8EE8C462342762F23D12 /* IQKeyboardManager+OrientationNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+OrientationNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift"; sourceTree = ""; }; + DBA3224FF7C1614A385E9684B4730611 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUITextFieldView+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUITextFieldView+Additions.swift"; sourceTree = ""; }; + EF839609913BD562C16C5F4F22DF4006 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardManagerSwift/IQToolbar/IQBarButtonItem.swift; sourceTree = ""; }; + F532E48D34D605F7CD1779B486D99B1A /* MBProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.debug.xcconfig; sourceTree = ""; }; + FC40F509FDDD7CE66F4EEA9E67064B11 /* IQKeyboardManager+UITextFieldViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+UITextFieldViewNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+UITextFieldViewNotification.swift"; sourceTree = ""; }; + FCE694DF37265E7151BDD7C67F00AE3B /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+Internal.swift"; sourceTree = ""; }; + FE9182F9C25A056F994178E62344D90E /* IQKeyboardReturnKeyHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnKeyHandler.swift; path = IQKeyboardManagerSwift/IQKeyboardReturnKeyHandler.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -148,13 +127,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 33CE8A1AB6004B81E3539230634AFBD5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 566DF1F1BE6C4C452DCC78972597060A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -162,7 +134,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D0DDC30603BED41E70D9E6098F8F8EF9 /* Frameworks */ = { + A37C1C7A9E71582EAF81B7A506E6F03B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -179,37 +151,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0585D20631D4A8D6E990170B3F3A9B86 /* IQKeyboardManagerSwift */ = { - isa = PBXGroup; - children = ( - B959B966AF421EE1BACA384FEE30672E /* IQBarButtonItem.swift */, - 50FEB19150314B234644D5E5CAA50491 /* IQInvocation.swift */, - DE894F01A2338DD9C002355806A2D4B9 /* IQKeyboardManager.swift */, - 8C71E678985015A99770169547236671 /* IQKeyboardManager+Debug.swift */, - 0BE3973D13EB61F64A969C23BFD2F3C7 /* IQKeyboardManager+Internal.swift */, - FEC6FE41835B8EE8C462342762F23D12 /* IQKeyboardManager+OrientationNotification.swift */, - 62D25B56F9CABD978D34647878E816C8 /* IQKeyboardManager+Position.swift */, - 9914476847FB91339EDD8E552B98E50F /* IQKeyboardManager+Toolbar.swift */, - 78147105AD77A4CC4A743AFCEB738CFA /* IQKeyboardManager+UIKeyboardNotification.swift */, - CBDB43592F05858264B6F3629BD67D11 /* IQKeyboardManager+UITextFieldViewNotification.swift */, - 8DBF1F9F72F2095FE5CF35738DF11363 /* IQKeyboardManagerConstants.swift */, - 95C851AB363B01D58AAFC1DB38C5EDC3 /* IQKeyboardManagerConstantsInternal.swift */, - BD90938A7DD60AB7330135F8256BC919 /* IQKeyboardReturnKeyHandler.swift */, - C8BE003D635CC3C8CDB926CB395F2FDE /* IQNSArray+Sort.swift */, - AD3EF64BDD7C8B18011EF382DAE93CD3 /* IQPreviousNextView.swift */, - A5F112D4A482CD7F46FE011D556912A3 /* IQTextView.swift */, - C86E1723766F2C958553825CAA65AC55 /* IQTitleBarButtonItem.swift */, - 1D9F5E0F09A909854CDCB9583257E467 /* IQToolbar.swift */, - EF44CFC1E97621AC3A3AF06EE923AA9D /* IQUIScrollView+Additions.swift */, - 9D4E9B92AA10A665C1FBE5EEB1F42F7F /* IQUITextFieldView+Additions.swift */, - 458B7EEA3C30CEF77B9C1344AC5F9BAD /* IQUIView+Hierarchy.swift */, - DFBB4818C8D1AE24217F842FD59B5E6B /* IQUIView+IQKeyboardToolbar.swift */, - 928A459F356ECB1C2D292149D3B9E981 /* IQUIViewController+Additions.swift */, - B244B9B668BA0FB5E3B003F4032E52BC /* Support Files */, - ); - path = IQKeyboardManagerSwift; - sourceTree = ""; - }; 2202F09A948E72DA9CB8FA91A4EB69C9 /* Pods-piwigoAppStore */ = { isa = PBXGroup; children = ( @@ -223,40 +164,15 @@ path = "Target Support Files/Pods-piwigoAppStore"; sourceTree = ""; }; - 303F5033C944A98FE4BB6B360E52BD3E /* Support Files */ = { - isa = PBXGroup; - children = ( - D1D45CA965930CBF932CD24A6BCA4FBB /* MGSwipeTableCell-dummy.m */, - 8332A71E9C431EB7FC79FB48AAA65813 /* MGSwipeTableCell-prefix.pch */, - 0ED3A95E48D043EAEA0CE3CB072F538A /* MGSwipeTableCell.debug.xcconfig */, - F942240191D259DF9EC2677F8268BF5D /* MGSwipeTableCell.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/MGSwipeTableCell"; - sourceTree = ""; - }; - 540871C4A92B1F711F38967FEA288F22 /* Support Files */ = { + 309D83C43EC217A9F9D92C22C7151332 /* MBProgressHUD */ = { isa = PBXGroup; children = ( - 55747ACD85E7391943B00C8CD5B84926 /* MBProgressHUD-dummy.m */, - 846C50B49B3F6A5AADD04754FD355436 /* MBProgressHUD-prefix.pch */, - EF15039E464CAF870ACD5B23B80C9E41 /* MBProgressHUD.debug.xcconfig */, - 0B9F539753B713FF1249452A008F61EB /* MBProgressHUD.release.xcconfig */, + 05841BC790B8898CF6EDEF70007F6D12 /* MBProgressHUD.h */, + 6A693A5A43498D9E2951B5A85E5AE4A0 /* MBProgressHUD.m */, + CD997032152231D4DF5B35A2D7599ED8 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/MBProgressHUD"; - sourceTree = ""; - }; - 5C4137237006E03A2661B31FB88CCB63 /* Products */ = { - isa = PBXGroup; - children = ( - A8E950A16D00F649C54FFB30F81D7842 /* libIQKeyboardManagerSwift.a */, - 8B8FAB0D627B17EDE1366984278705D9 /* libMBProgressHUD.a */, - 25F18D1B6B5143BEF52BDC9EFD5CBE0A /* libMGSwipeTableCell.a */, - B9DFC8964BAADB81C132F25C0C6CE40C /* libPods-piwigo.a */, - 5706E84C9AE0B10A0BB3C1DDAB1AA291 /* libPods-piwigoAppStore.a */, - ); - name = Products; + name = MBProgressHUD; + path = MBProgressHUD; sourceTree = ""; }; 68FC318A352E61966603BD21F0779962 /* Targets Support Files */ = { @@ -283,50 +199,82 @@ path = "Target Support Files/Pods-piwigo"; sourceTree = ""; }; - 9C3C2F0CE9F77E0CEB65728B77E71CA4 /* Pods */ = { + A33F4FDF22C8D0CEDC94F31D9A48862F /* IQKeyboardManagerSwift */ = { isa = PBXGroup; children = ( - 0585D20631D4A8D6E990170B3F3A9B86 /* IQKeyboardManagerSwift */, - C7026DE6FF30C93A4B47D690C498F131 /* MBProgressHUD */, - C1CFBDD2E437C83EA93BF42353707578 /* MGSwipeTableCell */, + EF839609913BD562C16C5F4F22DF4006 /* IQBarButtonItem.swift */, + B540D91EED299C58E0F9782C523160BE /* IQInvocation.swift */, + 4C1EBC82D6152918592224CC502B0780 /* IQKeyboardManager.swift */, + 23866707A612BEC557BE4AFFDC518305 /* IQKeyboardManager+Debug.swift */, + FCE694DF37265E7151BDD7C67F00AE3B /* IQKeyboardManager+Internal.swift */, + A7194057BE1319F1A8B57E0F16952DCD /* IQKeyboardManager+OrientationNotification.swift */, + 5BC5468FA534843B797D64F148453ED0 /* IQKeyboardManager+Position.swift */, + B2D0E4A02ADB22F6FA9ABB3D22F4DF7F /* IQKeyboardManager+Toolbar.swift */, + 5ADCFD08687A70539EF0119062A84B71 /* IQKeyboardManager+UIKeyboardNotification.swift */, + FC40F509FDDD7CE66F4EEA9E67064B11 /* IQKeyboardManager+UITextFieldViewNotification.swift */, + 04FDCEB4D3D09E519CDCB86CF44A1B33 /* IQKeyboardManagerConstants.swift */, + BA4220F56709BB137041A7E5BE403D12 /* IQKeyboardManagerConstantsInternal.swift */, + FE9182F9C25A056F994178E62344D90E /* IQKeyboardReturnKeyHandler.swift */, + 571E0B4AE45630F173E4E499E7266E28 /* IQNSArray+Sort.swift */, + 1B4E25251AA08B7160000E68DD6172DD /* IQPreviousNextView.swift */, + 130C64D2989F79F83C85F25FA89D4E36 /* IQTextView.swift */, + 0527D3AD48B45A05301E0172CB18FB3F /* IQTitleBarButtonItem.swift */, + 76655A4D4CD79AE900974DD01CC4B780 /* IQToolbar.swift */, + 65517255B919DFA3E3D3F11DE472E660 /* IQUIScrollView+Additions.swift */, + DBA3224FF7C1614A385E9684B4730611 /* IQUITextFieldView+Additions.swift */, + B9D6E71BBEA2EEC975DEDC313F6ECF6B /* IQUIView+Hierarchy.swift */, + B5D2220E013752B1EBC90A4DE25D0641 /* IQUIView+IQKeyboardToolbar.swift */, + 83553BDA9E0BD9EF2758D0689EE530DF /* IQUIViewController+Additions.swift */, + AD31BCB79E80C55E21FFE1C2DC7361C1 /* Support Files */, ); - name = Pods; + name = IQKeyboardManagerSwift; + path = IQKeyboardManagerSwift; sourceTree = ""; }; - B244B9B668BA0FB5E3B003F4032E52BC /* Support Files */ = { + AD31BCB79E80C55E21FFE1C2DC7361C1 /* Support Files */ = { isa = PBXGroup; children = ( - 45F4B73A3E86344A7A196C04CE4DDB46 /* IQKeyboardManagerSwift.modulemap */, - 16ED4CD163CE1FABCEE60FD0C9DDF1FF /* IQKeyboardManagerSwift-dummy.m */, - DE03D7C2AD8EB5A6473B953A739D8B80 /* IQKeyboardManagerSwift-prefix.pch */, - 5B587A32BA0DE13FE950606538302EFD /* IQKeyboardManagerSwift-umbrella.h */, - 45DC62EBE766E00CA1C77ACB848816B3 /* IQKeyboardManagerSwift.debug.xcconfig */, - 9B63FC05042111BBEB779713F772AE08 /* IQKeyboardManagerSwift.release.xcconfig */, + 821AB3B2313E369895DBBFFD938B9C51 /* IQKeyboardManagerSwift.modulemap */, + 4C5BF434DFD3B08752F5709D73F50C6F /* IQKeyboardManagerSwift-dummy.m */, + 2729C6311BDC7DBFF108CAF1D14F9E48 /* IQKeyboardManagerSwift-prefix.pch */, + 627D10DA4514C84F5EFE115AB2F2531B /* IQKeyboardManagerSwift-umbrella.h */, + 6267E42717797453C2131468573098D7 /* IQKeyboardManagerSwift.debug.xcconfig */, + B372EAB76A0EB7CB97E1CBC567D93C8C /* IQKeyboardManagerSwift.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/IQKeyboardManagerSwift"; sourceTree = ""; }; - C1CFBDD2E437C83EA93BF42353707578 /* MGSwipeTableCell */ = { + B4108ADDCD7B305F1BEE6FF1A23BCB0C /* Products */ = { isa = PBXGroup; children = ( - C14B849D671526F0AE06E10635FBD5FB /* MGSwipeButton.h */, - DCC4099618720356F2820BE20527EF8D /* MGSwipeButton.m */, - 7BE4F76615D3B093FF5393B46722CC34 /* MGSwipeTableCell.h */, - 430E7186F5155CE28B80170E7BEFCE18 /* MGSwipeTableCell.m */, - 303F5033C944A98FE4BB6B360E52BD3E /* Support Files */, + A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */, + 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */, + B9DFC8964BAADB81C132F25C0C6CE40C /* Pods-piwigo */, + 5706E84C9AE0B10A0BB3C1DDAB1AA291 /* Pods-piwigoAppStore */, ); - path = MGSwipeTableCell; + name = Products; sourceTree = ""; }; - C7026DE6FF30C93A4B47D690C498F131 /* MBProgressHUD */ = { + C43704214C296E91C767E1513C997356 /* Pods */ = { isa = PBXGroup; children = ( - 2D8170EEE4C3D1BB801D8FFEF164A30F /* MBProgressHUD.h */, - BD6EC4161E26E32F68CDE6CDA7DCE5FF /* MBProgressHUD.m */, - 540871C4A92B1F711F38967FEA288F22 /* Support Files */, + A33F4FDF22C8D0CEDC94F31D9A48862F /* IQKeyboardManagerSwift */, + 309D83C43EC217A9F9D92C22C7151332 /* MBProgressHUD */, ); - path = MBProgressHUD; + name = Pods; + sourceTree = ""; + }; + CD997032152231D4DF5B35A2D7599ED8 /* Support Files */ = { + isa = PBXGroup; + children = ( + A487CC12250D710A6B5E7E7237F70139 /* MBProgressHUD-dummy.m */, + 8E602B14BAB7A9B0D036A4DE157650D6 /* MBProgressHUD-prefix.pch */, + F532E48D34D605F7CD1779B486D99B1A /* MBProgressHUD.debug.xcconfig */, + 7CF7F1179322CC1DCF4404293A47AF51 /* MBProgressHUD.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/MBProgressHUD"; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { @@ -334,8 +282,8 @@ children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, - 9C3C2F0CE9F77E0CEB65728B77E71CA4 /* Pods */, - 5C4137237006E03A2661B31FB88CCB63 /* Products */, + C43704214C296E91C767E1513C997356 /* Pods */, + B4108ADDCD7B305F1BEE6FF1A23BCB0C /* Products */, 68FC318A352E61966603BD21F0779962 /* Targets Support Files */, ); sourceTree = ""; @@ -350,18 +298,18 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 0D27BA597366808085B4083760464B16 /* Headers */ = { + 25F8E016D37F79E2AE6F86346ADF7244 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 493A1611C577DBF71F99922A24BEBEBA /* Pods-piwigo-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 25F8E016D37F79E2AE6F86346ADF7244 /* Headers */ = { + 27EA3EB9E48A0981D32878DDE9F1E6F3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + C9561DC9DA9972C53CF5A93371197D2E /* Pods-piwigo-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -373,15 +321,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6E5B64EA163284229C78430B1FC750C1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4F98BCBD4891169A0C86B10F352C0F87 /* MGSwipeButton.h in Headers */, - 5F94CA16E0701092C71A2E193C7A7816 /* MGSwipeTableCell.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; C0DDBE7CDFC38ACA7ECCDE7915141CC0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -393,41 +332,23 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 1EEB7FC8FC3DC62BFD58C64EF0EDFF4B /* MGSwipeTableCell */ = { - isa = PBXNativeTarget; - buildConfigurationList = 24B92A0CA58F2B606B0DD7B1EFDFF708 /* Build configuration list for PBXNativeTarget "MGSwipeTableCell" */; - buildPhases = ( - 6E5B64EA163284229C78430B1FC750C1 /* Headers */, - 1EF7F3CD04CAC0489FC291FD84810A3A /* Sources */, - 33CE8A1AB6004B81E3539230634AFBD5 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MGSwipeTableCell; - productName = MGSwipeTableCell; - productReference = 25F18D1B6B5143BEF52BDC9EFD5CBE0A /* libMGSwipeTableCell.a */; - productType = "com.apple.product-type.library.static"; - }; 4D72DA4D5EFCE5D0CE44D031B08BE51D /* Pods-piwigo */ = { isa = PBXNativeTarget; - buildConfigurationList = 3AE6B150F4D5C024760B1C22DFAC9E5A /* Build configuration list for PBXNativeTarget "Pods-piwigo" */; + buildConfigurationList = FE737C305F6296F24613D745EA546C09 /* Build configuration list for PBXNativeTarget "Pods-piwigo" */; buildPhases = ( - 0D27BA597366808085B4083760464B16 /* Headers */, - DD03BFE6EDAEA4898421755645748A96 /* Sources */, - D0DDC30603BED41E70D9E6098F8F8EF9 /* Frameworks */, + 27EA3EB9E48A0981D32878DDE9F1E6F3 /* Headers */, + 2F0F31994EF99494B80B3D81F0DCE220 /* Sources */, + A37C1C7A9E71582EAF81B7A506E6F03B /* Frameworks */, ); buildRules = ( ); dependencies = ( - 39B2D167DEDB89420151429D2B5D8DDE /* PBXTargetDependency */, - A2D78D9ADF5679B99CB24CD705FD4D95 /* PBXTargetDependency */, - CC9A57925E7777845BDF0F12AAB7ED60 /* PBXTargetDependency */, + 65087CDCBAE8D8CB6C89E91256AA0BBE /* PBXTargetDependency */, + 8A02EC93939E2F888EC12EEB7FD7E7F8 /* PBXTargetDependency */, ); name = "Pods-piwigo"; productName = "Pods-piwigo"; - productReference = B9DFC8964BAADB81C132F25C0C6CE40C /* libPods-piwigo.a */; + productReference = B9DFC8964BAADB81C132F25C0C6CE40C /* Pods-piwigo */; productType = "com.apple.product-type.library.static"; }; 771F7CD6E0864BC28C79DE87EBC62872 /* Pods-piwigoAppStore */ = { @@ -441,11 +362,11 @@ buildRules = ( ); dependencies = ( - 5AC708CFDA2595E671730786BD54F987 /* PBXTargetDependency */, + 782239E164D290EE142E071D90D9B5EF /* PBXTargetDependency */, ); name = "Pods-piwigoAppStore"; productName = "Pods-piwigoAppStore"; - productReference = 5706E84C9AE0B10A0BB3C1DDAB1AA291 /* libPods-piwigoAppStore.a */; + productReference = 5706E84C9AE0B10A0BB3C1DDAB1AA291 /* Pods-piwigoAppStore */; productType = "com.apple.product-type.library.static"; }; 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */ = { @@ -462,7 +383,7 @@ ); name = MBProgressHUD; productName = MBProgressHUD; - productReference = 8B8FAB0D627B17EDE1366984278705D9 /* libMBProgressHUD.a */; + productReference = 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */; productType = "com.apple.product-type.library.static"; }; B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */ = { @@ -480,7 +401,7 @@ ); name = IQKeyboardManagerSwift; productName = IQKeyboardManagerSwift; - productReference = A8E950A16D00F649C54FFB30F81D7842 /* libIQKeyboardManagerSwift.a */; + productReference = A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -489,12 +410,11 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 1300; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1300; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 10.0"; + compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -502,13 +422,12 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 5C4137237006E03A2661B31FB88CCB63 /* Products */; + productRefGroup = B4108ADDCD7B305F1BEE6FF1A23BCB0C /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */, 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */, - 1EEB7FC8FC3DC62BFD58C64EF0EDFF4B /* MGSwipeTableCell */, 4D72DA4D5EFCE5D0CE44D031B08BE51D /* Pods-piwigo */, 771F7CD6E0864BC28C79DE87EBC62872 /* Pods-piwigoAppStore */, ); @@ -543,13 +462,11 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 1EF7F3CD04CAC0489FC291FD84810A3A /* Sources */ = { + 2F0F31994EF99494B80B3D81F0DCE220 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2E8A7F44249168E571E8611D03D9440A /* MGSwipeButton.m in Sources */, - 502B6F90DA89F34946BB834B8DA513E6 /* MGSwipeTableCell.m in Sources */, - 29809AC5B234F9DD9BA4D087AB4577FA /* MGSwipeTableCell-dummy.m in Sources */, + F36D7E6687CCB1FC1E6D7F1397AE47F2 /* Pods-piwigo-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -570,14 +487,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DD03BFE6EDAEA4898421755645748A96 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E775E89E445D77DB9083AC386B141709 /* Pods-piwigo-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; F121F9D88EEB7CC5CDC5CBE4B7E8EFE4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -612,42 +521,37 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 39B2D167DEDB89420151429D2B5D8DDE /* PBXTargetDependency */ = { + 65087CDCBAE8D8CB6C89E91256AA0BBE /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = IQKeyboardManagerSwift; target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; - targetProxy = C7E40DD6758D12657FC96582F82A3EC0 /* PBXContainerItemProxy */; + targetProxy = D24ABA3D45D54219411AC1F82EE1202B /* PBXContainerItemProxy */; }; - 5AC708CFDA2595E671730786BD54F987 /* PBXTargetDependency */ = { + 782239E164D290EE142E071D90D9B5EF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-piwigo"; target = 4D72DA4D5EFCE5D0CE44D031B08BE51D /* Pods-piwigo */; - targetProxy = 4402738C4A76EE7AE3BFD1F64C46F1DF /* PBXContainerItemProxy */; + targetProxy = 79B1E7560D9739DEB608AD490B5DE6A2 /* PBXContainerItemProxy */; }; - A2D78D9ADF5679B99CB24CD705FD4D95 /* PBXTargetDependency */ = { + 8A02EC93939E2F888EC12EEB7FD7E7F8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = MBProgressHUD; target = 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */; - targetProxy = 645F842FA6B1CA3CF0627A292B1E1C9F /* PBXContainerItemProxy */; - }; - CC9A57925E7777845BDF0F12AAB7ED60 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MGSwipeTableCell; - target = 1EEB7FC8FC3DC62BFD58C64EF0EDFF4B /* MGSwipeTableCell */; - targetProxy = 76EE83CCD9EE8784250968A49B1F45D2 /* PBXContainerItemProxy */; + targetProxy = 6BD5249128EF00930D08525EC045AA43 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 09076D26B2A150F447980D20B1DDDE3C /* Release */ = { + 2774D786BC2717CFCFF207AB6F982889 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B63FC05042111BBEB779713F772AE08 /* IQKeyboardManagerSwift.release.xcconfig */; + baseConfigurationReference = B372EAB76A0EB7CB97E1CBC567D93C8C /* IQKeyboardManagerSwift.release.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MODULEMAP_FILE = Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; @@ -658,7 +562,7 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.6; + SWIFT_VERSION = 5.8; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -699,7 +603,6 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -723,6 +626,7 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -751,30 +655,51 @@ }; name = Debug; }; - 4187F5D5487AC7A933DB0373FE497DA1 /* Debug */ = { + 38EBB4B1077E0C05702B30CF2C509F4E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 45DC62EBE766E00CA1C77ACB848816B3 /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = AAEEFA91FF99A934A8DE5E538FB1100D /* Pods-piwigo.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-piwigo/Pods-piwigo.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; - PRODUCT_NAME = IQKeyboardManagerSwift; - PUBLIC_HEADERS_FOLDER_PATH = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.6; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; + 58DEFB62F90D7D2DBF6F122CA4CEAF3C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD8D84599CC0B2EB201FC97FADE1FCD9 /* Pods-piwigo.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-piwigo/Pods-piwigo.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 63FAF33E1C55B71A5F5A8B3CC8749F99 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -810,7 +735,6 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -830,6 +754,7 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; @@ -837,40 +762,15 @@ }; name = Release; }; - 6880B41B2E8C8448F3B48E511AFD4AFE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F942240191D259DF9EC2677F8268BF5D /* MGSwipeTableCell.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/MGSwipeTableCell/MGSwipeTableCell-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MGSwipeTableCell; - PRODUCT_NAME = MGSwipeTableCell; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; 969BC1FF255B6116BD32F88A206DFEED /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EF15039E464CAF870ACD5B23B80C9E41 /* MBProgressHUD.debug.xcconfig */; + baseConfigurationReference = F532E48D34D605F7CD1779B486D99B1A /* MBProgressHUD.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; @@ -885,71 +785,27 @@ }; name = Debug; }; - A55BAB9EB277AB41831C5F4DA42EB431 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AAEEFA91FF99A934A8DE5E538FB1100D /* Pods-piwigo.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-piwigo/Pods-piwigo.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C0AE22F2146D1C7E354C039EC6C767AA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD8D84599CC0B2EB201FC97FADE1FCD9 /* Pods-piwigo.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-piwigo/Pods-piwigo.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - DC6FA8555128B527FCD91DFFA5BB1A86 /* Debug */ = { + A37C605D5D741F2696E6D94AB23724DD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ED3A95E48D043EAEA0CE3CB072F538A /* MGSwipeTableCell.debug.xcconfig */; + baseConfigurationReference = 6267E42717797453C2131468573098D7 /* IQKeyboardManagerSwift.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/MGSwipeTableCell/MGSwipeTableCell-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardManagerSwift/IQKeyboardManagerSwift-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MODULEMAP_FILE = Headers/Public/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MGSwipeTableCell; - PRODUCT_NAME = MGSwipeTableCell; + PRODUCT_MODULE_NAME = IQKeyboardManagerSwift; + PRODUCT_NAME = IQKeyboardManagerSwift; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.8; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -978,13 +834,13 @@ }; FCB16E9CCD9B3436D07BBEEEA7B9E152 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B9F539753B713FF1249452A008F61EB /* MBProgressHUD.release.xcconfig */; + baseConfigurationReference = 7CF7F1179322CC1DCF4404293A47AF51 /* MBProgressHUD.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; @@ -1003,24 +859,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 24B92A0CA58F2B606B0DD7B1EFDFF708 /* Build configuration list for PBXNativeTarget "MGSwipeTableCell" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DC6FA8555128B527FCD91DFFA5BB1A86 /* Debug */, - 6880B41B2E8C8448F3B48E511AFD4AFE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3AE6B150F4D5C024760B1C22DFAC9E5A /* Build configuration list for PBXNativeTarget "Pods-piwigo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A55BAB9EB277AB41831C5F4DA42EB431 /* Debug */, - C0AE22F2146D1C7E354C039EC6C767AA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1033,8 +871,8 @@ 59907393922477860416EAC73DB2F259 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4187F5D5487AC7A933DB0373FE497DA1 /* Debug */, - 09076D26B2A150F447980D20B1DDDE3C /* Release */, + A37C605D5D741F2696E6D94AB23724DD /* Debug */, + 2774D786BC2717CFCFF207AB6F982889 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1057,6 +895,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + FE737C305F6296F24613D745EA546C09 /* Build configuration list for PBXNativeTarget "Pods-piwigo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 38EBB4B1077E0C05702B30CF2C509F4E /* Debug */, + 58DEFB62F90D7D2DBF6F122CA4CEAF3C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; diff --git a/Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/IQKeyboardManagerSwift.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/IQKeyboardManagerSwift.xcscheme index 2f0be5bfa..84ee569f2 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/IQKeyboardManagerSwift.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/IQKeyboardManagerSwift.xcscheme @@ -1,6 +1,6 @@ -@interface PodsDummy_MGSwipeTableCell : NSObject -@end -@implementation PodsDummy_MGSwipeTableCell -@end diff --git a/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell-prefix.pch b/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell-prefix.pch deleted file mode 100644 index beb2a2441..000000000 --- a/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.debug.xcconfig b/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.debug.xcconfig deleted file mode 100644 index 687096211..000000000 --- a/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MGSwipeTableCell -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MGSwipeTableCell" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MGSwipeTableCell" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/MGSwipeTableCell -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.release.xcconfig b/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.release.xcconfig deleted file mode 100644 index 687096211..000000000 --- a/Pods/Target Support Files/MGSwipeTableCell/MGSwipeTableCell.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MGSwipeTableCell -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MGSwipeTableCell" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MGSwipeTableCell" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/MGSwipeTableCell -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.markdown b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.markdown index 2b7a74330..88970c1c6 100644 --- a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.markdown @@ -47,29 +47,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -## MGSwipeTableCell - -The MIT License (MIT) - -Copyright (c) 2018 Imanol Fernandez @MortimerGoro - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.plist b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.plist index 86cf400fd..b56c22122 100644 --- a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo-acknowledgements.plist @@ -71,37 +71,6 @@ THE SOFTWARE. Type PSGroupSpecifier - - FooterText - The MIT License (MIT) - -Copyright (c) 2018 Imanol Fernandez @MortimerGoro - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - License - MIT - Title - MGSwipeTableCell - Type - PSGroupSpecifier - FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.debug.xcconfig b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.debug.xcconfig index 1f288fe36..8ce96e2e5 100644 --- a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.debug.xcconfig +++ b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MGSwipeTableCell" -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MGSwipeTableCell" /usr/lib/swift $(SDKROOT)/usr/lib/swift +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" /usr/lib/swift $(SDKROOT)/usr/lib/swift OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -OTHER_LDFLAGS = $(inherited) -ObjC -l"IQKeyboardManagerSwift" -l"MBProgressHUD" -l"MGSwipeTableCell" -l"swiftCoreGraphics" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -ObjC -l"IQKeyboardManagerSwift" -l"MBProgressHUD" -l"swiftCoreGraphics" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.release.xcconfig b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.release.xcconfig index 1f288fe36..8ce96e2e5 100644 --- a/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.release.xcconfig +++ b/Pods/Target Support Files/Pods-piwigo/Pods-piwigo.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MGSwipeTableCell" -LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MGSwipeTableCell" /usr/lib/swift $(SDKROOT)/usr/lib/swift +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" +LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" /usr/lib/swift $(SDKROOT)/usr/lib/swift OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -OTHER_LDFLAGS = $(inherited) -ObjC -l"IQKeyboardManagerSwift" -l"MBProgressHUD" -l"MGSwipeTableCell" -l"swiftCoreGraphics" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +OTHER_LDFLAGS = $(inherited) -ObjC -l"IQKeyboardManagerSwift" -l"MBProgressHUD" -l"swiftCoreGraphics" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.debug.xcconfig b/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.debug.xcconfig index b496353d1..b0a1d5d55 100644 --- a/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.debug.xcconfig +++ b/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.debug.xcconfig @@ -1,6 +1,6 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MGSwipeTableCell" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" LIBRARY_SEARCH_PATHS = $(inherited) $(SDKROOT)/usr/lib/swift OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" diff --git a/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.release.xcconfig b/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.release.xcconfig index b496353d1..b0a1d5d55 100644 --- a/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.release.xcconfig +++ b/Pods/Target Support Files/Pods-piwigoAppStore/Pods-piwigoAppStore.release.xcconfig @@ -1,6 +1,6 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" "${PODS_ROOT}/Headers/Public/MGSwipeTableCell" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MBProgressHUD" LIBRARY_SEARCH_PATHS = $(inherited) $(SDKROOT)/usr/lib/swift OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "CoreGraphics" -framework "Foundation" -framework "QuartzCore" -framework "UIKit" diff --git a/piwigo.xcodeproj/project.pbxproj b/piwigo.xcodeproj/project.pbxproj index a724e56a9..1cf40d100 100644 --- a/piwigo.xcodeproj/project.pbxproj +++ b/piwigo.xcodeproj/project.pbxproj @@ -3753,7 +3753,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.0.1; + MARKETING_VERSION = 3.0.2; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; OTHER_LDFLAGS = ( "$(inherited)", @@ -3761,7 +3761,6 @@ "-ObjC", "-l\"IQKeyboardManagerSwift\"", "-l\"MBProgressHUD\"", - "-l\"MGSwipeTableCell\"", "-framework", "\"CoreGraphics\"", "-framework", @@ -3822,7 +3821,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 3.0.1; + MARKETING_VERSION = 3.0.2; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20"; OTHER_LDFLAGS = ( "$(inherited)", @@ -3830,7 +3829,6 @@ "-ObjC", "-l\"IQKeyboardManagerSwift\"", "-l\"MBProgressHUD\"", - "-l\"MGSwipeTableCell\"", "-framework", "\"CoreGraphics\"", "-framework", diff --git a/piwigo/Album/AlbumVars.swift b/piwigo/Album/AlbumVars.swift index d0af4406b..d3231d668 100644 --- a/piwigo/Album/AlbumVars.swift +++ b/piwigo/Album/AlbumVars.swift @@ -83,5 +83,5 @@ class AlbumVars: NSObject { // MARK: - Vars in Memory // Album variables kept in memory /// - To remember which album data is being fetched - var isFetchingAlbumData = Set() + var isFetchingAlbumData = false } diff --git a/piwigo/Album/AlbumViewController.swift b/piwigo/Album/AlbumViewController.swift index 8cd00c696..dbc815ca4 100644 --- a/piwigo/Album/AlbumViewController.swift +++ b/piwigo/Album/AlbumViewController.swift @@ -562,7 +562,7 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect let noSmartAlbumData = (self.categoryId < 0) && (nbImages == 0) let expectedNbImages = self.albumData.nbImages let missingImages = (expectedNbImages > 0) && (nbImages < expectedNbImages / 2) - if AlbumVars.shared.isFetchingAlbumData.contains(categoryId) == false, + if AlbumVars.shared.isFetchingAlbumData == false, noSmartAlbumData || missingImages || lastLoad.timeIntervalSinceNow < TimeInterval(-86400) { NetworkUtilities.checkSession(ofUser: user) { self.startFetchingAlbumAndImages(withHUD: noSmartAlbumData || missingImages) @@ -816,7 +816,7 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect func startFetchingAlbumAndImages(withHUD: Bool) { // Remember that the app is uploading this album data - AlbumVars.shared.isFetchingAlbumData.insert(categoryId) + AlbumVars.shared.isFetchingAlbumData = true // Inform user DispatchQueue.main.async { [self] in @@ -842,7 +842,7 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect @objc func refresh(_ refreshControl: UIRefreshControl?) { // Already being fetching album data? - if AlbumVars.shared.isFetchingAlbumData.contains(categoryId) { return } + if AlbumVars.shared.isFetchingAlbumData { return } // Pause upload manager UploadManager.shared.isPaused = true @@ -892,11 +892,11 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect categoryId != pwgSmartAlbum.favorites.rawValue, "2.10.0".compare(NetworkVars.pwgVersion, options: .numeric) != .orderedDescending, NetworkVars.pwgVersion.compare("13.0.0", options: .numeric) == .orderedAscending, - AlbumVars.shared.isFetchingAlbumData.contains(pwgSmartAlbum.favorites.rawValue) == false, + AlbumVars.shared.isFetchingAlbumData == false, let favAlbum = albumProvider.getAlbum(ofUser: user, withId: pwgSmartAlbum.favorites.rawValue), favAlbum.dateGetImages.timeIntervalSinceNow < TimeInterval(-86400) { // i.e. a day // Remember that the app is fetching favorites - AlbumVars.shared.isFetchingAlbumData.insert(pwgSmartAlbum.favorites.rawValue) + AlbumVars.shared.isFetchingAlbumData = true // Fetch favorites in the background DispatchQueue.global(qos: .background).async { [self] in self.loadFavoritesInBckg() @@ -1444,12 +1444,6 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect // MARK: - AlbumCollectionViewCellDelegate Methods (+ PushView:) func didMoveCategory(_ albumCell: AlbumCollectionViewCell?) { - // Remove cell - guard let cellToRemove = albumCell else { return } - if let indexPath = imagesCollection?.indexPath(for: cellToRemove) { - imagesCollection?.deleteItems(at: [indexPath]) - } - // Update number of images in footer updateNberOfImagesInFooter() } diff --git a/piwigo/Album/Cells/AlbumCollectionViewCell+Delete.swift b/piwigo/Album/Cells/AlbumCollectionViewCell+Delete.swift index 671ddbca1..59567be92 100644 --- a/piwigo/Album/Cells/AlbumCollectionViewCell+Delete.swift +++ b/piwigo/Album/Cells/AlbumCollectionViewCell+Delete.swift @@ -10,7 +10,7 @@ import piwigoKit extension AlbumCollectionViewCell { // MARK: - Delete Category - func deleteCategory() { + func deleteCategory(completion: @escaping (Bool) -> Void) { guard let albumData = albumData else { return } // Determine the present view controller @@ -23,10 +23,9 @@ extension AlbumCollectionViewCell { let cancelAction = UIAlertAction( title: NSLocalizedString("alertCancelButton", comment: "Cancel"), - style: .cancel, handler: { [self] action in + style: .cancel, handler: { _ in // Hide swipe buttons - let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell - cell?.hideSwipe(animated: true) + completion(true) }) alert.addAction(cancelAction) @@ -40,7 +39,8 @@ extension AlbumCollectionViewCell { // Delete empty album deleteCategory(withDeletionMode: .none, - andViewController: topViewController) + andViewController: topViewController, + completion: completion) }) alert.addAction(emptyCategoryAction) } else { @@ -51,12 +51,14 @@ extension AlbumCollectionViewCell { if NetworkVars.usesCalcOrphans, nbOrphans == Int64.zero { // There will be no more orphans after the album deletion deleteCategory(withDeletionMode: .none, - andViewController: topViewController) + andViewController: topViewController, + completion: completion) } else { // There will be orphans, ask confirmation confirmCategoryDeletion(withNumberOfImages: albumData.totalNbImages, deletionMode: .none, - andViewController: topViewController) + andViewController: topViewController, + completion: completion) } }) alert.addAction(keepImagesAction) @@ -69,7 +71,8 @@ extension AlbumCollectionViewCell { handler: { [self] action in confirmCategoryDeletion(withNumberOfImages: albumData.totalNbImages, deletionMode: .orphaned, - andViewController: topViewController) + andViewController: topViewController, + completion: completion) }) alert.addAction(orphanImagesAction) } @@ -80,7 +83,8 @@ extension AlbumCollectionViewCell { handler: { [self] action in confirmCategoryDeletion(withNumberOfImages: albumData.totalNbImages, deletionMode: .orphaned, - andViewController: topViewController) + andViewController: topViewController, + completion: completion) }) alert.addAction(orphanImagesAction) } @@ -91,7 +95,8 @@ extension AlbumCollectionViewCell { handler: { [self] action in confirmCategoryDeletion(withNumberOfImages: albumData.totalNbImages, deletionMode: .all, - andViewController: topViewController) + andViewController: topViewController, + completion: completion) }) allImagesAction.accessibilityIdentifier = "DeleteAll" alert.addAction(allImagesAction) @@ -116,7 +121,8 @@ extension AlbumCollectionViewCell { private func confirmCategoryDeletion(withNumberOfImages number: Int64, deletionMode: pwgAlbumDeletionMode, - andViewController topViewController: UIViewController?) { + andViewController topViewController: UIViewController?, + completion: @escaping (Bool) -> Void) { guard let albumData = albumData else { return } // Are you sure? @@ -137,7 +143,8 @@ extension AlbumCollectionViewCell { let defaultAction = UIAlertAction( title: NSLocalizedString("alertCancelButton", comment: "Cancel"), style: .cancel, - handler: { action in + handler: { _ in + completion(true) }) deleteAction = UIAlertAction( @@ -146,7 +153,8 @@ extension AlbumCollectionViewCell { handler: { [self] action in if (alert.textFields?.first?.text?.count ?? 0) > 0 { checkDeletion(withNumberOfImages: Int(alert.textFields?.first?.text ?? "") ?? 0, - deletionMode: deletionMode, andViewController: topViewController) + deletionMode: deletionMode, andViewController: topViewController, + completion: completion) } }) deleteAction?.accessibilityIdentifier = "DeleteAll" @@ -169,7 +177,8 @@ extension AlbumCollectionViewCell { private func checkDeletion(withNumberOfImages number: Int, deletionMode: pwgAlbumDeletionMode, - andViewController topViewController: UIViewController?) { + andViewController topViewController: UIViewController?, + completion: @escaping (Bool) -> Void) { guard let albumData = albumData else { return } // Check provided number of images @@ -183,11 +192,12 @@ extension AlbumCollectionViewCell { topViewController?.showPiwigoHUD(withTitle: NSLocalizedString("deleteCategoryHUD_label", comment: "Deleting Album…"), detail: "", buttonTitle: "", buttonTarget: nil, buttonSelector: nil, inMode: .indeterminate) // Delete album (deleted images will remain in cache) - deleteCategory(withDeletionMode: deletionMode, andViewController: topViewController) + deleteCategory(withDeletionMode: deletionMode, andViewController: topViewController, completion: completion) } private func deleteCategory(withDeletionMode deletionMode: pwgAlbumDeletionMode, - andViewController topViewController: UIViewController?) { + andViewController topViewController: UIViewController?, + completion: @escaping (Bool) -> Void) { guard let albumData = albumData else { return } // Delete the category @@ -203,8 +213,7 @@ extension AlbumCollectionViewCell { topViewController?.updatePiwigoHUDwithSuccess() { [self] in topViewController?.hidePiwigoHUD(afterDelay: kDelayPiwigoHUD) { [self] in // Hide swipe buttons - let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell - cell?.hideSwipe(animated: true) + completion(true) // Delete album and images from cache and update UI categoryDelegate?.deleteCategory(albumData.pwgID, inParent: albumData.parentId, @@ -212,20 +221,25 @@ extension AlbumCollectionViewCell { } } } failure: { error in - self.deleteCategoryError(error, viewController: topViewController) + self.deleteCategoryError(error, viewController: topViewController, + completion: completion) } } failure: { error in - self.deleteCategoryError(error, viewController: topViewController) + self.deleteCategoryError(error, viewController: topViewController, + completion: completion) } } - private func deleteCategoryError(_ error: NSError, viewController topViewController: UIViewController?) { + private func deleteCategoryError(_ error: NSError, viewController topViewController: UIViewController?, + completion: @escaping (Bool) -> Void) { DispatchQueue.main.async { let title = NSLocalizedString("deleteCategoryError_title", comment: "Delete Fail") let message = NSLocalizedString("deleteCategoryError_message", comment: "Failed to delete your album") topViewController?.hidePiwigoHUD() { topViewController?.dismissPiwigoError(withTitle: title, message: message, - errorMessage: error.localizedDescription) { } + errorMessage: error.localizedDescription) { + completion(true) + } } } } diff --git a/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift b/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift index 694df1ae1..b9f986f68 100644 --- a/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift +++ b/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift @@ -14,6 +14,7 @@ extension AlbumCollectionViewCell { let moveSB = UIStoryboard(name: "SelectCategoryViewController", bundle: nil) guard let moveVC = moveSB.instantiateViewController(withIdentifier: "SelectCategoryViewController") as? SelectCategoryViewController else { return } if moveVC.setInput(parameter: albumData, for: .moveAlbum) { + moveVC.user = user moveVC.albumMovedDelegate = self categoryDelegate?.pushCategoryView(moveVC) } @@ -27,10 +28,10 @@ extension AlbumCollectionViewCell: SelectCategoryAlbumMovedDelegate { func didMoveCategory() { // Hide swipe commands - let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell - cell?.hideSwipe(animated: true) { [self] _ in +// let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell +// cell?.hideSwipe(animated: true) { [self] _ in // Remove category from the album/images collection categoryDelegate?.didMoveCategory(self) - } +// } } } diff --git a/piwigo/Album/Cells/AlbumCollectionViewCell+Rename.swift b/piwigo/Album/Cells/AlbumCollectionViewCell+Rename.swift index a9a4e4977..b6caccba3 100644 --- a/piwigo/Album/Cells/AlbumCollectionViewCell+Rename.swift +++ b/piwigo/Album/Cells/AlbumCollectionViewCell+Rename.swift @@ -10,7 +10,7 @@ import piwigoKit extension AlbumCollectionViewCell { // MARK: - Rename Category - func renameCategory() { + func renameCategory(completion: @escaping (Bool) -> Void) { guard let albumData = albumData else { return } // Determine the present view controller @@ -59,10 +59,9 @@ extension AlbumCollectionViewCell { let cancelAction = UIAlertAction( title: NSLocalizedString("alertCancelButton", comment: "Cancel"), - style: .cancel, handler: { [self] action in + style: .cancel, handler: { action in // Hide swipe buttons - let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell - cell?.hideSwipe(animated: true) + completion(true) }) renameAction = UIAlertAction( @@ -72,7 +71,8 @@ extension AlbumCollectionViewCell { if (self.renameAlert?.textFields?.first?.text?.count ?? 0) > 0 { renameCategory(withName: self.renameAlert?.textFields?.first?.text, comment: self.renameAlert?.textFields?.last?.text, - andViewController: topViewController) + andViewController: topViewController, + completion: completion) } }) @@ -122,7 +122,8 @@ extension AlbumCollectionViewCell { } private func renameCategory(withName albumName: String?, comment albumComment: String?, - andViewController topViewController: UIViewController?) { + andViewController topViewController: UIViewController?, + completion: @escaping (Bool) -> Void) { guard let albumId = albumData?.pwgID, let albumName = albumName, let albumComment = albumComment else { return } @@ -134,6 +135,9 @@ extension AlbumCollectionViewCell { NetworkUtilities.checkSession(ofUser: user) { AlbumUtilities.setInfos(albumId, withName: albumName, description: albumComment) { [self] in DispatchQueue.main.async { [self] in + // Hide swipe buttons + completion(true) + // Update album in cache and cell if albumData?.name != albumName { albumData?.name = albumName @@ -148,29 +152,30 @@ extension AlbumCollectionViewCell { } // Hide HUD and swipe button - topViewController?.updatePiwigoHUDwithSuccess() { [self] in - topViewController?.hidePiwigoHUD(afterDelay: kDelayPiwigoHUD) { [self] in - // Update cell and hide swipe buttons - let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell - cell?.hideSwipe(animated: true) - } + topViewController?.updatePiwigoHUDwithSuccess() { + topViewController?.hidePiwigoHUD(afterDelay: kDelayPiwigoHUD) { } } } } failure: { error in - self.renameCategoryError(error, viewController: topViewController) + self.renameCategoryError(error, viewController: topViewController, + completion: completion) } } failure: { error in - self.renameCategoryError(error, viewController: topViewController) + self.renameCategoryError(error, viewController: topViewController, + completion: completion) } } - private func renameCategoryError(_ error: NSError, viewController topViewController: UIViewController?) { + private func renameCategoryError(_ error: NSError, viewController topViewController: UIViewController?, + completion: @escaping (Bool) -> Void) { DispatchQueue.main.async { let title = NSLocalizedString("renameCategoyError_title", comment: "Rename Fail") let message = NSLocalizedString("renameCategoyError_message", comment: "Failed to rename your album") topViewController?.hidePiwigoHUD() { topViewController?.dismissPiwigoError(withTitle: title, message: message, - errorMessage: error.localizedDescription) { } + errorMessage: error.localizedDescription) { + completion(true) + } } } } diff --git a/piwigo/Album/Cells/AlbumCollectionViewCell.swift b/piwigo/Album/Cells/AlbumCollectionViewCell.swift index 55de874d2..2e95aff9d 100644 --- a/piwigo/Album/Cells/AlbumCollectionViewCell.swift +++ b/piwigo/Album/Cells/AlbumCollectionViewCell.swift @@ -70,10 +70,6 @@ class AlbumCollectionViewCell: UICollectionViewCell contentView.addSubview(tableView) } contentView.addConstraints(NSLayoutConstraint.constraintFillSize(tableView)!) - - // Register auto-upload option enabled/disabled - NotificationCenter.default.addObserver(self, selector: #selector(autoUploadUpdated(_:)), - name: .pwgAutoUploadChanged, object: nil) } @objc @@ -86,19 +82,8 @@ class AlbumCollectionViewCell: UICollectionViewCell albumData = nil } - @objc - func autoUploadUpdated(_ notification: Notification?) { - // Is this cell concerned? - if UploadVars.autoUploadCategoryId != Int(albumData?.pwgID ?? 0) { return } - - // Disallow user to delete the active auto-upload destination album - let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell - cell?.refreshButtons(true) - } - deinit { renameAction = nil - NotificationCenter.default.removeObserver(self, name: .pwgAutoUploadChanged, object: nil) } required init?(coder aDecoder: NSCoder) { @@ -125,7 +110,6 @@ extension AlbumCollectionViewCell: UITableViewDataSource // Album modifications are possible only if data are known if albumData != nil { - cell.delegate = self cell.isAccessibilityElement = true } return cell @@ -149,18 +133,12 @@ extension AlbumCollectionViewCell: UITableViewDelegate categoryDelegate?.pushCategoryView(albumView) } } -} + + func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { + // Only admins can rename, move and delete albums + if !(user?.hasAdminRights ?? false) { return nil } -// MARK: - MGSwipeTableCellDelegate Methods -extension AlbumCollectionViewCell: MGSwipeTableCellDelegate -{ - func swipeTableCell(_ cell: MGSwipeTableCell, canSwipe direction: MGSwipeDirection, - from point: CGPoint) -> Bool { - return true - } - - func swipeTableCellWillBeginSwiping(_ cell: MGSwipeTableCell) { // Determine number of orphans if album deleted DispatchQueue.global(qos: .userInteractive).async { [unowned self] in self.nbOrphans = Int64.min @@ -169,47 +147,40 @@ extension AlbumCollectionViewCell: MGSwipeTableCellDelegate self.nbOrphans = nbOrphans } failure: { _ in } } - } - - func swipeTableCell(_ cell: MGSwipeTableCell, swipeButtonsFor direction: MGSwipeDirection, swipeSettings: MGSwipeSettings, expansionSettings: MGSwipeExpansionSettings) -> [UIView]? - { - guard let albumData = albumData else { return nil } - - // Only admins can rename, move and delete albums - if !(user?.hasAdminRights ?? false) { return nil } - - // Settings - cell.swipeBackgroundColor = UIColor.piwigoColorOrange() - swipeSettings.transition = .border - // Right => Left swipe - if direction == .rightToLeft { - let trash = MGSwipeButton(title: "", icon: UIImage(named: "swipeTrash.png"), - backgroundColor: UIColor.red, callback: { [self] sender in - deleteCategory() - return false - }) - let move = MGSwipeButton(title: "", icon: UIImage(named: "swipeMove.png"), - backgroundColor: UIColor.piwigoColorBrown(), callback: { [self] sender in - moveCategory() - return false - }) - let rename = MGSwipeButton(title: "", icon: UIImage(named: "swipeRename.png"), - backgroundColor: UIColor.piwigoColorOrange(), callback: { [self] sender in - renameCategory() - return false - }) + // Album deletion + let trash = UIContextualAction(style: .normal, title: nil, + handler: { _, _, completionHandler in + self.deleteCategory(completion: completionHandler) + }) + trash.backgroundColor = .red + trash.image = UIImage(named: "swipeTrash.png") + + // Album move + let move = UIContextualAction(style: .normal, title: nil, + handler: { action, view, completionHandler in + self.moveCategory() + completionHandler(true) + }) + move.backgroundColor = .piwigoColorBrown() + move.image = UIImage(named: "swipeMove.png") + + // Album renaming + let rename = UIContextualAction(style: .normal, title: nil, + handler: { action, view, completionHandler in + self.renameCategory(completion: completionHandler) + }) + rename.backgroundColor = .piwigoColorOrange() + rename.image = UIImage(named: "swipeRename.png") - // Disallow user to delete the active auto-upload destination album - if (UploadVars.autoUploadCategoryId == Int(albumData.pwgID)), - UploadVars.isAutoUploadActive { - return [move, rename] - } else { - expansionSettings.buttonIndex = 0 - return [trash, move, rename] - } + // Disallow user to delete the active auto-upload destination album + guard let albumData = albumData else { return nil } + if (UploadVars.autoUploadCategoryId == Int(albumData.pwgID)), + UploadVars.isAutoUploadActive { + return UISwipeActionsConfiguration(actions: [move, rename]) + } else { + return UISwipeActionsConfiguration(actions: [trash, move, rename]) } - return nil } } diff --git a/piwigo/Album/Cells/AlbumTableViewCell.swift b/piwigo/Album/Cells/AlbumTableViewCell.swift index f4308b73e..31938519f 100644 --- a/piwigo/Album/Cells/AlbumTableViewCell.swift +++ b/piwigo/Album/Cells/AlbumTableViewCell.swift @@ -11,7 +11,7 @@ import UIKit import piwigoKit -class AlbumTableViewCell: MGSwipeTableCell { +class AlbumTableViewCell: UITableViewCell { @IBOutlet weak var backgroundImage: UIImageView! @IBOutlet weak var topCut: UIButton! diff --git a/piwigo/Album/Extensions/AlbumViewController+DataSource.swift b/piwigo/Album/Extensions/AlbumViewController+DataSource.swift index 14dafaa16..708f5c093 100644 --- a/piwigo/Album/Extensions/AlbumViewController+DataSource.swift +++ b/piwigo/Album/Extensions/AlbumViewController+DataSource.swift @@ -66,7 +66,7 @@ extension AlbumViewController // ► Remove non-fetched images from album self.removeImageWithIDs(oldImageIds) // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) + AlbumVars.shared.isFetchingAlbumData = false completion() return } @@ -85,7 +85,7 @@ extension AlbumViewController DispatchQueue.main.async { [self] in // Done fetching album data // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) + AlbumVars.shared.isFetchingAlbumData = false completion() self.showError(error) @@ -158,7 +158,7 @@ extension AlbumViewController // ► Remove non-fetched images from album removeImageWithIDs(imageIds) // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) + AlbumVars.shared.isFetchingAlbumData = false // ► Delete orphaned images in the background imageProvider.purgeOrphans() @@ -170,7 +170,7 @@ extension AlbumViewController DispatchQueue.main.async { [self] in // Done fetching images // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) + AlbumVars.shared.isFetchingAlbumData = false completion() self.showError(error) @@ -262,7 +262,7 @@ extension AlbumViewController // Check that an album of favorites exists in cache (create it if necessary) guard let album = self.albumProvider.getAlbum(withId: pwgSmartAlbum.favorites.rawValue) else { // Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) + AlbumVars.shared.isFetchingAlbumData = false return } if album.isFault { @@ -294,7 +294,7 @@ extension AlbumViewController // Any error? if error != nil { // Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) + AlbumVars.shared.isFetchingAlbumData = false return } @@ -329,7 +329,7 @@ extension AlbumViewController // ► Remember when favorites were fetched album.dateGetImages = Date() // ► Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) + AlbumVars.shared.isFetchingAlbumData = false // Save changes do { @@ -340,7 +340,7 @@ extension AlbumViewController } catch let error as NSError { // Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) + AlbumVars.shared.isFetchingAlbumData = false print("Could not fetch \(error), \(error.userInfo)") } } diff --git a/piwigo/Resources/Bridging-Header.h b/piwigo/Resources/Bridging-Header.h index 6ef0e6abb..61b71c755 100644 --- a/piwigo/Resources/Bridging-Header.h +++ b/piwigo/Resources/Bridging-Header.h @@ -4,4 +4,3 @@ #import #import -#import diff --git a/piwigo/Resources/Prefix.pch b/piwigo/Resources/Prefix.pch index 8f05ea1f0..b83149677 100644 --- a/piwigo/Resources/Prefix.pch +++ b/piwigo/Resources/Prefix.pch @@ -19,11 +19,6 @@ // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. #ifdef __OBJC__ - #import - #import - #import "MGSwipeTableCell.h" - #import "MGSwipeButton.h" - #import "piwigo-Swift.h" #endif diff --git a/piwigo/Resources/ar.lproj/About.strings b/piwigo/Resources/ar.lproj/About.strings index 662d2fcc1..38bf790c3 100644 --- a/piwigo/Resources/ar.lproj/About.strings +++ b/piwigo/Resources/ar.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nرخصة MIT (ميت)\n\nحقوق الطبع والنشر © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nرخصة MIT (ميت)\n\nحقوق الطبع والنشر © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "رخصة MIT (ميت)\n\nيتم منح الإذن، مجانا، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به (\"البرنامج\")، للتعامل في البرنامج دون قيود، بما في ذلك حقوق استخدام بدون حدود ،النسخ والتعديل والدمج أو النشر أو التوزيع أو ترخيص و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يتم توفير البرامج لهم بذلك، مع مراعاة الشروط التالية:\nيجب تضمين إشعار حقوق الطبع والنشر المذكور أعلاه وإشعار الإذن هذا في جميع النسخ أو أجزاء كبيرة من البرنامج.\n\nفالبرنامج مجهز \"كما هو\"، دون ضمان من أي نوع، صريحة أو ضمنية، بما في ذلك وبدون حدود ضمانات الرواج، والملائمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال المؤلفون أو أصحاب حقوق الطبع والنشر تكون مسؤولة عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في أي إجراء من العقود أو الضرر أو غير ذلك، الناشئة عن، أو خارج أو فيما يتعلق بالبرنامج أو استخدام أو غيرها من المعاملات في البرمجيات."; diff --git a/piwigo/Resources/da.lproj/About.strings b/piwigo/Resources/da.lproj/About.strings index fe3889bf9..d3ee4295a 100644 --- a/piwigo/Resources/da.lproj/About.strings +++ b/piwigo/Resources/da.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/de.lproj/About.strings b/piwigo/Resources/de.lproj/About.strings index e03ff3a91..d217031c6 100644 --- a/piwigo/Resources/de.lproj/About.strings +++ b/piwigo/Resources/de.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nMIT Lizenz (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nMIT Lizenz (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "MIT-Lizenz (MIT)\n\nHiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, sie zu verwenden, zu kopieren, zu verändern, zusammenzufügen, zu veröffentlichen, zu verbreiten, zu unterlizenzieren und/oder zu verkaufen, und Personen, denen diese Software überlassen wird, diese Rechte zu verschaffen, unter den folgenden Bedingungen:\n\nDer obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.\n\nDIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIEẞLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN."; diff --git a/piwigo/Resources/en.lproj/About.strings b/piwigo/Resources/en.lproj/About.strings index 3f3362ef0..5b9807153 100644 --- a/piwigo/Resources/en.lproj/About.strings +++ b/piwigo/Resources/en.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/es.lproj/About.strings b/piwigo/Resources/es.lproj/About.strings index 11f4831d9..4a55ca608 100644 --- a/piwigo/Resources/es.lproj/About.strings +++ b/piwigo/Resources/es.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nLicencia MIT (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nLicencia MIT (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "Licencia MIT (MIT)\nPor la presente, se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el \"Software\"), para negociar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión, publicación, distribución, sublicencia y/o venta de copias del Software, y para permitir a las personas a quienes se les proporciona el Software que lo hagan, sujeto a las siguientes condiciones:\n\nEl aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.\n\nEL SOFTWARE SE PROPORCIONA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, EXPLÍCITA O IMPLÍCITA, INCLUYENDO PERO SIN LIMITARSE A LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD PARA UN PROPÓSITO Y NO INFRACCIÓN PARTICULARES. EN NINGÚN CASO, LOS AUTORES O LOS TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN ACCIÓN DE CONTRATO, DERIVADA DE, FUERA DE, O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTROS TRATAMIENTOS EN EL SOFTWARE."; diff --git a/piwigo/Resources/fr.lproj/About.strings b/piwigo/Resources/fr.lproj/About.strings index 9258e4ff6..e8ab9a94e 100644 --- a/piwigo/Resources/fr.lproj/About.strings +++ b/piwigo/Resources/fr.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/hu.lproj/About.strings b/piwigo/Resources/hu.lproj/About.strings index 05fc85a23..8a50ff4fb 100644 --- a/piwigo/Resources/hu.lproj/About.strings +++ b/piwigo/Resources/hu.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/id.lproj/About.strings b/piwigo/Resources/id.lproj/About.strings index ee587134b..5c7447698 100644 --- a/piwigo/Resources/id.lproj/About.strings +++ b/piwigo/Resources/id.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/it.lproj/About.strings b/piwigo/Resources/it.lproj/About.strings index d7d40755a..5bef240ab 100644 --- a/piwigo/Resources/it.lproj/About.strings +++ b/piwigo/Resources/it.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "La licenza MIT (MIT)\nL'autorizzazione è concessa, a titolo gratuito, a chiunque ottenga una copia di questo software e dei relativi file di documentazione (il \"Software\"), per trattare il Software senza restrizioni, inclusi senza limitazione i diritti di utilizzo, copia, modifica, fusione, pubblicare, distribuire, concedere in licenza e/o vendere copie del Software e consentire alle persone a cui è fornito il Software di farlo, fatte salve le seguenti condizioni:\n\nLa suddetta nota sul copyright e questa nota di autorizzazione devono essere incluse in tutte le copie o parti sostanziali del Software.\n\nIL SOFTWARE VIENE FORNITO \"COSÌ COM'È\", SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, INCLUSE, A TITOLO ESEMPLIFICATIVO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I DETENTORI DEL COPYRIGHT SARANNO RITENUTI RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRO RESPONSABILITÀ, SIA IN UN ATTO DI CONTRATTO, TORT O ALTRO, DERIVANTE DA, FUORI O IN RELAZIONE AL SOFTWARE O ALL'UTILIZZO O ALTRI CONTRATTI NELL'AMBITO DEL SOFTWARE."; diff --git a/piwigo/Resources/ja.lproj/About.strings b/piwigo/Resources/ja.lproj/About.strings index 0dfff31b4..ead40ea76 100644 --- a/piwigo/Resources/ja.lproj/About.strings +++ b/piwigo/Resources/ja.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nマサチューセッツ工科大学ライセンス (MIT)\n\n著作権 © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nマサチューセッツ工科大学ライセンス (MIT)\n\n著作権 © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "マサチューセッツ工科大学ライセンス (MIT)\n\n以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル (以下「ソフトウェア」) の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。\n\n上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。\n\nソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。 作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。"; diff --git a/piwigo/Resources/nl.lproj/About.strings b/piwigo/Resources/nl.lproj/About.strings index 15f142a19..a5b15855b 100644 --- a/piwigo/Resources/nl.lproj/About.strings +++ b/piwigo/Resources/nl.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nDe MIT Licensie ‎(MIT‎)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nDe MIT Licensie ‎(MIT‎)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n________________________________________\n\nDe MIT-licentie (MIT)\n\nToestemming wordt hierbij gratis verleend aan een persoon die een exemplaar van deze software en bijbehorende documentatiebestanden (de \"Software\") verkrijgt om zonder beperkingen in de Software te handelen, inclusief maar niet beperkt tot de rechten om te gebruiken, kopiëren, wijzigen, samenvoegen, kopieën van de Software publiceren, distribueren, in sublicentie geven en / of verkopen en personen aan wie de Software is geleverd dit toestaan, onder de volgende voorwaarden:\n\nDe bovenstaande copyrightkennisgeving en deze toestemmingsverklaring moeten worden opgenomen in alle kopieën of substantiële delen van de Software.\n\nDE SOFTWARE WORDT GELEVERD \"ZOALS DEZE IS\", ZONDER ENIGE VORM VAN GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUKMAKENDHEID. IN GEEN GEVAL KUNNEN DE AUTEURS OF COPYRIGHTHOUDERS AANSPRAKELIJK WORDEN GESTELD VOOR CLAIMS, SCHADE OF ANDERE AANSPRAKELIJKHEID, HETZIJ BIJ EEN ACTIE VAN CONTRACT, ONRECHTMATIGE DAAD OF ANDERSZINS, VOORTVLOEIEND UIT, IN OF MET BETREKKING TOT DE SOFTWARE OF HET GEBRUIK OF ANDERE HANDELINGEN IN DE SOFTWARE."; diff --git a/piwigo/Resources/pl.lproj/About.strings b/piwigo/Resources/pl.lproj/About.strings index 4e49f62b9..3a6df06ea 100644 --- a/piwigo/Resources/pl.lproj/About.strings +++ b/piwigo/Resources/pl.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/ru.lproj/About.strings b/piwigo/Resources/ru.lproj/About.strings index 0a8a7581b..91283df0c 100644 --- a/piwigo/Resources/ru.lproj/About.strings +++ b/piwigo/Resources/ru.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nЛицензия MIT (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nЛицензия MIT (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "Лицензия MIT (MIT)\nнастоящим предоставляется бесплатно, любому лицу, получающему копию этого программного обеспечения и соответствующие файлы документации (\"Программное обеспечение\"), для работы в Программном обеспечении без ограничений, в том числе без ограничения прав на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения и позволяет лицам, которым передано Программное Обеспечение, делать перечисленное, с учетом следующих условий:\n\nУведомление об авторских правах и это уведомление о разрешении будут включены во все копии или существенные части Программного обеспечения.\n\nПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ \"КАК ЕСТЬ\", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИИ ПРОДАЖИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ И НЕОФИЦИАЛЬНЫХ ЦЕЛЕЙ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОСЛЕДСТВИЯ, КОТОРЫЕ ВОЗНИКНУТ В ОТНОШЕНИИ КОНТРАКТОВ ИЛИ ДРУГИХ ОБСТОЯТЕЛЬСТВ, ВОЗНИКАЮЩИХ В СВЯЗИ С ПРИМЕНЕНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ УСТРОЙСТВ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ."; diff --git a/piwigo/Resources/sv.lproj/About.strings b/piwigo/Resources/sv.lproj/About.strings index cff5acddf..1d489fa96 100644 --- a/piwigo/Resources/sv.lproj/About.strings +++ b/piwigo/Resources/sv.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/zh-Hans.lproj/About.strings b/piwigo/Resources/zh-Hans.lproj/About.strings index 72757c003..44550fde4 100644 --- a/piwigo/Resources/zh-Hans.lproj/About.strings +++ b/piwigo/Resources/zh-Hans.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\n\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro\n________________________________________\n\n"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Resources/zh-Hant.lproj/About.strings b/piwigo/Resources/zh-Hant.lproj/About.strings index 3111d4a34..85c8d7ea9 100644 --- a/piwigo/Resources/zh-Hant.lproj/About.strings +++ b/piwigo/Resources/zh-Hant.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/ar.lproj/About.strings b/piwigo/Settings.bundle/ar.lproj/About.strings index 662d2fcc1..38bf790c3 100644 --- a/piwigo/Settings.bundle/ar.lproj/About.strings +++ b/piwigo/Settings.bundle/ar.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nرخصة MIT (ميت)\n\nحقوق الطبع والنشر © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nرخصة MIT (ميت)\n\nحقوق الطبع والنشر © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "رخصة MIT (ميت)\n\nيتم منح الإذن، مجانا، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به (\"البرنامج\")، للتعامل في البرنامج دون قيود، بما في ذلك حقوق استخدام بدون حدود ،النسخ والتعديل والدمج أو النشر أو التوزيع أو ترخيص و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يتم توفير البرامج لهم بذلك، مع مراعاة الشروط التالية:\nيجب تضمين إشعار حقوق الطبع والنشر المذكور أعلاه وإشعار الإذن هذا في جميع النسخ أو أجزاء كبيرة من البرنامج.\n\nفالبرنامج مجهز \"كما هو\"، دون ضمان من أي نوع، صريحة أو ضمنية، بما في ذلك وبدون حدود ضمانات الرواج، والملائمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال المؤلفون أو أصحاب حقوق الطبع والنشر تكون مسؤولة عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في أي إجراء من العقود أو الضرر أو غير ذلك، الناشئة عن، أو خارج أو فيما يتعلق بالبرنامج أو استخدام أو غيرها من المعاملات في البرمجيات."; diff --git a/piwigo/Settings.bundle/da.lproj/About.strings b/piwigo/Settings.bundle/da.lproj/About.strings index fe3889bf9..d3ee4295a 100644 --- a/piwigo/Settings.bundle/da.lproj/About.strings +++ b/piwigo/Settings.bundle/da.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/de.lproj/About.strings b/piwigo/Settings.bundle/de.lproj/About.strings index e03ff3a91..d217031c6 100644 --- a/piwigo/Settings.bundle/de.lproj/About.strings +++ b/piwigo/Settings.bundle/de.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nMIT Lizenz (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nMIT Lizenz (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "MIT-Lizenz (MIT)\n\nHiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, sie zu verwenden, zu kopieren, zu verändern, zusammenzufügen, zu veröffentlichen, zu verbreiten, zu unterlizenzieren und/oder zu verkaufen, und Personen, denen diese Software überlassen wird, diese Rechte zu verschaffen, unter den folgenden Bedingungen:\n\nDer obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.\n\nDIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIEẞLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN."; diff --git a/piwigo/Settings.bundle/en.lproj/About.strings b/piwigo/Settings.bundle/en.lproj/About.strings index 3f3362ef0..5b9807153 100644 --- a/piwigo/Settings.bundle/en.lproj/About.strings +++ b/piwigo/Settings.bundle/en.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/es.lproj/About.strings b/piwigo/Settings.bundle/es.lproj/About.strings index 11f4831d9..4a55ca608 100644 --- a/piwigo/Settings.bundle/es.lproj/About.strings +++ b/piwigo/Settings.bundle/es.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nLicencia MIT (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nLicencia MIT (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "Licencia MIT (MIT)\nPor la presente, se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el \"Software\"), para negociar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión, publicación, distribución, sublicencia y/o venta de copias del Software, y para permitir a las personas a quienes se les proporciona el Software que lo hagan, sujeto a las siguientes condiciones:\n\nEl aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.\n\nEL SOFTWARE SE PROPORCIONA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, EXPLÍCITA O IMPLÍCITA, INCLUYENDO PERO SIN LIMITARSE A LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD PARA UN PROPÓSITO Y NO INFRACCIÓN PARTICULARES. EN NINGÚN CASO, LOS AUTORES O LOS TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN ACCIÓN DE CONTRATO, DERIVADA DE, FUERA DE, O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTROS TRATAMIENTOS EN EL SOFTWARE."; diff --git a/piwigo/Settings.bundle/fr.lproj/About.strings b/piwigo/Settings.bundle/fr.lproj/About.strings index 9258e4ff6..e8ab9a94e 100644 --- a/piwigo/Settings.bundle/fr.lproj/About.strings +++ b/piwigo/Settings.bundle/fr.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/hu.lproj/About.strings b/piwigo/Settings.bundle/hu.lproj/About.strings index 05fc85a23..8a50ff4fb 100644 --- a/piwigo/Settings.bundle/hu.lproj/About.strings +++ b/piwigo/Settings.bundle/hu.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/id.lproj/About.strings b/piwigo/Settings.bundle/id.lproj/About.strings index ee587134b..5c7447698 100644 --- a/piwigo/Settings.bundle/id.lproj/About.strings +++ b/piwigo/Settings.bundle/id.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/it.lproj/About.strings b/piwigo/Settings.bundle/it.lproj/About.strings index d7d40755a..5bef240ab 100644 --- a/piwigo/Settings.bundle/it.lproj/About.strings +++ b/piwigo/Settings.bundle/it.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "La licenza MIT (MIT)\nL'autorizzazione è concessa, a titolo gratuito, a chiunque ottenga una copia di questo software e dei relativi file di documentazione (il \"Software\"), per trattare il Software senza restrizioni, inclusi senza limitazione i diritti di utilizzo, copia, modifica, fusione, pubblicare, distribuire, concedere in licenza e/o vendere copie del Software e consentire alle persone a cui è fornito il Software di farlo, fatte salve le seguenti condizioni:\n\nLa suddetta nota sul copyright e questa nota di autorizzazione devono essere incluse in tutte le copie o parti sostanziali del Software.\n\nIL SOFTWARE VIENE FORNITO \"COSÌ COM'È\", SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, INCLUSE, A TITOLO ESEMPLIFICATIVO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I DETENTORI DEL COPYRIGHT SARANNO RITENUTI RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRO RESPONSABILITÀ, SIA IN UN ATTO DI CONTRATTO, TORT O ALTRO, DERIVANTE DA, FUORI O IN RELAZIONE AL SOFTWARE O ALL'UTILIZZO O ALTRI CONTRATTI NELL'AMBITO DEL SOFTWARE."; diff --git a/piwigo/Settings.bundle/ja.lproj/About.strings b/piwigo/Settings.bundle/ja.lproj/About.strings index 0dfff31b4..ead40ea76 100644 --- a/piwigo/Settings.bundle/ja.lproj/About.strings +++ b/piwigo/Settings.bundle/ja.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nマサチューセッツ工科大学ライセンス (MIT)\n\n著作権 © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nマサチューセッツ工科大学ライセンス (MIT)\n\n著作権 © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "マサチューセッツ工科大学ライセンス (MIT)\n\n以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル (以下「ソフトウェア」) の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。\n\n上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。\n\nソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。 作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。"; diff --git a/piwigo/Settings.bundle/nl.lproj/About.strings b/piwigo/Settings.bundle/nl.lproj/About.strings index 15f142a19..a5b15855b 100644 --- a/piwigo/Settings.bundle/nl.lproj/About.strings +++ b/piwigo/Settings.bundle/nl.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nDe MIT Licensie ‎(MIT‎)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nDe MIT Licensie ‎(MIT‎)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n________________________________________\n\nDe MIT-licentie (MIT)\n\nToestemming wordt hierbij gratis verleend aan een persoon die een exemplaar van deze software en bijbehorende documentatiebestanden (de \"Software\") verkrijgt om zonder beperkingen in de Software te handelen, inclusief maar niet beperkt tot de rechten om te gebruiken, kopiëren, wijzigen, samenvoegen, kopieën van de Software publiceren, distribueren, in sublicentie geven en / of verkopen en personen aan wie de Software is geleverd dit toestaan, onder de volgende voorwaarden:\n\nDe bovenstaande copyrightkennisgeving en deze toestemmingsverklaring moeten worden opgenomen in alle kopieën of substantiële delen van de Software.\n\nDE SOFTWARE WORDT GELEVERD \"ZOALS DEZE IS\", ZONDER ENIGE VORM VAN GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUKMAKENDHEID. IN GEEN GEVAL KUNNEN DE AUTEURS OF COPYRIGHTHOUDERS AANSPRAKELIJK WORDEN GESTELD VOOR CLAIMS, SCHADE OF ANDERE AANSPRAKELIJKHEID, HETZIJ BIJ EEN ACTIE VAN CONTRACT, ONRECHTMATIGE DAAD OF ANDERSZINS, VOORTVLOEIEND UIT, IN OF MET BETREKKING TOT DE SOFTWARE OF HET GEBRUIK OF ANDERE HANDELINGEN IN DE SOFTWARE."; diff --git a/piwigo/Settings.bundle/pl.lproj/About.strings b/piwigo/Settings.bundle/pl.lproj/About.strings index 4e49f62b9..3a6df06ea 100644 --- a/piwigo/Settings.bundle/pl.lproj/About.strings +++ b/piwigo/Settings.bundle/pl.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/ru.lproj/About.strings b/piwigo/Settings.bundle/ru.lproj/About.strings index 0a8a7581b..91283df0c 100644 --- a/piwigo/Settings.bundle/ru.lproj/About.strings +++ b/piwigo/Settings.bundle/ru.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nЛицензия MIT (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nЛицензия MIT (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "Лицензия MIT (MIT)\nнастоящим предоставляется бесплатно, любому лицу, получающему копию этого программного обеспечения и соответствующие файлы документации (\"Программное обеспечение\"), для работы в Программном обеспечении без ограничений, в том числе без ограничения прав на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения и позволяет лицам, которым передано Программное Обеспечение, делать перечисленное, с учетом следующих условий:\n\nУведомление об авторских правах и это уведомление о разрешении будут включены во все копии или существенные части Программного обеспечения.\n\nПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ \"КАК ЕСТЬ\", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИИ ПРОДАЖИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ И НЕОФИЦИАЛЬНЫХ ЦЕЛЕЙ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОСЛЕДСТВИЯ, КОТОРЫЕ ВОЗНИКНУТ В ОТНОШЕНИИ КОНТРАКТОВ ИЛИ ДРУГИХ ОБСТОЯТЕЛЬСТВ, ВОЗНИКАЮЩИХ В СВЯЗИ С ПРИМЕНЕНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ УСТРОЙСТВ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ."; diff --git a/piwigo/Settings.bundle/sv.lproj/About.strings b/piwigo/Settings.bundle/sv.lproj/About.strings index cff5acddf..1d489fa96 100644 --- a/piwigo/Settings.bundle/sv.lproj/About.strings +++ b/piwigo/Settings.bundle/sv.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/zh-Hans.lproj/About.strings b/piwigo/Settings.bundle/zh-Hans.lproj/About.strings index 72757c003..44550fde4 100644 --- a/piwigo/Settings.bundle/zh-Hans.lproj/About.strings +++ b/piwigo/Settings.bundle/zh-Hans.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\n\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro\n________________________________________\n\n"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings.bundle/zh-Hant.lproj/About.strings b/piwigo/Settings.bundle/zh-Hant.lproj/About.strings index 3111d4a34..85c8d7ea9 100644 --- a/piwigo/Settings.bundle/zh-Hant.lproj/About.strings +++ b/piwigo/Settings.bundle/zh-Hant.lproj/About.strings @@ -18,6 +18,4 @@ "licenceMBProgHUD_text" = "MBProgressHUD\nThe MIT License (MIT)\n\nCopyright © 2009-2016 Matej Bukovinski"; -"licenceMGSTC_text" = "MGSwipeTableCell\nThe MIT License (MIT)\n\nCopyright © 2016 Imanol Fernandez @MortimerGoro"; - "licenceMIT_text" = "The MIT License (MIT)\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."; diff --git a/piwigo/Settings/Information/AboutViewController.swift b/piwigo/Settings/Information/AboutViewController.swift index f958f7cf1..2c5d0db5a 100644 --- a/piwigo/Settings/Information/AboutViewController.swift +++ b/piwigo/Settings/Information/AboutViewController.swift @@ -194,16 +194,6 @@ class AboutViewController: UIViewController, UITextViewDelegate { aboutAttributedString.append(mbpHudAttributedString) aboutAttributedString.append(spacerAttributedString) - // MGSwipeTableCell Licence — Bundle string - let mgstcString = NSLocalizedString("licenceMGSTC_text", tableName: "About", bundle: Bundle.main, value: "", comment: "MGSwipeTableCell licence text") - let mgstcAttributedString = NSMutableAttributedString(string: mgstcString) - var mgstcRange = NSRange(location: 0, length: mgstcString.count) - mgstcAttributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 13), range: mgstcRange) - mgstcRange = NSRange(location: 0, length: (mgstcString as NSString).range(of: "\n").location) - mgstcAttributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 17, weight: .bold), range: mgstcRange) - aboutAttributedString.append(mgstcAttributedString) - aboutAttributedString.append(spacerAttributedString) - // MIT Licence — Bundle string let mitString = NSLocalizedString("licenceMIT_text", tableName: "About", bundle: Bundle.main, value: "", comment: "AFNetworking licence text") let mitAttributedString = NSMutableAttributedString(string: mitString) diff --git a/piwigo/Upload/Upload Queue/UploadImageTableViewCell.swift b/piwigo/Upload/Upload Queue/UploadImageTableViewCell.swift index 1dbf32cd3..de425e83d 100644 --- a/piwigo/Upload/Upload Queue/UploadImageTableViewCell.swift +++ b/piwigo/Upload/Upload Queue/UploadImageTableViewCell.swift @@ -6,15 +6,17 @@ // Copyright © 2020 Piwigo.org. All rights reserved. // +import CoreData import Photos import UIKit import piwigoKit import uploadKit -class UploadImageTableViewCell: MGSwipeTableCell { +class UploadImageTableViewCell: UITableViewCell { // MARK: - Variables var localIdentifier = "" + var objectID: NSManagedObjectID? = nil private let imagePlaceholder = UIImage(named: "placeholder")! private let offset: CGFloat = 1.0 private let playScale: CGFloat = 0.20 @@ -36,6 +38,7 @@ class UploadImageTableViewCell: MGSwipeTableCell { // Background color and aspect backgroundColor = .piwigoColorCellBackground() localIdentifier = upload.localIdentifier + objectID = upload.objectID // Upload info label uploadInfoLabel.textColor = .piwigoColorLeftLabel() @@ -53,68 +56,6 @@ class UploadImageTableViewCell: MGSwipeTableCell { break } - // Right => Left swipe commands - swipeBackgroundColor = .piwigoColorCellBackground() - rightExpansion.buttonIndex = 0 - rightExpansion.threshold = 3.0 - rightExpansion.fillOnTrigger = true - rightExpansion.expansionColor = .piwigoColorBrown() - rightSwipeSettings.transition = .border - switch upload.state { - case .preparing, .prepared, .uploading, .uploaded, .finishing: - rightButtons = [ - MGSwipeButton(title: "", icon: UIImage(named: "swipeRetry.png"), backgroundColor: .piwigoColorOrange(), callback: { sender in - UploadManager.shared.backgroundQueue.async { - UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) - UploadManager.shared.findNextImageToUpload() - } - return true - })] - case .preparingError, .uploadingError, .finishingError: - rightButtons = [ - MGSwipeButton(title: "", icon: UIImage(named: "swipeRetry.png"), backgroundColor: .piwigoColorOrange(), callback: { sender in - UploadManager.shared.backgroundQueue.async { - UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) - UploadManager.shared.findNextImageToUpload() - } - return true - }), - MGSwipeButton(title: "", icon: UIImage(named: "swipeCancel.png"), backgroundColor: .piwigoColorBrown(), callback: { sender in - let savingContext = upload.managedObjectContext - savingContext?.delete(upload) - try? savingContext?.save() - UploadManager.shared.backgroundQueue.async { - UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) - UploadManager.shared.findNextImageToUpload() - } - return true - })] - case .waiting: - rightButtons = [ - MGSwipeButton(title: "", icon: UIImage(named: "swipeCancel.png"), backgroundColor: .piwigoColorBrown(), callback: { sender in - let savingContext = upload.managedObjectContext - savingContext?.delete(upload) - try? savingContext?.save() - UploadManager.shared.backgroundQueue.async { - UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) - UploadManager.shared.findNextImageToUpload() - } - return true - })] - case .preparingFail, .formatError, .uploadingFail, .finishingFail, .finished, .moderated: - rightButtons = [ - MGSwipeButton(title: "", icon: UIImage(named: "swipeTrashSmall.png"), backgroundColor: .red, callback: { sender in - let savingContext = upload.managedObjectContext - savingContext?.delete(upload) - try? savingContext?.save() - UploadManager.shared.backgroundQueue.async { - UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) - UploadManager.shared.findNextImageToUpload() - } - return true - })] - } - // Image info label imageInfoLabel.textColor = .piwigoColorRightLabel() diff --git a/piwigo/Upload/Upload Queue/UploadQueueViewController.swift b/piwigo/Upload/Upload Queue/UploadQueueViewController.swift index b876e7185..d4182ace7 100644 --- a/piwigo/Upload/Upload Queue/UploadQueueViewController.swift +++ b/piwigo/Upload/Upload Queue/UploadQueueViewController.swift @@ -175,7 +175,6 @@ class UploadQueueViewController: UIViewController, UITableViewDelegate { visibleCells.forEach { (cell) in cell.backgroundColor = .piwigoColorCellBackground() cell.uploadInfoLabel.textColor = .piwigoColorLeftLabel() - cell.swipeBackgroundColor = .piwigoColorCellBackground() cell.imageInfoLabel.textColor = .piwigoColorRightLabel() } for section in 0.. Bool { return false } + + func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { + // Retreive upload object + guard let cell = tableView.cellForRow(at: indexPath) as? UploadImageTableViewCell, + let objectID = cell.objectID, + let upload = try? self.mainContext.existingObject(with: objectID) as? Upload else { + fatalError("Managed object should be available") + } + + // Create retry upload action + let retry = UIContextualAction(style: .normal, title: nil, + handler: { action, view, completionHandler in + UploadManager.shared.backgroundQueue.async { + UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) + UploadManager.shared.findNextImageToUpload() + } + completionHandler(true) + }) + retry.backgroundColor = .piwigoColorCellBackground() + retry.image = UIImage(named: "swipeRetry.png") + + // Create trash/cancel upload action + let cancel = UIContextualAction(style: .normal, title: nil, + handler: { action, view, completionHandler in + let savingContext = upload.managedObjectContext + savingContext?.delete(upload) + try? savingContext?.save() + UploadManager.shared.backgroundQueue.async { + UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) + UploadManager.shared.findNextImageToUpload() + } + completionHandler(true) + }) + cancel.backgroundColor = .piwigoColorCellBackground() + cancel.image = UIImage(named: "swipeCancel.png") + + // Associate actions + switch upload.state { + case .preparing, .prepared, .uploading, .uploaded, .finishing: + return UISwipeActionsConfiguration(actions: [retry]) + case .preparingError, .uploadingError, .finishingError: + return UISwipeActionsConfiguration(actions: [retry, cancel]) + case .waiting, .preparingFail, .formatError, .uploadingFail, .finishingFail, .finished, .moderated: + return UISwipeActionsConfiguration(actions: [cancel]) + } + } @objc func applyUploadProgress(_ notification: Notification) { if let localIdentifier = notification.userInfo?["localIdentifier"] as? String, !localIdentifier.isEmpty , diff --git a/piwigo/Upload/Upload Queue/UploadQueueViewControllerOld.swift b/piwigo/Upload/Upload Queue/UploadQueueViewControllerOld.swift index 93ad5b9c7..13d0f7630 100644 --- a/piwigo/Upload/Upload Queue/UploadQueueViewControllerOld.swift +++ b/piwigo/Upload/Upload Queue/UploadQueueViewControllerOld.swift @@ -151,7 +151,6 @@ class UploadQueueViewControllerOld: UIViewController, UITableViewDelegate, UITab visibleCells.forEach { (cell) in cell.backgroundColor = .piwigoColorCellBackground() cell.uploadInfoLabel.textColor = .piwigoColorLeftLabel() - cell.swipeBackgroundColor = .piwigoColorCellBackground() cell.imageInfoLabel.textColor = .piwigoColorRightLabel() } for section in 0.. UISwipeActionsConfiguration? { + // Retreive upload object + guard let cell = tableView.cellForRow(at: indexPath) as? UploadImageTableViewCell, + let objectID = cell.objectID, + let upload = try? self.mainContext.existingObject(with: objectID) as? Upload else { + fatalError("Managed object should be available") + } + + // Create retry upload action + let retry = UIContextualAction(style: .normal, title: nil, + handler: { action, view, completionHandler in + UploadManager.shared.backgroundQueue.async { + UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) + UploadManager.shared.findNextImageToUpload() + } + completionHandler(true) + }) + retry.backgroundColor = .piwigoColorCellBackground() + retry.image = UIImage(named: "swipeRetry.png") + + // Create trash/cancel upload action + let cancel = UIContextualAction(style: .normal, title: nil, + handler: { action, view, completionHandler in + let savingContext = upload.managedObjectContext + savingContext?.delete(upload) + try? savingContext?.save() + UploadManager.shared.backgroundQueue.async { + UploadManager.shared.resumeFailedUpload(withID: upload.localIdentifier) + UploadManager.shared.findNextImageToUpload() + } + completionHandler(true) + }) + cancel.backgroundColor = .piwigoColorCellBackground() + cancel.image = UIImage(named: "swipeCancel.png") + + // Associate actions + switch upload.state { + case .preparing, .prepared, .uploading, .uploaded, .finishing: + return UISwipeActionsConfiguration(actions: [retry]) + case .preparingError, .uploadingError, .finishingError: + return UISwipeActionsConfiguration(actions: [retry, cancel]) + case .waiting, .preparingFail, .formatError, .uploadingFail, .finishingFail, .finished, .moderated: + return UISwipeActionsConfiguration(actions: [cancel]) + } + } + @objc func applyUploadProgress(_ notification: Notification) { if let localIdentifier = notification.userInfo?["localIdentifier"] as? String, !localIdentifier.isEmpty , let progressFraction = notification.userInfo?["progressFraction"] as? Float, From f2579cab2053550304cbbfb6918e22aa31661d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Wed, 5 Jul 2023 21:27:12 +0200 Subject: [PATCH 3/9] Fixes background colours --- .../xcschemes/MGSwipeTableCell.xcscheme | 58 ------------------- .../UploadQueueViewController.swift | 4 +- 2 files changed, 2 insertions(+), 60 deletions(-) delete mode 100644 Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/MGSwipeTableCell.xcscheme diff --git a/Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/MGSwipeTableCell.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/MGSwipeTableCell.xcscheme deleted file mode 100644 index b64fa7786..000000000 --- a/Pods/Pods.xcodeproj/xcuserdata/lelievre.xcuserdatad/xcschemes/MGSwipeTableCell.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/piwigo/Upload/Upload Queue/UploadQueueViewController.swift b/piwigo/Upload/Upload Queue/UploadQueueViewController.swift index d4182ace7..a883b535c 100644 --- a/piwigo/Upload/Upload Queue/UploadQueueViewController.swift +++ b/piwigo/Upload/Upload Queue/UploadQueueViewController.swift @@ -385,7 +385,7 @@ class UploadQueueViewController: UIViewController, UITableViewDelegate { } completionHandler(true) }) - retry.backgroundColor = .piwigoColorCellBackground() + retry.backgroundColor = .piwigoColorBrown() retry.image = UIImage(named: "swipeRetry.png") // Create trash/cancel upload action @@ -400,7 +400,7 @@ class UploadQueueViewController: UIViewController, UITableViewDelegate { } completionHandler(true) }) - cancel.backgroundColor = .piwigoColorCellBackground() + cancel.backgroundColor = .red cancel.image = UIImage(named: "swipeCancel.png") // Associate actions From 824837688b2fb96a9cc7a91380047fd67db0fb56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Wed, 5 Jul 2023 21:29:10 +0200 Subject: [PATCH 4/9] Fixes minimum SDK --- Pods/Pods.xcodeproj/project.pbxproj | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 75f79dd7a..90a09227a 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -94,10 +94,10 @@ 7D36D142ABB8142E69610363E35D671B /* Pods-piwigo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-piwigo-dummy.m"; sourceTree = ""; }; 821AB3B2313E369895DBBFFD938B9C51 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; 83553BDA9E0BD9EF2758D0689EE530DF /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQUIViewController+Additions.swift"; path = "IQKeyboardManagerSwift/Categories/IQUIViewController+Additions.swift"; sourceTree = ""; }; - 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = MBProgressHUD; path = libMBProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B8FAB0D627B17EDE1366984278705D9 /* libMBProgressHUD.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMBProgressHUD.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8C9D0A0BCE2014393A0DF473FDA6ABEB /* Pods-piwigo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-piwigo.modulemap"; sourceTree = ""; }; 8E602B14BAB7A9B0D036A4DE157650D6 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; A487CC12250D710A6B5E7E7237F70139 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; A7194057BE1319F1A8B57E0F16952DCD /* IQKeyboardManager+OrientationNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+OrientationNotification.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager+OrientationNotification.swift"; sourceTree = ""; }; A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = IQKeyboardManagerSwift; path = libIQKeyboardManagerSwift.a; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -171,7 +171,6 @@ 6A693A5A43498D9E2951B5A85E5AE4A0 /* MBProgressHUD.m */, CD997032152231D4DF5B35A2D7599ED8 /* Support Files */, ); - name = MBProgressHUD; path = MBProgressHUD; sourceTree = ""; }; @@ -227,7 +226,6 @@ 83553BDA9E0BD9EF2758D0689EE530DF /* IQUIViewController+Additions.swift */, AD31BCB79E80C55E21FFE1C2DC7361C1 /* Support Files */, ); - name = IQKeyboardManagerSwift; path = IQKeyboardManagerSwift; sourceTree = ""; }; @@ -249,7 +247,7 @@ isa = PBXGroup; children = ( A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */, - 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */, + 8B8FAB0D627B17EDE1366984278705D9 /* libMBProgressHUD.a */, B9DFC8964BAADB81C132F25C0C6CE40C /* Pods-piwigo */, 5706E84C9AE0B10A0BB3C1DDAB1AA291 /* Pods-piwigoAppStore */, ); @@ -383,7 +381,7 @@ ); name = MBProgressHUD; productName = MBProgressHUD; - productReference = 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */; + productReference = 8B8FAB0D627B17EDE1366984278705D9 /* libMBProgressHUD.a */; productType = "com.apple.product-type.library.static"; }; B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */ = { @@ -770,7 +768,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; @@ -840,7 +838,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; From d95370efcb8599b6182e16753cf58239c994e666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Wed, 5 Jul 2023 21:54:22 +0200 Subject: [PATCH 5/9] Puts back isFetchingAlbumData as Set() --- piwigo/Album/AlbumVars.swift | 2 +- piwigo/Album/AlbumViewController.swift | 12 ++++++------ .../AlbumViewController+DataSource.swift | 16 ++++++++-------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/piwigo/Album/AlbumVars.swift b/piwigo/Album/AlbumVars.swift index d3231d668..d0af4406b 100644 --- a/piwigo/Album/AlbumVars.swift +++ b/piwigo/Album/AlbumVars.swift @@ -83,5 +83,5 @@ class AlbumVars: NSObject { // MARK: - Vars in Memory // Album variables kept in memory /// - To remember which album data is being fetched - var isFetchingAlbumData = false + var isFetchingAlbumData = Set() } diff --git a/piwigo/Album/AlbumViewController.swift b/piwigo/Album/AlbumViewController.swift index dbc815ca4..341340d49 100644 --- a/piwigo/Album/AlbumViewController.swift +++ b/piwigo/Album/AlbumViewController.swift @@ -562,8 +562,8 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect let noSmartAlbumData = (self.categoryId < 0) && (nbImages == 0) let expectedNbImages = self.albumData.nbImages let missingImages = (expectedNbImages > 0) && (nbImages < expectedNbImages / 2) - if AlbumVars.shared.isFetchingAlbumData == false, - noSmartAlbumData || missingImages || lastLoad.timeIntervalSinceNow < TimeInterval(-86400) { + if AlbumVars.shared.isFetchingAlbumData.contains(categoryId) == false, + noSmartAlbumData || missingImages || lastLoad.timeIntervalSinceNow < TimeInterval(-3600) { NetworkUtilities.checkSession(ofUser: user) { self.startFetchingAlbumAndImages(withHUD: noSmartAlbumData || missingImages) } failure: { error in @@ -816,7 +816,7 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect func startFetchingAlbumAndImages(withHUD: Bool) { // Remember that the app is uploading this album data - AlbumVars.shared.isFetchingAlbumData = true + AlbumVars.shared.isFetchingAlbumData.insert(categoryId) // Inform user DispatchQueue.main.async { [self] in @@ -842,7 +842,7 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect @objc func refresh(_ refreshControl: UIRefreshControl?) { // Already being fetching album data? - if AlbumVars.shared.isFetchingAlbumData { return } + if AlbumVars.shared.isFetchingAlbumData.contains(categoryId) { return } // Pause upload manager UploadManager.shared.isPaused = true @@ -892,11 +892,11 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect categoryId != pwgSmartAlbum.favorites.rawValue, "2.10.0".compare(NetworkVars.pwgVersion, options: .numeric) != .orderedDescending, NetworkVars.pwgVersion.compare("13.0.0", options: .numeric) == .orderedAscending, - AlbumVars.shared.isFetchingAlbumData == false, + AlbumVars.shared.isFetchingAlbumData.contains(pwgSmartAlbum.favorites.rawValue) == false, let favAlbum = albumProvider.getAlbum(ofUser: user, withId: pwgSmartAlbum.favorites.rawValue), favAlbum.dateGetImages.timeIntervalSinceNow < TimeInterval(-86400) { // i.e. a day // Remember that the app is fetching favorites - AlbumVars.shared.isFetchingAlbumData = true + AlbumVars.shared.isFetchingAlbumData.insert(pwgSmartAlbum.favorites.rawValue) // Fetch favorites in the background DispatchQueue.global(qos: .background).async { [self] in self.loadFavoritesInBckg() diff --git a/piwigo/Album/Extensions/AlbumViewController+DataSource.swift b/piwigo/Album/Extensions/AlbumViewController+DataSource.swift index 708f5c093..14dafaa16 100644 --- a/piwigo/Album/Extensions/AlbumViewController+DataSource.swift +++ b/piwigo/Album/Extensions/AlbumViewController+DataSource.swift @@ -66,7 +66,7 @@ extension AlbumViewController // ► Remove non-fetched images from album self.removeImageWithIDs(oldImageIds) // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) completion() return } @@ -85,7 +85,7 @@ extension AlbumViewController DispatchQueue.main.async { [self] in // Done fetching album data // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) completion() self.showError(error) @@ -158,7 +158,7 @@ extension AlbumViewController // ► Remove non-fetched images from album removeImageWithIDs(imageIds) // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) // ► Delete orphaned images in the background imageProvider.purgeOrphans() @@ -170,7 +170,7 @@ extension AlbumViewController DispatchQueue.main.async { [self] in // Done fetching images // ► Remove current album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(self.categoryId) completion() self.showError(error) @@ -262,7 +262,7 @@ extension AlbumViewController // Check that an album of favorites exists in cache (create it if necessary) guard let album = self.albumProvider.getAlbum(withId: pwgSmartAlbum.favorites.rawValue) else { // Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) return } if album.isFault { @@ -294,7 +294,7 @@ extension AlbumViewController // Any error? if error != nil { // Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) return } @@ -329,7 +329,7 @@ extension AlbumViewController // ► Remember when favorites were fetched album.dateGetImages = Date() // ► Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) // Save changes do { @@ -340,7 +340,7 @@ extension AlbumViewController } catch let error as NSError { // Remove favorite album from list of album being fetched - AlbumVars.shared.isFetchingAlbumData = false + AlbumVars.shared.isFetchingAlbumData.remove(pwgSmartAlbum.favorites.rawValue) print("Could not fetch \(error), \(error.userInfo)") } } From 8e238ad05f93cb983f6b90d82740e30f60fca81f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Fri, 7 Jul 2023 20:23:19 +0200 Subject: [PATCH 6/9] Fixes date/time not presented in right time zone (Time zones are not managed by Piwigo - bad idea to store them in UTC, provided in local time zone) --- .../Parameters/Cells/EditImageDatePickerTableViewCell.swift | 5 ++--- piwigoKit/Data Cache/Album Data/Album+CoreDataClass.swift | 1 - piwigoKit/Data Cache/Image Data/Image+CoreDataClass.swift | 1 - 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/piwigo/Image/Parameters/Cells/EditImageDatePickerTableViewCell.swift b/piwigo/Image/Parameters/Cells/EditImageDatePickerTableViewCell.swift index 16ad02d84..e31744d3f 100644 --- a/piwigo/Image/Parameters/Cells/EditImageDatePickerTableViewCell.swift +++ b/piwigo/Image/Parameters/Cells/EditImageDatePickerTableViewCell.swift @@ -37,8 +37,8 @@ class EditImageDatePickerTableViewCell: UITableViewCell @IBOutlet private weak var todayDateButton: UIBarButtonItem! @IBOutlet private weak var incrementYearButton: UIBarButtonItem! - private let pwgPickerMinDate = "1922-01-01 00:00:00" // UTC - private let pwgPickerMaxDate = "2100-01-01 00:00:00" // UTC + private let pwgPickerMinDate = "1922-01-01 00:00:00" + private let pwgPickerMaxDate = "2100-01-01 00:00:00" private let pwgPickerWidthLimit: CGFloat = 375 // i.e. larger than iPhones 6,7,8 screen width private let pwgPicker1Day: Int = 24 * 60 * 60 private let pwgPicker12Hours: Int = 12 @@ -96,7 +96,6 @@ class EditImageDatePickerTableViewCell: UITableViewCell // Define date picker limits in number of days formatter.dateFormat = "YYYY-MM-DD hh:mm:ss" - formatter.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone? pickerRefDate = formatter.date(from: pwgPickerMinDate)! let maxDate = formatter.date(from: pwgPickerMaxDate)! pickerMaxNberDays = Int(maxDate.timeIntervalSince(pickerRefDate) / Double(pwgPicker1Day)) diff --git a/piwigoKit/Data Cache/Album Data/Album+CoreDataClass.swift b/piwigoKit/Data Cache/Album Data/Album+CoreDataClass.swift index 9bc3ad2a3..e20ab5d9a 100644 --- a/piwigoKit/Data Cache/Album Data/Album+CoreDataClass.swift +++ b/piwigoKit/Data Cache/Album Data/Album+CoreDataClass.swift @@ -89,7 +89,6 @@ public class Album: NSManagedObject { /// - 'date_last' is the maximum 'date_available' of the images associated to an album. let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" - dateFormatter.timeZone = TimeZone(abbreviation: "UTC") let newDateLast = dateFormatter.date(from: albumData.dateLast ?? "") ?? .distantPast if dateLast != newDateLast { dateLast = newDateLast diff --git a/piwigoKit/Data Cache/Image Data/Image+CoreDataClass.swift b/piwigoKit/Data Cache/Image Data/Image+CoreDataClass.swift index d73760881..c7e2ec1e7 100644 --- a/piwigoKit/Data Cache/Image Data/Image+CoreDataClass.swift +++ b/piwigoKit/Data Cache/Image Data/Image+CoreDataClass.swift @@ -107,7 +107,6 @@ public class Image: NSManagedObject { // Image dates let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" - dateFormatter.timeZone = TimeZone(abbreviation: "UTC") let unknownDate = Date(timeIntervalSinceReferenceDate: -3187296000) // i.e. "1900-01-01 00:00:00" let newPosted = dateFormatter.date(from: imageData.datePosted ?? "") ?? unknownDate if newPosted > unknownDate, datePosted != newPosted { From 9bc126022202f3b5c9a5aad9127cec5dd2af7f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Fri, 7 Jul 2023 23:03:29 +0200 Subject: [PATCH 7/9] Fixes a crash occurring when moving an album --- .../SelectCategoryViewController+Albums.swift | 36 +++++++--- .../SelectCategoryViewController.swift | 5 -- piwigo/Album/AlbumViewController.swift | 32 ++++----- .../Cells/AlbumCollectionViewCell+Move.swift | 20 +----- .../Album/Cells/AlbumCollectionViewCell.swift | 9 ++- piwigo/Info.plist | 2 +- .../Data Cache/Album Data/AlbumProvider.swift | 72 ------------------- 7 files changed, 49 insertions(+), 127 deletions(-) diff --git a/piwigo/Album/AlbumSelector/SelectCategoryViewController+Albums.swift b/piwigo/Album/AlbumSelector/SelectCategoryViewController+Albums.swift index c0a74402d..27c34e9ca 100644 --- a/piwigo/Album/AlbumSelector/SelectCategoryViewController+Albums.swift +++ b/piwigo/Album/AlbumSelector/SelectCategoryViewController+Albums.swift @@ -23,16 +23,32 @@ extension SelectCategoryViewController { NetworkUtilities.checkSession(ofUser: user) { [self] in AlbumUtilities.move(self.inputAlbum.pwgID, intoAlbumWithId: parentData.pwgID) { [self] in - // Update cached albums in the background - DispatchQueue.global(qos: .userInitiated).async { [unowned self] in - albumProvider.moveAlbum(self.inputAlbum.pwgID, intoAlbumWithId: parentData.pwgID) - } - - // Hide HUD, swipe and view then remove category from the album/images collection view - self.updatePiwigoHUDwithSuccess() { - self.hidePiwigoHUD(afterDelay: kDelayPiwigoHUD) { - self.dismiss(animated: true) { - self.albumMovedDelegate?.didMoveCategory() + // Remember that the app is fetching all album data + AlbumVars.shared.isFetchingAlbumData.insert(0) + + // Use the AlbumProvider to fetch album data. On completion, + // handle general UI updates and error alerts on the main queue. + let thumnailSize = pwgImageSize(rawValue: AlbumVars.shared.defaultAlbumThumbnailSize) ?? .medium + albumProvider.fetchAlbums(forUser: user, inParentWithId: 0, recursively: true, + thumbnailSize: thumnailSize) { [self] error in + // ► Remove current album from list of album being fetched + AlbumVars.shared.isFetchingAlbumData.remove(0) + + // Check error + guard let error = error else { + // No error ► Hide HUD + self.updatePiwigoHUDwithSuccess() { + self.hidePiwigoHUD(afterDelay: kDelayPiwigoHUD) { + self.dismiss(animated: true) + } + } + return + } + + // Show the error + DispatchQueue.main.async { [self] in + self.hidePiwigoHUD { + self.showError(with: error.localizedDescription) } } } diff --git a/piwigo/Album/AlbumSelector/SelectCategoryViewController.swift b/piwigo/Album/AlbumSelector/SelectCategoryViewController.swift index 9d43187ec..69f8eadfb 100644 --- a/piwigo/Album/AlbumSelector/SelectCategoryViewController.swift +++ b/piwigo/Album/AlbumSelector/SelectCategoryViewController.swift @@ -23,10 +23,6 @@ protocol SelectCategoryDelegate: NSObjectProtocol { func didSelectCategory(withId category: Int32) } -protocol SelectCategoryAlbumMovedDelegate: NSObjectProtocol { - func didMoveCategory() -} - protocol SelectCategoryImageCopiedDelegate: NSObjectProtocol { func didCopyImage() } @@ -38,7 +34,6 @@ protocol SelectCategoryImageRemovedDelegate: NSObjectProtocol { class SelectCategoryViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { weak var delegate: SelectCategoryDelegate? - weak var albumMovedDelegate: SelectCategoryAlbumMovedDelegate? weak var imageCopiedDelegate: SelectCategoryImageCopiedDelegate? weak var imageRemovedDelegate: SelectCategoryImageRemovedDelegate? diff --git a/piwigo/Album/AlbumViewController.swift b/piwigo/Album/AlbumViewController.swift index 341340d49..b8347ba86 100644 --- a/piwigo/Album/AlbumViewController.swift +++ b/piwigo/Album/AlbumViewController.swift @@ -1443,11 +1443,6 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect // MARK: - AlbumCollectionViewCellDelegate Methods (+ PushView:) - func didMoveCategory(_ albumCell: AlbumCollectionViewCell?) { - // Update number of images in footer - updateNberOfImagesInFooter() - } - func deleteCategory(_ albumId: Int32, inParent parentID: Int32, inMode mode: pwgAlbumDeletionMode) { // Delete album, sub-albums and images from presistent cache @@ -1460,7 +1455,8 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect } @objc - func pushCategoryView(_ viewController: UIViewController?) { + func pushCategoryView(_ viewController: UIViewController?, + completion: @escaping (Bool) -> Void) { guard let viewController = viewController else { return } @@ -1476,14 +1472,20 @@ class AlbumViewController: UIViewController, UICollectionViewDelegate, UICollect viewController.modalPresentationStyle = .popover viewController.popoverPresentationController?.sourceView = imagesCollection viewController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) - navigationController?.present(viewController, animated: true) + navigationController?.present(viewController, animated: true) { + // Hide swipe commands + completion(true) + } } else { let navController = UINavigationController(rootViewController: viewController) navController.modalPresentationStyle = .popover navController.popoverPresentationController?.sourceView = view navController.modalTransitionStyle = .coverVertical - navigationController?.present(navController, animated: true) + navigationController?.present(navController, animated: true) { + // Hide swipe commands + completion(true) + } } } } @@ -1569,16 +1571,14 @@ extension AlbumViewController: NSFetchedResultsControllerDelegate { func controllerWillChangeContent(_ controller: NSFetchedResultsController) { // Check that this update should be managed by this view controller - guard let fetchDelegate = controller.delegate as? AlbumViewController else { return } - if view.window == nil || fetchDelegate.categoryId != categoryId { return } - print("••> fetchController will change content: \(controller)") + if view.window == nil || [images, albums].contains(controller) == false { return } } func controller(_ controller: NSFetchedResultsController, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) { // Check that this update should be managed by this view controller guard let fetchDelegate = controller.delegate as? AlbumViewController else { return } - if view.window == nil || fetchDelegate.categoryId != categoryId { return } + if view.window == nil || [images, albums].contains(controller) == false { return } // Collect operation changes switch type.rawValue { @@ -1640,14 +1640,15 @@ extension AlbumViewController: NSFetchedResultsControllerDelegate { }) } case NSFetchedResultsChangeType.move.rawValue: - guard var indexPath = indexPath, var newIndexPath = newIndexPath, + guard var indexPath = indexPath, + var newIndexPath = newIndexPath, indexPath != newIndexPath else { return } if anObject is Image { indexPath.section = 1 newIndexPath.section = 1 } updateOperations.append( BlockOperation { [weak self] in - print("••> Move item of album #\(fetchDelegate.categoryId) from \(indexPath) to \(newIndexPath)") + print("••> Move item of album #\(fetchDelegate.categoryId) from \(indexPath) to \(newIndexPath)") self?.imagesCollection?.moveItem(at: indexPath, to: newIndexPath) }) default: @@ -1657,8 +1658,7 @@ extension AlbumViewController: NSFetchedResultsControllerDelegate { func controllerDidChangeContent(_ controller: NSFetchedResultsController) { // Check that this update should be managed by this view controller - guard let fetchDelegate = controller.delegate as? AlbumViewController else { return } - if view.window == nil || fetchDelegate.categoryId != categoryId || updateOperations.isEmpty { return } + if view.window == nil || [images, albums].contains(controller) == false || updateOperations.isEmpty { return } // Update objects imagesCollection?.performBatchUpdates({ [weak self] in diff --git a/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift b/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift index b9f986f68..8ef9fa70b 100644 --- a/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift +++ b/piwigo/Album/Cells/AlbumCollectionViewCell+Move.swift @@ -8,30 +8,14 @@ extension AlbumCollectionViewCell { // MARK: - Move Category - func moveCategory() { + func moveCategory(completion: @escaping (Bool) -> Void) { guard let albumData = albumData else { return } let moveSB = UIStoryboard(name: "SelectCategoryViewController", bundle: nil) guard let moveVC = moveSB.instantiateViewController(withIdentifier: "SelectCategoryViewController") as? SelectCategoryViewController else { return } if moveVC.setInput(parameter: albumData, for: .moveAlbum) { moveVC.user = user - moveVC.albumMovedDelegate = self - categoryDelegate?.pushCategoryView(moveVC) + categoryDelegate?.pushCategoryView(moveVC, completion: completion) } } - -} - - -// MARK: - SelectCategoryAlbumMovedDelegate Methods -extension AlbumCollectionViewCell: SelectCategoryAlbumMovedDelegate -{ - func didMoveCategory() { - // Hide swipe commands -// let cell = tableView?.cellForRow(at: IndexPath(item: 0, section: 0)) as? AlbumTableViewCell -// cell?.hideSwipe(animated: true) { [self] _ in - // Remove category from the album/images collection - categoryDelegate?.didMoveCategory(self) -// } - } } diff --git a/piwigo/Album/Cells/AlbumCollectionViewCell.swift b/piwigo/Album/Cells/AlbumCollectionViewCell.swift index 2e95aff9d..5762fbbe9 100644 --- a/piwigo/Album/Cells/AlbumCollectionViewCell.swift +++ b/piwigo/Album/Cells/AlbumCollectionViewCell.swift @@ -13,8 +13,8 @@ import UIKit import piwigoKit protocol AlbumCollectionViewCellDelegate: NSObjectProtocol { - func pushCategoryView(_ viewController: UIViewController?) - func didMoveCategory(_ albumCell: AlbumCollectionViewCell?) + func pushCategoryView(_ viewController: UIViewController?, + completion: @escaping (Bool) -> Void) func deleteCategory(_ albumId: Int32, inParent parentID: Int32, inMode mode: pwgAlbumDeletionMode) } @@ -130,7 +130,7 @@ extension AlbumCollectionViewCell: UITableViewDelegate // Push new album view if let albumData = albumData { let albumView = AlbumViewController(albumId: albumData.pwgID) - categoryDelegate?.pushCategoryView(albumView) + categoryDelegate?.pushCategoryView(albumView, completion: {_ in }) } } @@ -159,8 +159,7 @@ extension AlbumCollectionViewCell: UITableViewDelegate // Album move let move = UIContextualAction(style: .normal, title: nil, handler: { action, view, completionHandler in - self.moveCategory() - completionHandler(true) + self.moveCategory(completion: completionHandler) }) move.backgroundColor = .piwigoColorBrown() move.image = UIImage(named: "swipeMove.png") diff --git a/piwigo/Info.plist b/piwigo/Info.plist index 0bd0f490f..e7bc03eed 100644 --- a/piwigo/Info.plist +++ b/piwigo/Info.plist @@ -25,7 +25,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 529 + 530 INIntentsSupported AutoUploadIntent diff --git a/piwigoKit/Data Cache/Album Data/AlbumProvider.swift b/piwigoKit/Data Cache/Album Data/AlbumProvider.swift index e229bd605..9b6a6212e 100644 --- a/piwigoKit/Data Cache/Album Data/AlbumProvider.swift +++ b/piwigoKit/Data Cache/Album Data/AlbumProvider.swift @@ -551,78 +551,6 @@ public class AlbumProvider: NSObject { } } - /** - Move an album with its sub-albums. - - the attributes 'nbSubAlbums' of parent albums are decremented, - - the number of moved images is subtracted from the attributes 'totalNbImages' of parent albums, - - the parent ID of the album is changed, - - the parents IDs of the album with its sub-albums are changed, - - the 'globalRank' of the album is set to correspond to the top position, - - the attributes 'nbSubAlbums' of parent albums are incremented, - - the attributes 'globalRank' of albums in the parent album are updated accordingly. - N.B.: All albums are already in cache because the album selector was called before. - N.B.: Task performed in the background. - */ - public func moveAlbum(_ catID: Int32, intoAlbumWithId parentID: Int32) { - // Job performed in the background - bckgContext.performAndWait { - - // Get users of this server - let users = userProvider.getUserAccounts(inContext: bckgContext) - - // Loop over all users… - for user in users { - // Get album to move and new parent album - guard let albumToMove = getAlbum(ofUser: user, withId: catID), - let parent = getAlbum(ofUser: user, withId: parentID) else { - return - } - - // Update parent and sub-albums albums - if albumToMove.parentId == Int32.zero { - // Update ranks of albums and sub-albums in root - updateRankOfAlbums(by: -1, inAlbum: Int32.zero, ofUser: user, - afterRank: albumToMove.globalRank) - } else { - // Update parent albums and sub-albums - updateParents(removing: albumToMove) - } - - // Move album - let upperIDs = parentID == Int32.zero ? String(catID) : parent.upperIds + "," + String(catID) - albumToMove.parentId = parentID - albumToMove.upperIds = upperIDs - albumToMove.globalRank = parentID == 0 ? "0" : parent.globalRank + ".0" - - // Update parent and sub-albums albums - if parentID == Int32.zero { - // Update ranks of albums and sub-albums in root - updateRankOfAlbums(by: +1, inAlbum: Int32.zero, ofUser: user, - afterRank: parent.globalRank) - } else { - // Update parent albums and sub-albums - updateParents(adding: albumToMove) - } - } - - // Save all insertions from the context to the store. - if bckgContext.hasChanges { - do { - try bckgContext.save() - DispatchQueue.main.async { - DataController.shared.saveMainContext() - } - } - catch { - print("Error: \(error)\nCould not save Core Data context.") - return - } - // Reset the taskContext to free the cache and lower the memory footprint. - bckgContext.reset() - } - } - } - /** Delete an album with its sub-albums. From 983ad260dc74ae19854ce73d67a15d24b6ab3ddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Fri, 7 Jul 2023 23:09:05 +0200 Subject: [PATCH 8/9] Version 3.0.2 for TestFlight testing, fixes #546 --- piwigo/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/piwigo/Info.plist b/piwigo/Info.plist index e7bc03eed..95e3e7a41 100644 --- a/piwigo/Info.plist +++ b/piwigo/Info.plist @@ -25,7 +25,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 530 + 531 INIntentsSupported AutoUploadIntent From eee9fb4b2dbd25d2156ec5394672ce825e58182b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eddy=20Leli=C3=A8vre-Berna?= Date: Sat, 8 Jul 2023 15:32:36 +0200 Subject: [PATCH 9/9] Improves translations --- piwigo/Resources/de.lproj/ReleaseNotes.strings | 2 +- piwigo/Resources/fr.lproj/ReleaseNotes.strings | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/piwigo/Resources/de.lproj/ReleaseNotes.strings b/piwigo/Resources/de.lproj/ReleaseNotes.strings index 1a9535656..2c5282b47 100644 --- a/piwigo/Resources/de.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/de.lproj/ReleaseNotes.strings @@ -6,7 +6,7 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.2_text" = "Version 3.0.2\n\n- Fehlerbehebungen"; +"v3.0.2_text" = "Version 3.0.2\n\n• Fehlerbehebungen"; "v3.0.1_text" = "Version 3.0.1\n2. Juli 2023\n\n• Kleinere Fehlerbehebungen und Verbesserungen der Benutzeroberfläche"; diff --git a/piwigo/Resources/fr.lproj/ReleaseNotes.strings b/piwigo/Resources/fr.lproj/ReleaseNotes.strings index 6da2cdf62..ecc4b61f0 100644 --- a/piwigo/Resources/fr.lproj/ReleaseNotes.strings +++ b/piwigo/Resources/fr.lproj/ReleaseNotes.strings @@ -6,9 +6,9 @@ Copyright © 2017 Piwigo.org. All rights reserved. */ -"v3.0.2_text" = "Version 3.0.2\n\n• Bug fixes"; +"v3.0.2_text" = "Version 3.0.2\n\n• Correction de bugs"; -"v3.0.1_text" = "Version 3.0.1\n\n• Corrections de bugs mineurs et amélioration de l'interface"; +"v3.0.1_text" = "Version 3.0.1\n2 juillet 2023\n\n• Corrections de bugs mineurs et amélioration de l'interface"; "v3.0.0_text" = "Version 3.0\n27 juin 2023\n\n• Gestion du cache entièrement réécrite pour améliorer l'expérience de l'utilisateur et permettre la navigation hors ligne.\n• Correction de certaines traductions";