project_files/HedgewarsMobile/Classes/CommodityFunctions.m
author koda
Tue, 23 Aug 2011 03:46:17 +0200
changeset 5662 99083392cd4f
parent 5486 e75f7c3c6275
child 5994 3c578f531cc1
permissions -rw-r--r--
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     1
/*
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     3
 * Copyright (c) 2009-2010 Vittorio Giovara <vittorio.giovara@gmail.com>
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     4
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     8
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    12
 * GNU General Public License for more details.
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    13
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    14
 * You should have received a copy of the GNU General Public License
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    15
 * along with this program; if not, write to the Free Software
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    17
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    18
 * File created on 08/04/2010.
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    19
 */
81db3c85784b headers ftw, also right project file
koda
parents: 3823
diff changeset
    20
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    21
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    22
#import "CommodityFunctions.h"
3670
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    23
#import <sys/types.h>
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    24
#import <sys/sysctl.h>
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    25
#import <mach/mach.h>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    26
#import <mach/mach_host.h>
3983
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
    27
#import <QuartzCore/QuartzCore.h>
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
    28
#import <AudioToolbox/AudioToolbox.h>
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
    29
#import <CommonCrypto/CommonDigest.h>
5483
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
    30
#import <SystemConfiguration/SCNetworkReachability.h>
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
    31
#import <netinet/in.h>
3926
668b71f31e51 use dynamic data from engine instead of using hardcoded values
koda
parents: 3917
diff changeset
    32
#import "PascalImports.h"
5201
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
    33
#import "hwconsts.h"
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    34
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    35
3940
cc29628976cc some optimizations to drawing and fetching data of new ammomenu
koda
parents: 3930
diff changeset
    36
NSInteger inline randomPort () {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    37
    srandom(time(NULL));
3971
5c82ee165ed5 minor stuff
koda
parents: 3941
diff changeset
    38
    NSInteger res = (random() % 64511) + 1024;
5201
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
    39
    return (res == NETGAME_DEFAULT_PORT) ? randomPort() : res;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    40
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    41
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    42
// by http://landonf.bikemonkey.org/code/iphone/Determining_Available_Memory.20081203.html
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    43
void print_free_memory () {
5486
e75f7c3c6275 ios: this should prevent at least one of the crashes zorg spotted; also added some callbacks in SDLh; also polished project file (from -O2 to -Os)
koda
parents: 5483
diff changeset
    44
#ifdef DEBUG
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    45
    mach_port_t host_port;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    46
    mach_msg_type_number_t host_size;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    47
    vm_size_t pagesize;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    48
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    49
    host_port = mach_host_self();
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    50
    host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    51
    host_page_size(host_port, &pagesize);
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    52
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    53
    vm_statistics_data_t vm_stat;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    54
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    55
    if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    56
        DLog(@"Failed to fetch vm statistics");
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    57
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    58
    /* Stats in bytes */
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    59
    natural_t mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    60
    natural_t mem_free = vm_stat.free_count * pagesize;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    61
    natural_t mem_total = mem_used + mem_free;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    62
    DLog(@"used: %u free: %u total: %u", mem_used, mem_free, mem_total);
5486
e75f7c3c6275 ios: this should prevent at least one of the crashes zorg spotted; also added some callbacks in SDLh; also polished project file (from -O2 to -Os)
koda
parents: 5483
diff changeset
    63
#endif
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    64
}
3668
3f7a95234d8a tap to play piano notes, fix for audio and pause glitch
koda
parents: 3660
diff changeset
    65
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
    66
BOOL inline isApplePhone () {
3996
eb549fd864a5 the ios port is also iphone compatible
koda
parents: 3983
diff changeset
    67
    return (IS_IPAD() == NO);
3668
3f7a95234d8a tap to play piano notes, fix for audio and pause glitch
koda
parents: 3660
diff changeset
    68
}
3670
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    69
5207
4c9ae0f484da some general tweaks (more intelligent use of macros and more caching)
koda
parents: 5206
diff changeset
    70
NSString *getModelType () {
3670
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    71
    size_t size;
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    72
    // set 'oldp' parameter to NULL to get the size of the data returned so we can allocate appropriate amount of space
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    73
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
3670
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    74
    char *name = (char *)malloc(sizeof(char) * size);
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    75
    // get the platform name
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    76
    sysctlbyname("hw.machine", name, &size, NULL, 0);
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    77
    NSString *modelId = [NSString stringWithUTF8String:name];
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    78
    free(name);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    79
3670
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3668
diff changeset
    80
    return modelId;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    81
}
3783
8e9daf967406 X&Y buttons, sounds for some buttons, cleanup
koda
parents: 3781
diff changeset
    82
8e9daf967406 X&Y buttons, sounds for some buttons, cleanup
koda
parents: 3781
diff changeset
    83
void playSound (NSString *snd) {
5207
4c9ae0f484da some general tweaks (more intelligent use of macros and more caching)
koda
parents: 5206
diff changeset
    84
    if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == YES) {
4947
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    85
        // get the filename of the sound file:
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    86
        NSString *path = [NSString stringWithFormat:@"%@/%@.wav",[[NSBundle mainBundle] resourcePath],snd];
3783
8e9daf967406 X&Y buttons, sounds for some buttons, cleanup
koda
parents: 3781
diff changeset
    87
4947
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    88
        // declare a system sound id and get a URL for the sound file
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    89
        SystemSoundID soundID;
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    90
        NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
3783
8e9daf967406 X&Y buttons, sounds for some buttons, cleanup
koda
parents: 3781
diff changeset
    91
4947
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    92
        // use audio sevices to create and play the sound
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    93
        AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    94
        AudioServicesPlaySystemSound(soundID);
cfac6aab84a0 don't play button sounds when audio is off
koda
parents: 4512
diff changeset
    95
    }
3917
4c243b1eac97 playing a bit with colors
koda
parents: 3878
diff changeset
    96
}
4c243b1eac97 playing a bit with colors
koda
parents: 3878
diff changeset
    97
