1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
/* Copyright (c) MediaArea.net SARL. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license that can
* be found in the License.html file in the root of the source tree.
*/
#import "PurchaseReportController.h"
#import "SubscriptionManager.h"
#import <StoreKit/StoreKit.h>
@interface PurchaseReportController ()
@end
@implementation PurchaseReportController
static PurchaseReportController *reportCtrl = nil;
+(instancetype)controller
{
if (!reportCtrl) {
reportCtrl = [[PurchaseReportController alloc] initWithWindowNibName:@"PurchaseReport"];
}
return reportCtrl;
}
-(void)windowWillClose:(NSNotification *)notification {
[NSEvent removeMonitor:eventMonitor];
[reportCtrl release]; reportCtrl = nil;
}
-(void)windowDidLoad {
[super windowDidLoad];
NSEvent* (^handler)(NSEvent*) = ^(NSEvent *event) {
if (event.window!=self.window)
return event;
return event;
};
eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:handler];
[self createReport];
[_reportView setString:purchaseReport];
}
-(void)show {
[[self window] makeKeyAndOrderFront:nil];
}
-(void)createReport {
NSMutableString* report = [[NSMutableString alloc] init];
[report appendFormat:@"System date: %@\n\n", [NSDate date]];
[report appendString:@"Unproceeded purchases in queue:\n"];
for( SKPaymentTransaction* item in [[SKPaymentQueue defaultQueue] transactions]) {
[report appendFormat:@"Product: %@, date %@, quantity: %ld, status: %ld\n",
item.payment.productIdentifier,
item.transactionDate,
item.payment.quantity,
item.transactionState];
}
[report appendString:@"\n"];
[report appendString:@"Purchases in local storage:\n"];
for (NSDictionary* item in [[NSUserDefaults standardUserDefaults] arrayForKey:@"subscriptions"]) {
[report appendFormat:@"Product: %@, date: %@, quantity: %@\n",
item[@"product"],
item[@"date"],
item[@"quantity"]
];
}
[report appendString:@"\n"];
[report appendString:@"Purchases in remote storage:\n"];
for (NSDictionary* item in [[NSUbiquitousKeyValueStore defaultStore] arrayForKey:@"subscriptions"]) {
[report appendFormat:@"Product: %@, date: %@, quantity: %@\n",
item[@"product"],
item[@"date"],
item[@"quantity"]
];
}
[report appendString:@"\n"];
NSDate* subscriptionEndDate = [[SubscriptionManager shared] subscriptionEndDate];
if (subscriptionEndDate != nil) {
if ([[SubscriptionManager shared] isLifetime])
[report appendString:@"Subscription status: lifetime"];
else if ([subscriptionEndDate isGreaterThanOrEqualTo: [NSDate date]])
[report appendFormat:@"Subscription status: active (until %@)\n",
subscriptionEndDate];
else
[report appendFormat:@"Subscription status: expired (since %@)\n",
subscriptionEndDate];
}
else {
[report appendString:@"Subscription status: none\n"];
}
[report appendString:@"\n"];
[[NSUserDefaults standardUserDefaults] setObject:@"TEST" forKey:@"TEMP"];
[report appendFormat:@"Local storage is writable: %@\n", [[[NSUserDefaults standardUserDefaults] stringForKey:@"TEMP"] isEqualTo:@"TEST"]?@"YES":@"NO"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"TEMP"];
[report appendString:@"\n"];
[[NSUbiquitousKeyValueStore defaultStore] setObject:@"TEST" forKey:@"TEMP"];
[report appendFormat:@"Remote storage is writable: %@\n", [[[NSUbiquitousKeyValueStore defaultStore] stringForKey:@"TEMP"] isEqualTo:@"TEST"]?@"YES":@"NO"];
[[NSUbiquitousKeyValueStore defaultStore] removeObjectForKey:@"TEMP"];
purchaseReport = report;
}
-(void)showMessage:(NSString *)message {
NSAlert* dialog = [[NSAlert alloc] init];
[dialog setMessageText:message];
[dialog runModal];
}
- (IBAction)validateCode:(id)sender {
}
- (IBAction)submitClicked:(id)sender {
[self validateCode:sender];
}
- (IBAction)copyClicked:(id)sender {
[[NSPasteboard generalPasteboard] declareTypes:@[NSPasteboardTypeString] owner:nil];
[[NSPasteboard generalPasteboard] setString:purchaseReport forType:NSPasteboardTypeString];
}
@end
|