├── .gitattributes ├── .gitignore ├── Pictures ├── image_github_w1920.png ├── notification_1.png ├── notification_2.png ├── status_bar.png ├── tab_notification.png ├── tab_pie_1.png ├── tab_pie_2.png ├── tab_profile.png ├── tab_trend_1.png ├── tab_trend_2.png ├── tab_trending.png └── vc_settings.png ├── Podfile ├── README.md ├── VHGithubNotifier-Bridging-Header.h ├── VHGithubNotifier.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ └── huangweiping.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── VHGithubNotifier.xcscheme │ └── xcschememanagement.plist ├── VHGithubNotifier.xcworkspace ├── contents.xcworkspacedata ├── xcshareddata │ └── VHGithubNotifier.xcscmblueprint └── xcuserdata │ └── huangweiping.xcuserdatad │ └── xcdebugger │ ├── Breakpoints_v2.xcbkptlist │ └── Expressions.xcexplist └── VHGithubNotifier ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets ├── AppIcon.appiconset │ ├── Contents.json │ ├── icon_app_128@1x.png │ ├── icon_app_128@2x.png │ ├── icon_app_16@1x.png │ ├── icon_app_16@2x.png │ ├── icon_app_256@1x.png │ ├── icon_app_256@2x.png │ ├── icon_app_32@1x.png │ ├── icon_app_32@2x.png │ ├── icon_app_512@1x.png │ └── icon_app_512@2x.png ├── Contents.json ├── icon_cancel.imageset │ ├── Contents.json │ ├── icon_cancel.png │ ├── icon_cancel@2x.png │ └── icon_cancel@3x.png ├── icon_done.imageset │ ├── Contents.json │ ├── icon_done.png │ ├── icon_done@2x.png │ └── icon_done@3x.png ├── icon_empty_trending.imageset │ ├── Contents.json │ └── icon_empty_trending.png ├── icon_error.imageset │ ├── Contents.json │ └── icon_error.png ├── icon_exit.imageset │ ├── Contents.json │ ├── icon_exit.png │ ├── icon_exit@2x.png │ └── icon_exit@3x.png ├── icon_follower.imageset │ ├── Contents.json │ ├── icon_follower@1x.png │ ├── icon_follower@2x.png │ └── icon_follower@3x.png ├── icon_follower_dark.imageset │ ├── Contents.json │ ├── icon_follower_dark@1x.png │ ├── icon_follower_dark@2x.png │ └── icon_follower_dark@3x.png ├── icon_follower_pressed.imageset │ ├── Contents.json │ ├── icon_follower_pressed@1x.png │ ├── icon_follower_pressed@2x.png │ └── icon_follower_pressed@3x.png ├── icon_github.imageset │ ├── Contents.json │ ├── icon_github@1x.png │ ├── icon_github@2x.png │ └── icon_github@3x.png ├── icon_github_url.imageset │ ├── Contents.json │ ├── icon_github_url.png │ ├── icon_github_url@2x.png │ └── icon_github_url@3x.png ├── icon_language.imageset │ ├── Contents.json │ ├── icon_language.png │ ├── icon_language@2x.png │ └── icon_language@3x.png ├── icon_language_dot.imageset │ ├── Contents.json │ ├── icon_language_dot.png │ ├── icon_language_dot@2x.png │ └── icon_language_dot@3x.png ├── icon_login.imageset │ ├── Contents.json │ ├── icon_login.png │ ├── icon_login@2x.png │ └── icon_login@3x.png ├── icon_notification.imageset │ ├── Contents.json │ ├── icon_notification.png │ ├── icon_notification@2x.png │ └── icon_notification@3x.png ├── icon_open_url.imageset │ ├── Contents.json │ ├── icon_open_url.png │ ├── icon_open_url@2x.png │ └── icon_open_url@3x.png ├── icon_profile.imageset │ ├── Contents.json │ ├── icon_profile.png │ ├── icon_profile@2x.png │ └── icon_profile@3x.png ├── icon_read.imageset │ ├── Contents.json │ └── icon_read@2x.png ├── icon_refresh.imageset │ ├── Contents.json │ ├── icon_refresh.png │ ├── icon_refresh@2x.png │ └── icon_refresh@3x.png ├── icon_repository_fork.imageset │ ├── Contents.json │ └── icon_repository_fork@2x.png ├── icon_repository_pie.imageset │ ├── Contents.json │ ├── icon_repository_pie.png │ ├── icon_repository_pie@2x.png │ └── icon_repository_pie@3x.png ├── icon_repository_star.imageset │ ├── Contents.json │ └── icon_repository_star@2x.png ├── icon_settings.imageset │ ├── Contents.json │ ├── icon_settings.png │ ├── icon_settings@2x.png │ └── icon_settings@3x.png ├── icon_star.imageset │ ├── Contents.json │ ├── icon_star@1x.png │ ├── icon_star@2x.png │ └── icon_star@3x.png ├── icon_star_dark.imageset │ ├── Contents.json │ ├── icon_star_dark@1x.png │ ├── icon_star_dark@2x.png │ └── icon_star_dark@3x.png ├── icon_star_pressed.imageset │ ├── Contents.json │ ├── icon_star_pressed@1x.png │ ├── icon_star_pressed@2x.png │ └── icon_star_pressed@3x.png ├── icon_status_bar_github.imageset │ ├── Contents.json │ ├── icon_status_bar_github.png │ ├── icon_status_bar_github@2x.png │ └── icon_status_bar_github@3x.png ├── icon_status_bar_github_dark.imageset │ ├── Contents.json │ ├── icon_status_bar_github_dark.png │ ├── icon_status_bar_github_dark@2x.png │ └── icon_status_bar_github_dark@3x.png ├── icon_status_bar_github_pressed.imageset │ ├── Contents.json │ ├── icon_status_bar_github_pressed.png │ ├── icon_status_bar_github_pressed@2x.png │ └── icon_status_bar_github_pressed@3x.png ├── icon_status_bar_notification.imageset │ ├── Contents.json │ ├── icon_status_bar_notification.png │ ├── icon_status_bar_notification@2x.png │ └── icon_status_bar_notification@3x.png ├── icon_status_bar_notification_dark.imageset │ ├── Contents.json │ ├── icon_status_bar_notification_dark.png │ ├── icon_status_bar_notification_dark@2x.png │ └── icon_status_bar_notification_dark@3x.png ├── icon_status_bar_notification_pressed.imageset │ ├── Contents.json │ ├── icon_status_bar_notification_pressed.png │ ├── icon_status_bar_notification_pressed@2x.png │ └── icon_status_bar_notification_pressed@3x.png ├── icon_time.imageset │ ├── Contents.json │ ├── icon_time.png │ ├── icon_time@2x.png │ └── icon_time@3x.png ├── icon_trend.imageset │ ├── Contents.json │ ├── icon_trend.png │ ├── icon_trend@2x.png │ └── icon_trend@3x.png ├── icon_trend_followers.imageset │ ├── Contents.json │ ├── icon_trend_followers.png │ ├── icon_trend_followers@2x.png │ └── icon_trend_followers@3x.png ├── icon_trend_repository.imageset │ ├── Contents.json │ ├── icon_trend_repository.png │ ├── icon_trend_repository@2x.png │ └── icon_trend_repository@3x.png ├── icon_trending.imageset │ ├── Contents.json │ ├── icon_trending.png │ ├── icon_trending@2x.png │ └── icon_trending@3x.png ├── icon_unsubscribe.imageset │ ├── Contents.json │ └── icon_unsubscribe@2x.png ├── icon_user_placeholder.imageset │ ├── Contents.json │ ├── icon_user_placeholder.png │ ├── icon_user_placeholder@2x.png │ └── icon_user_placeholder@3x.png ├── image_account_info_window.imageset │ ├── Contents.json │ └── image_account_info_window.png ├── image_empty_notification.imageset │ ├── Contents.json │ └── image_empty_notification.png ├── image_issue.imageset │ ├── Contents.json │ └── image_issue.png ├── image_notification.imageset │ ├── Contents.json │ └── image_notification.png ├── image_pull_request.imageset │ ├── Contents.json │ └── image_pull_request.png ├── image_scroller.imageset │ ├── Contents.json │ └── image_scroller.png └── image_scroller_pressed.imageset │ ├── Contents.json │ └── image_scroller_pressed.png ├── Assets └── echarts.js ├── Base.lproj └── Main.storyboard ├── Charts ├── Charts.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcshareddata │ │ └── xcschemes │ │ │ ├── Charts.xcscheme │ │ │ ├── ChartsRealm.xcscheme │ │ │ └── ChartsTests.xcscheme │ └── xcuserdata │ │ └── huangweiping.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist └── Source │ ├── Charts │ ├── Animation │ │ ├── Animator.swift │ │ └── ChartAnimationEasing.swift │ ├── Charts │ │ ├── BarChartView.swift │ │ ├── BarLineChartViewBase.swift │ │ ├── BubbleChartView.swift │ │ ├── CandleStickChartView.swift │ │ ├── ChartViewBase.swift │ │ ├── CombinedChartView.swift │ │ ├── HorizontalBarChartView.swift │ │ ├── LineChartView.swift │ │ ├── PieChartView.swift │ │ ├── PieRadarChartViewBase.swift │ │ ├── RadarChartView.swift │ │ └── ScatterChartView.swift │ ├── Components │ │ ├── AxisBase.swift │ │ ├── ChartLimitLine.swift │ │ ├── ComponentBase.swift │ │ ├── Description.swift │ │ ├── IMarker.swift │ │ ├── Legend.swift │ │ ├── LegendEntry.swift │ │ ├── MarkerImage.swift │ │ ├── MarkerView.swift │ │ ├── XAxis.swift │ │ └── YAxis.swift │ ├── Data │ │ ├── Implementations │ │ │ ├── ChartBaseDataSet.swift │ │ │ └── Standard │ │ │ │ ├── BarChartData.swift │ │ │ │ ├── BarChartDataEntry.swift │ │ │ │ ├── BarChartDataSet.swift │ │ │ │ ├── BarLineScatterCandleBubbleChartData.swift │ │ │ │ ├── BarLineScatterCandleBubbleChartDataSet.swift │ │ │ │ ├── BubbleChartData.swift │ │ │ │ ├── BubbleChartDataEntry.swift │ │ │ │ ├── BubbleChartDataSet.swift │ │ │ │ ├── CandleChartData.swift │ │ │ │ ├── CandleChartDataEntry.swift │ │ │ │ ├── CandleChartDataSet.swift │ │ │ │ ├── ChartData.swift │ │ │ │ ├── ChartDataEntry.swift │ │ │ │ ├── ChartDataEntryBase.swift │ │ │ │ ├── ChartDataSet.swift │ │ │ │ ├── CombinedChartData.swift │ │ │ │ ├── LineChartData.swift │ │ │ │ ├── LineChartDataSet.swift │ │ │ │ ├── LineRadarChartDataSet.swift │ │ │ │ ├── LineScatterCandleRadarChartDataSet.swift │ │ │ │ ├── PieChartData.swift │ │ │ │ ├── PieChartDataEntry.swift │ │ │ │ ├── PieChartDataSet.swift │ │ │ │ ├── RadarChartData.swift │ │ │ │ ├── RadarChartDataEntry.swift │ │ │ │ ├── RadarChartDataSet.swift │ │ │ │ ├── ScatterChartData.swift │ │ │ │ └── ScatterChartDataSet.swift │ │ └── Interfaces │ │ │ ├── IBarChartDataSet.swift │ │ │ ├── IBarLineScatterCandleBubbleChartDataSet.swift │ │ │ ├── IBubbleChartDataSet.swift │ │ │ ├── ICandleChartDataSet.swift │ │ │ ├── IChartDataSet.swift │ │ │ ├── ILineChartDataSet.swift │ │ │ ├── ILineRadarChartDataSet.swift │ │ │ ├── ILineScatterCandleRadarChartDataSet.swift │ │ │ ├── IPieChartDataSet.swift │ │ │ ├── IRadarChartDataSet.swift │ │ │ └── IScatterChartDataSet.swift │ ├── Filters │ │ └── DataApproximator.swift │ ├── Formatters │ │ ├── DefaultAxisValueFormatter.swift │ │ ├── DefaultFillFormatter.swift │ │ ├── DefaultValueFormatter.swift │ │ ├── IAxisValueFormatter.swift │ │ ├── IFillFormatter.swift │ │ ├── IValueFormatter.swift │ │ └── IndexAxisValueFormatter.swift │ ├── Highlight │ │ ├── BarHighlighter.swift │ │ ├── ChartHighlighter.swift │ │ ├── CombinedHighlighter.swift │ │ ├── Highlight.swift │ │ ├── HorizontalBarHighlighter.swift │ │ ├── IHighlighter.swift │ │ ├── PieHighlighter.swift │ │ ├── PieRadarHighlighter.swift │ │ ├── RadarHighlighter.swift │ │ └── Range.swift │ ├── Interfaces │ │ ├── BarChartDataProvider.swift │ │ ├── BarLineScatterCandleBubbleChartDataProvider.swift │ │ ├── BubbleChartDataProvider.swift │ │ ├── CandleChartDataProvider.swift │ │ ├── ChartDataProvider.swift │ │ ├── CombinedChartDataProvider.swift │ │ ├── LineChartDataProvider.swift │ │ └── ScatterChartDataProvider.swift │ ├── Jobs │ │ ├── AnimatedMoveViewJob.swift │ │ ├── AnimatedViewPortJob.swift │ │ ├── AnimatedZoomViewJob.swift │ │ ├── MoveViewJob.swift │ │ ├── ViewPortJob.swift │ │ └── ZoomViewJob.swift │ ├── Renderers │ │ ├── AxisRendererBase.swift │ │ ├── BarChartRenderer.swift │ │ ├── BarLineScatterCandleBubbleRenderer.swift │ │ ├── BubbleChartRenderer.swift │ │ ├── CandleStickChartRenderer.swift │ │ ├── ChartDataRendererBase.swift │ │ ├── CombinedChartRenderer.swift │ │ ├── HorizontalBarChartRenderer.swift │ │ ├── LegendRenderer.swift │ │ ├── LineChartRenderer.swift │ │ ├── LineRadarRenderer.swift │ │ ├── LineScatterCandleRadarRenderer.swift │ │ ├── PieChartRenderer.swift │ │ ├── RadarChartRenderer.swift │ │ ├── Renderer.swift │ │ ├── Scatter │ │ │ ├── ChevronDownShapeRenderer.swift │ │ │ ├── ChevronUpShapeRenderer.swift │ │ │ ├── CircleShapeRenderer.swift │ │ │ ├── CrossShapeRenderer.swift │ │ │ ├── IShapeRenderer.swift │ │ │ ├── SquareShapeRenderer.swift │ │ │ ├── TriangleShapeRenderer.swift │ │ │ └── XShapeRenderer.swift │ │ ├── ScatterChartRenderer.swift │ │ ├── XAxisRenderer.swift │ │ ├── XAxisRendererHorizontalBarChart.swift │ │ ├── XAxisRendererRadarChart.swift │ │ ├── YAxisRenderer.swift │ │ ├── YAxisRendererHorizontalBarChart.swift │ │ └── YAxisRendererRadarChart.swift │ └── Utils │ │ ├── ChartColorTemplates.swift │ │ ├── ChartUtils.swift │ │ ├── Fill.swift │ │ ├── Platform.swift │ │ ├── Transformer.swift │ │ ├── TransformerHorizontalBarChart.swift │ │ └── ViewPortHandler.swift │ └── Supporting Files │ ├── Charts.h │ ├── ChartsRealm.h │ └── Info.plist ├── Info.plist ├── Model ├── Manager │ ├── VHGithubNotifierManager+ChartDataProvider.h │ ├── VHGithubNotifierManager+ChartDataProvider.m │ ├── VHGithubNotifierManager+Language.h │ ├── VHGithubNotifierManager+Language.m │ ├── VHGithubNotifierManager+Notification.h │ ├── VHGithubNotifierManager+Notification.m │ ├── VHGithubNotifierManager+Profile.h │ ├── VHGithubNotifierManager+Profile.m │ ├── VHGithubNotifierManager+Realm.h │ ├── VHGithubNotifierManager+Realm.m │ ├── VHGithubNotifierManager+Trend.h │ ├── VHGithubNotifierManager+Trend.m │ ├── VHGithubNotifierManager+Trending.h │ ├── VHGithubNotifierManager+Trending.m │ ├── VHGithubNotifierManager+UserDefault.h │ ├── VHGithubNotifierManager+UserDefault.m │ ├── VHGithubNotifierManager+UserNotification.h │ ├── VHGithubNotifierManager+UserNotification.m │ ├── VHGithubNotifierManager.h │ ├── VHGithubNotifierManager.m │ └── VHGithubNotifierManager_Private.h ├── VHContributionBlock.h ├── VHContributionBlock.m ├── VHContributionChartDrawer.h ├── VHContributionChartDrawer.m ├── VHContributionChartFaceDrawer.h ├── VHContributionChartFaceDrawer.m ├── VHGithubNotifierEnums.h ├── VHHTTPResponseSerializer.h ├── VHHTTPResponseSerializer.m ├── VHLanguage.h ├── VHLanguage.m ├── VHNotification.h ├── VHNotification.m ├── VHNotificationRecord.h ├── VHNotificationRecord.m ├── VHRecord.h ├── VHRecord.m ├── VHRepository.h ├── VHRepository.m ├── VHSimpleRepository.h ├── VHSimpleRepository.m ├── VHTrendChartParser.h ├── VHTrendChartParser.m ├── VHTrendingRepository.h ├── VHTrendingRepository.m ├── VHUser.h └── VHUser.m ├── Utils ├── AFAutoPurgingImageCache.h ├── AFAutoPurgingImageCache.m ├── AFImageDownloader.h ├── AFImageDownloader.m ├── CNUserNotification │ ├── AppledocSettings.plist │ ├── CNUserNotification.h │ ├── CNUserNotification.m │ ├── CNUserNotificationBannerBackgroundView.h │ ├── CNUserNotificationBannerBackgroundView.m │ ├── CNUserNotificationBannerButton.h │ ├── CNUserNotificationBannerButton.m │ ├── CNUserNotificationBannerButtonCell.h │ ├── CNUserNotificationBannerButtonCell.m │ ├── CNUserNotificationBannerController.h │ ├── CNUserNotificationBannerController.m │ ├── CNUserNotificationCenter.h │ ├── CNUserNotificationCenter.m │ ├── CNUserNotificationCenterDelegate.h │ ├── CNUserNotificationFeature.h │ └── CNUserNotificationFeature.m ├── Hpple │ ├── TFHpple.h │ ├── TFHpple.m │ ├── TFHppleElement.h │ ├── TFHppleElement.m │ ├── XPathQuery.h │ └── XPathQuery.m ├── NSArray+Safe.h ├── NSArray+Safe.m ├── NSColor+Utils.h ├── NSColor+Utils.m ├── NSDate+Utils.h ├── NSDate+Utils.m ├── NSImage+Tint.h ├── NSImage+Tint.m ├── NSImageView+AFNetworking.h ├── NSImageView+AFNetworking.m ├── NSMutableArray+Queue.h ├── NSMutableArray+Queue.m ├── NSMutableArray+Safe.h ├── NSMutableArray+Safe.m ├── RLMResults+ToArray.h ├── RLMResults+ToArray.m ├── UAGithubEngine │ ├── NSArray+Utilities.h │ ├── NSArray+Utilities.m │ ├── NSData+Base64.h │ ├── NSData+Base64.m │ ├── NSInvocation+Blocks.h │ ├── NSInvocation+Blocks.m │ ├── NSString+UAGithubEngineUtilities.h │ ├── NSString+UAGithubEngineUtilities.m │ ├── NSString+UUID.h │ ├── NSString+UUID.m │ ├── UAGithubEngine.h │ ├── UAGithubEngine.m │ ├── UAGithubEngineConstants.h │ ├── UAGithubEngineConstants.m │ ├── UAGithubEngineRequestTypes.h │ ├── UAGithubJSONParser.h │ ├── UAGithubJSONParser.m │ ├── UAGithubURLConnection.h │ ├── UAGithubURLConnection.m │ ├── UAReachability.h │ └── UAReachability.m ├── VHCursorButton+AFNetworking.h ├── VHCursorButton+AFNetworking.m ├── VHDateValueFormatter.h ├── VHDateValueFormatter.m ├── VHLog.h ├── VHLog.m ├── VHUtils+Json.h ├── VHUtils+Json.m ├── VHUtils+TransForm.h ├── VHUtils+TransForm.m ├── VHUtils.h └── VHUtils.m ├── VC ├── VHNotificationVC.h ├── VHNotificationVC.m ├── VHNotificationVC.xib ├── VHPieVC.h ├── VHPieVC.m ├── VHPieVC.xib ├── VHProfileVC.h ├── VHProfileVC.m ├── VHProfileVC.xib ├── VHTabVC.h ├── VHTabVC.m ├── VHTabVC.xib ├── VHTrendVC.h ├── VHTrendVC.m ├── VHTrendVC.xib ├── VHTrendingVC.h ├── VHTrendingVC.m ├── VHTrendingVC.xib ├── VHViewController.h └── VHViewController.m ├── VHDefines.h ├── VHGithubNotifier+Prefix.pch ├── VHGithubNotifierNotifications.h ├── View ├── NSView+Position.h ├── NSView+Position.m ├── VHContributionChartView.h ├── VHContributionChartView.m ├── VHCursorButton.h ├── VHCursorButton.m ├── VHHorizontalLine.h ├── VHHorizontalLine.m ├── VHLanguageDotView.h ├── VHLanguageDotView.m ├── VHLanguagesButton.h ├── VHLanguagesButton.m ├── VHNotificationGroupBodyCellView.h ├── VHNotificationGroupBodyCellView.m ├── VHNotificationGroupBodyCellView.xib ├── VHNotificationGroupHeaderCellView.h ├── VHNotificationGroupHeaderCellView.m ├── VHNotificationGroupHeaderCellView.xib ├── VHNotificationGroupView.h ├── VHNotificationGroupView.m ├── VHNotificationHeaderCellView.h ├── VHNotificationHeaderCellView.m ├── VHNotificationHeaderCellView.xib ├── VHPieChartView.swift ├── VHPopUpButton.h ├── VHPopUpButton.m ├── VHPopUpButtonCell.h ├── VHPopUpButtonCell.m ├── VHScroller.h ├── VHScroller.m ├── VHScrollerThumb.h ├── VHScrollerThumb.m ├── VHSecureTextField.h ├── VHSecureTextField.m ├── VHSecureTextFieldCell.h ├── VHSecureTextFieldCell.m ├── VHSettingsCellView.h ├── VHSettingsCellView.m ├── VHSettingsCellView.xib ├── VHStateView.h ├── VHStateView.m ├── VHStateView.xib ├── VHStatusBarButton.h ├── VHStatusBarButton.m ├── VHTabVCBackgroundView.h ├── VHTabVCBackgroundView.m ├── VHTabView.h ├── VHTabView.m ├── VHTableView.h ├── VHTableView.m ├── VHTextField.h ├── VHTextField.m ├── VHTextFieldCell.h ├── VHTextFieldCell.m ├── VHTrendingLanguageCellView.h ├── VHTrendingLanguageCellView.m ├── VHTrendingLanguageCellView.xib ├── VHTrendingRepositoryCellView.h ├── VHTrendingRepositoryCellView.m ├── VHTrendingRepositoryCellView.xib └── VHVisualEffectView.swift ├── Window ├── VHAccountInfoWC.h ├── VHAccountInfoWC.m ├── VHAccountInfoWC.xib ├── VHSettingsWC.h ├── VHSettingsWC.m ├── VHSettingsWC.xib ├── VHUserNotificationWindow.h ├── VHUserNotificationWindow.m ├── VHWebLoginWC.h ├── VHWebLoginWC.m ├── VHWebLoginWC.xib ├── VHWindow.h └── VHWindow.m └── main.m /.gitattributes: -------------------------------------------------------------------------------- 1 | VHGithubNotifier/Assets/echarts.js linguist-vendored -------------------------------------------------------------------------------- /Pictures/image_github_w1920.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/image_github_w1920.png -------------------------------------------------------------------------------- /Pictures/notification_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/notification_1.png -------------------------------------------------------------------------------- /Pictures/notification_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/notification_2.png -------------------------------------------------------------------------------- /Pictures/status_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/status_bar.png -------------------------------------------------------------------------------- /Pictures/tab_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/tab_notification.png -------------------------------------------------------------------------------- /Pictures/tab_pie_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/tab_pie_1.png -------------------------------------------------------------------------------- /Pictures/tab_pie_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/tab_pie_2.png -------------------------------------------------------------------------------- /Pictures/tab_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/tab_profile.png -------------------------------------------------------------------------------- /Pictures/tab_trend_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/tab_trend_1.png -------------------------------------------------------------------------------- /Pictures/tab_trend_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/tab_trend_2.png -------------------------------------------------------------------------------- /Pictures/tab_trending.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/tab_trending.png -------------------------------------------------------------------------------- /Pictures/vc_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/Pictures/vc_settings.png -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | platform :osx, '10.9' 3 | 4 | target 'VHGithubNotifier' do 5 | pod 'AFNetworking' 6 | pod 'Realm' 7 | pod 'YAML-Framework' 8 | pod 'SYFlatButton' 9 | end -------------------------------------------------------------------------------- /VHGithubNotifier-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | @import Charts; 6 | -------------------------------------------------------------------------------- /VHGithubNotifier.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /VHGithubNotifier.xcodeproj/xcuserdata/huangweiping.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /VHGithubNotifier.xcodeproj/xcuserdata/huangweiping.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | VHGithubNotifier.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 378E0ADA1E0ECD070033CBD5 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /VHGithubNotifier.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /VHGithubNotifier.xcworkspace/xcshareddata/VHGithubNotifier.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "81033B36365A4D58F1454CE6F007319E331A5DAF", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "81033B36365A4D58F1454CE6F007319E331A5DAF" : 9223372036854775807 8 | }, 9 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "1C626041-837F-47EC-BA7C-98CC8774F7DC", 10 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 11 | "81033B36365A4D58F1454CE6F007319E331A5DAF" : "VHGithubNotifier\/" 12 | }, 13 | "DVTSourceControlWorkspaceBlueprintNameKey" : "VHGithubNotifier", 14 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 15 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "VHGithubNotifier.xcworkspace", 16 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 17 | { 18 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/Nightonke\/Gitee.git", 19 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "81033B36365A4D58F1454CE6F007319E331A5DAF" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier.xcworkspace/xcuserdata/huangweiping.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /VHGithubNotifier/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/24. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface AppDelegate : NSObject 10 | 11 | 12 | @end 13 | 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_128@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_128@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_128@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_16@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_16@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_16@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_256@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_256@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_256@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_32@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_32@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_32@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_512@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_512@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/AppIcon.appiconset/icon_app_512@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_cancel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_cancel.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_cancel@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_cancel@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_cancel.imageset/icon_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_cancel.imageset/icon_cancel.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_cancel.imageset/icon_cancel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_cancel.imageset/icon_cancel@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_cancel.imageset/icon_cancel@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_cancel.imageset/icon_cancel@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_done.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_done.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_done@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_done@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_done.imageset/icon_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_done.imageset/icon_done.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_done.imageset/icon_done@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_done.imageset/icon_done@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_done.imageset/icon_done@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_done.imageset/icon_done@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_empty_trending.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_empty_trending.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_empty_trending.imageset/icon_empty_trending.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_empty_trending.imageset/icon_empty_trending.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_error.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_error.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_error.imageset/icon_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_error.imageset/icon_error.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_exit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_exit.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_exit@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_exit@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_exit.imageset/icon_exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_exit.imageset/icon_exit.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_exit.imageset/icon_exit@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_exit.imageset/icon_exit@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_exit.imageset/icon_exit@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_exit.imageset/icon_exit@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_follower@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_follower@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_follower@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower.imageset/icon_follower@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower.imageset/icon_follower@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower.imageset/icon_follower@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower.imageset/icon_follower@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower.imageset/icon_follower@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower.imageset/icon_follower@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_follower_dark@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_follower_dark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_follower_dark@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_dark.imageset/icon_follower_dark@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower_dark.imageset/icon_follower_dark@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_dark.imageset/icon_follower_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower_dark.imageset/icon_follower_dark@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_dark.imageset/icon_follower_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower_dark.imageset/icon_follower_dark@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_follower_pressed@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_follower_pressed@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_follower_pressed@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_pressed.imageset/icon_follower_pressed@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower_pressed.imageset/icon_follower_pressed@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_pressed.imageset/icon_follower_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower_pressed.imageset/icon_follower_pressed@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_follower_pressed.imageset/icon_follower_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_follower_pressed.imageset/icon_follower_pressed@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_github@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_github@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_github@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github.imageset/icon_github@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_github.imageset/icon_github@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github.imageset/icon_github@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_github.imageset/icon_github@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github.imageset/icon_github@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_github.imageset/icon_github@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github_url.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_github_url.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_github_url@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_github_url@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github_url.imageset/icon_github_url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_github_url.imageset/icon_github_url.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github_url.imageset/icon_github_url@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_github_url.imageset/icon_github_url@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_github_url.imageset/icon_github_url@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_github_url.imageset/icon_github_url@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_language.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_language@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_language@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language.imageset/icon_language.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_language.imageset/icon_language.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language.imageset/icon_language@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_language.imageset/icon_language@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language.imageset/icon_language@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_language.imageset/icon_language@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language_dot.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_language_dot.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_language_dot@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_language_dot@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language_dot.imageset/icon_language_dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_language_dot.imageset/icon_language_dot.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language_dot.imageset/icon_language_dot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_language_dot.imageset/icon_language_dot@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_language_dot.imageset/icon_language_dot@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_language_dot.imageset/icon_language_dot@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_login.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_login.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_login@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_login@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_login.imageset/icon_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_login.imageset/icon_login.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_login.imageset/icon_login@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_login.imageset/icon_login@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_login.imageset/icon_login@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_login.imageset/icon_login@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_notification.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_notification.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_notification@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_notification@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_notification.imageset/icon_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_notification.imageset/icon_notification.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_notification.imageset/icon_notification@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_notification.imageset/icon_notification@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_notification.imageset/icon_notification@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_notification.imageset/icon_notification@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_open_url.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_open_url.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_open_url@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_open_url@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_open_url.imageset/icon_open_url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_open_url.imageset/icon_open_url.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_open_url.imageset/icon_open_url@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_open_url.imageset/icon_open_url@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_open_url.imageset/icon_open_url@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_open_url.imageset/icon_open_url@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_profile.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_profile.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_profile@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_profile@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_profile.imageset/icon_profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_profile.imageset/icon_profile.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_profile.imageset/icon_profile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_profile.imageset/icon_profile@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_profile.imageset/icon_profile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_profile.imageset/icon_profile@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_read.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon_read@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_read.imageset/icon_read@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_read.imageset/icon_read@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_refresh.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_refresh.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_refresh@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_refresh@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_refresh.imageset/icon_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_refresh.imageset/icon_refresh.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_refresh.imageset/icon_refresh@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_refresh.imageset/icon_refresh@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_refresh.imageset/icon_refresh@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_refresh.imageset/icon_refresh@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_fork.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon_repository_fork@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_fork.imageset/icon_repository_fork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_repository_fork.imageset/icon_repository_fork@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_pie.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_repository_pie.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_repository_pie@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_repository_pie@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_pie.imageset/icon_repository_pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_repository_pie.imageset/icon_repository_pie.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_pie.imageset/icon_repository_pie@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_repository_pie.imageset/icon_repository_pie@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_pie.imageset/icon_repository_pie@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_repository_pie.imageset/icon_repository_pie@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_star.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon_repository_star@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_repository_star.imageset/icon_repository_star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_repository_star.imageset/icon_repository_star@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_settings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_settings.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_settings@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_settings@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_settings.imageset/icon_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_settings.imageset/icon_settings.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_settings.imageset/icon_settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_settings.imageset/icon_settings@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_settings.imageset/icon_settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_settings.imageset/icon_settings@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_star@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_star@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_star@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star.imageset/icon_star@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star.imageset/icon_star@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star.imageset/icon_star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star.imageset/icon_star@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star.imageset/icon_star@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star.imageset/icon_star@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_star_dark@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_star_dark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_star_dark@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_dark.imageset/icon_star_dark@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star_dark.imageset/icon_star_dark@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_dark.imageset/icon_star_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star_dark.imageset/icon_star_dark@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_dark.imageset/icon_star_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star_dark.imageset/icon_star_dark@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_star_pressed@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_star_pressed@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_star_pressed@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_pressed.imageset/icon_star_pressed@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star_pressed.imageset/icon_star_pressed@1x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_pressed.imageset/icon_star_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star_pressed.imageset/icon_star_pressed@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_star_pressed.imageset/icon_star_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_star_pressed.imageset/icon_star_pressed@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_status_bar_github.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_status_bar_github@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_status_bar_github@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github.imageset/icon_status_bar_github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github.imageset/icon_status_bar_github.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github.imageset/icon_status_bar_github@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github.imageset/icon_status_bar_github@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github.imageset/icon_status_bar_github@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github.imageset/icon_status_bar_github@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_status_bar_github_dark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_status_bar_github_dark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_status_bar_github_dark@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_dark.imageset/icon_status_bar_github_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github_dark.imageset/icon_status_bar_github_dark.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_dark.imageset/icon_status_bar_github_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github_dark.imageset/icon_status_bar_github_dark@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_dark.imageset/icon_status_bar_github_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github_dark.imageset/icon_status_bar_github_dark@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_status_bar_github_pressed.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_status_bar_github_pressed@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_status_bar_github_pressed@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_pressed.imageset/icon_status_bar_github_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github_pressed.imageset/icon_status_bar_github_pressed.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_pressed.imageset/icon_status_bar_github_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github_pressed.imageset/icon_status_bar_github_pressed@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_github_pressed.imageset/icon_status_bar_github_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_github_pressed.imageset/icon_status_bar_github_pressed@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_status_bar_notification.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_status_bar_notification@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_status_bar_notification@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification.imageset/icon_status_bar_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification.imageset/icon_status_bar_notification.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification.imageset/icon_status_bar_notification@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification.imageset/icon_status_bar_notification@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification.imageset/icon_status_bar_notification@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification.imageset/icon_status_bar_notification@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_status_bar_notification_dark.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_status_bar_notification_dark@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_status_bar_notification_dark@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_dark.imageset/icon_status_bar_notification_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_dark.imageset/icon_status_bar_notification_dark.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_dark.imageset/icon_status_bar_notification_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_dark.imageset/icon_status_bar_notification_dark@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_dark.imageset/icon_status_bar_notification_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_dark.imageset/icon_status_bar_notification_dark@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_status_bar_notification_pressed.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_status_bar_notification_pressed@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_status_bar_notification_pressed@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_pressed.imageset/icon_status_bar_notification_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_pressed.imageset/icon_status_bar_notification_pressed.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_pressed.imageset/icon_status_bar_notification_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_pressed.imageset/icon_status_bar_notification_pressed@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_pressed.imageset/icon_status_bar_notification_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_status_bar_notification_pressed.imageset/icon_status_bar_notification_pressed@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_time.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_time.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_time@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_time@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_time.imageset/icon_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_time.imageset/icon_time.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_time.imageset/icon_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_time.imageset/icon_time@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_time.imageset/icon_time@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_time.imageset/icon_time@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_trend.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_trend@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_trend@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend.imageset/icon_trend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend.imageset/icon_trend.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend.imageset/icon_trend@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend.imageset/icon_trend@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend.imageset/icon_trend@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend.imageset/icon_trend@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_followers.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_trend_followers.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_trend_followers@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_trend_followers@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_followers.imageset/icon_trend_followers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend_followers.imageset/icon_trend_followers.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_followers.imageset/icon_trend_followers@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend_followers.imageset/icon_trend_followers@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_followers.imageset/icon_trend_followers@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend_followers.imageset/icon_trend_followers@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_repository.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_trend_repository.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_trend_repository@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_trend_repository@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_repository.imageset/icon_trend_repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend_repository.imageset/icon_trend_repository.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_repository.imageset/icon_trend_repository@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend_repository.imageset/icon_trend_repository@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trend_repository.imageset/icon_trend_repository@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trend_repository.imageset/icon_trend_repository@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trending.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_trending.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_trending@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_trending@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trending.imageset/icon_trending.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trending.imageset/icon_trending.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trending.imageset/icon_trending@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trending.imageset/icon_trending@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_trending.imageset/icon_trending@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_trending.imageset/icon_trending@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_unsubscribe.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "icon_unsubscribe@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_unsubscribe.imageset/icon_unsubscribe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_unsubscribe.imageset/icon_unsubscribe@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_user_placeholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_user_placeholder.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_user_placeholder@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_user_placeholder@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_user_placeholder.imageset/icon_user_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_user_placeholder.imageset/icon_user_placeholder.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_user_placeholder.imageset/icon_user_placeholder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_user_placeholder.imageset/icon_user_placeholder@2x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/icon_user_placeholder.imageset/icon_user_placeholder@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/icon_user_placeholder.imageset/icon_user_placeholder@3x.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_account_info_window.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image_account_info_window.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_account_info_window.imageset/image_account_info_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/image_account_info_window.imageset/image_account_info_window.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_empty_notification.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image_empty_notification.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_empty_notification.imageset/image_empty_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/image_empty_notification.imageset/image_empty_notification.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_issue.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image_issue.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_issue.imageset/image_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/image_issue.imageset/image_issue.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_notification.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image_notification.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_notification.imageset/image_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/image_notification.imageset/image_notification.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_pull_request.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image_pull_request.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_pull_request.imageset/image_pull_request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/image_pull_request.imageset/image_pull_request.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_scroller.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image_scroller.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_scroller.imageset/image_scroller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/image_scroller.imageset/image_scroller.png -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_scroller_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image_scroller_pressed.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Assets.xcassets/image_scroller_pressed.imageset/image_scroller_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nightonke/Gitee/564f72fb137cafabc1ce3e91554d22d33d8bff22/VHGithubNotifier/Assets.xcassets/image_scroller_pressed.imageset/image_scroller_pressed.png -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Charts.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Charts.xcodeproj/xcuserdata/huangweiping.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Charts.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 1 11 | 12 | ChartsRealm.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 2 16 | 17 | ChartsTests.xcscheme_^#shared#^_ 18 | 19 | orderHint 20 | 3 21 | 22 | 23 | SuppressBuildableAutocreation 24 | 25 | 06165F231D8110E600722320 26 | 27 | primary 28 | 29 | 30 | 06165F2D1D8110E600722320 31 | 32 | primary 33 | 34 | 35 | 06B120D41D811E6200D14B02 36 | 37 | primary 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Charts/BubbleChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartView.swift 3 | // Charts 4 | // 5 | // Bubble chart implementation: 6 | // Copyright 2015 Pierre-Marc Airoldi 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class BubbleChartView: BarLineChartViewBase, BubbleChartDataProvider 16 | { 17 | open override func initialize() 18 | { 19 | super.initialize() 20 | 21 | renderer = BubbleChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 22 | } 23 | 24 | // MARK: - BubbleChartDataProbider 25 | 26 | open var bubbleData: BubbleChartData? { return _data as? BubbleChartData } 27 | } 28 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Charts/CandleStickChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CandleStickChartView.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// Financial chart type that draws candle-sticks. 16 | open class CandleStickChartView: BarLineChartViewBase, CandleChartDataProvider 17 | { 18 | internal override func initialize() 19 | { 20 | super.initialize() 21 | 22 | renderer = CandleStickChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 23 | 24 | self.xAxis.spaceMin = 0.5 25 | self.xAxis.spaceMax = 0.5 26 | } 27 | 28 | // MARK: - CandleChartDataProvider 29 | 30 | open var candleData: CandleChartData? 31 | { 32 | return _data as? CandleChartData 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Charts/LineChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartView.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// Chart that draws lines, surfaces, circles, ... 16 | open class LineChartView: BarLineChartViewBase, LineChartDataProvider 17 | { 18 | internal override func initialize() 19 | { 20 | super.initialize() 21 | 22 | renderer = LineChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 23 | } 24 | 25 | // MARK: - LineChartDataProvider 26 | 27 | open var lineData: LineChartData? { return _data as? LineChartData } 28 | } 29 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Charts/ScatterChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScatterChartView.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// The ScatterChart. Draws dots, triangles, squares and custom shapes into the chartview. 16 | open class ScatterChartView: BarLineChartViewBase, ScatterChartDataProvider 17 | { 18 | open override func initialize() 19 | { 20 | super.initialize() 21 | 22 | renderer = ScatterChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 23 | } 24 | 25 | // MARK: - ScatterChartDataProbider 26 | 27 | open var scatterData: ScatterChartData? { return _data as? ScatterChartData } 28 | } 29 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Components/ComponentBase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ComponentBase.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | /// This class encapsulates everything both Axis, Legend and LimitLines have in common 17 | @objc(ChartComponentBase) 18 | open class ComponentBase: NSObject 19 | { 20 | /// flag that indicates if this component is enabled or not 21 | open var enabled = true 22 | 23 | /// The offset this component has on the x-axis 24 | /// **default**: 5.0 25 | open var xOffset = CGFloat(5.0) 26 | 27 | /// The offset this component has on the x-axis 28 | /// **default**: 5.0 (or 0.0 on ChartYAxis) 29 | open var yOffset = CGFloat(5.0) 30 | 31 | public override init() 32 | { 33 | super.init() 34 | } 35 | 36 | open var isEnabled: Bool { return enabled } 37 | } 38 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Components/Description.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Description.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(ChartDescription) 16 | open class Description: ComponentBase 17 | { 18 | public override init() 19 | { 20 | #if os(tvOS) 21 | // 23 is the smallest recommended font size on the TV 22 | font = NSUIFont.systemFont(ofSize: 23) 23 | #elseif os(OSX) 24 | font = NSUIFont.systemFont(ofSize: NSUIFont.systemFontSize()) 25 | #else 26 | font = NSUIFont.systemFont(ofSize: 8.0) 27 | #endif 28 | 29 | super.init() 30 | } 31 | 32 | /// The text to be shown as the description. 33 | open var text: String? = "Description Label" 34 | 35 | /// Custom position for the description text in pixels on the screen. 36 | open var position: CGPoint? = nil 37 | 38 | /// The text alignment of the description text. Default RIGHT. 39 | open var textAlign: NSTextAlignment = NSTextAlignment.right 40 | 41 | /// Font object used for drawing the description text. 42 | open var font: NSUIFont 43 | 44 | /// Text color used for drawing the description text 45 | open var textColor = NSUIColor.black 46 | } 47 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarLineScatterCandleBubbleChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | open class BarLineScatterCandleBubbleChartData: ChartData 15 | { 16 | public override init() 17 | { 18 | super.init() 19 | } 20 | 21 | public override init(dataSets: [IChartDataSet]?) 22 | { 23 | super.init(dataSets: dataSets) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarLineScatterCandleBubbleChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | open class BarLineScatterCandleBubbleChartDataSet: ChartDataSet, IBarLineScatterCandleBubbleChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | open var highlightColor = NSUIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) 23 | open var highlightLineWidth = CGFloat(0.5) 24 | open var highlightLineDashPhase = CGFloat(0.0) 25 | open var highlightLineDashLengths: [CGFloat]? 26 | 27 | // MARK: - NSCopying 28 | 29 | open override func copyWithZone(_ zone: NSZone?) -> AnyObject 30 | { 31 | let copy = super.copyWithZone(zone) as! BarLineScatterCandleBubbleChartDataSet 32 | copy.highlightColor = highlightColor 33 | copy.highlightLineWidth = highlightLineWidth 34 | copy.highlightLineDashPhase = highlightLineDashPhase 35 | copy.highlightLineDashLengths = highlightLineDashLengths 36 | return copy 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartData.swift 3 | // Charts 4 | // 5 | // Bubble chart implementation: 6 | // Copyright 2015 Pierre-Marc Airoldi 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class BubbleChartData: BarLineScatterCandleBubbleChartData 16 | { 17 | public override init() 18 | { 19 | super.init() 20 | } 21 | 22 | public override init(dataSets: [IChartDataSet]?) 23 | { 24 | super.init(dataSets: dataSets) 25 | } 26 | 27 | /// Sets the width of the circle that surrounds the bubble when highlighted for all DataSet objects this data object contains 28 | open func setHighlightCircleWidth(_ width: CGFloat) 29 | { 30 | for set in (_dataSets as? [IBubbleChartDataSet])! 31 | { 32 | set.highlightCircleWidth = width 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/CandleChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CandleChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | open class CandleChartData: BarLineScatterCandleBubbleChartData 15 | { 16 | public override init() 17 | { 18 | super.init() 19 | } 20 | 21 | public override init(dataSets: [IChartDataSet]?) 22 | { 23 | super.init(dataSets: dataSets) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/LineChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | /// Data object that encapsulates all data associated with a LineChart. 15 | open class LineChartData: ChartData 16 | { 17 | public override init() 18 | { 19 | super.init() 20 | } 21 | 22 | public override init(dataSets: [IChartDataSet]?) 23 | { 24 | super.init(dataSets: dataSets) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/RadarChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | open class RadarChartData: ChartData 17 | { 18 | open var highlightColor = NSUIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) 19 | open var highlightLineWidth = CGFloat(1.0) 20 | open var highlightLineDashPhase = CGFloat(0.0) 21 | open var highlightLineDashLengths: [CGFloat]? 22 | 23 | /// Sets labels that should be drawn around the RadarChart at the end of each web line. 24 | open var labels = [String]() 25 | 26 | /// Sets the labels that should be drawn around the RadarChart at the end of each web line. 27 | open func setLabels(_ labels: String...) 28 | { 29 | self.labels = labels 30 | } 31 | 32 | public override init() 33 | { 34 | super.init() 35 | } 36 | 37 | public override init(dataSets: [IChartDataSet]?) 38 | { 39 | super.init(dataSets: dataSets) 40 | } 41 | 42 | open override func entryForHighlight(_ highlight: Highlight) -> ChartDataEntry? 43 | { 44 | return getDataSetByIndex(highlight.dataSetIndex)?.entryForIndex(Int(highlight.x)) 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarChartDataEntry.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class RadarChartDataEntry: ChartDataEntry 16 | { 17 | public required init() 18 | { 19 | super.init() 20 | } 21 | 22 | /// - parameter value: The value on the y-axis. 23 | /// - parameter data: Spot for additional data this Entry represents. 24 | public init(value: Double, data: AnyObject?) 25 | { 26 | super.init(x: 0.0, y: value, data: data) 27 | } 28 | 29 | /// - parameter value: The value on the y-axis. 30 | public convenience init(value: Double) 31 | { 32 | self.init(value: value, data: nil) 33 | } 34 | 35 | // MARK: Data property accessors 36 | 37 | open var value: Double 38 | { 39 | get { return y } 40 | set { y = value } 41 | } 42 | 43 | // MARK: NSCopying 44 | 45 | open override func copyWithZone(_ zone: NSZone?) -> AnyObject 46 | { 47 | let copy = super.copyWithZone(zone) as! RadarChartDataEntry 48 | 49 | return copy 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScatterChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class ScatterChartData: BarLineScatterCandleBubbleChartData 16 | { 17 | public override init() 18 | { 19 | super.init() 20 | } 21 | 22 | public override init(dataSets: [IChartDataSet]?) 23 | { 24 | super.init(dataSets: dataSets) 25 | } 26 | 27 | /// - returns: The maximum shape-size across all DataSets. 28 | open func getGreatestShapeSize() -> CGFloat 29 | { 30 | var max = CGFloat(0.0) 31 | 32 | for set in _dataSets 33 | { 34 | let scatterDataSet = set as? IScatterChartDataSet 35 | 36 | if scatterDataSet == nil 37 | { 38 | print("ScatterChartData: Found a DataSet which is not a ScatterChartDataSet", terminator: "\n") 39 | } 40 | else 41 | { 42 | let size = scatterDataSet!.scatterShapeSize 43 | 44 | if size > max 45 | { 46 | max = size 47 | } 48 | } 49 | } 50 | 51 | return max 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IBarLineScatterCandleBubbleChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IBarLineScatterCandleBubbleChartDataSet: IChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | var highlightColor: NSUIColor { get set } 23 | var highlightLineWidth: CGFloat { get set } 24 | var highlightLineDashPhase: CGFloat { get set } 25 | var highlightLineDashLengths: [CGFloat]? { get set } 26 | } 27 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IBubbleChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IBubbleChartDataSet: IBarLineScatterCandleBubbleChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | var maxSize: CGFloat { get } 21 | var isNormalizeSizeEnabled: Bool { get } 22 | 23 | // MARK: - Styling functions and accessors 24 | 25 | /// Sets/gets the width of the circle that surrounds the bubble when highlighted 26 | var highlightCircleWidth: CGFloat { get set } 27 | } 28 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ILineScatterCandleRadarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | @objc 15 | public protocol ILineScatterCandleRadarChartDataSet: IBarLineScatterCandleBubbleChartDataSet 16 | { 17 | // MARK: - Data functions and accessors 18 | 19 | // MARK: - Styling functions and accessors 20 | 21 | /// Enables / disables the horizontal highlight-indicator. If disabled, the indicator is not drawn. 22 | var drawHorizontalHighlightIndicatorEnabled: Bool { get set } 23 | 24 | /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. 25 | var drawVerticalHighlightIndicatorEnabled: Bool { get set } 26 | 27 | /// - returns: `true` if horizontal highlight indicator lines are enabled (drawn) 28 | var isHorizontalHighlightIndicatorEnabled: Bool { get } 29 | 30 | /// - returns: `true` if vertical highlight indicator lines are enabled (drawn) 31 | var isVerticalHighlightIndicatorEnabled: Bool { get } 32 | 33 | /// Enables / disables both vertical and horizontal highlight-indicators. 34 | /// :param: enabled 35 | func setDrawHighlightIndicators(_ enabled: Bool) 36 | } 37 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Interfaces/IRadarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IRadarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IRadarChartDataSet: ILineRadarChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | /// flag indicating whether highlight circle should be drawn or not 23 | var drawHighlightCircleEnabled: Bool { get set } 24 | 25 | var isDrawHighlightCircleEnabled: Bool { get } 26 | 27 | var highlightCircleFillColor: NSUIColor? { get set } 28 | 29 | /// The stroke color for highlight circle. 30 | /// If `nil`, the color of the dataset is taken. 31 | var highlightCircleStrokeColor: NSUIColor? { get set } 32 | 33 | var highlightCircleStrokeAlpha: CGFloat { get set } 34 | 35 | var highlightCircleInnerRadius: CGFloat { get set } 36 | 37 | var highlightCircleOuterRadius: CGFloat { get set } 38 | 39 | var highlightCircleStrokeWidth: CGFloat { get set } 40 | } 41 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Data/Interfaces/IScatterChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IScatterChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IScatterChartDataSet: ILineScatterCandleRadarChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | /// - returns: The size the scatter shape will have 23 | var scatterShapeSize: CGFloat { get } 24 | 25 | /// - returns: The radius of the hole in the shape (applies to Square, Circle and Triangle) 26 | /// Set this to <= 0 to remove holes. 27 | /// **default**: 0.0 28 | var scatterShapeHoleRadius: CGFloat { get } 29 | 30 | /// - returns: Color for the hole in the shape. Setting to `nil` will behave as transparent. 31 | /// **default**: nil 32 | var scatterShapeHoleColor: NSUIColor? { get } 33 | 34 | /// - returns: The IShapeRenderer responsible for rendering this DataSet. 35 | var shapeRenderer: IShapeRenderer? { get } 36 | } 37 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Formatters/IAxisValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IAxisValueFormatter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | /// An interface for providing custom axis Strings. 15 | @objc(IChartAxisValueFormatter) 16 | public protocol IAxisValueFormatter : NSObjectProtocol 17 | { 18 | 19 | /// Called when a value from an axis is formatted before being drawn. 20 | /// 21 | /// For performance reasons, avoid excessive calculations and memory allocations inside this method. 22 | /// 23 | /// - returns: The customized label that is drawn on the x-axis. 24 | /// - parameter value: the value that is currently being drawn 25 | /// - parameter axis: the axis that the value belongs to 26 | /// 27 | func stringForValue(_ value: Double, 28 | axis: AxisBase?) -> String 29 | 30 | } 31 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Formatters/IFillFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IFillFormatter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// Protocol for providing a custom logic to where the filling line of a LineDataSet should end. This of course only works if setFillEnabled(...) is set to true. 16 | @objc(IChartFillFormatter) 17 | public protocol IFillFormatter 18 | { 19 | /// - returns: The vertical (y-axis) position where the filled-line of the LineDataSet should end. 20 | func getFillLinePosition(dataSet: ILineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat 21 | } 22 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Highlight/IHighlighter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IHighlighter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(IChartHighlighter) 16 | public protocol IHighlighter : NSObjectProtocol 17 | { 18 | /// - returns: A Highlight object corresponding to the given x- and y- touch positions in pixels. 19 | /// - parameter x: 20 | /// - parameter y: 21 | /// - returns: 22 | func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? 23 | } 24 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Highlight/PieHighlighter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PieHighlighter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(PieChartHighlighter) 16 | open class PieHighlighter: PieRadarHighlighter 17 | { 18 | open override func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight? 19 | { 20 | guard let set = chart?.data?.dataSets[0] 21 | else { return nil } 22 | 23 | guard let entry = set.entryForIndex(index) 24 | else { return nil } 25 | 26 | return Highlight(x: Double(index), y: entry.y, xPx: x, yPx: y, dataSetIndex: 0, axis: set.axisDependency) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Highlight/Range.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Range.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | @objc(ChartRange) 15 | open class Range: NSObject 16 | { 17 | open var from: Double 18 | open var to: Double 19 | 20 | public init(from: Double, to: Double) 21 | { 22 | self.from = from 23 | self.to = to 24 | 25 | super.init() 26 | } 27 | 28 | /// - returns: `true` if this range contains (if the value is in between) the given value, `false` ifnot. 29 | /// - parameter value: 30 | open func contains(_ value: Double) -> Bool 31 | { 32 | if value > from && value <= to 33 | { 34 | return true 35 | } 36 | else 37 | { 38 | return false 39 | } 40 | } 41 | 42 | open func isLarger(_ value: Double) -> Bool 43 | { 44 | return value > to 45 | } 46 | 47 | open func isSmaller(_ value: Double) -> Bool 48 | { 49 | return value < from 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/BarChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol BarChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var barData: BarChartData? { get } 19 | 20 | var isDrawBarShadowEnabled: Bool { get } 21 | var isDrawValueAboveBarEnabled: Bool { get } 22 | var isHighlightFullBarEnabled: Bool { get } 23 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarLineScatterCandleBubbleChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol BarLineScatterCandleBubbleChartDataProvider: ChartDataProvider 17 | { 18 | func getTransformer(forAxis: YAxis.AxisDependency) -> Transformer 19 | func isInverted(axis: YAxis.AxisDependency) -> Bool 20 | 21 | var lowestVisibleX: Double { get } 22 | var highestVisibleX: Double { get } 23 | } 24 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/BubbleChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol BubbleChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var bubbleData: BubbleChartData? { get } 19 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/CandleChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CandleChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol CandleChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var candleData: CandleChartData? { get } 19 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/ChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol ChartDataProvider 17 | { 18 | /// - returns: The minimum x-value of the chart, regardless of zoom or translation. 19 | var chartXMin: Double { get } 20 | 21 | /// - returns: The maximum x-value of the chart, regardless of zoom or translation. 22 | var chartXMax: Double { get } 23 | 24 | /// - returns: The minimum y-value of the chart, regardless of zoom or translation. 25 | var chartYMin: Double { get } 26 | 27 | /// - returns: The maximum y-value of the chart, regardless of zoom or translation. 28 | var chartYMax: Double { get } 29 | 30 | var maxHighlightDistance: CGFloat { get } 31 | 32 | var xRange: Double { get } 33 | 34 | var centerOffsets: CGPoint { get } 35 | 36 | var data: ChartData? { get } 37 | 38 | var maxVisibleCount: Int { get } 39 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/CombinedChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CombinedChartDataProvider.swoft 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol CombinedChartDataProvider: LineChartDataProvider, BarChartDataProvider, BubbleChartDataProvider, CandleChartDataProvider, ScatterChartDataProvider 17 | { 18 | var combinedData: CombinedChartData? { get } 19 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/LineChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol LineChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var lineData: LineChartData? { get } 19 | 20 | func getAxis(_ axis: YAxis.AxisDependency) -> YAxis 21 | } 22 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Interfaces/ScatterChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScatterChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol ScatterChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var scatterData: ScatterChartData? { get } 19 | } -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Jobs/MoveViewJob.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MoveViewJob.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | #if !os(OSX) 16 | import UIKit 17 | #endif 18 | 19 | @objc(MoveChartViewJob) 20 | open class MoveViewJob: ViewPortJob 21 | { 22 | public override init( 23 | viewPortHandler: ViewPortHandler, 24 | xValue: Double, 25 | yValue: Double, 26 | transformer: Transformer, 27 | view: ChartViewBase) 28 | { 29 | super.init( 30 | viewPortHandler: viewPortHandler, 31 | xValue: xValue, 32 | yValue: yValue, 33 | transformer: transformer, 34 | view: view) 35 | } 36 | 37 | open override func doJob() 38 | { 39 | guard 40 | let viewPortHandler = viewPortHandler, 41 | let transformer = transformer, 42 | let view = view 43 | else { return } 44 | 45 | var pt = CGPoint( 46 | x: CGFloat(xValue), 47 | y: CGFloat(yValue) 48 | ) 49 | 50 | transformer.pointValueToPixel(&pt) 51 | viewPortHandler.centerViewPort(pt: pt, chart: view) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Jobs/ViewPortJob.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewPortJob.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | // This defines a viewport modification job, used for delaying or animating viewport changes 16 | @objc(ChartViewPortJob) 17 | open class ViewPortJob: NSObject 18 | { 19 | internal var point: CGPoint = CGPoint() 20 | internal weak var viewPortHandler: ViewPortHandler? 21 | internal var xValue: Double = 0.0 22 | internal var yValue: Double = 0.0 23 | internal weak var transformer: Transformer? 24 | internal weak var view: ChartViewBase? 25 | 26 | public init( 27 | viewPortHandler: ViewPortHandler, 28 | xValue: Double, 29 | yValue: Double, 30 | transformer: Transformer, 31 | view: ChartViewBase) 32 | { 33 | super.init() 34 | 35 | self.viewPortHandler = viewPortHandler 36 | self.xValue = xValue 37 | self.yValue = yValue 38 | self.transformer = transformer 39 | self.view = view 40 | } 41 | 42 | open func doJob() 43 | { 44 | // Override this 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Renderers/Renderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Renderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(ChartRenderer) 16 | open class Renderer: NSObject 17 | { 18 | /// the component that handles the drawing area of the chart and it's offsets 19 | open var viewPortHandler: ViewPortHandler? 20 | 21 | public override init() 22 | { 23 | super.init() 24 | } 25 | 26 | public init(viewPortHandler: ViewPortHandler?) 27 | { 28 | super.init() 29 | self.viewPortHandler = viewPortHandler 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChevronDownShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | 13 | open class ChevronDownShapeRenderer : NSObject, IShapeRenderer 14 | { 15 | open func renderShape( 16 | context: CGContext, 17 | dataSet: IScatterChartDataSet, 18 | viewPortHandler: ViewPortHandler, 19 | point: CGPoint, 20 | color: NSUIColor) 21 | { 22 | let shapeSize = dataSet.scatterShapeSize 23 | let shapeHalf = shapeSize / 2.0 24 | 25 | context.setLineWidth(1.0) 26 | context.setStrokeColor(color.cgColor) 27 | 28 | context.beginPath() 29 | context.move(to: CGPoint(x: point.x, y: point.y + 2 * shapeHalf)) 30 | context.addLine(to: CGPoint(x: point.x + 2 * shapeHalf, y: point.y)) 31 | context.move(to: CGPoint(x: point.x, y: point.y + 2 * shapeHalf)) 32 | context.addLine(to: CGPoint(x: point.x - 2 * shapeHalf, y: point.y)) 33 | context.strokePath() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChevronUpShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | 13 | open class ChevronUpShapeRenderer : NSObject, IShapeRenderer 14 | { 15 | open func renderShape( 16 | context: CGContext, 17 | dataSet: IScatterChartDataSet, 18 | viewPortHandler: ViewPortHandler, 19 | point: CGPoint, 20 | color: NSUIColor) 21 | { 22 | let shapeSize = dataSet.scatterShapeSize 23 | let shapeHalf = shapeSize / 2.0 24 | 25 | context.setLineWidth(1.0) 26 | context.setStrokeColor(color.cgColor) 27 | 28 | context.beginPath() 29 | context.move(to: CGPoint(x: point.x, y: point.y - 2 * shapeHalf)) 30 | context.addLine(to: CGPoint(x: point.x + 2 * shapeHalf, y: point.y)) 31 | context.move(to: CGPoint(x: point.x, y: point.y - 2 * shapeHalf)) 32 | context.addLine(to: CGPoint(x: point.x - 2 * shapeHalf, y: point.y)) 33 | context.strokePath() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CrossShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | 13 | open class CrossShapeRenderer : NSObject, IShapeRenderer 14 | { 15 | open func renderShape( 16 | context: CGContext, 17 | dataSet: IScatterChartDataSet, 18 | viewPortHandler: ViewPortHandler, 19 | point: CGPoint, 20 | color: NSUIColor) 21 | { 22 | let shapeSize = dataSet.scatterShapeSize 23 | let shapeHalf = shapeSize / 2.0 24 | 25 | context.setLineWidth(1.0) 26 | context.setStrokeColor(color.cgColor) 27 | 28 | context.beginPath() 29 | context.move(to: CGPoint(x: point.x - shapeHalf, y: point.y)) 30 | context.addLine(to: CGPoint(x: point.x + shapeHalf, y: point.y)) 31 | context.move(to: CGPoint(x: point.x, y: point.y - shapeHalf)) 32 | context.addLine(to: CGPoint(x: point.x, y: point.y + shapeHalf)) 33 | context.strokePath() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Renderers/Scatter/IShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | @objc 15 | public protocol IShapeRenderer : NSObjectProtocol 16 | { 17 | /// Renders the provided ScatterDataSet with a shape. 18 | /// 19 | /// - parameter context: CGContext for drawing on 20 | /// - parameter dataSet: The DataSet to be drawn 21 | /// - parameter viewPortHandler: Contains information about the current state of the view 22 | /// - parameter point: Position to draw the shape at 23 | /// - parameter color: Color to draw the shape 24 | func renderShape( 25 | context: CGContext, 26 | dataSet: IScatterChartDataSet, 27 | viewPortHandler: ViewPortHandler, 28 | point: CGPoint, 29 | color: NSUIColor) 30 | } 31 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Renderers/Scatter/XShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | 13 | open class XShapeRenderer : NSObject, IShapeRenderer 14 | { 15 | open func renderShape( 16 | context: CGContext, 17 | dataSet: IScatterChartDataSet, 18 | viewPortHandler: ViewPortHandler, 19 | point: CGPoint, 20 | color: NSUIColor) 21 | { 22 | let shapeSize = dataSet.scatterShapeSize 23 | let shapeHalf = shapeSize / 2.0 24 | 25 | context.setLineWidth(1.0) 26 | context.setStrokeColor(color.cgColor) 27 | 28 | context.beginPath() 29 | context.move(to: CGPoint(x: point.x - shapeHalf, y: point.y - shapeHalf)) 30 | context.addLine(to: CGPoint(x: point.x + shapeHalf, y: point.y + shapeHalf)) 31 | context.move(to: CGPoint(x: point.x + shapeHalf, y: point.y - shapeHalf)) 32 | context.addLine(to: CGPoint(x: point.x - shapeHalf, y: point.y + shapeHalf)) 33 | context.strokePath() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Charts/Utils/TransformerHorizontalBarChart.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformerHorizontalBarChart.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(ChartTransformerHorizontalBarChart) 16 | open class TransformerHorizontalBarChart: Transformer 17 | { 18 | /// Prepares the matrix that contains all offsets. 19 | open override func prepareMatrixOffset(inverted: Bool) 20 | { 21 | if !inverted 22 | { 23 | _matrixOffset = CGAffineTransform(translationX: _viewPortHandler.offsetLeft, y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) 24 | } 25 | else 26 | { 27 | _matrixOffset = CGAffineTransform(scaleX: -1.0, y: 1.0) 28 | _matrixOffset = _matrixOffset.translatedBy(x: -(_viewPortHandler.chartWidth - _viewPortHandler.offsetRight), 29 | y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Supporting Files/Charts.h: -------------------------------------------------------------------------------- 1 | // 2 | // Charts.h 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #include 13 | 14 | #if TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_IPHONE_SIMULATOR 15 | #import 16 | #else 17 | #import 18 | #endif 19 | 20 | //! Project version number for Charts. 21 | FOUNDATION_EXPORT double ChartsVersionNumber; 22 | 23 | //! Project version string for Charts. 24 | FOUNDATION_EXPORT const unsigned char ChartsVersionString[]; 25 | 26 | // In this header, you should import all the public headers of your framework using statements like #import 27 | 28 | 29 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Supporting Files/ChartsRealm.h: -------------------------------------------------------------------------------- 1 | // 2 | // ChartsRealm.h 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | 14 | //! Project version number for ChartsRealm. 15 | FOUNDATION_EXPORT double ChartsRealmVersionNumber; 16 | 17 | //! Project version string for ChartsRealm. 18 | FOUNDATION_EXPORT const unsigned char ChartsRealmVersionString[]; 19 | 20 | // In this header, you should import all the public headers of your framework using statements like #import 21 | 22 | 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/Charts/Source/Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 23 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /VHGithubNotifier/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Gitee 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | $(PRODUCT_NAME) 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.0.2.7 23 | CFBundleVersion 24 | 1027 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | LSUIElement 28 | 29 | NSAppTransportSecurity 30 | 31 | NSAllowsArbitraryLoads 32 | 33 | 34 | NSHumanReadableCopyright 35 | Copyright © 2016年 黄伟平. All rights reserved. 36 | NSMainStoryboardFile 37 | Main 38 | NSPrincipalClass 39 | NSApplication 40 | 41 | 42 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+ChartDataProvider.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+ChartDataProvider.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/4. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager.h" 10 | #import "VHGithubNotifier-Swift.h" 11 | 12 | @interface VHGithubNotifierManager (ChartDataProvider) 13 | 14 | - (PieChartData *)userRepositoriesPieData; 15 | 16 | - (void)updateUserRepositoriesPieData; 17 | 18 | - (NSString *)urlFromRepositoryName:(NSString *)name; 19 | 20 | - (NSUInteger)repositoriesPieTotalStarNumber; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+Language.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+Language.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/20. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager.h" 10 | 11 | extern NSInteger const AllLanguageID; 12 | extern NSInteger const UnknownLanguageID; 13 | 14 | @interface VHGithubNotifierManager (Language) 15 | 16 | - (void)innerInitializeLanguages; 17 | 18 | - (void)startTimerOfLanguage; 19 | 20 | - (void)stopTimerOfLanguage; 21 | 22 | - (void)updateLanguages; 23 | 24 | - (VHLoadStateType)languagesLoadState; 25 | 26 | - (NSInteger)matchLanguageIndexFromSearchString:(NSString *)searchLanguageName; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+Profile.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+Profile.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager.h" 10 | #import "VHContributionBlock.h" 11 | #import "VHContributionChartDrawer.h" 12 | 13 | @interface VHGithubNotifierManager (Profile) 14 | 15 | #pragma mark - Cookie 16 | 17 | - (void)startTimerOfProfile; 18 | 19 | - (void)stopTimerOfProfile; 20 | 21 | - (void)updateProfile; 22 | 23 | - (VHLoadStateType)contributionLoadState; 24 | 25 | - (NSArray *)contributionBlocks; 26 | 27 | - (BOOL)loginCookieExist:(BOOL)sendNotification; 28 | 29 | - (VHContributionChartDrawer *)contributionChartDrawer; 30 | 31 | - (NSUInteger)yearContributions; 32 | 33 | - (NSString *)yearContributionsTimeString; 34 | 35 | - (NSUInteger)todayContributions; 36 | 37 | - (NSString *)todayContributionsTimeString; 38 | 39 | - (void)updateContributionChartLocally; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+Realm.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+Realm.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/5. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager.h" 10 | #import 11 | 12 | @interface VHGithubNotifierManager (Realm) 13 | 14 | /** 15 | Get the realm. 16 | 17 | @return realm 18 | */ 19 | - (RLMRealm *)realm; 20 | 21 | /** 22 | Persist user data to realm. 23 | */ 24 | - (void)persistUser; 25 | 26 | /** 27 | Persist user data to realm. 28 | 29 | @param user the user needed to persist 30 | */ 31 | - (void)persistUser:(VHUser *)user; 32 | 33 | /** 34 | Load user data from realm. 35 | */ 36 | - (void)loadUser; 37 | 38 | /** 39 | Realm directory. 40 | 41 | @return url of realm directory 42 | */ 43 | - (NSURL *)realmDirectory; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+Realm.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+Realm.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/5. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager+Realm.h" 10 | 11 | @implementation VHGithubNotifierManager (Realm) 12 | 13 | - (RLMRealm *)realm 14 | { 15 | return [RLMRealm defaultRealm]; 16 | } 17 | 18 | - (void)persistUser 19 | { 20 | [self persistUser:self.user]; 21 | } 22 | 23 | - (void)persistUser:(VHUser *)user 24 | { 25 | @autoreleasepool 26 | { 27 | RLMRealm *realm = [self realm]; 28 | [realm transactionWithBlock:^{ 29 | [realm addOrUpdateObject:user]; 30 | }]; 31 | } 32 | } 33 | 34 | - (void)loadUser 35 | { 36 | VHUser *user = SAFE_CAST([[VHUser allObjects] firstObject], [VHUser class]); 37 | if (user != nil) 38 | { 39 | self.user = user; 40 | [self.user resetStarCount]; 41 | } 42 | } 43 | 44 | - (NSURL *)realmDirectory 45 | { 46 | return [[self realm].configuration.fileURL URLByDeletingLastPathComponent]; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+Trend.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+Trend.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/4. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager.h" 10 | #import 11 | 12 | @interface VHGithubNotifierManager (Trend) 13 | 14 | - (void)innerInitializePropertiesForTrend; 15 | 16 | - (void)updateTrendData; 17 | 18 | - (RLMResults *)trendDatas; 19 | 20 | - (BOOL)loadTrendChartInWebView:(WKWebView *)webView withTrendContentIndex:(NSUInteger)contentIndex withTitle:(NSString *)title; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+Trending.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+Trending.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/21. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager.h" 10 | 11 | @interface VHGithubNotifierManager (Trending) 12 | 13 | - (void)startTimerOfTrending; 14 | 15 | - (void)stopTimerOfTrending; 16 | 17 | - (void)updateTrending; 18 | 19 | - (VHLoadStateType)trendingContentLoadState; 20 | 21 | - (BOOL)hasValidTrendingData; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager+UserNotification.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager+UserNotification.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/1. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifierManager.h" 10 | #import "VHNotification.h" 11 | #import "CNUserNotificationCenter.h" 12 | #import "CNUserNotificationCenterDelegate.h" 13 | 14 | @interface VHGithubNotifierManager (UserNotification) 15 | 16 | - (void)innerInitializePropertiesForUserNotification; 17 | 18 | - (void)addNotifications:(NSArray *)notifications; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/25. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHUser.h" 10 | #import "VHLanguage.h" 11 | #import "VHTrendingRepository.h" 12 | #import "UAGithubEngine.h" 13 | 14 | @interface VHGithubNotifierManager : NSObject 15 | 16 | @property (nonatomic, strong) VHUser *user; 17 | @property (nonatomic, strong) NSArray *languages; 18 | @property (nonatomic, strong) NSArray *trendingRepositories; 19 | 20 | + (instancetype)sharedManager; 21 | 22 | - (UAGithubEngine *)engine; 23 | 24 | - (void)startTimerOfBasicInfo; 25 | 26 | - (void)stopTimerOfBasicInfo; 27 | 28 | - (void)updateBasicInfo; 29 | 30 | - (void)updateAllTimer; 31 | 32 | - (void)redirectLogToDocuments; 33 | 34 | - (void)confirmUserAccount:(NSString *)username withPassword:(NSString *)password withOauthToken:(NSString *)oauthToken; 35 | 36 | - (VHLoadStateType)repositoriesLoadState; 37 | 38 | - (BOOL)userAccountInfoExist; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/Manager/VHGithubNotifierManager_Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifierManager_Private.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/27. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #ifndef VHGithubNotifierManager_Private_h 10 | #define VHGithubNotifierManager_Private_h 11 | 12 | #import "VHUser.h" 13 | #import "VHGithubNotifierManager.h" 14 | 15 | @interface VHGithubNotifierManager () 16 | 17 | @property (nonatomic, strong) VHUser *backupUser; 18 | @property (nonatomic, assign) BOOL hasLoadedLanguagesSuccessfully; 19 | @property (nonatomic, assign) BOOL hasLoadedTrendingsSuccessfully; 20 | 21 | @end 22 | 23 | #endif /* VHGithubNotifierManager_Private_h */ 24 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHContributionBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHContributionBlock.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "TFHpple.h" 10 | 11 | @interface VHContributionBlock : NSObject 12 | 13 | @property (nonatomic, assign) Byte level; 14 | @property (nonatomic, assign) NSUInteger contributions; 15 | @property (nonatomic, strong) NSDate *date; 16 | 17 | - (instancetype)initWithHppleElement:(TFHppleElement *)element; 18 | 19 | - (NSColor *)leftFaceColor; 20 | 21 | - (NSColor *)rightFaceColor; 22 | 23 | - (NSColor *)topFaceColor; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHContributionChartDrawer.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHContributionChartDrawer.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHContributionChartFaceDrawer.h" 10 | #import "VHContributionBlock.h" 11 | 12 | @interface VHContributionChartDrawer : NSObject 13 | 14 | @property (nonatomic, strong, readonly) NSArray *faces; 15 | 16 | - (void)readyForDrawingFromContributionBlocks:(NSArray *)contributionBlocks; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHContributionChartFaceDrawer.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHContributionChartFaceDrawer.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHContributionChartFaceDrawer : NSObject 10 | 11 | @property (nonatomic, assign) CGPoint p1; 12 | @property (nonatomic, assign) CGPoint p2; 13 | @property (nonatomic, assign) CGPoint p3; 14 | @property (nonatomic, assign) CGPoint p4; 15 | @property (nonatomic, strong) NSColor *color; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHContributionChartFaceDrawer.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHContributionChartFaceDrawer.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHContributionChartFaceDrawer.h" 10 | 11 | @implementation VHContributionChartFaceDrawer 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHHTTPResponseSerializer.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHHTTPResponseSerializer.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/20. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHHTTPResponseSerializer : AFHTTPResponseSerializer 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHHTTPResponseSerializer.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHHTTPResponseSerializer.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/20. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHHTTPResponseSerializer.h" 10 | 11 | @implementation VHHTTPResponseSerializer 12 | 13 | - (id)responseObjectForResponse:(NSURLResponse *)response 14 | data:(NSData *)data 15 | error:(NSError *__autoreleasing *)error 16 | { 17 | return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 18 | } 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHLanguage.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHLanguage.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/20. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHLanguage : RLMObject 12 | 13 | @property long long languageId; 14 | @property NSString *name; 15 | @property NSString *requestName; 16 | @property NSString *colorValue; 17 | 18 | + (NSArray *)languagesFromData:(NSString *)data; 19 | 20 | - (NSColor *)color; 21 | 22 | - (BOOL)isValid; 23 | 24 | @end 25 | 26 | RLM_ARRAY_TYPE(VHLanguage) 27 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHNotificationRecord.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationRecord.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/1. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHNotificationRecord : RLMObject 12 | 13 | @property long long notificationId; 14 | @property NSDate *latestUpdateTime; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHNotificationRecord.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationRecord.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/1. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHNotificationRecord.h" 10 | 11 | @implementation VHNotificationRecord 12 | 13 | + (NSString *)primaryKey 14 | { 15 | return @"notificationId"; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHRecord.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHRecord.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/5. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHRecord : RLMObject 12 | 13 | @property NSDate *date; 14 | @property long long number; 15 | 16 | + (NSArray *)anytimeRecordsFromRecords:(NSArray *)records; 17 | 18 | + (NSArray *)dayRecordsFromRecords:(NSArray *)records; 19 | 20 | + (NSArray *)weekRecordsFromRecords:(NSArray *)records; 21 | 22 | + (NSArray *)monthRecordsFromRecords:(NSArray *)records; 23 | 24 | + (NSArray *)yearRecordsFromRecords:(NSArray *)records; 25 | 26 | - (instancetype)initWithNumber:(long long)number; 27 | 28 | @end 29 | 30 | RLM_ARRAY_TYPE(VHRecord) 31 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHRepository.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHRepository.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/25. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "VHRecord.h" 11 | #import "VHGithubNotifier-Swift.h" 12 | 13 | @interface VHRepository : RLMObject 14 | 15 | @property long long repositoryId; 16 | @property NSString *name; 17 | @property NSString *repositoryDescription; 18 | @property NSString *language; 19 | @property NSString *url; 20 | @property long long starNumber; 21 | @property long long forkNumber; 22 | @property BOOL isPrivate; 23 | @property long long ownerId; 24 | @property NSString *ownerAccount; 25 | @property NSString *ownerAvatar; 26 | 27 | @property RLMArray *starRecords; 28 | @property RLMArray *forkRecords; 29 | 30 | - (instancetype)initWithDataDictionary:(NSDictionary *)dictionary; 31 | 32 | /** 33 | Init records for a new repository. 34 | */ 35 | - (void)addRecords; 36 | 37 | /** 38 | Update records from an old repository in realm. 39 | 40 | @param oldRepository old repository in realm 41 | */ 42 | - (void)updateRecordsFrom:(VHRepository *)oldRepository; 43 | 44 | @end 45 | 46 | RLM_ARRAY_TYPE(VHRepository) 47 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHSimpleRepository.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHSimpleRepository.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/26. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHSimpleRepository : NSObject 10 | 11 | @property (nonatomic, assign) long long repositoryId; 12 | @property (nonatomic, strong) NSString *fullName; 13 | @property (nonatomic, strong) NSString *htmlUrl; 14 | @property (nonatomic, strong) NSString *ownerName; 15 | @property (nonatomic, strong) NSString *name; 16 | 17 | - (instancetype)initFromResponseDictionary:(NSDictionary *)dic; 18 | 19 | - (BOOL)isValid; 20 | 21 | - (BOOL)isEqualToRepository:(VHSimpleRepository *)repository; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHTrendChartParser.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTrendChartParser.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/4. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHRecord.h" 10 | 11 | @interface VHTrendChartParser : NSObject 12 | 13 | + (NSString *)chartHtmlContentWithTitle:(NSString *)title withRecords:(NSArray *)records withYValueName:(NSString *)yValueName; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /VHGithubNotifier/Model/VHTrendingRepository.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTrendingRepository.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/21. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHTrendingRepository : NSObject 10 | 11 | @property (nonatomic, strong) NSString *url; 12 | @property (nonatomic, strong) NSString *name; 13 | @property (nonatomic, strong) NSString *ownerAccount; 14 | @property (nonatomic, strong) NSString *repositoryDescription; 15 | @property (nonatomic, strong) NSString *languageName; 16 | @property (nonatomic, strong) NSColor *languageColor; 17 | @property (nonatomic, strong) NSString *starNumberString; 18 | @property (nonatomic, assign, readonly) NSInteger starNumber; 19 | @property (nonatomic, strong) NSString *forkNumberString; 20 | @property (nonatomic, assign, readonly) NSInteger forkNumber; 21 | @property (nonatomic, strong) NSArray *contributorAvatars; 22 | @property (nonatomic, strong) NSString *trendingTip; 23 | @property (nonatomic, assign, readonly) NSInteger trendingTipStarNumber; 24 | 25 | - (BOOL)isValid; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/CNUserNotification/AppledocSettings.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | --project-name 6 | CNUserNotification 7 | --project-company 8 | cocoa:naut 9 | --project-version 10 | 0.1.4 11 | --company-id 12 | com.cocoanaut 13 | --ignore 14 | 15 | *.m 16 | CNAppDelegate.* 17 | 18 | --docset-platform-family 19 | osx 20 | --create-docset 21 | 22 | --install-docset 23 | 24 | --create-html 25 | 26 | --index-desc 27 | ../DocIndex.md 28 | --output 29 | ../Documentation/ 30 | include 31 | ../Documentation/Images 32 | --warn-empty-description 33 | 34 | --warn-missing-arg 35 | 36 | --warn-unknown-directive 37 | 38 | --logformat 39 | xcode 40 | --exit-threshold 41 | 2 42 | --repeat-first-par 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/CNUserNotification/CNUserNotificationFeature.m: -------------------------------------------------------------------------------- 1 | // 2 | // CNUserNotificationFeature.m 3 | // CNUserNotification Example 4 | // 5 | // Created by Frank Gregor on 26.05.13. 6 | // Copyright (c) 2013 cocoa:naut. All rights reserved. 7 | // 8 | 9 | #import "CNUserNotificationFeature.h" 10 | 11 | @implementation CNUserNotificationFeature 12 | 13 | - (id)init 14 | { 15 | self = [super init]; 16 | if (self) { 17 | _dismissDelayTime = 5; 18 | _lineBreakMode = NSLineBreakByTruncatingTail; 19 | _bannerImage = [NSApp applicationIconImage]; 20 | } 21 | return self; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/Hpple/XPathQuery.h: -------------------------------------------------------------------------------- 1 | // 2 | // XPathQuery.h 3 | // FuelFinder 4 | // 5 | // Created by Matt Gallagher on 4/08/08. 6 | // Copyright 2008 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NSArray *PerformHTMLXPathQuery(NSData *document, NSString *query); 12 | NSArray *PerformHTMLXPathQueryWithEncoding(NSData *document, NSString *query,NSString *encoding); 13 | NSArray *PerformXMLXPathQuery(NSData *document, NSString *query); 14 | NSArray *PerformXMLXPathQueryWithEncoding(NSData *document, NSString *query,NSString *encoding); 15 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSArray+Safe.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Safe.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/22. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface NSArray (Safe) 10 | 11 | - (ObjectType)safeObjectAtIndex:(NSUInteger)index; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSArray+Safe.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Safe.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/22. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "NSArray+Safe.h" 10 | 11 | @implementation NSArray (Safe) 12 | 13 | - (id)safeObjectAtIndex:(NSUInteger)index 14 | { 15 | if (index >= self.count) 16 | { 17 | return nil; 18 | } 19 | return [self objectAtIndex:index]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSColor+Utils.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSColor+Utils.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface NSColor (Utils) 10 | 11 | - (NSColor *)lighterColor; 12 | 13 | - (NSColor *)darkerColor; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSColor+Utils.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSColor+Utils.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "NSColor+Utils.h" 10 | 11 | @implementation NSColor (Utils) 12 | 13 | - (NSColor *)lighterColor 14 | { 15 | CGFloat h, s, b, a; 16 | [self getHue:&h saturation:&s brightness:&b alpha:&a]; 17 | return [NSColor colorWithHue:h 18 | saturation:s 19 | brightness:MIN(b * 1.3, 1.0) 20 | alpha:a]; 21 | return nil; 22 | } 23 | 24 | - (NSColor *)darkerColor 25 | { 26 | CGFloat h, s, b, a; 27 | [self getHue:&h saturation:&s brightness:&b alpha:&a]; 28 | return [NSColor colorWithHue:h 29 | saturation:s 30 | brightness:b * 0.75 31 | alpha:a]; 32 | return nil; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSDate+Utils.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDate+Utils.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/16. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface NSDate (Utils) 10 | 11 | - (NSDate *)dateOfDay; 12 | 13 | - (BOOL)isSameDayAsDate:(NSDate *)date; 14 | 15 | - (BOOL)isSameWeekAsDate:(NSDate *)date byWeekStartFrom:(VHGithubWeekStartFrom)from; 16 | 17 | - (BOOL)isSameMonthAsDate:(NSDate *)date; 18 | 19 | - (BOOL)isSameYearAsDate:(NSDate *)date; 20 | 21 | - (NSDate *)toLocalTime; 22 | 23 | - (NSDate *)toGlobalTime; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSImage+Tint.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSImage+Tint.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/7. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface NSImage (Tint) 10 | 11 | - (NSImage *)imageTintedWithColor:(NSColor *)tint; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSImage+Tint.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSImage+Tint.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/7. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "NSImage+Tint.h" 10 | 11 | @implementation NSImage (Tint) 12 | 13 | - (NSImage *)imageTintedWithColor:(NSColor *)tint 14 | { 15 | NSImage *image = [self copy]; 16 | if (tint) { 17 | [image lockFocus]; 18 | [tint set]; 19 | NSRect imageRect = {NSZeroPoint, [image size]}; 20 | NSRectFillUsingOperation(imageRect, NSCompositeSourceAtop); 21 | [image unlockFocus]; 22 | } 23 | return image; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSImageView+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSImageView+AFNetworking.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/9. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "AFImageDownloader.h" 10 | 11 | @interface NSImageView (AFNetworking) 12 | 13 | + (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader; 14 | 15 | + (AFImageDownloader *)sharedImageDownloader; 16 | 17 | - (void)setImageWithURL:(NSURL *)url; 18 | 19 | - (void)setImageWithURL:(NSURL *)url 20 | placeholderImage:(nullable NSImage *)placeholderImage; 21 | 22 | - (void)setImageWithURLRequest:(NSURLRequest *)urlRequest 23 | placeholderImage:(nullable NSImage *)placeholderImage 24 | success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSImage *image))success 25 | failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure; 26 | 27 | - (void)cancelImageDownloadTask; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSMutableArray+Queue.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+Queue.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/1. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface NSMutableArray (Queue) 10 | 11 | - (ObjectType)front; 12 | 13 | - (ObjectType)pop; 14 | 15 | - (void)push:(ObjectType)obj; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSMutableArray+Queue.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+Queue.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/1. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "NSMutableArray+Queue.h" 10 | 11 | @implementation NSMutableArray (Queue) 12 | 13 | - (id)front 14 | { 15 | return [self firstObject]; 16 | } 17 | 18 | - (id)pop 19 | { 20 | id headObject = [self firstObject]; 21 | if (headObject) 22 | { 23 | [self removeObjectAtIndex:0]; 24 | } 25 | return headObject; 26 | } 27 | 28 | - (void)push:(id)obj 29 | { 30 | [self addObject:obj]; 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSMutableArray+Safe.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+Safe.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/29. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface NSMutableArray (Safe) 10 | 11 | - (ObjectType)safeObjectAtIndex:(NSUInteger)index; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/NSMutableArray+Safe.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableArray+Safe.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/29. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "NSMutableArray+Safe.h" 10 | 11 | @implementation NSMutableArray (Safe) 12 | 13 | - (id)safeObjectAtIndex:(NSUInteger)index 14 | { 15 | if (index >= self.count) 16 | { 17 | return nil; 18 | } 19 | return [self objectAtIndex:index]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/RLMResults+ToArray.h: -------------------------------------------------------------------------------- 1 | // 2 | // RLMResults+ToArray.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/21. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RLMResults (ToArray) 12 | 13 | - (NSArray *)toArray; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/RLMResults+ToArray.m: -------------------------------------------------------------------------------- 1 | // 2 | // RLMResults+ToArray.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/21. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "RLMResults+ToArray.h" 10 | 11 | @implementation RLMResults (ToArray) 12 | 13 | - (NSArray *)toArray 14 | { 15 | NSMutableArray *array = [NSMutableArray arrayWithCapacity:self.count]; 16 | for (RLMObject *object in self) 17 | { 18 | [array addObject:object]; 19 | } 20 | return array; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSArray+Utilities.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Utilities.h 3 | // UAGithubEngine 4 | // 5 | // Created by Owain Hunt on 27/07/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSArray (Utilities) 12 | 13 | - (id)firstObject; 14 | - (NSArray *)sortedWithKey:(NSString *)theKey ascending:(BOOL)ascending; 15 | 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSArray+Utilities.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+Utilities.m 3 | // UAGithubEngine 4 | // 5 | // Created by Owain Hunt on 27/07/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | // Credit: http://troybrant.net/blog/2010/02/adding-firstobject-to-nsarray/ 9 | 10 | #import "NSArray+Utilities.h" 11 | 12 | 13 | @implementation NSArray (Utilities) 14 | 15 | - (id)firstObject 16 | { 17 | if ([self count] > 0) 18 | { 19 | return [self objectAtIndex:0]; 20 | } 21 | return nil; 22 | } 23 | 24 | 25 | - (NSArray *)sortedWithKey:(NSString *)theKey ascending:(BOOL)ascending 26 | { 27 | return [self sortedArrayUsingDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:theKey ascending:ascending selector:@selector(caseInsensitiveCompare:)]]]; 28 | } 29 | 30 | 31 | @end -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSData+Base64.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+Base64.h 3 | // base64 4 | // 5 | // Created by Matt Gallagher on 2009/06/03. 6 | // Copyright 2009 Matt Gallagher. All rights reserved. 7 | // 8 | // Permission is given to use this source code file, free of charge, in any 9 | // project, commercial or otherwise, entirely at your risk, with the condition 10 | // that any redistribution (in part or whole) of source code must retain 11 | // this copyright and permission notice. Attribution in compiled projects is 12 | // appreciated but not required. 13 | // 14 | 15 | #import 16 | 17 | void *NewBase64Decode( 18 | const char *inputBuffer, 19 | size_t length, 20 | size_t *outputLength); 21 | 22 | char *NewBase64Encode( 23 | const void *inputBuffer, 24 | size_t length, 25 | bool separateLines, 26 | size_t *outputLength); 27 | 28 | @interface NSData (Base64) 29 | 30 | + (NSData *)dataFromBase64String:(NSString *)aString; 31 | - (NSString *)base64EncodedString; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSInvocation+Blocks.h: -------------------------------------------------------------------------------- 1 | // NSInvocation+Blocks.h - http://github.com/rentzsch/NSInvocation-blocks 2 | // Copyright (c) 2010 Jonathan 'Wolf' Rentzsch: http://rentzsch.com 3 | // Some rights reserved: http://opensource.org/licenses/mit-license.php 4 | 5 | #import 6 | 7 | @interface NSInvocation (Blocks) 8 | 9 | /* 10 | Usage example: 11 | 12 | NSInvocation *invocation = [NSInvocation jr_invocationWithTarget:myObject block:^(id myObject){ 13 | [myObject someMethodWithArg:42.0]; 14 | }]; 15 | */ 16 | 17 | + (id)jr_invocationWithTarget:(id)target block:(void (^)(id target))block; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSInvocation+Blocks.m: -------------------------------------------------------------------------------- 1 | // NSInvocation+Blocks.m - http://github.com/rentzsch/NSInvocation-blocks 2 | // Copyright (c) 2010 Jonathan 'Wolf' Rentzsch: http://rentzsch.com 3 | // Some rights reserved: http://opensource.org/licenses/mit-license.php 4 | 5 | #import "NSInvocation+Blocks.h" 6 | 7 | @interface JRInvocationGrabber : NSProxy { 8 | id target; 9 | NSInvocation *invocation; 10 | } 11 | @property (retain) id target; 12 | @property (retain) NSInvocation *invocation; 13 | @end 14 | 15 | @implementation JRInvocationGrabber 16 | @synthesize target, invocation; 17 | 18 | - (id)initWithTarget:(id)target_ { 19 | self.target = target_; 20 | return self; 21 | } 22 | 23 | - (NSMethodSignature*)methodSignatureForSelector:(SEL)selector_ { 24 | return [self.target methodSignatureForSelector:selector_]; 25 | } 26 | 27 | - (void)forwardInvocation:(NSInvocation*)invocation_ { 28 | [invocation_ setTarget:self.target]; 29 | self.invocation = invocation_; 30 | } 31 | 32 | - (void)dealloc { 33 | self.target = nil; 34 | self.invocation = nil; 35 | } 36 | @end 37 | 38 | 39 | @implementation NSInvocation (jr_block) 40 | 41 | + (id)jr_invocationWithTarget:(id)target_ block:(void (^)(id target))block_ { 42 | JRInvocationGrabber *grabber = [[JRInvocationGrabber alloc] initWithTarget:target_]; 43 | block_(grabber); 44 | return grabber.invocation; 45 | } 46 | 47 | @end -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSString+UAGithubEngineUtilities.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+UAGithubEngineUtilities.h 3 | // UAGithubEngine 4 | // 5 | // Created by Owain Hunt on 08/04/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | 13 | @interface NSString(UAGithubEngineUtilities) 14 | 15 | - (NSDate *)dateFromGithubDateString; 16 | - (NSString *)encodedString; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSString+UAGithubEngineUtilities.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+UAGithubEngineUtilities.m 3 | // UAGithubEngine 4 | // 5 | // Created by Owain Hunt on 08/04/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import "NSString+UAGithubEngineUtilities.h" 10 | 11 | 12 | @implementation NSString(UAGithubEngineUtilities) 13 | 14 | - (NSDate *)dateFromGithubDateString { 15 | 16 | NSDateFormatter *df = [[NSDateFormatter alloc] init]; 17 | NSString *dateString = self; 18 | 19 | if (![[self substringWithRange:NSMakeRange([self length] - 1, 1)] isEqualToString:@"Z"]) 20 | { 21 | NSMutableString *newDate = [self mutableCopy]; 22 | [newDate deleteCharactersInRange:NSMakeRange(19, 1)]; 23 | [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"]; 24 | dateString = newDate; 25 | } 26 | else 27 | { 28 | [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 29 | } 30 | 31 | return [df dateFromString:dateString]; 32 | 33 | } 34 | 35 | 36 | - (NSString *)encodedString 37 | { 38 | return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)self, NULL, (CFStringRef)@";/?:@&=$+{}<>,", kCFStringEncodingUTF8); 39 | 40 | } 41 | 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSString+UUID.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+UUID.h 3 | // MGTwitterEngine 4 | // 5 | // Created by Matt Gemmell on 16/09/2007. 6 | // Copyright 2008 Instinctive Code. 7 | // 8 | 9 | 10 | @interface NSString (UUID) 11 | 12 | + (NSString*)stringWithNewUUID; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/NSString+UUID.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+UUID.m 3 | // MGTwitterEngine 4 | // 5 | // Created by Matt Gemmell on 16/09/2007. 6 | // Copyright 2008 Instinctive Code. 7 | // 8 | 9 | #import "NSString+UUID.h" 10 | 11 | 12 | @implementation NSString (UUID) 13 | 14 | 15 | + (NSString*)stringWithNewUUID 16 | { 17 | // Create a new UUID 18 | CFUUIDRef uuidObj = CFUUIDCreate(nil); 19 | 20 | // Get the string representation of the UUID 21 | NSString *newUUID = (__bridge_transfer NSString*)CFUUIDCreateString(nil, uuidObj); 22 | CFRelease(uuidObj); 23 | return newUUID; 24 | } 25 | 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/UAGithubEngineConstants.h: -------------------------------------------------------------------------------- 1 | // 2 | // UAGithubEngineConstants.h 3 | // IssuesHub 4 | // 5 | // Created by Owain Hunt on 11/11/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | extern NSString * const UAGithubAPILimitReached; 13 | 14 | #define UAGithubReachabilityStatusDidChangeNotification @"UAGithubReachabilityStatusDidChangeNotification" 15 | 16 | #define UAGithubIssueClosedState @"closed" 17 | #define UAGithubIssueOpenState @"open" 18 | 19 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/UAGithubEngineConstants.m: -------------------------------------------------------------------------------- 1 | // 2 | // UAGithubEngineConstants.m 3 | // IssuesHub 4 | // 5 | // Created by Owain Hunt on 11/11/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import "UAGithubEngineConstants.h" 10 | 11 | 12 | NSString * const UAGithubAPILimitReached = @"UAGithubAPILimitReached"; 13 | 14 | 15 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/UAGithubJSONParser.h: -------------------------------------------------------------------------------- 1 | // 2 | // UAGithubJSONParser.h 3 | // UAGithubEngine 4 | // 5 | // Created by Owain Hunt on 27/07/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "UAGithubEngineRequestTypes.h" 12 | 13 | @interface UAGithubJSONParser : NSObject 14 | { 15 | 16 | } 17 | 18 | + (id)parseJSON:(NSData *)theJSON error:(NSError **)error; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/UAGithubURLConnection.h: -------------------------------------------------------------------------------- 1 | // 2 | // UAGithubURLConnection.h 3 | // UAGithubEngine 4 | // 5 | // Created by Owain Hunt on 26/04/2010. 6 | // Copyright 2010 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "UAGithubEngineRequestTypes.h" 11 | 12 | @interface UAGithubURLConnection : NSURLConnection 13 | { 14 | NSMutableData *data; 15 | UAGithubRequestType requestType; 16 | UAGithubResponseType responseType; 17 | NSString *identifier; 18 | } 19 | 20 | 21 | @property (nonatomic, strong) NSMutableData *data; 22 | @property (nonatomic, assign) UAGithubRequestType requestType; 23 | @property (nonatomic, assign) UAGithubResponseType responseType; 24 | @property (nonatomic, strong) NSString *identifier; 25 | 26 | + (id)asyncRequest:(NSURLRequest *)request success:(id(^)(NSData *, NSURLResponse *))successBlock failure:(id(^)(NSError *))failureBlock_; 27 | + (id)asyncRequest:(NSURLRequest *)request success:(id(^)(NSData *, NSURLResponse *))successBlock error:(NSError *__strong *)error; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/UAGithubEngine/UAReachability.h: -------------------------------------------------------------------------------- 1 | // 2 | // UAReachability.h 3 | // ReachTest 4 | // 5 | // Created by Owain Hunt on 10/01/2011. 6 | // Copyright 2011 Owain R Hunt. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | typedef enum { 13 | NotReachable = 0, 14 | Reachable, 15 | } NetworkStatus; 16 | 17 | 18 | @interface UAReachability : NSObject { 19 | SCNetworkReachabilityRef reachabilityRef; 20 | } 21 | 22 | 23 | - (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags; 24 | - (NetworkStatus)currentReachabilityStatus; 25 | 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/VHCursorButton+AFNetworking.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHCursorButton+AFNetworking.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/9. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHCursorButton.h" 10 | #import "AFImageDownloader.h" 11 | 12 | @interface VHCursorButton (AFNetworking) 13 | 14 | + (void)setSharedImageDownloader:(AFImageDownloader *)imageDownloader; 15 | 16 | + (AFImageDownloader *)sharedImageDownloader; 17 | 18 | - (void)setImageWithURL:(NSURL *)url; 19 | 20 | - (void)setImageWithURL:(NSURL *)url 21 | placeholderImage:(nullable NSImage *)placeholderImage; 22 | 23 | - (void)setImageWithURLRequest:(NSURLRequest *)urlRequest 24 | placeholderImage:(nullable NSImage *)placeholderImage 25 | success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSImage *image))success 26 | failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure; 27 | 28 | - (void)cancelImageDownloadTask; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/VHDateValueFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHDateValueFormatter.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/16. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifier-Swift.h" 10 | 11 | @interface VHDateValueFormatter : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/VHDateValueFormatter.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHDateValueFormatter.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/16. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHDateValueFormatter.h" 10 | 11 | @interface VHDateValueFormatter () 12 | 13 | @property NSDateFormatter *dateFormatter; 14 | 15 | @end 16 | 17 | @implementation VHDateValueFormatter 18 | 19 | - (id)init 20 | { 21 | self = [super init]; 22 | if (self) 23 | { 24 | _dateFormatter = [[NSDateFormatter alloc] init]; 25 | _dateFormatter.dateFormat = @"dd MMM HH:mm"; 26 | } 27 | return self; 28 | } 29 | 30 | - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis 31 | { 32 | return [_dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:value]]; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/VHLog.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHLog.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/26. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | static void VHInnerLog(NSString *category, NSString* format, va_list argList) 10 | { 11 | va_list copyList; 12 | va_copy(copyList, argList); 13 | 14 | if ([format length] == 0) 15 | { 16 | return; 17 | } 18 | 19 | NSLogv([[NSMutableString alloc] initWithFormat:@"[%@] %@", category, format], argList); 20 | } 21 | 22 | void VHLog(NSString *category, NSString* format, ...) 23 | { 24 | va_list argList; 25 | va_start(argList, format); 26 | VHInnerLog(category,format, argList); 27 | va_end(argList); 28 | } 29 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/VHUtils+TransForm.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHUtils+TransForm.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/28. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHUtils.h" 10 | #import "VHNotification.h" 11 | 12 | @interface VHUtils (TransForm) 13 | 14 | + (NSImage *)imageFromGithubContentType:(VHGithubContentType)type; 15 | 16 | + (NSColor *)colorFromHexColorCodeInString:(NSString *)string; 17 | 18 | + (NSString *)hexadecimalValueFromColor:(NSColor *)color; 19 | 20 | + (NSString *)encodeToPercentEscapeString:(NSString *)input; 21 | 22 | + (NSDate *)dateFromGithubTimeString:(NSString *)timeString; 23 | 24 | + (VHNotificationReasonType)notificationReasonTypeFromString:(NSString *)string; 25 | 26 | + (NSString *)timeStringToNowFromTime:(NSDate *)time; 27 | 28 | + (VHNotificationType)notificationTypeFromString:(NSString *)string; 29 | 30 | + (NSImage *)imageFromNotificationType:(VHNotificationType)type; 31 | 32 | + (NSString *)githubTimeStringFromDate:(NSDate *)date; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /VHGithubNotifier/Utils/VHUtils.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHUtils.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/25. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHGithubNotifier-Swift.h" 10 | 11 | @interface VHUtils : NSObject 12 | 13 | + (BOOL)isDarkMode; 14 | 15 | + (CGFloat)widthOfString:(NSString *)string withFont:(NSFont *)font; 16 | 17 | + (CGFloat)heightOfString:(NSString *)string withFont:(NSFont *)font; 18 | 19 | + (BOOL)point:(CGPoint)point notOutOfRect:(CGRect)rect; 20 | 21 | + (void)setRandomColor:(ChartDataSet *)chartDataSet withNumber:(NSInteger)count; 22 | 23 | + (NSColor *)randomColor; 24 | 25 | + (NSColor *)trendColor:(NSColor *)color withCount:(NSUInteger)count withRow:(NSUInteger)row; 26 | 27 | + (NSTextField *)labelWithFrame:(NSRect)frame; 28 | 29 | + (void)openUrl:(NSString *)url; 30 | 31 | + (void)openURL:(NSURL *)url; 32 | 33 | + (void)resetWKWebViewExceptCookie; 34 | 35 | + (void)resetWKWebView; 36 | 37 | + (void)scrollViewToTop:(NSScrollView *)scrollView; 38 | 39 | + (NSArray *)randomColors; 40 | 41 | + (NSInteger)unsignIntFromString:(NSString *)string; 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHNotificationVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationVC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/19. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHViewController.h" 10 | 11 | @interface VHNotificationVC : VHViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHPieVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHPieVC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/19. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHViewController.h" 10 | 11 | @interface VHPieVC : VHViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHProfileVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHProfileVC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/29. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHViewController.h" 10 | 11 | @interface VHProfileVC : VHViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHTabVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTabVC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/28. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHViewController.h" 10 | 11 | @interface VHTabVC : VHViewController 12 | 13 | - (void)updateArrowWithStatusItemCenterX:(CGFloat)centerX; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHTrendVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTrendVC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/1/13. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHViewController.h" 10 | 11 | @interface VHTrendVC : VHViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHTrendingVC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTrendingVC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/19. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHViewController.h" 10 | 11 | @interface VHTrendingVC : VHViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHViewController.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/22. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHViewController : NSViewController 10 | 11 | - (void)addNotification:(NSString *)name forSelector:(SEL)selector; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/VC/VHViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHViewController.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/22. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHViewController.h" 10 | 11 | @interface VHViewController () 12 | 13 | @end 14 | 15 | @implementation VHViewController 16 | 17 | - (void)addNotification:(NSString *)name forSelector:(SEL)selector 18 | { 19 | [[NSNotificationCenter defaultCenter] addObserver:self 20 | selector:selector 21 | name:name 22 | object:nil]; 23 | } 24 | 25 | - (void)dealloc 26 | { 27 | [[NSNotificationCenter defaultCenter] removeObserver:self]; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /VHGithubNotifier/VHGithubNotifier+Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // VHGithubNotifier+Prefix.pch 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/25. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #ifndef VHGithubNotifier_Prefix_pch 10 | #define VHGithubNotifier_Prefix_pch 11 | 12 | // Include any system framework and library headers here that should be included in all compilation units. 13 | // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. 14 | 15 | #import "VHDefines.h" 16 | #import "VHGithubNotifierNotifications.h" 17 | 18 | #endif /* VHGithubNotifier_Prefix_pch */ 19 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/NSView+Position.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+Position.h 3 | // QMCGIProtocolAnalyseTool 4 | // 5 | // Created by viktorhuang on 2016/12/21. 6 | // Copyright © 2016年 Tencent. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSView (Position) 12 | 13 | - (CGFloat)getTop; 14 | - (CGFloat)getLeft; 15 | - (CGFloat)getRight; 16 | - (CGFloat)getBottom; 17 | - (CGFloat)getWidth; 18 | - (CGFloat)getHeight; 19 | - (CGFloat)getCenterX; 20 | - (CGFloat)getCenterY; 21 | - (void)setTop:(CGFloat)top; 22 | - (void)setLeft:(CGFloat)left; 23 | - (void)setLeftTop:(CGPoint)leftTop; 24 | - (CGPoint)origin; 25 | - (void)setOrigin:(CGPoint) point; 26 | 27 | - (CGSize)size; 28 | - (void)setSize:(CGSize) size; 29 | 30 | - (CGFloat)x; 31 | - (void)setX:(CGFloat)x; 32 | 33 | - (CGFloat)y; 34 | - (void)setY:(CGFloat)y; 35 | 36 | - (CGFloat)height; 37 | - (void)setHeight:(CGFloat)height; 38 | 39 | - (CGFloat)width; 40 | - (void)setWidth:(CGFloat)width; 41 | 42 | // 横向设置,同时设定x和宽度 43 | - (void) setLeft:(CGFloat)left width:(CGFloat)width; 44 | 45 | // 垂直设置,同时设定y和高度 46 | - (void) setTop:(CGFloat)top height:(CGFloat)height; 47 | 48 | // 同时设定宽和高 49 | - (void)setWidth:(CGFloat)width height:(CGFloat)height; 50 | 51 | // 设置垂直方向的中心点 52 | - (void) setVCenter:(CGFloat)vCenter; 53 | 54 | // 设置水平方向的中心点 55 | - (void) setHCenter:(CGFloat)hCenter; 56 | 57 | - (NSRect)frameRelativeToWindow; 58 | 59 | - (NSRect)frameRelativeToScreen; 60 | 61 | - (void)removeAllSubViews; 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHContributionChartView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHContributionChartView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHContributionChartView : NSView 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHContributionChartView.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHContributionChartView.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHContributionChartView.h" 10 | #import "VHContributionBlock.h" 11 | #import "VHGithubNotifierManager+Profile.h" 12 | #import "VHGithubNotifierManager+UserDefault.h" 13 | #import "VHUtils+TransForm.h" 14 | #import "VHContributionChartDrawer.h" 15 | #import "VHContributionChartFaceDrawer.h" 16 | 17 | @implementation VHContributionChartView 18 | 19 | - (void)drawRect:(NSRect)dirtyRect 20 | { 21 | [super drawRect:dirtyRect]; 22 | 23 | VHContributionChartDrawer *drawer = [[VHGithubNotifierManager sharedManager] contributionChartDrawer]; 24 | 25 | NSBezierPath *path = [NSBezierPath bezierPath]; 26 | path.lineWidth = 0; 27 | 28 | for (VHContributionChartFaceDrawer *faceDrawer in drawer.faces) 29 | { 30 | [path removeAllPoints]; 31 | [path moveToPoint:faceDrawer.p1]; 32 | [path lineToPoint:faceDrawer.p2]; 33 | [path lineToPoint:faceDrawer.p3]; 34 | [path lineToPoint:faceDrawer.p4]; 35 | [faceDrawer.color set]; 36 | [path closePath]; 37 | [path fill]; 38 | } 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHCursorButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHCursorButton.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/1. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHCursorButton : NSButton 10 | 11 | @property (nonatomic, strong) NSCursor *cursor; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHCursorButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHCursorButton.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/1. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHCursorButton.h" 10 | 11 | @implementation VHCursorButton 12 | 13 | - (instancetype)initWithCoder:(NSCoder *)coder 14 | { 15 | self = [super initWithCoder:coder]; 16 | if (self) 17 | { 18 | _cursor = [NSCursor pointingHandCursor]; 19 | } 20 | return self; 21 | } 22 | 23 | - (instancetype)initWithFrame:(NSRect)frameRect 24 | { 25 | self = [super initWithFrame:frameRect]; 26 | if (self) 27 | { 28 | _cursor = [NSCursor pointingHandCursor]; 29 | } 30 | return self; 31 | } 32 | 33 | - (instancetype)init 34 | { 35 | self = [super init]; 36 | if (self) 37 | { 38 | _cursor = [NSCursor pointingHandCursor]; 39 | } 40 | return self; 41 | } 42 | 43 | - (void)resetCursorRects 44 | { 45 | if (self.cursor) 46 | { 47 | [self addCursorRect:[self bounds] cursor: self.cursor]; 48 | } 49 | else 50 | { 51 | [super resetCursorRects]; 52 | } 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHHorizontalLine.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHHorizontalLine.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/7. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHHorizontalLine : NSView 10 | 11 | @property (nonatomic, assign) CGFloat lineWidth; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHHorizontalLine.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHHorizontalLine.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/7. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHHorizontalLine.h" 10 | #import "VHUtils+TransForm.h" 11 | 12 | @implementation VHHorizontalLine 13 | 14 | - (void)drawRect:(NSRect)dirtyRect 15 | { 16 | [super drawRect:dirtyRect]; 17 | 18 | NSBezierPath *line = [NSBezierPath bezierPath]; 19 | [line moveToPoint:NSMakePoint(0, 0)]; 20 | [line lineToPoint:NSMakePoint(NSMaxX([self bounds]), 0)]; 21 | [line setLineWidth:self.lineWidth]; 22 | [[VHUtils colorFromHexColorCodeInString:@"#aaaaaa"] set]; 23 | [line stroke]; 24 | } 25 | 26 | - (void)setLineWidth:(CGFloat)lineWidth 27 | { 28 | _lineWidth = lineWidth; 29 | [self setNeedsDisplay:YES]; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHLanguageDotView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHLanguageDotView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/23. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHLanguageDotView : NSView 10 | 11 | @property (nonatomic, strong) NSColor *languageColor; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHLanguageDotView.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHLanguageDotView.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/23. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHLanguageDotView.h" 10 | 11 | @implementation VHLanguageDotView 12 | 13 | - (void)drawRect:(NSRect)dirtyRect 14 | { 15 | [super drawRect:dirtyRect]; 16 | NSBezierPath* circlePath = [NSBezierPath bezierPath]; 17 | [circlePath appendBezierPathWithOvalInRect:self.bounds]; 18 | [self.languageColor setFill]; 19 | [circlePath fill]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHLanguagesButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHLanguagesButton.h 3 | // VHGithubNotifier 4 | // 5 | // Created by Nightonke on 2017/9/23. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHCursorButton.h" 10 | 11 | @interface VHLanguagesButton : VHCursorButton 12 | 13 | - (void)setSelectedLanguageIDs:(NSSet *)languageIDs; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHLanguagesButton.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHLanguagesButton.m 3 | // VHGithubNotifier 4 | // 5 | // Created by Nightonke on 2017/9/23. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHLanguagesButton.h" 10 | #import "VHLanguageDotView.h" 11 | #import "NSView+Position.h" 12 | #import "VHLanguage.h" 13 | 14 | @implementation VHLanguagesButton 15 | 16 | - (void)setSelectedLanguageIDs:(NSSet *)languageIDs 17 | { 18 | [self removeAllSubViews]; 19 | 20 | CGFloat startX = 10; 21 | CGFloat paddingX = 10; 22 | CGFloat width = 10; 23 | __block NSInteger index = 0; 24 | [languageIDs enumerateObjectsUsingBlock:^(NSNumber * _Nonnull obj, BOOL * _Nonnull stop) { 25 | CGFloat x = startX + index * (width + paddingX); 26 | if (x + width > self.width) 27 | { 28 | *stop = YES; 29 | } 30 | else 31 | { 32 | RLMResults *languages = [VHLanguage objectsWhere:@"languageId = %d", [obj integerValue]]; 33 | VHLanguage *language = [languages firstObject]; 34 | VHLanguageDotView *dot = [[VHLanguageDotView alloc] initWithFrame:NSMakeRect(startX + index * (width + paddingX), 0, width, width)]; 35 | [dot setLanguageColor:language.color]; 36 | [dot setVCenter:self.height / 2]; 37 | [self addSubview:dot]; 38 | index++; 39 | } 40 | }]; 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHNotificationGroupBodyCellView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationGroupBodyCellView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/28. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHNotification.h" 10 | 11 | @interface VHNotificationGroupBodyCellView : NSTableCellView 12 | 13 | @property (nonatomic, strong) VHNotification *notification; 14 | @property (nonatomic, assign) BOOL isLastBody; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHNotificationGroupHeaderCellView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationGroupHeaderCellView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/28. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHSimpleRepository.h" 10 | 11 | @interface VHNotificationGroupHeaderCellView : NSTableCellView 12 | 13 | @property (nonatomic, strong) VHSimpleRepository *repository; 14 | 15 | - (void)setNotificationNumber:(NSUInteger)notificationNumber; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHNotificationGroupView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationGroupView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/27. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHNotificationGroupView : NSView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHNotificationGroupView.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationGroupView.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/27. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHNotificationGroupView.h" 10 | 11 | @implementation VHNotificationGroupView 12 | 13 | - (void)drawRect:(NSRect)dirtyRect { 14 | [super drawRect:dirtyRect]; 15 | 16 | // Drawing code here. 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHNotificationHeaderCellView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHNotificationHeaderCellView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/3. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHNotificationHeaderCellView : NSTableCellView 10 | 11 | - (void)setNotificationNumber:(NSUInteger)notificationNumber; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHPopUpButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHPopUpButton.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/28. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHPopUpButton : NSPopUpButton 10 | 11 | @property (nonatomic, assign) CGFloat menuWindowXOffset; 12 | @property (nonatomic, assign) CGFloat menuWindowYOffset; 13 | @property (nonatomic, assign) CGFloat menuWindowWidth; 14 | @property (nonatomic, assign) CGFloat menuWindowHeight; 15 | 16 | @property (nonatomic, strong) NSCursor *cursor; 17 | 18 | - (void)setMenuWindowRelativeFrame:(NSRect)frame; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHPopUpButtonCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHPopUpButtonCell.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/7. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHPopUpButtonCell : NSPopUpButtonCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHPopUpButtonCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHPopUpButtonCell.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/7. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHPopUpButtonCell.h" 10 | 11 | @implementation VHPopUpButtonCell 12 | 13 | - (void)drawImageWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 14 | { 15 | [super drawImageWithFrame:cellFrame inView:controlView]; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHScroller.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHScroller.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/23. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHScroller : NSView 10 | 11 | - (instancetype)initWithFrame:(NSRect)frameRect 12 | withImageFrame:(NSRect)imageFrame 13 | withImageName:(NSString *)imageName 14 | withPressedImageName:(NSString *)pressedImageName 15 | withScrollView:(NSScrollView *)scrollView; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHScrollerThumb.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHScrollerThumb.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/23. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | typedef NS_ENUM(NSUInteger, VHDragDirectionType) 10 | { 11 | VHDragDirectionTypeNeither = 0, 12 | VHDragDirectionTypeHorizontal = 1, 13 | VHDragDirectionTypeVertical = 2, 14 | VHDragDirectionTypeBoth = 3, 15 | }; 16 | 17 | @protocol VHScrollerThumbDelegate 18 | 19 | @required 20 | - (void)onThumbScrolled:(CGFloat)progress; 21 | 22 | @end 23 | 24 | @interface VHScrollerThumb : NSImageView 25 | 26 | @property (nonatomic, assign) VHDragDirectionType dragDirection; 27 | @property (nonatomic, weak) id delegate; 28 | 29 | - (instancetype)initWithFrame:(NSRect)frameRect 30 | withImageName:(NSString *)imageName 31 | withPressedImageName:(NSString *)pressedImageName; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHSecureTextField.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHSecureTextField.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/25. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @class VHSecureTextField; 10 | 11 | @protocol VHSecureTextFieldDelegate 12 | 13 | @required 14 | - (void)onSecureTextFieldEnterButtonClicked:(VHSecureTextField *)textField; 15 | 16 | @end 17 | 18 | @interface VHSecureTextField : NSSecureTextField 19 | 20 | @property (nonatomic, weak) id secureTextFieldDelegate; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHSecureTextField.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHSecureTextField.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/25. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHSecureTextField.h" 10 | 11 | @implementation VHSecureTextField 12 | 13 | - (BOOL)performKeyEquivalent:(NSEvent *)event 14 | { 15 | if ([[event charactersIgnoringModifiers] isEqualToString:@"\r"] 16 | && self.secureTextFieldDelegate 17 | && [self.secureTextFieldDelegate respondsToSelector:@selector(onSecureTextFieldEnterButtonClicked:)]) 18 | { 19 | [self.secureTextFieldDelegate onSecureTextFieldEnterButtonClicked:self]; 20 | } 21 | return [super performKeyEquivalent:event]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHSecureTextFieldCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHSecureTextFieldCell.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/24. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHSecureTextFieldCell : NSSecureTextFieldCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHSettingsCellView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHSettingsCellView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHSettingsCellView : NSTableCellView 10 | 11 | - (void)updateSettings; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHStateView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHStateView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/21. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | typedef NS_ENUM(NSUInteger, VHStateViewStateType) 10 | { 11 | VHStateViewStateTypeLoading = 1, 12 | VHStateViewStateTypeLoadFailed = 2, 13 | VHStateViewStateTypeLoadSuccessfully = 3, 14 | VHStateViewStateTypeEmpty = 4, 15 | }; 16 | 17 | @protocol VHStateViewDelegate 18 | 19 | @required 20 | - (void)onRetryButtonClicked; 21 | 22 | @end 23 | 24 | @interface VHStateView : NSView 25 | 26 | @property (nonatomic, strong) IBOutlet NSView *view; 27 | 28 | @property (nonatomic, assign) VHStateViewStateType state; 29 | 30 | @property (nonatomic, weak) id delegate; 31 | 32 | - (void)setRetryText:(NSString *)retryText; 33 | 34 | - (void)setEmptyText:(NSString *)emptyText; 35 | 36 | - (void)setLoadingText:(NSString *)loadingText; 37 | 38 | - (void)setEmptyImage:(NSString *)emptyImage; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHStatusBarButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHStatusBarButton.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/25. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | @protocol VHStatusBarButtonProtocol 10 | 11 | @required 12 | - (void)onStatusBarButtonClicked; 13 | - (void)onStatusBarButtonMoved; 14 | 15 | @end 16 | 17 | @interface VHStatusBarButton : NSTextField 18 | 19 | @property (nonatomic, weak) id statusBarButtonDelegate; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTabVCBackgroundView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTabVCBackgroundView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/26. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | @interface VHTabVCBackgroundView : NSControl 10 | 11 | @property (nonatomic, assign) CGFloat arrowWidth; 12 | @property (nonatomic, assign) CGFloat arrowHeight; 13 | @property (nonatomic, assign) CGFloat titleHeight; 14 | @property (nonatomic, assign) CGFloat cornerRadius; 15 | 16 | - (void)updateArrowWithStatusItemCenterX:(CGFloat)centerX; 17 | 18 | - (NSRect)tabViewFrame; 19 | 20 | - (NSRect)contentViewFrame; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTabView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTabView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/28. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | @protocol VHTabViewDelegate 10 | 11 | @required 12 | - (void)didSelectGithubContentType:(VHGithubContentType)type; 13 | 14 | @end 15 | 16 | @interface VHTabView : NSView 17 | 18 | @property (nonatomic, weak) id delegate; 19 | 20 | @property (nonatomic, assign) NSUInteger selectedTab; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTableView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTableView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by Nightonke on 2017/9/24. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHTableView : NSTableView 12 | 13 | - (void)scrollRowToVisible:(NSInteger)rowIndex animate:(BOOL)animate; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTableView.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHTableView.m 3 | // VHGithubNotifier 4 | // 5 | // Created by Nightonke on 2017/9/24. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHTableView.h" 10 | 11 | @implementation VHTableView 12 | 13 | - (void)scrollRowToVisible:(NSInteger)rowIndex animate:(BOOL)animate 14 | { 15 | if(animate) 16 | { 17 | NSRect rowRect = [self rectOfRow:rowIndex]; 18 | NSPoint scrollOrigin = rowRect.origin; 19 | NSClipView *clipView = (NSClipView *)[self superview]; 20 | scrollOrigin.y += MAX(0, round((NSHeight(rowRect) - NSHeight(clipView.frame)) * 0.5f)); 21 | NSScrollView *scrollView = (NSScrollView *)[clipView superview]; 22 | if ([scrollView respondsToSelector:@selector(flashScrollers)]) 23 | { 24 | [scrollView flashScrollers]; 25 | } 26 | [[clipView animator] setBoundsOrigin:scrollOrigin]; 27 | } 28 | else 29 | { 30 | NSRect rowRect = [self rectOfRow:rowIndex]; 31 | NSPoint scrollOrigin = rowRect.origin; 32 | NSClipView *clipView = (NSClipView *)[self superview]; 33 | scrollOrigin.y += MAX(0, round((NSHeight(rowRect) - NSHeight(clipView.frame)) * 0.5f)); 34 | [clipView setBoundsOrigin:scrollOrigin]; 35 | } 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTextField.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTextField.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/25. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @class VHTextField; 10 | 11 | @protocol VHTextFieldDelegate 12 | 13 | @required 14 | - (void)onTextFieldEnterButtonClicked:(VHTextField *)textField; 15 | 16 | @end 17 | 18 | @interface VHTextField : NSTextField 19 | 20 | @property (nonatomic, weak) id textFieldDelegate; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTextFieldCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTextFieldCell.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/24. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHTextFieldCell : NSTextFieldCell 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTrendingLanguageCellView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTrendingLanguageCellView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by Nightonke on 2017/9/24. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "VHLanguage.h" 11 | 12 | @protocol VHTrendingLanguageCellViewDelegate 13 | 14 | @required 15 | - (void)onLanguage:(VHLanguage *)language selected:(BOOL)selected; 16 | 17 | @end 18 | 19 | @interface VHTrendingLanguageCellView : NSTableCellView 20 | 21 | @property (nonatomic, strong) VHLanguage *language; 22 | @property (nonatomic, weak) id delegate; 23 | @property (nonatomic, assign) BOOL selected; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTrendingLanguageCellView.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHTrendingLanguageCellView.m 3 | // VHGithubNotifier 4 | // 5 | // Created by Nightonke on 2017/9/24. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHTrendingLanguageCellView.h" 10 | 11 | @interface VHTrendingLanguageCellView() 12 | 13 | @property (weak) IBOutlet NSButton *checkBox; 14 | 15 | @end 16 | 17 | @implementation VHTrendingLanguageCellView 18 | 19 | - (void)setLanguage:(VHLanguage *)language 20 | { 21 | _language = language; 22 | self.checkBox.title = language.name; 23 | self.checkBox.bezelColor = language.color; 24 | } 25 | 26 | - (IBAction)onTrendingLanguageSelected:(NSButton *)sender 27 | { 28 | if ([self.delegate respondsToSelector:@selector(onLanguage:selected:)]) 29 | { 30 | BOOL isSelected = (self.checkBox.state == NSOnState); 31 | [self.delegate onLanguage:self.language selected:isSelected]; 32 | } 33 | } 34 | 35 | - (void)setSelected:(BOOL)selected 36 | { 37 | _selected = selected; 38 | if (selected) 39 | { 40 | [self.checkBox setState:NSOnState]; 41 | } 42 | else 43 | { 44 | [self.checkBox setState:NSOffState]; 45 | } 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHTrendingRepositoryCellView.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHTrendingRepositoryCellView.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/22. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHTrendingRepository.h" 10 | #import "VHLanguageDotView.h" 11 | 12 | @protocol VHTrendingRepositoryCellViewDelegate 13 | 14 | @required 15 | - (void)onTrendingClicked:(VHTrendingRepository *)repository; 16 | 17 | @end 18 | 19 | @interface VHTrendingRepositoryCellView : NSTableCellView 20 | 21 | @property (weak) IBOutlet NSTextField *name; 22 | @property (weak) IBOutlet NSTextField *repositoryDescription; 23 | @property (weak) IBOutlet VHLanguageDotView *languageDot; 24 | @property (weak) IBOutlet NSTextField *language; 25 | @property (weak) IBOutlet NSImageView *starImage; 26 | @property (weak) IBOutlet NSTextField *starText; 27 | @property (weak) IBOutlet NSImageView *forkImage; 28 | @property (weak) IBOutlet NSTextField *forkText; 29 | @property (weak) IBOutlet NSImageView *starTrendingImage; 30 | @property (weak) IBOutlet NSTextField *starTrendingText; 31 | @property (nonatomic, assign) BOOL isLastRow; 32 | @property (nonatomic, weak) id delegate; 33 | 34 | - (void)setTrendingRepository:(VHTrendingRepository *)trendingRepository; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /VHGithubNotifier/View/VHVisualEffectView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VHVisualEffectView.swift 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/7. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | @objc class VHVisualEffectView: NSVisualEffectView { 12 | 13 | override init(frame frameRect: NSRect) { 14 | tintColor = .clear 15 | super.init(frame:frameRect) 16 | } 17 | 18 | required init?(coder: NSCoder) { 19 | tintColor = .clear 20 | super.init(coder: coder) 21 | } 22 | 23 | var tintColor: NSColor { 24 | didSet { 25 | layer?.sublayers?.first(where: { $0.name == "ClearCopyLayer" })?.backgroundColor = tintColor.cgColor 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /VHGithubNotifier/Window/VHAccountInfoWC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHAccountInfoWC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/2/24. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @protocol VHAccountInfoWCDelegate 10 | 11 | @required 12 | - (void)onAccountInfoWindowClosed; 13 | - (void)onUserAccountConfirmed; 14 | 15 | @end 16 | 17 | @interface VHAccountInfoWC : NSWindowController 18 | 19 | @property (nonatomic, weak) id accountInfoDelegate; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /VHGithubNotifier/Window/VHSettingsWC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHSettingsWC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/6. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @protocol VHSettingsWCDelegate 10 | 11 | @required 12 | - (void)onSettingsWindowClosed; 13 | 14 | @end 15 | 16 | @interface VHSettingsWC : NSWindowController 17 | 18 | @property (nonatomic, weak) id settingsWCDelegate; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /VHGithubNotifier/Window/VHUserNotificationWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHUserNotificationWindow.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/3. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface VHUserNotificationWindow : NSWindow 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Window/VHUserNotificationWindow.m: -------------------------------------------------------------------------------- 1 | // 2 | // VHUserNotificationWindow.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/3. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHUserNotificationWindow.h" 10 | 11 | @implementation VHUserNotificationWindow 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /VHGithubNotifier/Window/VHWebLoginWC.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHWebLoginWC.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2017/3/8. 6 | // Copyright © 2017年 黄伟平. All rights reserved. 7 | // 8 | 9 | @protocol VHWebLoginWCDelegate 10 | 11 | @required 12 | - (void)onWebLoginWindowClosed; 13 | 14 | @end 15 | 16 | @interface VHWebLoginWC : NSWindowController 17 | 18 | @property (nonatomic, weak) id webLoginDelegate; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /VHGithubNotifier/Window/VHWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // VHWindow.h 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/27. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import "VHStatusBarButton.h" 10 | 11 | @protocol VHWindowProtocol 12 | 13 | @required 14 | - (void)onMouseClickedOutside; 15 | 16 | @end 17 | 18 | @interface VHWindow : NSWindow 19 | 20 | @property (nonatomic, weak) id windowDelegate; 21 | 22 | - (instancetype)initWithStatusItem:(NSStatusItem *)statusBarButton withDelegate:(id)delegate; 23 | 24 | - (void)updateArrowWithStatusItem:(NSStatusItem *) statusItem; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /VHGithubNotifier/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // VHGithubNotifier 4 | // 5 | // Created by viktorhuang on 2016/12/24. 6 | // Copyright © 2016年 黄伟平. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) { 12 | return NSApplicationMain(argc, argv); 13 | } 14 | --------------------------------------------------------------------------------