5201
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
    98
NSArray *getAvailableColors (void) {
5207
4c9ae0f484da some general tweaks (more intelligent use of macros and more caching)
koda
parents: 5206
diff changeset
    99
    // by default colors are ARGB but we do computation over RGB, hence we have to "& 0x00FFFFFF" before processing
5201
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   100
    unsigned int colors[] = HW_TEAMCOLOR_ARRAY;
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   101
    NSMutableArray *array = [[NSMutableArray alloc] init];
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   102
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   103
    int i = 0;
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   104
    while(colors[i] != 0)
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   105
        [array addObject:[NSNumber numberWithUnsignedInt:(colors[i++] & 0x00FFFFFF)]];
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   106
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   107
    NSArray *final = [NSArray arrayWithArray:array];
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   108
    [array release];
7b9aa7aac336 * moved colours and default port from .cpp.in to .h
koda
parents: 4947
diff changeset
   109
    return final;
3917
4c243b1eac97 playing a bit with colors
koda
parents: 3878
diff changeset
   110
}
3983
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   111
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   112
UILabel *createBlueLabel (NSString *title, CGRect frame) {
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   113
    return createLabelWithParams(title, frame, 1.5f, UICOLOR_HW_YELLOW_BODER, UICOLOR_HW_DARKBLUE);
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   114
}
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   115
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   116
UILabel *createLabelWithParams (NSString *title, CGRect frame, CGFloat borderWidth, UIColor *borderColor, UIColor *backgroundColor) {
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   117
    UILabel *theLabel = [[UILabel alloc] initWithFrame:frame];
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   118
    theLabel.backgroundColor = backgroundColor;
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   119
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   120
    if (title != nil) {
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   121
        theLabel.text = title;
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   122
        theLabel.textColor = UICOLOR_HW_YELLOW_TEXT;
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   123
        theLabel.textAlignment = UITextAlignmentCenter;
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   124
        theLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]*80/100];
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   125
    }
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   126
    
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   127
    [theLabel.layer setBorderWidth:borderWidth];
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   128
    [theLabel.layer setBorderColor:borderColor.CGColor];
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   129
    [theLabel.layer setCornerRadius:8.0f];
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   130
    [theLabel.layer setMasksToBounds:YES];
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   131
    
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   132
    return theLabel;
aa24192417a8 use labels instead of images, should save ram and space
koda
parents: 3982
diff changeset
   133
}
4290
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   134
5483
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   135
BOOL isNetworkReachable (void) {
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   136
    // Create zero addy
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   137
    struct sockaddr_in zeroAddress;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   138
    bzero(&zeroAddress, sizeof(zeroAddress));
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   139
    zeroAddress.sin_len = sizeof(zeroAddress);
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   140
    zeroAddress.sin_family = AF_INET;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   141
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   142
    // Recover reachability flags
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   143
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   144
    SCNetworkReachabilityFlags flags;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   145
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   146
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   147
    CFRelease(defaultRouteReachability);
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   148
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   149
    if (!didRetrieveFlags) {
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   150
        NSLog(@"Error. Could not recover network reachability flags");
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   151
        return NO;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   152
    }
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   153
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   154
    BOOL isReachable = flags & kSCNetworkFlagsReachable;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   155
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   156
    BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   157
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   158
    NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"];
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   159
    NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   160
                                                 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   161
                                             timeoutInterval:20.0];
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   162
    NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:nil];
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   163
    BOOL testResult = testConnection ? YES : NO;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   164
    [testConnection release];
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   165
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   166
    return ((isReachable && !needsConnection) || nonWiFi) ? testResult : NO;
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   167
}
fc755bb8096d ios: caught some leaks, merged two methods inside a fuction, postponed the rating popup
koda
parents: 5207
diff changeset
   168
4290
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   169
// this routine checks for the PNG size without loading it in memory
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   170
// https://github.com/steipete/PSFramework/blob/master/PSFramework%20Version%200.3/PhotoshopFramework/PSMetaDataFunctions.m
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   171
CGSize PSPNGSizeFromMetaData (NSString *aFileName) {
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   172
    // File Name to C String.
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   173
    const char *fileName = [aFileName UTF8String];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   174
    // source file
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   175
    FILE *infile = fopen(fileName, "rb");
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   176
    if (infile == NULL) {
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   177
        DLog(@"Can't open the file: %@", aFileName);
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   178
        return CGSizeZero;
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   179
    }
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   180
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   181
    // Bytes Buffer.
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   182
    unsigned char buffer[30];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   183
    // Grab Only First Bytes.
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   184
    fread(buffer, 1, 30, infile);
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   185
    // Close File.
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   186
    fclose(infile);
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   187
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   188
    // PNG Signature.
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   189
    unsigned char png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   190
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   191
    // Compare File signature.
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   192
    if ((int)(memcmp(&buffer[0], &png_signature[0], 8))) {
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   193
        DLog(@"The file (%@) is not a PNG file", aFileName);
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   194
        return CGSizeZero;
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   195
    }
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   196
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   197
    // Calc Sizes. Isolate only four bytes of each size (width, height).
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   198
    int width[4];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   199
    int height[4];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   200
    for (int d = 16; d < (16 + 4); d++) {
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   201
        width[d-16] = buffer[d];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   202
        height[d-16] = buffer[d+4];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   203
    }
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   204
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   205
    // Convert bytes to Long (Integer)
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   206
    long resultWidth = (width[0] << (int)24) | (width[1] << (int)16) | (width[2] << (int)8) | width[3];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   207
    long resultHeight = (height[0] << (int)24) | (height[1] << (int)16) | (height[2] << (int)8) | height[3];
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   208
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   209
    // Return Size.
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   210
    return CGSizeMake(resultWidth,resultHeight);
82f1f1d819c0 don't list too big maps for certain devices
koda
parents: 4281
diff changeset
   211
}
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   212
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   213
@implementation NSString (extra)
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   214
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   215
-(NSString *)MD5hash {
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   216
    const char *cStr = [self UTF8String];
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   217
    unsigned char result[16];
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   218
    CC_MD5( cStr, strlen(cStr), result );
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   219
    return [NSString stringWithFormat:
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   220
            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   221
            result[0], result[1], result[2], result[3], result[4], result[5],
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   222
            result[6], result[7], result[8], result[9], result[10], result[11],
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   223
            result[12], result[13], result[14], result[15]];
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   224
}
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   225
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   226
ce9b8206e681 add some connection facility to netserver
koda
parents: 4356
diff changeset
   227
@end